この記事では、開発環境と本番サーバ環境を使ってPHPプロジェクトの開発をしている前提での、PHPのパッケージ管理ツール composer のコマンドrequire/update/installの使い分けについて整理しておきます。
composerのrequire/update/installの違い
ウェブサイト開発を行っていて、パッケージを追加した後にデプロイするとき、本番環境にパッケージの導入も行う必要があります。
そのとき、composerのコマンドを間違えると、ローカル環境とバージョン違いのパッケージを導入してしまい、本番環境での振る舞いがローカル環境でテストしたときと違ってしまう可能性が出てきます。
そうならないために、3つのコマンドの違いを整理して覚えましょう。
composerの管理ファイル
composer.json
プロジェクトの依存関係を記述したファイル。導入したパッケージなどが記述されている。
composer.lock
実際にダウンロードされたパッケージの情報が記録されるファイル。バージョン名を記録されているため、ダウンロードされたパッケージをバックアップしておかなくても、パッケージの環境を再現することが出来る。
パッケージは通常、PHPプロジェクトの中のvendorディレクトリに保存されていますが、特にバックアップの必要はなく、composer.json、composer.lockのファイルだけバックアップやバージョン管理しておけば、環境を再構築することができます。
環境を再現するとき、composer.jsonだけでは使用するパッケージしかわからないため最新のバージョンを使ってしまいます。それでは、バージョンの不一致による挙動の違い、不具合の原因となります。composer.lockファイルまで含めることで、バージョンまで含めて同じ環境を再現することができます。
composerのコマンド
以下では、composer で普段使うコマンドの簡単な説明と、ローカル開発環境と公開サーバーの本番環境を使って開発している前提での使い所を紹介します。
composer require
パッケージを追加するときに使います。パッケージ名やバージョンを指定して追加することもできます。
このコマンドでは、composer.jsonに必要パッケージを記録します。
ローカル開発環境で行なうべきコマンドです。
composer update
composer.json に記録されているパッケージを最新バージョンにアップデートします。composer.lockファイルも更新されます。
こちらもローカル開発環境で行なうべきコマンドです。
composer install
composer.jsonに記録されているパッケージを、composer.lockに記録されているバージョンでインストールします。
ローカル環境でバックアップから環境を再現したいとき、本番環境にデプロイするときに使うコマンドです。
まとめ
composerの管理ファイルとコマンドの違いについて説明しました。
ローカル環境と本番環境を使って、ウェブサイトを開発している場合、
- composer require, composer update は、ローカル環境で使用
- composer install は、本番環境で使用
とおぼえておきましょう。
composerを導入しているプロジェクトで本番環境へデプロイするとき、composer update を使ってしまうと、ローカル開発環境とパッケージのバージョンが変わってしまう場合があるので注意してください。
メルマガでは、もと組み込みエンジニアで、独立してウェブプログラマとなった僕の経験をもとに、プログラミングテクニックなどを発信しています。
興味がありましたら、ぜひ、登録して見てください。
メルマガ登録フォーム
コメント