3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js / npmのアップデートを安全に行うために必要だった設定ファイルまとめ

Last updated at Posted at 2019-04-28

本番環境で動作をしているライブラリのメンテナンスは、どんな言語であっても悩ましい問題です。

Node.jsは、初期に比べてアップデートによる影響が少なくなってきたとはいえ、バージョン管理を怠ると、更新のコストが大きくなったり、予期せぬ不具合が発生する可能性があります。

今回は、業務でNode.js / npmを使い続けた中で必要だった設定ファイルをまとめたいと思います。

前提として、 ExpressなどのサーバーサイドJavaScriptを使用しておらず、JenkinsなどのCIツールで、フロントエンドのJavaScriptをビルドする場合を想定しています。

TL;DR

  1. package-lock.json
  2. .npmrc
  3. .node-version / .npm-version

この3つがあれば、最低限、バージョンの差異によるトラブルを避けることができます。

1. package-lock.json

まずは基本です。通常、インストールしたパッケージはpackage.jsonで管理されていますが、追加したパッケージが依存しているパッケージは、package-lock.jsonで管理しています。

無いと何が起こるか

  • 新規メンバーがpackage.jsonの入ったリポジトリをcloneし、npm installした際、意図しないバージョンがインストールされ、package.json作成当初に発生していないエラーがでる可能性があります
  • 新規で参加したメンバーが、npm installを実行してもローカル環境を構築できない可能性があります

対応方法

package-lock.jsonに対応したnpm 5.x以上が必要です。
npm installを行うと、自動で生成されます。
yarnを利用している方は、同様のファイルとしてyarn-lock.jsonがあります。

2. .npmrc

npmに関する挙動を制御することができます。

無いと何が起こるか

  • npmの挙動の違いにより、メンバー間でローカル環境に差異ができてしまう可能性があります
  • 誰かがnpm installした際に、-Sや-Dオプションを指定し忘れ、package.jsonに必要なパッケージが記録されない可能性があります
  • npm isntallした際にバージョンに^が追加され、後から来たメンバーがnpm installした際に、当初と異なるバージョンがインストールされる可能性があります。

対応方法

package.jsonと同階層に、ファイルを設置します。
おすすめの設定は下記のとおりです

 also=dev
 save-exact=true

also=devは、npm installで、オプションを指定しなかった場合、自動でdevDepandencysに追加してくれます。
save-exactnpm installしたパッケージのバージョンを固定(= ^をつけない)するようにします。

3. .node-version / .npm-version

ndenvなどを利用して、Node.jsを複数バージョン管理している場合、
これらのファイルがあると、ファイルがあるディレクトリ以下では、指定したバージョンのNode.js/npmが実行されます。
また、Gitリポジトリに含めることで、使用するNode.jsとnpmのバージョンを強制することができるので、より安全に環境構築が可能となります。

無いと何が起こるか

  • 開発環境のアップデートが本番環境に影響してしまう可能性があります
  • JenkinsのようなCIツールを使用する場合、ビルド用のサーバで必要なファイルを生成し、本番環境を含めた各環境にデプロイするケースがあります。
    その場合、開発環境のNode.jsをアップデートしたつもりが、本番環境にも影響が出てしまい、予期せぬエラーに繋がる恐れがあります

対応方法

package.jsonと同階層に、各ファイルを設置します。
ファイルの中には8.11.4などのバージョンの数値が書かれています。

まとめ

設定ファイルを活用することで、ドキュメントを用意することなく環境を固定することができるため、精神的な負担が軽くなります。
.node-version / .npm-versionについては、対応しているツールとそうでないツールがあるため、ご注意ください。

3
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?