💬
Node.jsのバージョンはパッチバージョンまで固定し、各環境しっかり統一しよう
要約
Node.jsはマイナーアップデートのバージョンアップ時に、npmのメジャーアップデートが入る場合がある。そこで破壊的変更が加わり、環境によってビルドができなくなるなど問題が発生する可能性があるのでパッチバージョンまで固定し、各環境統一しておいたほうが良いよという話。
詳細
遭遇したケース
かなり以前の話になるのですが、Node.jsのバージョン指定を "node": "16"
としていたところ、CIでだけ npm i
に失敗するようになりました。
原因としては、細かいバージョンを固定しなかった結果以下のようにCIでだけnpmのメジャーアップデートが入ってしまっていたのが理由でした。
環境 | Node.js | npm |
---|---|---|
ローカル | 16.10.0 | 7.24.0 |
CI | 16.11.0 | 8.0.0 |
「Node.jsのメジャーバージョンさえ統一しておけば大きな問題は起こらないだろう」と思い込んだ結果、npmのメジャーアップデートが入り込んで原因調査にかなり時間を消費されてしまいました…
また、当然といえば当然ですが、マイナーバージョンやパッチバージョンが変わるだけで動作は変わりうるので、パッチバージョンまで統一しようねという教訓を得ました。
package.json
や .node-version
を参照させる
GitHub Actionsにて、 ローカルとCIのバージョンを統一するにあたって、GitHub Actionsでは、以下のように記述することでNode.jsのバージョンを package.json
の engines
を参照させることが出来ます。(公式ドキュメント)
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version-file: 'package.json'
この記述方式を利用するとNode.jsのバージョン指定場所を一元化でき、変更漏れがなくなるので是非使いましょう!
Discussion