Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@shibe23

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

More than 1 year has passed since last update.

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

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については、対応しているツールとそうでないツールがあるため、ご注意ください。

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
shibe23

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?