Help us understand the problem. What is going on with this article?

Composer2.x で変わったこと

2020年10月24日 Composr 2.0.0 がリリースされました🙌
半年前の記事から少し気になってましたが、思ったより早くリリースされて嬉しいです!

今回はこちらのリリース記事の内容を要約してご紹介します!

Composerとは?

https://github.com/composer/composer

Composerとは、PHPのパッケージ管理ツールです。
composer.json に書かれたパッケージ及び依存関係にあるパッケージも含めコマンド一発でインストールしてくれます。

Composerを使っていないPHPプロジェクトはほぼほぼないと言っても良いでしょう。
そんな素敵なツールのメジャーバージョンアップニュースです。

変更点

記事の内容を要約してご紹介します。
詳細な変更点については、チェンジログをご覧ください。

パフォーマンスの向上

  • Composerとpackagist.orgの間で使用されるプロトコル及び依存関係の解決
  • curlと制約評価の最適化を使用してファイルを並行してダウンロード
  • 速度とメモリ使用量の両方の点で大幅な改善
  • 一部のプロジェクトで両方に対して50%を超える改善
  • require/remove および部分的な更新がはるかに高速
    • Composerは変更されているパッケージのメタデータのみをロードするようになったため

初期更新+インストール(ブートストラップされたプロジェクト、空のキャッシュ)の時間は、ext-curlが有効になっているComposer 2で使用される時間が約60%少ないことを示しています。

ランタイム機能

  • 初期化時にプラットフォームチェックステップを追加
  • 新しく Composer\InstalledVersions クラスを追加
  • 詳細はランタイムドキュメントを参照

ソースコードがランタイム機能のいずれかに依存する場合は、
"composer-runtime-api": "^2.0"composer.json に追加する必要があります。もちろん、Composer 2.xでインストールする必要があります。

エラー報告の改善

  • 依存関係を解決できない場合に表示されるエラーレポートを改善
  • メッセージがより短く、より明確に、エラーの繰り返しが減少

一時的な制約のある部分的な更新

  • composer update vendor/package:1.0.*
    • vendor配下のみ更新される
    • composer.json, composer.lock は更新されない
  • composer update --with vendor/package:1.0.*
    • --with オプションを付ける
    • vendor配下及び、composer.json, composer.lock は更新される

Composer 1.x から 2.x への移行

  • Composer 2.0は、Composer 1.xと同様に、PHP5.3以降をサポート
  • composer.lock ファイルはバージョン間で相互運用可能であるため、2.0にアップグレードして、必要に応じて簡単にロールバックできます。
  • ほとんどのコマンドと引数は同じままであり、Composerについて知っていることの大部分は2.0でも当てはまります。
  • 詳細についてはアップグレードガイドを参照

Composer 1.x から 2.x へアップグレード

$ composer self-update
# or
$ composer self-update --2

Composer 2.x から 1.x へダウングレード

$ composer self-update --1

Composer 1.x は長期間のサポートは行われないので、ダウングレードの際は注意してください。

下位互換性のないもの

プラグイン

  • 各種プラグインがComposer2をサポートするまで待つ必要があります

補足: hirak/prestissimo プラグイン

hirak/prestissimo プラグインはComposer1.xで多くの開発者がお世話になったComposer高速化プラグインです。

プラグイン製作者のHiraku氏のツイートより、Composer1.x用で今後はメンテナンスされないとのことです。Composer2.xへアップグレードする際はプラグインを削除してからアップグレードしてください。

新しいプラットフォームチェック機能

  • ComposerがランタイムPHPバージョンと利用可能な拡張機能をチェックする
  • プロジェクトの依存関係と一致することを確認できる
  • 不一致が見つかった場合、オートローダーはエラーの詳細とともに終了
  • composer check-platform-reqs --no-dev をデプロイプロセスに組み込むことを推奨

リポジトリの優先度

無効なPSR-0 / PSR-4構成

  • Composer 1.10で導入された警告に従って、無効なPSR-0 / PSR-4構成は、最適化オートローダーモードで自動ロードされなくなります
  • Composer2へのアップグレードする前にこれらをクリーンアップする方が安全です

今後は?

Composer2.0はPHP5.3以上をサポートしていますが、コードの場所によってメンテナンスが非常に困難です。
将来のマイナーリリースでEOLPHPバージョンのサポートを終了する予定です。

タイムラインと最終的に含まれる機能によっては、Composer2.1でPHP5.3がサポートされる場合がありますが、遅くともComposer 2.2では、PHP7.1.3より古いすべてのサポートが終了します。

Composerの統計によると、Composerユーザーの90%以上が最新バージョンを使用でき、古いPHPバージョンの利用を続けるユーザーには、2.0.xまたは2.1.xの範囲で重大なバグとセキュリティ修正を提供し続けます。

Composer 1.xに関しては、多かれ少なかれEOLになりました。また、何か問題が発生した場合は重要な修正が行われますが、すべての人の目標は、できるだけ早く2.xに移行しましょう。

参考

ucan-lab
Backend Developer at ROLO. I love PHP and I'm focusing on Laravel, Docker, GraphQL.
https://u-can.pro
yyphp
PHPerが毎週集まり、ざっくばらんに情報交換する雑談コミュニティ
https://yyphp.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away