Composer は PHP のパッケージ管理ツールです。Composer を使うことによってライブラリの依存関係に悩まされることなく多くのライブラリを使えます。
Composer
Composer 2 が 10/24 にリリースされました。これにより大きく変わった新たな Composer を使える様になります。
Composer 2.0 is now available!
次で composer を 1 系から 2 系に変更できます。
composer self-update --2
Composer 2 では大きな変更によって改善された点がいくつかあります。
最も恩恵を受けやすい改善点はパフォーマンスです。上記の 2.0 のリリース記事では Laravel 等のフレームワークのインストールが 60% 早くなったとあります。この加速は主に並列ダウンロードによるもののため複雑な依存関係や一気に大量のライブラリをインストールする時に変化を大きく感じられるでしょう。
少々地味ですがありがたいことにシステムメッセージがわかりやすく詳細になりました。問題の内容はわかるけれども解決策どころか原因もわからない、といったことが減りそうです。
Composer 2 は 1 からの破壊的変更を伴います。Composer の様々な機能を使っていたり周辺をプラグインでカスタムしていた場合、2 でそれらを用いるために何かしらの対応が必要になる場合があります。Composer 2 はありがたいことに高性能なため、Composer の性能向上のためのプラグイン等を用いていた場合はそれを削除するのみで気分よく安定して Composer を扱えます。自分の場合は日本のリポジトリを参照しない、Composer の並列ダウンロードプラグインを削除する、の二つで安定して動作する様になりました。
# Composer のリポジトリの参照をデフォルトにリセット composer config -g --unset repos.packagist # Composer 並列化プラグイン hirak/prestissimo を削除 composer global remove hirak/prestissimo
これらにはずいぶん助けられましたが Composer 本体がこれをカバーするとなると役目を終えることになるでしょう(日本リポジトリは Composer 2 に対応し次第再度使うかも)。
composerを速くするプラグイン・prestissimoを作った: Architect Note
自分の場合はこれだけで動きましたが CI(継続的インテグレーション)上で Composer を動かしている方々は問題を多く抱えているようです。製品において重要なのは期待通りに動作することであり、高速にパッケージをインストールすることではありません。そういった場合、当面は Composer 1.x を使った方が良さそうです。Composer 1 系に固定して取り扱うには以下です。
# コマンドライン上 composer self-update --1 # 1.x の最新バージョンになる様に Composer 自身を更新。Composer 2.x をダウンロードした直後に実行するなどして使用 # Dockerfile FROM composer:1 # Composer 1.x を取り扱う最新の Composer イメージを参照
Dockerfile はこれまで latest が実質の 1 系最新を追うバージョン指定だったため、しれっと composer:latest となっている場合があります(自分の扱っているコードの中にありました)。これを放置すると新たにビルドした時に Composer 回りでエラーが起きることがあります。