【PHP】パッケージ管理ツール Composer 2.0 のリリース。改善点、起きている問題、1.x への戻し方

  • 2020年10月27日
  • 2020年10月28日
  • PHP

 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 回りでエラーが起きることがあります。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG