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.lock
composer.json
ファイルを共有 -
本番環境で共有した
composer.lock
を使用してcomposer install
を実行
という事になるのかな??
実際に本番環境でcomposer update
を行って、意図しないバージョンまでアップデートされ、その結果、稼働してたシステムが動かなくなったというケースを見たことがあります。
とりあえずこんなところで
勉強中なので必要があれば、追記、修正していきます。