1. composer.jsonとは?
composer.jsonは、Laravelプロジェクトで必要なパッケージや依存関係を記述するファイルです。
以下のような情報が含まれています:
- 依存パッケージとそのバージョン指定
(例:laravel/frameworkやguzzlehttp/guzzleなど)。 - 自作パッケージの情報(名前、説明、バージョンなど)。
- スクリプト(例えば、
post-update-cmdなどのフック処理)。 - オートローディングの設定。
例:
json{
"require": {
"php": "^8.1",
"laravel/framework": "^10.0",
"guzzlehttp/guzzle": "^7.0"
}
}
この情報をもとに、composer installでVendorフォルダが作られる。
2. composer.lockとは?
composer.lockは、composer.jsonに基づいて解決された具体的な依存関係と
バージョンを記録するファイルです。
このファイルには次の情報が含まれています:
- 実際にインストールされたパッケージの正確なバージョン。
- パッケージのダウンロード元(リポジトリURLやGitのコミットIDなど)。
- 各パッケージの依存関係とそのバージョン。
3. composer.jsonとcomposer.lockの関係
composer.jsonは「依存パッケージのルール」、composer.lockは「実際にインストールされた状態」を記録するものです。
具体的には以下のように連携しています:
- 依存関係の定義 (
composer.json)- プロジェクトの開発者が必要なパッケージと、そのバージョンの範囲を
指定します(例:^1.0,>=2.0.1など)。
- プロジェクトの開発者が必要なパッケージと、そのバージョンの範囲を
- 依存関係の解決 (
composer.lock)composer installまたはcomposer updateを実行すると、composer.jsonの
依存ルールをもとに、Composerが最適なバージョンを解決します。- 解決結果が
composer.lockに記録され、インストールされた正確なバージョンが
保存されます。
4. 具体的な利用例と役割
(1) composer install
composer.lockに記録されているバージョンに基づき、パッケージをインストールします。- これにより、環境ごとに同じバージョンの依存パッケージがインストールされ、
環境差異による問題を防ぎます。
(2) composer update
composer.jsonをもとに、依存パッケージのバージョンを再解決します。- 最新のバージョンがインストールされ、
composer.lockが更新されます。
5. 注意点
- チーム開発時は
composer.lockもバージョン管理(Gitなど)に含める- 全員が同じ依存関係を使えるようにするため。
composer updateの頻度に注意- 不必要に実行すると依存パッケージのバージョンが変わり、
動作が変わる可能性があります。 - 基本的には、チームで決めたタイミングで行いましょう。
- 不必要に実行すると依存パッケージのバージョンが変わり、
composer installは安全composer.lockをもとにインストールするため、環境間での動作が一致します。
6. まとめ
1.composer.json: 必要なパッケージとそのルールを記述する。
2.composer install: 環境差異をなくすため、composer.lockに基づいてインストールする。
無ければ自動でcomposer.lockが作られて、
それに基づきインストールする。
3.composer.lock: 実際に解決された依存関係とバージョンを記録する。
4.composer update: 依存パッケージを再解決して最新化する。composer.jsonに基づいて
インストールする。
悲しい事に、不要なパッケージは削除されない。なので、ごみが増える事のなり、
問題を起こす。
追記:
composer関係でエラーが発生する事が多々ある。
このエラーの大半は最初に使ったcomposer installにより作られた
composer.lockとVendorフォルダに残った使われない依存パッケージ
による場合が多い。
compose.jsonを書き換えてcomposer installを実行しても、
composer.lockがあれば、composer.lockに基づいてインストールされてしまう。
環境情報も含まれるcomposer.lockの方を重要視するからだ。
なので、エラーが発生してしまう場合は、
composer.lockとVendorフォルダを削除して、composer installを行い
composer.lockとVendorフォルダを再度作る事で、エラーが消えてくれる。


