ArtifactoryでPHP Composer v2のリポジトリを扱う

もしあなたがPHPを使用しているプロフェッショナルな開発者の約4人に1人である場合(StackOverflowの2021年の調査による)、ComposerのメンテナはPHPパッケージマネージャをv1からv2に移行して欲しいと考えています。

2020年10月24日にComposer 2.0.0がリリースされ、いくつかの大幅な改良が加えられました。インターネット上の10個のウェブサイトのうち約8個が何らかの形でPHPを使用しているため、大きな影響を与える変更となります。

Artifactory 7.24へのアップデートにより、すべてのPHPリポジトリでv1とv2の両方の標準規格がサポートされますので、このマイグレーションに役立ちます。

PHP Composer V2

新バージョンのComposerはPHPの依存関係を解決するために、スピードとメモリ使用量の両方で最大50%のパフォーマンス向上をもたらす大規模なオーバーホールを行っています。その中には新しいv2リポジトリのメタデータフォーマットや、APIを通してベンダーやタイプ別にパッケージをリストする機能が含まれています。

v2への移行を促進するために、プライマリのPHP Composerレジストリとメンテナであるpackagistは2021年5月に以下のような制裁措置を講じてComposer 1.xの非推奨化を開始しました。

  • v1メタデータのAPI更新率の削減

新しいバージョンのアップデート率が従来の1分毎から15分毎に変更されました。これにより、Composer 1.xでのインストールに数分を要するようになりました。

  • v1メタデータAPIによる未使用パッケージへのアクセスを制限  

v1フォーマットは非常に長いファイルリストを使用するため、何百万ものパッケージを維持することはプロセスのパフォーマンスに影響を与えます。この問題を解決するために、packagistは過去4ヶ月間ダウンロードされていない全パッケージをv1インデックスから(ローリングベースで)隠します。

ArtifactoryのPHP Composer V2とV1

多くのPHP開発者がそうであるように、あなたのチームもpackagistのような公開リポジトリにあるオープンソースの依存関係を利用するだけでなく、相当な独自のComposerパッケージのライブラリを構築しているでしょう。

そのため、Artifactoryではローカルおよびリモートのリポジトリでv1とv2の両標準をサポートし、ご自身のペースでComposer v2へ移行できるようにしています。

Artifactory 7.24以降のすべての PHP Composerリポジトリは以下のv2機能をサポートしています。

  1. Composer v2メタデータAPI(ローカルとリモートリポジトリ)
  2. ComposerリストAPI(ローカルとリモートリポジトリ)
  3. Drupal 7/8レジストをリモートリポジトリでサポート

これにより、packagistがArtifactoryのリモートリポジトリで機能し、v1の削減を推進できます。

Artifactory Composerリポジトリの設定

必要であればローカルのArtifactoryリポジトリでも、v1とv2の両インデックスを維持し、Composer v1をサポートします。

Artifactoryインスタンスを7.24以降にアップデート後、既存のローカルComposerリポジトリはデフォルトでv1とv2の両方をサポートします。これにより、v2への移行を行う場合もチームは引き続きv1のComposerを使用できます。

ただし、新しく作成したローカルComposerリポジトリはデフォルトではv2のみをサポートします。

Composer v1の有効化と無効化

PHPリポジトリ設定にComposer v1のインデックス作成を有効/無効にするオプションを追加しました。

PHP Composer repository setup in Artifactory

そのため、デフォルトの設定がお気に召さない場合は変更もできます。また、チームがv2に完全に移行するのに合わせて、リポジトリでのv1のサポートを終了することもできます。

v1インデックスは、いつでもリポジトリの設定で有効/無効を切り替えられます。ただし、この変更を有効にするためにはリポジトリの再インデックスを行う必要があります。その場合は、Artifactsツリーでリポジトリを右クリックし、Recalculate Indexを実行します。

Re-index a PHP Composer repository

Composerリポジトリ構成

リポジトリでComposer v1インデックスが有効になっている(インデックス化されている)場合、Artifactoryはv1(p)とv2(p2)の2 つのインデックスセットを維持します。このようにして、Composer v1とv2の両方がサポートされます。

PHP Composer v1 and v2

Set Me Upで表示されたURLを利用し、「config.json」ファイルでローカルリポジトリをComposerコマンドラインのデフォルトリポジトリとして設定します。

{
   “repositories”: [
        {
            "type": "composer",
             "url": "https://localhost:8081/artifactory/api/composer/php-local"
        }
        { “packagist”: false }
   ]
}

 

ArtifactoryのAPIを使用し、メタデータの取得やパッケージ名の一覧表示に必要なURLを取得できます。

GET artifactory/api/composer/php-local/packages.json

 

例えば上記のコマンドでは次のようなレスポンスが得られます。

{
   “search”: "https://localhost:8081/artifactory/api/composer/php-local/search.json?q=%query%&type=%type%",
   “providers-lazy-url”: "https://localhost:8081/artifactory/api/composer/php-local/p/%package%.json",
   “metadata-url: "https://localhost:8081/artifactory/api/composer/php-local/p2/%package.json”,
   “list”: "https://localhost:8081/artifactory/api/composer/php-local/packages/list.json"
}

 

「metadata-url」を使用した場合、パッケージのv2メタデータを取得できます。

GET artifactory/api/composer/php-local/p2/monolog/monolog.json

PHP Composerを最新に保つ

これらのPHP Composerの重要なアップデートはArtifactoryのパッケージ管理サービスを最新の状態に保つための継続的な取り組みです。これらの改善により、PHP Composerのパッケージをご自身のペースで v2に対応できます。また、依存関係にあるpackagistのリモートリポジトリをすぐに運用し、パフォーマンスを維持できます。

最新バージョンではPHP Composerのバーチャルリポジトリを作成し、ローカル、リモート、その他のバーチャルComposer v2リポジトリを単一の論理的なURLでアクセスできます。

これらは、お使いのArtifactoryを最新版にアップデートする強力な理由です。JFrog DevOps Platformをまだお試しになっていない方は、ぜひ無料版をお試しください