GitHub ActionsでVoltaの設定を簡単に反映する

2024/12/23に公開

VoltaでNode.jsのバージョンを管理しているプロジェクトで、CI環境でも同じバージョンを使用するための設定方法を紹介します。
Volta公式の volta-cli/action を使用することで、簡単かつ確実にバージョンを揃えることができます。
https://github.com/volta-cli/volta

なお、本記事ではVoltaについては詳しく触れませんので、公式ドキュメントやVoltaのセットアップ方法の記事を参考にしてください。
https://docs.volta.sh/
https://zenn.dev/taichifukumoto/articles/how-to-use-volta

現状のプロジェクト設定

Voltaの設定は package.json で管理されています。

{
  "volta": {
    "node": "23.2.0",
    "yarn": "1.22.22"
  }
}

Volta Actionを使う理由

Voltaはチーム全体で一貫したNode.jsの環境を維持するためのツールですが、CI環境でも同じバージョンを使用したい場合、GitHubが提供する setup-node アクションでは制限がありました。

もし仮に、以下のようにsetup-nodeアクションを使用し、node-version-file プロパティで package.jsonを指定した場合、Voltaの設定が反映されるのはNodeのバージョンのみになるので注意が必要です。

- name: Setup Node
  uses: actions/setup-node@v4
  with:
    node-version-file: package.json

そのため、Volta公式が提供する volta-cli/action を使用することで、package.jsonvolta フィールドから自動的にバージョンを検出し、Node.jsとパッケージマネージャーの両方のバージョンを簡単に揃えることができます。

GitHub Actions設定例

name: Build

on:
  pull_request:
    
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    # setup-nodeの代わりにvolta-cli/action@v4を使用する
    - name: Setup Volta
      uses: volta-cli/action@v4

    # デバッグ用のバージョンチェックステップ
    - name: Version Check
      run: |
        echo "Node.js version:"
        node --version
        echo "Yarn version:"
        yarn --version

    - name: Cache dependencies
      id: cache
      uses: actions/cache@v4
      with:
        path: node_modules
        key: ${{ runner.os }}-node_modules-${{ hashFiles('yarn.lock') }}
        restore-keys: |
            ${{ runner.os }}-node_modules-

    - name: Install Dependencies
      if: steps.cache.outputs.cache-hit != 'true'
      run: yarn install --frozen-lockfile

    - name: Build
      run: yarn build

    - name: Test
      run: yarn test

設定のポイント

Voltaのセットアップ

  • volta-cli/action@v4 を使用して、package.jsonのvoltaの設定を自動的に適用
  • 追加の設定なしでNode.jsとYarnのバージョンを管理可能

バージョン確認

  • Version Check ステップでNode.jsとYarnのバージョンを出力。こちらのステップはデバッグ用ですので、確認後は削除しても問題ありません。

まとめ

Volta公式の volta-cli/action を使用することで、以下のメリットが得られるため、Voltaを使用しているプロジェクトでは、ぜひ試してみてください!

  • package.jsonの設定だけでCI環境のNodeやYarnのバージョンを管理できる
  • setup-nodeを使う場合と比較して、NpmやYarnのバージョンも自動的に設定できる

Discussion