Composer
ComposerはPHPのパッケージ管理ツールです。composer.jsonファイルでプロジェクトに必要なパッケージと大雑把なバージョン指定を行い、composer.lockファイルで依存関係と細かいバージョン含む現在のバージョンを管理しています。Composerでパッケージを簡単に追加する方法は少なくとも二つあります。一つはcomposer.jsonにパッケージを追加してcomposer updateコマンドを実行する方法、もう一つはcomposer require [パッケージ名]コマンドを実行する方法。この記事ではこの二つで起こることの違いと何故既に本番環境で製品として動いているプログラムのあるプロジェクトでパッケージを追加する時はcomposer requireを用いた方が安全かを説明します。
composer updateコマンドの動作は”依存関係の最新バージョンを取得してcomposer.lockファイルを更新する”です。
Command-line interface / Commands – Composer#update-u
composer.jsonにパッケージを追記して単にcomposer updateすると追加したパッケージと無関係なパッケージまで更新されます。多くの場合において更新が起きても正常に動作しますが、composer.jsonのバージョン指定やパッケージそのものが破壊的バージョンアップをするような状態になっていると今まで問題なく動いていた機能が壊れることがあります。このため既に稼働しているプロジェクトでComposerでパッケージを追加する時はcomposer updateとするべきではありません。
滅多に使いませんが、composer update [パッケージ名]とすることで指定したパッケージに関する依存関係のみを最新にできます。特定バージョンでのバグが発覚した時など便利です。このパッケージ指定のcomposer updateコマンドでパッケージを追加する方法はパッケージを無暗に更新しないので安全です。
composer requireコマンドの動作は”composer.jsonに新たなパッケージを追加する”です。
Command-line interface / Commands – Composer#require
これはパッケージの追加のみを行うコマンドで追加されたパッケージに関する最低限の依存関係の更新のみを行います。このため無暗にパッケージを更新しないcomposer require [パッケージ名]はcomposer updateより問題を起こしにくいです。
Composerは多くのコマンドを備えています。パッケージの追加に限らずとも、これをこうしてこうすれば結果的に今知っているコマンドだけで目的が果たせる、の様な結果的にOKな手段を取るのでなく目的に沿ったコマンドを適切に選ぶと安全に快適に目的を果たせます。