3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

package-lock.jsonって何のためにあるの?

Last updated at Posted at 2024-12-02

はじめに

Web開発をしているとき、ふと「package-lock.jsonって何のためにあるんだろう?」と思うことがありませんか?
package.jsonはインストールしたパッケージを管理してくれているのはなんとなくわかりますが、package-lock.jsonの役割は少し分かりづらいですよね。
そこで今回は、package.jsonpackage-lock.jsonの役割や違いについて解説します。

両者の違い

簡単に言えば、package.json依存パッケージの「概要」を管理するファイルであり、package-lock.json実際にインストールされた「具体的なバージョン」を記録するファイルです。

package.jsonについては比較的わかりやすいですが、package-lock.jsonが「具体的なバージョン」を記録するとはどういうことなのか、イメージがつかない方も多いと思います。

package-lock.jsonがないとどうなる?

package-lock.jsonの役割をイメージしやすくするために、もしこれが存在しなかった場合の問題について説明します。

たとえば、あなたがqiitanというパッケージをインストールしたとします。

$ npm i qiitan

すると、package.jsonには以下のように記載されます。

package-json
{
  "dependencies": {
    "qiitan": "^4.17.20"
  }
}

この時点では、互換性のある最新バージョン(例えば4.17.21)がインストールされ、node_modulesに保存されます。

その後、このプロジェクトをGitHubにアップロードし、しばらく経った後に別の開発者がコードをクローンして$ npm iを実行したとしましょう。このとき、最新の互換バージョン(例えば4.18.0)がインストールされ、動作に不具合が発生する可能性があります。

これは、package.json^4.17.20という記述がセマンティックバージョニングに基づいており、4.x.xの範囲内で最新のバージョンをインストールする仕様だからです。

このような問題を防ぐため、「その時点でインストールされた正確なバージョン」を記録するpackage-lock.jsonが必要になるのです。

package-lock.json
{
  "dependencies": {
    "qiitan": {
      "version": "4.17.21",
      "resolved": "https://registry.npmjs.org/qiitan/-/qiitan-4.17.21.tgz",
      "integrity": "sha512-..."
    }
  }
}

これにより、他の開発者が同じリポジトリをクローンして$ npm iを実行しても、確実に4.17.21がインストールされます。

package.jsonはいらないのでは?

ここまで読んで、「それなら最初から正確なバージョンを記録すればいいのでは?」と疑問に思ったかもしれません。

しかし、package.jsonには「概要」の管理という重要な役割があります。これにより、必要なライブラリやプロジェクトの基本情報を他の開発者やツールが把握しやすくなります。また、package-lock.jsonは情報量が多く、簡単に人間が読むには適していません。

さらに、セマンティックバージョニングのおかげで、適切なアップデートを管理しやすいという利点もあります。加えて、npm run devのようなスクリプトの定義にもpackage.jsonが使用されるため、プロジェクト全体の管理に欠かせない存在です。

まとめ

今回は、package.jsonpackage-lock.jsonの違いについて解説しました。普段意識せずに使っているこれらのファイルが、開発を快適に進めるために重要な役割を果たしているのは驚きですね。これからも、開発に役立つ知識を発信していければと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?