LoginSignup
7
2

More than 1 year has passed since last update.

【Volta + GitHub Actions】ワークフロー内での Node.js のバージョン管理を自動化するアクションを作った話

Last updated at Posted at 2021-12-06

本記事は GitHub Actions Advent Calendar 2021 の7日目の記事です🎅

作ったきっかけ

プロダクトを運用していると、定期的に言語やライブラリのバージョンアップ対応が必要になると思います。Volta を使用している場合、Node.js のバージョンを上げる時に必要な作業はこの辺りでしょうか。

  • volta pin コマンドを実行して、Node.js のバージョンを上げる
  • GitHub Actions で Node.js のバージョンを指定している箇所を修正する
  • etc...

複数箇所に Node.js のバージョンが記述されていると、いざバージョンを上げよう!となった時に修正すべきファイルが増えてしまうので、一元管理する方法を検討していました。
そこで、今回は Volta + GitHub Actions を使っている場合に Node.js のバージョンアップ業が少しだけ楽になるアクションを作りました。

Volta とは

Volta は Node.js などのバージョンを管理するためのツールです。本記事では触れませんが、 Node.js 以外に npm や yarn なども管理することができます。詳細については公式のドキュメントを参照ください。

似たツールとしては nodenv や nvm などがあります。以下の記事が参考になると思います。

作ったアクション

今回作ったアクションはこちらになります。

具体的な使い方については後述しますが、 package.json に記述されている Node.js のバージョンを取得することができます。

使い方

Volta をインストール

下記を参考にしつつ、環境に応じてインストールしてください。

Volta 経由で Node.js をインストールする

volta install コマンドを実行して、任意のバージョンの Node.js をインストールします。

volta install node@16.13.0

プロジェクト内で使用する Node.js のバージョンを固定する

次に volta pin コマンドを実行します。

volta pin node@16.13.0

上記を実行することで、package.json に Node.js のバージョンが追記されます。
これで プロジェクト内で使用する Node.js のバージョンが固定されました。

"volta": {
  "node": "16.13.0"
}

get-node-version-from-volta アクションをワークフローに組み込む

ここから get-node-version-from-volta アクションを使用していきます。
ワークフローの steps に下記を追加することで、package.json で指定されている Node.js のバージョンを後続の step で取得できるようになります。ここで指定した id は後続の step で使用します。

- name: Get node version from volta
  id: get-node-version
  uses: keita-hino/get-node-version-from-volta@main

Volta で指定した Node.js のバージョンを取得する

今回の場合、steps.get-node-version.outputs.nodeVersionから volta で指定した Node.js のバージョンを参照できます。(get-node-versionには、 uses した時に指定した id が入ります。)
今回は例として、取得した Node.js のバージョンを setup-nodeアクション に渡します。

これで、volta pinコマンドを使って Node.js のバージョンを変えると、ワークフロー内の Node.js のバージョンも自動で追従されるようになるため、ワークフローの修正が不要になります🎉

- uses: actions/setup-node@v2
  with:
    node-version: ${{ steps.get-node-version.outputs.nodeVersion }}

全体像のサンプル

下記のサンプルは Node.js をインストールして終わっていますが、実際には後続の step でテストなどを実行します。

name: get node version

on: push

jobs:
  buid:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Get node version from volta
        id: get-node-version
        uses: keita-hino/get-node-version-from-volta@main
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ steps.get-node-version.outputs.nodeVersion }}
...

おわりに

今回は、 Node.js のバージョンを上げる時にワークフローの修正が不要になるアクションを作成しました。まだ実プロダクトで試せてないのですが、今後機会があれば投入してみたいと思っています。もし、Volta を使って Node.js のバージョンを管理している方がいれば使ってみていただけると嬉しいです!🙏

気になった技術について Twitter で雑に呟いているので、よかったらフォローお願いします!@_kt15_

参考

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2