composer は Laravel インストールする時に使った事はあるけれど、特に意識することなく(何も考えずに)使ってました・・・
そんな中、Laravel の carbon パッケージを調べる事があり、ふと「このcarbonってバージョンいくつなんだろう」と疑問に思った事が composer のコマンド使ってみたきっかけです。
備忘録的な意味合いが強いのですが、誰か、何かの役に立てばうれしいです。
パッケージの一覧を表示する
composer show -i
You are using the deprecated option "installed". Only installed packages are shown by default now. The --all option can be used to show all packages.
~~~ 略 ~~~
monolog/monolog 2.2.0 Sends your logs to files, sockets, inboxes, databases and various web services
nesbot/carbon 2.46.0 An API extension for DateTime that supports 281 different languages.
~~~ 略 ~~~
いろいろと出力されました。carbon のバージョンは 2.46.0 のようです。
composer update と composer install
よくcomposer updateは**本番環境では実行しない事!**なんてことを聞きますが何でですかね?あまり知らなかったのですが、今回調べた事を記します。
まずはcomposer updateとcomposer installの対比表
| 実行コマンド | 対 composer.json | 対 composer.lock |
|---|---|---|
| composer install | 参照のみ | 参照のみ |
| composer update | 参照のみ | 書き込みあり |
composer install の動き
- composer.lock が存在すればファイル内に記されたパッケージのバージョン情報を取得する
- composer.json ファイル内に記載されたパッケージをcomposer.lockに記されたバージョン情報に従ってパッケージのダウンロード・インストールを行う
composer.lockとcomposer.jsonは読み込みのみ
composer update の動き
-
composer.json ファイル内に記載されたパッケージとバージョン情報に従ってダウンロード・インストールを行う
-
インストールしたパッケージ情報でcomposer.lock を更新する
composer.lockは書き込み
composer.lockはチーム内などで共有し、必要のないパッケージのバージョンアップを行わない為に使用されます。これを使用する事で意図しないバージョンアップによる不具合、コンフリクトを防ぎます。
そのcomposer.lockを**composer updateでは更新します**。
なので、通常の流れでは -
開発環境で
composer updateを実行 -
composer.lockcomposer.jsonファイルを共有 -
本番環境で共有した
composer.lockを使用してcomposer installを実行
という事になるのかな??
実際に本番環境でcomposer updateを行って、意図しないバージョンまでアップデートされ、その結果、稼働してたシステムが動かなくなったというケースを見たことがあります。
とりあえずこんなところで
勉強中なので必要があれば、追記、修正していきます。