PHPのための依存関係管理
ComposerはPHPのプロジェクトの依存関係を宣言し、管理し、インストールする助けになります。
詳細情報とドキュメントについてはhttps://getcomposer.org/を参照してください。
インストールと使い方
公式の解説に従い、ダウンロード、インストールしてください。
使用方法についてはドキュメントを参照してください。
パッケージ
Packagist.orgに公開されているパッケージがあります。
私有パッケージのホスティングについては私有Packagistをご確認ください。
コミュニティ
告知についてはTwitterで@packagistまたは@seldaekをフォローしたり、#composerphpハッシュタグを確認したりしてください。
サポートについては、Stack OverflowでComposerに関係する良い質問がされてきました。 また、GitHubディスカッションも使えます。
本プロジェクトは貢献者の行動規範の元でリリースされている点にご留意ください。 本プロジェクトとコミュニティへ参加すると、これらの条項を遵守することに同意したこととなります。
要件
最新のComposer
最新版にはPHP 7.2.5以上が必要です。
Composer 2.2 LTS(長期期間対応)
PHPのバージョン5.3.2から8.1まではComposer (2.2.x)のLTS対応でまだ対応されています。
インストーラのself-update
コマンドを走らせると、手元のPHPに見合う適切なComposerのバージョンが自動的に選択されるでしょう。
バイナリの依存関係
7z
(ないし7zz
)unzip
(7z
が無い場合)gzip
tar
unrar
xz
- Git (
git
) - Mercurial (
hg
) - Fossil (
fossil
) - Perforce (
p4
) - Subversion (
svn
)
大事なことですが、これらのバイナリの依存関係の必要性は個々の用途によって様々です。
しかし殆どの利用者にとっては、Composerに必須な依存関係はたった2つです。
7z
(または7zz
やunzip
)とgit
です。
作者
- Nils Adermann | GitHub | Twitter | naderman@naderman.de | naderman.de
- Jordi Boggiano | GitHub | Twitter | j.boggiano@seld.be | seld.be
本プロジェクトに参加している貢献者の一覧もご参照ください。
セキュリティ報告書
慎重を要する問題については全てsecurity@packagist.orgにお送りください。 ありがとうございます。
利用許諾
ComposerはMITライセンスの下で利用が許諾されます。 詳細はLICENSEをご参照ください。
謝辞
- 本プロジェクトのSolverについて、openSUSEのLibzypp satsolverのPHP移植を開始しました。
本和訳にあたっての著作権表示を以下に示します。
Copyright (C) 2013--2015 kohkimakimoto.
Copyright (C) 2022--2024 gemmaro.
この翻訳はkohkimakimoto氏による翻訳を元に改変を加えています。
同氏の翻訳リポジトリはkohkimakimoto/getcomposer.org_doc_jp
に、Webサイトは『Composer ドキュメント日本語訳』の「はじめに」にあります。
コミット9b7073bf08140994039b4c008650a0ce1e3173fb
時点で翻訳されていた範囲は以下の通りです。
章名 | ファイル | 備考 |
---|---|---|
イントロダクション | doc/00-intro.md | |
基本的な使い方 | doc/01-basic-usage.md | |
ライブラリ | doc/02-libraries.md | |
コマンドラインインターフェース | doc/03-cli.md | 「install」節の「オプション」小節まで |
composer.json | doc/04-schema.md | 冒頭部分 |
コミュニティ | doc/06-community.md |
また、対応するComposer本体のコミットはa1e4ca4f9bacfd3dc08e0546bff2d30cb006ea27
としました。
本翻訳は上記既訳を最新版に追従することを目的としています。 そのため既訳の修正に加えて新規に追加された原文への訳が含まれます。 本翻訳も原文にしたがい、MITライセンスの下に使用が許諾されます。
導入
ComposerはPHPの依存管理ツールです。 Composerはプロジェクトが依存するライブラリを宣言し管理(インストールやアップデート)できるようにするものです。
依存管理
ComposerはYumやAptの伝で言うとパッケージ管理ツールではありません。
「パッケージ」やライブラリを扱いはしますが、プロジェクト毎の管理であって、プロジェクトの内部のディレクトリ(例:vendor
)にインストールするのです。
既定では決して大域的にインストールしません。
したがって、依存管理なわけです。
とはいえ便宜上globalコマンドを介して「大域的な」プロジェクトに対応してはいます。
このアイデアは新しいものではありません。 Composerはnodeのnpmやrubyのbundlerに強く影響を受けています。
想像してみてください。
- 大量のライブラリに依存したプロジェクトがある。
- 別のライブラリに依存するライブラリがある。
Composerでは次のことができます。
- 依存するライブラリを宣言できる。
- どのパッケージのどのバージョンをインストールする必要があるのかを調べて、インストールする(つまりプロジェクト内にパッケージをダウンロードします)。
- 1つのコマンドで全ての依存関係を更新できます。
依存関係の宣言についての詳細は基本的な使い方の章を参照してください。
システム要件
最新のComposerが動作するためにはPHP 7.2.5が必要です。 歴史的なPHPのバージョンで止まっている場合は長期サポート版 (2.2.x) がまだPHP 5.3.2以上に対応しています。 また、いくつかの細かいPHPの設定とコンパイルフラグも必要ですが、要件が合っていない箇所については、インストーラが警告を出すでしょう。
Composerが効率的に動作するには、幾つかの補助的なアプリケーションが必要です。
これらはパッケージの依存関係を扱う処理をより効率的にするものです。
ファイルを解凍するために、Composerは7z
(或いは7zz
)、gzip
、tar
、unrar
、unzip
、xz
のようなツールに依っています。
バージョン管理システムについては、ComposerはFossil、Git、Mercurial、Perforce、Subversionと間断なく協調し、これにより円滑なアプリケーションの操作とライブラリのリポジトリの管理を確実にします。
Composerを使う前にこれらの依存関係が正しくシステムにインストールされていることをご確認ください。
Composerはマルチプラットフォームであり、Windows、Linux、macOSのそれぞれで同じように動作するよう努めています。
Linux / Unix / macOSへのインストール
実行形式のComposerをダウンロード
Composerには便利なインストーラがあり、コマンドラインから直接実行できます。 気兼ねなくこのファイルをダウンロードしたり、インストーラの内部のはたらきについてもっと知りたいと思ったらGitHubで確認したりしてください。 ソースは単なるPHPです。
平たく言うとComposerのインストールには2つの方法があります。 プロジェクトへローカルに入れる方法と、システム全域の実行ファイルとしてグローバルに入れる方法です。
ローカル
Composerをローカルにインストールするためには、プロジェクトのディレクトリでインストーラを走らせてください。 解説はダウンロードページを参照してください。
インストーラははいくつかのPHPの設定内容を確認して、composer.phar
を作業ディレクトリにダウンロードします。
このファイルはComposerのバイナリです。
PHAR (PHP archive) はPHPのためのアーカイブ形式であり、コマンドラインから実行できますし、他の方法もあります
ここでComposerを走らせるにはphp composer.phar
としてください。
--install-dir
オプションを使って特定のディレクトリに、更に--filename
オプションを使って命名(改名)しつつ、Composerをインストールできます。
ダウンロードページの説明に従ってインストーラを走らせるときは、以下の引数を加えてください。
php composer-setup.php --install-dir=bin --filename=composer
それから、php bin/composer
とするとComposerが走ります。
大域的に使う
Composer PHARは好きな場所に置くことができます。
PATH
の通った場所に置くことで大域的にアクセスできます。
Unix系のシステムでは実行形式にしてphp
インタプリタを直接使わずに呼び出すこともできます。
ダウンロードページの説明に従ってインストーラを走らせた後は、以下を走らせてパスにあるディレクトリにcomposer.pharを移動させられます。
mv composer.phar /usr/local/bin/composer
利用者のためだけにインストールしてルート権限を避けたいようでしたら、代わりに~/.local/bin
を使うこともできます。
Linuxディストリビューションでは既定で使えることがあります。
注意: 上記がパーミッションによって失敗する場合、sudoで改めて実行する必要があるかもしれません。
補足: macOSのバージョンによって、既定では
/usr
ディレクトリが存在しないことがあります。 エラー「/usr/local/bin/composer: No such file or directory」が出たら、予めmkdir -p /usr/local/bin
としてディレクトリを手作りしなければなりません。
補足: パスを変えることに関してはWikipediaの記事を読んだりお好みの検索エンジンに掛けてみてください。
これでphp composer.phar
の代わりにcomposer
とすれば、Composerが走るようになりました。
Windowsへインストール
インストーラを使う
Composerをマシンに用意する最も簡単な方法です。
Composer-Setup.exeをダウンロードして実行してください。
最新バージョンのComposerがインストールされパスが設定されるため、どのディレクトリからもcomposer
をコマンドラインから呼ぶことができます。
補足: 現在の端末を閉じてください。 新しい端末で使えるか試してみてください。 パスは端末が起動したときにのみ読み込まれるので、一旦閉じるのは大事です。
手動でインストール
composer.phar
をダウンロードするため、PATH
の通っているディレクトリに移動してダウンロードページの説明に従い、インストーラを走らせてください。
composer.bat
ファイルをcomposer.phar
と同じ場所に新規作成してください。
cmd.exeを使う場合:
C:\bin> echo @php "%~dp0composer.phar" %*>composer.bat
PowerShellを使う場合:
PS C:\bin> Set-Content composer.bat '@php "%~dp0composer.phar" %*'
まだPATH環境変数にディレクトリがなければ追加してください。 PATH変数を変えることに関してはこの記事を参照したりお好みの検索エンジンに掛けてみたりしてください。
現在の端末を閉じてください。 新しい端末で使えるか試してください。
C:\Users\username>composer -V
Composer version 2.4.0 2022-08-16 16:10:48
Dockerイメージ
Composerはいくつかの場所でDockerコンテナとして公開されています。 composer/dockerのREADMEで一覧を参照してください。
使用例:
docker pull composer/composer
docker run --rm -it -v "$(pwd):/app" composer/composer install
既存のDockerfileにComposerを加えるには、単に既にビルドされた小さいサイズのイメージからバイナリファイルを複製できます。
# 最新リリース
COPY --from=composer/composer:latest-bin /composer /usr/bin/composer
# 特定のリリース
COPY --from=composer/composer:2-bin /composer /usr/bin/composer
さらなる使い方の情報についてはイメージの説明をお読みください。
補足: Docker固有の問題はcomposer/dockerリポジトリに報告されると良いでしょう。
補足: 上のイメージ名ではcomposer/composer
の代わりにcomposer
を使うこともできます。
名前が短かく、Dockerの公式イメージですが、直接私達が公開したものではないので新しいリリースが数日送れで来ることが普通です。
重要:短い別名が付けられたイメージにはバイナリのみの同じものがないため、COPY --from
の方法についてはcomposer/composer
のほうを使う方が良いです。
Composerを使う
これでComposerをインストールしたので使う準備ができました。 簡単な実演があるので次の章に向かいましょう。
基本的な使い方 →
基本的な使い方
導入
基礎的な使い方の導入として、ここではログライブラリであるmonolog/monolog
をインストールします。
まだComposerをインストールしていなければ、はじめに章を参照してください。
補足: 簡潔のために、この導入ではComposerのローカルインストールを実施した前提で進めます。
composer.json
: プロジェクトの立ち上げ
プロジェクトでComposerを使い始めるにあたって必要なのはcomposer.json
ファイルだけです。
このファイルにはプロジェクトの依存関係が記述され、他のメタデータも含まれることがあります。
大抵プロジェクトやVCSリポジトリの最上位ディレクトリにあります。
技術的にはComposerをどこで実行することもできますが、パッケージをPackagist.orgに公開したいならば、VCSリポジトリの一番上の階層にファイルがなければなりません。
require
キー
最初にcomposer.json
で指定するものは、require
キーです。
Composerにプロジェクトが依存しているパッケージがどれであるかを伝えるものです。
{
"require": {
"monolog/monolog": "2.0.*"
}
}
見ての通り、require
はパッケージ名(例:monolog/monolog
)と
パッケージバージョン(例:1.0.*
)を対応付けるオブジェクトを取ります。
Composerはこの情報を使って、repositories
キーからパッケージ「リポジトリ」や、既定のパッケージレジストリであるPackagist.orgにある正しいファイル一式を探します。
上の例ではこれといったリポジトリはcomposer.json
ファイルに登録されていないので、monolog/monolog
パッケージはPackagist.orgに登録されているものと推定されます(詳細はPackagistについてとリポジトリについてを参照)。
パッケージ名
パッケージ名はベンダー名とプロジェクト名から成ります。
これらはしばしば同一になります。
すなわち、ベンダー名は命名が衝突するのを避けるためだけにあります。
例えば異なる2人の人物がjson
という名前のライブラリをigorw/json
とseldaek/json
とそれぞれ命名して作成できます。
詳細はパッケージの公開とパッケージの命名を読んでください(なお「プラットフォームパッケージ」を依存関係として指定することも可能で、サーバーのソフトウェアの特定のバージョンを要求できます。 プラットフォームパッケージで後述します)。
パッケージバージョン制約
先の例ではバージョン制約2.0.*
のMonologパッケージを要求しています。
これが意味するものは2.0
の開発ブランチの任意のバージョン、言い換えると2.0以上で2.1より小さい(>=2.0 <2.1
)任意のバージョンのことを指します。
バージョンとバージョン間の関連、バージョン制約についてのより詳しい情報はバージョンを読んでください。
どうやってComposerは正しいファイルをダウンロードしているのか。
composer.json
に依存関係を指定したとき、Composerはまず、repositories
キーを使って登録された全てのリポジトリを対象に要求されたパッケージの名前を検索します。 もし1つも追加でリポジトリを登録していなかったり、指定したリポジトリにその名前のパッケージがなかったときは、Packagist.org(後述)に落ち着きます。ComposerがPackagist.orgないし指定したリポジトリで正しいパッケージがあったときは、パッケージのVCSのバージョン機能(つまりブランチとタグ)を使って、指定したバージョン制約に最も合致するものを見付け出そうとします。 必ずバージョンについての記事でバージョンとパッケージについて読んでください。
補足: もしパッケージを要求したもののComposerがパッケージの安定性の理由で例外を投げた場合は、指定したバージョンが既定の最小の安定要件に見合わない可能性があります。 VCSで妥当なパッケージバージョンを探す際、既定では安定リリースのみが考慮されます。
パッケージの開発版、アルファ版、ベータ版、リリース候補のバージョンを要求しようとしたときに、この例外に遭遇するかもしれません。 安定性フラグと
minimum-stability
キーについての詳細はスキーマのページをお読みください。
依存物をインストール
定義された依存関係をプロジェクトに初めてインストールするときは、update
コマンドを走らせると良いです。
php composer.phar update
こうするとComposerは2つのことをします。
composer.json
ファイルに挙げられている全ての依存関係を解決して、全てのアッケージとその厳密なバージョンをcomposer.lock
ファイルに書き込みます。 このファイルによりプロジェクトが特定のバージョンに固定されます。composer.lock
ファイルはプロジェクトのリポジトリにコミットすべきです。 そうすればプロジェクトに参画する全員にとって、同じバージョンの依存関係に固定されたものになります(詳細は後述)。 これがupdate
コマンドの主な役割です。- それから暗黙裡に
install
コマンドが走ります。 これにより依存関係のファイルがプロジェクトのvendor
ディレクトリにダウンロードされます(vendor
ディレクトリはプロジェクトの全てのサードパーティコード用の定番の場所です)。 上の例では最終的にMonologのソースファイルがvendor/monolog/monolog
にあることになります。 Monologにはpsr/log
への依存関係があるため、そのパッケージのファイルもまたvendor/
の中にあります。
コツ: gitをプロジェクトで使っているのなら、多分
.gitignore
にvendor
を追加したいでしょう。 実際のところ、バージョン管理されたリポジトリにサードパーティ製のコード全てを追加したくはないので。
composer.lock
ファイルをバージョン管理にコミットすること
このファイルをバージョン管理にコミットすることは大事です。
なぜならこうすることでプロジェクトの準備をする誰もが、自分が使っているものと全く同じバージョンの依存関係を使えるようになるからです。
CIサーバ、実運用マシン、チーム内の他の開発者、万物万人が同じ依存関係で実行するのです。
これにより特定のデプロイでのみ影響する潜在的なバグが低減されます。
たとえ一人で開発していて、6箇月経ってからプロジェクトを再インストールしたとしても、そして依存関係が多くの新しいバージョンをリリースされていたとしても、インストールされた依存関係がちゃんと動くことは疑いありません(update
コマンドの使用については以下の補足を参照してください)。
補足: ライブラリの場合、固定ファイルのコミットは不必要です。 ライブラリ - 固定ファイルも参照してください。
composer.lock
からインストールする
既にcomposer.lock
ファイルがプロジェクトフォルダにあるなら、それは前に自分でupdate
コマンドを走らせたか、プロジェクトの誰かがupdate
コマンドを走らせてcomposer.lock
ファイルをプロジェクトにコミットしたからかのどちらかです(いいことです)。
何れにせよ、composer.lock
ファイルが存在しているときにinstall
を走らせるとcomposer.json
に挙がっている全ての依存関係を解決してインストールします。
ただしその際はプロジェクトの作業をしている人全員にとってパッケージのバージョンが必ず一貫したものになるように、Composerはcomposer.lock
に挙げられた厳密なバージョンを使用します。
結果としてcomposer.json
ファイルで要求された全ての依存関係が取得されるのですが、必ずしも利用できるごく最新のバージョンとはなっていないかもしれません(ファイルが作成された後に、composer.lock
ファイルで挙げられた依存関係のより新しいバージョンがリリースされる可能性があります)。
これは設計上意図されたものであり、依存関係での予期しない変更による不具合がプロジェクトで絶対に発生しないようになっています。
そのためVCSリポジトリから新しい変更を取得した後は、Composerのinstall
を走らせて、vendorディレクトリがcomposer.lock
ファイルと同期していることを確かめることをお勧めします。
php composer.phar install
Composerは既定で再生成可能な構築を有効にします。
つまり同じコマンドを複数回走らせると、自動読み込み器のファイルを含め、(タイムスタンプ以外)同値なファイルを含むvendor/
ディレクトリを生成するのです。
厳密な検証過程を要求する環境や、PHPアプリケーションを安全で予測可能なやり方でパッケージ化することを目指すLinuxディストリビューションにおいては、特に有益です。
最新版に依存関係を更新する
前述したように、composer.lock
ファイルは自動的に依存関係の最新版が取得されるのを防ぎます。
最新のバージョンに更新するにはupdate
コマンドを使います。
こうすると(composer.json
ファイルに沿うように)照合する最新バージョンを取得して新しいバージョンで固定ファイルを更新します。
php composer.phar update
補足:
composer.json
に依存関係解決に影響し得る変更が加えられた後にcomposer.lock
が更新されていなければ、install
コマンドを実行するときに、Composerが警告を表示します。
1つの依存関係をインストール、更新、削除したいだけなら、引数として明示的に列挙できます。
php composer.phar update monolog/monolog [...]
Packagist
Packagistは主眼のComposerリポジトリです。
Composerリポジトリは基本的にはパッケージの源です。
つまりパッケージを取ってくることができる場所のことです。
Packagistは全ての人が利用できる中央リポジトリであることを目指しています。
要はここで利用できるいかなるパッケージも自動的にrequire
できるということです。
Composerがパッケージを探す場所を追加で指定しなくて良いのです。
packagistのWebサイトでは、パッケージを閲覧したり検索したりできます。
Composerを使っているオープンソースプロジェクトはパッケージをPackagist上で公開するべきです。 Composerを使う上で、ライブラリをPackagistに載せる必要はありません。 しかし公開することで、他の開発者がより素早くパッケージを発見して取り入れられるようになります。
プラットフォームパッケージ
Composerにはプラットフォームパッケージがあります。 システムにインストールされる仮想的なパッケージで、実際にはComposerではインストールされないものを指します。 PHP自身やPHP拡張、システムライブライリが含まれます。
-
php
は利用者のPHPバージョンを表しており、^7.1
のような制約を適用できます。 PHPの64bitバージョンを要求するには、php-64bit
パッケージを指定できます。 -
hhvm
はHHVMランタイムのバージョンを表しており、^2.3
のように制約を適用できます。 -
ext-<name>
とすることでPHPの拡張を要件にできます(中核拡張を含みます)。 バージョニングはかなり一貫性がないことがあるので、大体の場合は制約に*
を設定するのと良いです。 拡張パッケージ名の例はext-gd
です。 -
lib-<name>
はPHPで使われるライブラリのバージョンを制約します。 次のものが利用できます:curl
,iconv
,icu
,libxml
,openssl
,pcre
,uuid
,xsl
。
show --platform
を使うと、ローカルで利用できるプラットフォームパッケージの一覧が得られます。
自動読み込み
自動読み込み情報を指定するライブラリ用に、Composerはvendor/autoload.php
ファイルを生成します。
単にこのファイルを含めれば、他に手間を掛けずにそれらのライブラリが提供するクラスを使い始められます。
require __DIR__ . '/vendor/autoload.php';
$log = new Monolog\Logger('name');
$log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING));
$log->warning('Foo');
composer.json
にautoload
フィールドを追加すれば、自分のコードについても自動読み込み器に追加できます。
{
"autoload": {
"psr-4": {"Acme\\": "src/"}
}
}
ここではComposerがPSR-4自動読み込み器をAcme
名前空間に登録しています。
名前空間からディレクトリへの対応付けが定義されます。
src
ディレクトリはプロジェクトの根幹にあり、同じ階層にvendor
もあるとしましょう。
ファイル名の例としてはAcme\Foo
クラスを含むsrc/Foo.php
があります。
autoload
フィールドを追加した後は、このコマンドを再び走らせなくてはなりません。
php composer.phar dump-autoload
このコマンドはvendor/autoload.php
ファイルを再生成します。
詳細はdump-autoload
節を参照してください。
自動読み込みファイルを含めるとautoloaderインスタンスを返します。 そのためインクルード呼び出しの返り値を変数に保持し、更に名前空間を追加できます。 テストスイート内での自動読み込みクラスに便利です。 例えば以下です。
$loader = require __DIR__ . '/vendor/autoload.php';
$loader->addPsr4('Acme\\Test\\', __DIR__);
PSR-4自動読み込みに加えて、ComposerはPSR-0、クラスマップ、ファイル自動読み込みにも対応しています。
詳細はautoload
リファレンスを参照してください。
autoloaderの最適化についてのドキュメントも参照してください。
注意: Composerは自前の自動読み込み器を提供しています。 もしそれを使いたくない場合は、単に
vendor/composer/autoload_*.php
ファイルを含められます。 自前の自動読み込み器を設定できる連想配列を返します。
ライブラリ
この章ではライブラリをComposerでインストールできるようにする方法を学びます。
全てのプロジェクトはパッケージである
composer.json
をディレクトリに配置した時点で、そのディレクトリはパッケージとなります。
require
をプロジェクトに追加すると、他のパッケージに依存したパッケージを作っていることになります。
プロジェクトとライブラリの唯一の違いは、プロジェクトは名前のないパッケージだということです。
インストール可能なパッケージを作成するためには命名する必要があります。
composer.json
にname
プロパティを追加してください。
{
"name": "acme/hello-world",
"require": {
"monolog/monolog": "1.0.*"
}
}
この例では、プロジェクト名はacme/hello-world
です。
acme
はベンダー名です。
ベンダー名を与えることは必須です。
注意: もしベンダー名に何をつけていいか分からない場合は、大抵は自分のGitHubの利用者名をつけるといいでしょう。 パッケージ名は全て小文字でなければならず、単語の区切りはダッシュにするのが慣習です。
ライブラリのバージョン
まず間違いなくgit, svn, hg, fossilといった何らかの類のバージョン管理システムを使ってライブラリを管理することでしょう。
こうした場合、ComposerはVCSからバージョンを推定するのでcomposer.json
ファイルではバージョンを指定すべきではありません(ComposerがVCSのブランチとタグを使ってバージョン制約を解決する方法について学ぶためにはバージョンについての記事を参照してください)。
パッケージの管理を手作業でしている(つまりVCS無しの)場合、composer.json
ファイルにversion
値を加えて、バージョンを明示的に指定する必要があるでしょう。
{
"version": "1.0.0"
}
補足: VCSに埋め込まれているバージョンを加えた場合、バージョンはタグ名と干渉することでしょう。 そうするとComposerはバージョン値を決定できなくなります。
VCSのバージョン管理
ComposerはVCSのブランチとタグの機能を使ってrequire
フィールドで指定したバージョン制約を特定のファイルの集まりに至るまで解決します。
利用できる妥当なバージョンを決定する際、Composerは全てのタグとブランチを見て、それらの名前を内部的なオプションの一覧に翻訳し、それから与えられたバージョン制約に対して照合します。
Composerがタグとブランチを扱う方法とパッケージのバージョン制約を解決する方法についての詳細は、バージョンの記事をお読みください。
固定ファイル
お望みならライブラリにcomposer.lock
ファイルをコミットできます。
チームが常に同じ依存バージョンでテストする際の助けになります。
しかし、この固定ファイルはこれに依存している他のプロジェクトにいかなる影響も齎しません。
主眼のプロジェクトのみに影響します。
もし固定ファイルをコミットしたくなくて、且つgitを使っている場合は、.gitignore
に追加してください。
VCSに公開する
composer.json
ファイルを含むVCSリポジトリ(バージョン管理システム、例えばgit)があれば、ライブラリは既にcomposerでインストール可能です。
この例ではGitHubでacme/hello-world
ライブラリをgithub.com/username/hello-world
として公開するとしましょう。
それではacme/hello-world
パッケージのインストールを試すために、ローカルに新しいプロジェクトを作成しましょう。
私たちはそれをacme/blog
と呼ぶことにします。
このブログはacme/hello-world
に依存し、更にmonolog/monolog
に依存するとします。
以下のcomposer.json
を含む新しいblog
ディレクトリを作成することで達成されます。
{
"name": "acme/blog",
"require": {
"acme/hello-world": "dev-master"
}
}
名前はこの場合必須ではありません。
このブログをライブラリとして公開することはないからです。
ここではどのcomposer.json
が説明されているのかを明確にするために加えられています。
このブログアプリに依存物hello-world
の所在を知らせる必要があります。
これにはパッケージのリポジトリ指定をこのブログのcomposer.json
に追加します。
{
"name": "acme/blog",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/username/hello-world"
}
],
"require": {
"acme/hello-world": "dev-master"
}
}
パッケージリポジトリの挙動や他にどのようなタイプが利用できるかについての詳細は、リポジトリを参照してください。
これで全てです。
Composerのinstall
コマンドを実行すれば依存関係をインストールできます!
まとめ:
composer.json
を含むあらゆるgit/svn/hg/fossilリポジトリは、require
フィールドでパッケージリポジトリを指定して依存関係を宣言することで、プロジェクトに追加できます。
Packagistに公開する
よろしい、今やパッケージを公開できるようになりました。 しかし、毎回VCSリポジトリを指定するのは厄介なことです。 全ての利用者にそんなことはさせたくないでしょう。
monolog/monolog
のためのパッケージリポジトリを指定しなかったこととにお気付きかもしれません。
どのような仕組みなのでしょうか?
答えはPackagistです。
PackagistはComposerの主眼のパッケージリポジトリで、 既定で有効になっています。 Packagistで公開されている全てのものは自動的にComposerで利用可能です。 monologはPackagistにあるので、追加のリポジトリ指定なくして依存できるのです。
hello-world
を世界に共有したければ、同様にPackagistに公開するのが良いでしょう。
Packagistを開いて"Submit"ボタンを押します。 まだサインアップしていなかったらその旨の表示がされます。 それからVCSリポジトリのURLを送信できます。 送信した時点でPackagistはクローリングを始めます。 完了すると、パッケージは誰でも使えるようになります!
軽量配布パッケージ
有用でない情報は普通、配布パッケージに含めない方が良いでしょう。
これには.github
ディレクトリ、嵩張る例、テストデータなどがあります。
.gitattributes
ファイルは.gitignore
のようなgit固有のファイルです。
またライブラリの根幹ディレクトリにあります。
これが存在してgitで追跡されているとき、局所的な構成と大域的な構成(それぞれ.git/config
と~/.gitconfig
)がオーバーライドされます。
zipの配布パッケージが肥大化させる望ましくないファイルが入らないようにするには、.gitattributes
を使ってください。
// .gitattributes
/demo export-ignore
phpunit.xml.dist export-ignore
/.github/ export-ignore
生成されたzipファイルを手作業で調べて確認するには、次のようにします。
git archive branchName --format zip -o file.zip
補足: ファイルはgitで追跡されたままであり、zipの配布物に含まれていないだけです。 これはdist(タグ付けされたリリース)でインストールしたパッケージでのみ機能します。 配布元はGitHub、GitLab、BitBucketがあります。
← 基本的な使い方 | コマンドラインインターフェース →
コマンドラインインターフェース / コマンド
既にいろいろなことをするために、コマンドラインインターフェースの使い方は学びました。 この章は全ての利用可能なコマンドを説明します。
コマンドラインからヘルプを得るためには、composer
またはcomposer list
を実行して全てのコマンドの完全な一覧を見ることができます。
更に--help
をそれらのコマンドと組み合わせれば、より多くの情報を得られます。
Composerはsymfony/consoleを使っているため、曖昧でなければ短い名前でコマンドを呼び出せます。
php composer.phar dump
上ではcomposer dump-autoload
を呼び出します。
Bashの補完
Bashの補完をインストールするには、composer completion bash > completion.bash
と走らせられます。
現在のディレクトリにcompletion.bash
ファイルを作ります。
それからsource completion.bash
を実行すれば現在の端末のセッションで有効になります。
completion.bash
を/etc/bash_completion.d/composer
に移動しつつ改名すれば、新しい端末で自動的に読み込まれるようにできます。
大域オプション
以下のオプションは全てのコマンドで利用できます。
- --verbose (-v): メッセージの冗長さを増やす。
- --help (-h): ヘルプ情報を表示する。
- --quiet (-q): メッセージを一切出力しない。
- --no-interaction (-n): 対話的な質問の問い合わせを一切行わない。
- --no-plugins: プラグインを無効にする。
- --no-scripts:
composer.json
で定義されているスクリプトの実行を飛ばす。 - --no-cache: キャッシュディレクトリの使用を無効にする。
COMPOSER_CACHE_DIR環境変数を
/dev/null
(WindowsではNUL)に設定することと同じです。 - --working-dir (-d): 指定すると、与えられたディレクトリを作業ディレクトリに使う。
- --profile: 時間とメモリ使用量の情報を表示する。
- --ansi: ANSI出力を強制する。
- --no-ansi: ANSI出力を行わない。
- --version (-V): 本アプリケーションのバージョンを表示する。
プロセスの終了コード
- 0: OK
- 1: 一般的ないし不明な失敗コード
- 2: 依存解決の失敗コード
init
ライブラリの章でcomposer.json
を手作りする方法を見ました。
こうしたことをするのにinit
コマンドというのもあります。
このコマンドを実行すると、賢明な既定値を使いながら、対話的な問答を経てフィールドが埋められていきます。
php composer.phar init
オプション
- --name: パッケージの名前。
- --description: パッケージの説明。
- --author: パッケージの作者名。
- --type: パッケージの種類。
- --homepage: パッケージのホームページ。
- --require: バージョン制約付きの必要なパッケージ。書式は
foo/bar:1.0.0
のようになります。 - --require-dev: 開発のための要件です。--requireを参照。
- --stability (-s):
minimum-stability
フィールド用の値。 - --license (-l): パッケージの利用許諾。
- --repository: 1つ(かそれ以上)の個別のリポジトリを与えます。
これらのリポジトリは生成されるcomposer.jsonに収められ、要件の一覧を提案する際の自動補完に使われます。
全てのリポジトリは
composer
リポジトリを指すHTTPのURLないしrepositoriesキーが受け付けるものと同様のJSON文字列の何れかを取ります。 - --autoload (-a): composer.jsonへのPSR-4自動読み込みの対応付けを加えます。 自動的にパッケージの名前空間を与えられたディレクトリに対応付けます(src/のような相対パスを想定しています)。 PSR-4自動読み込みも参照してください。
install / i
install
コマンドは現在のディレクトリからcomposer.json
ファイルを読み込み、依存物を解決し、vendor
配下にインストールします。
php composer.phar install
現在のディレクトリにcomposer.lock
ファイルが存在する場合は、依存物を解決する代わりに、そこから厳密なバージョンを使います。
ライブラリを使う全ての利用者が同じバージョンの依存物を持つことを保証します。
composer.lock
ファイルがない場合、composerは依存物を解決した後で作成します。
オプション
- --prefer-install: パッケージをダウンロードする方法は
source
とdist
の2つあります。 Composerはdist
を既定で使います。--prefer-install=source
(または--prefer-source
)を渡すと、Composerは、もしあればsource
からインストールします。 プロジェクトへのバグ修正をして、依存関係のローカルgitクローンを直接取得したい場合に便利です。 Composerがパッケージの開発版用のsource
を自動的に使う、以前の挙動にしたければ、--prefer-install=auto
を使ってください。 config.preferred-installも参照してください。 このフラグを渡すと、設定値より優先されます。 - --dry-run:
実際にはパッケージをインストールすることなくインストールの過程を進めたいときは
--dry-run
を使うことができます。 インストールを模擬して何が起こるのかを示します。 - --download-only: ダウンロードするのみで、パッケージをインストールしません。
- --dev:
require-dev
に挙げられたパッケージをインストールします(既定の挙動です)。 - --no-dev:
require-dev
に挙げられたパッケージのインストールを飛ばします。 自動読み込み器の生成でautoload-dev
規則を読み飛ばします。 COMPOSER_NO_DEVも参照してください。 - --no-autoloader: 自動読み込み器の生成を飛ばします。
- --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --audit: インストールが完了した後に監査を走らせます。
- --audit-format: 監査の出力形式です。 "table"、"plain"、"json"、または"summary"(既定)のどれかでなければなりません。
- --optimize-autoloader (-o): PSR-0の自動読み込みをクラス対応表に変換して自動読み込みを高速にします。 実運用では特にお勧めしますが、走らせるのに少し時間が掛かることがあるので、現在は既定ではされません。
- --classmap-authoritative (-a): クラス対応表からクラスのみを自動読み込みします。
暗黙裡に
--optimize-autoloader
を有効にします。 - --apcu-autoloader: APCuを使って、クラスの有無をキャッシュします。
- --apcu-autoloader-prefix: APCu自動読み込み器のキャッシュ用に独自の接頭辞を使います。
暗黙裡に
--apcu-autoloader
を有効にします。 - --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。 ワイルドカードを使って複数の要件を無視できます。+
を後ろに付けることで要件の上限値だけを無視できます。 例えばパッケージがphp: ^7
を要求しているとき、オプション--ignore-platform-req=php+
はPHP8でのインストールを許しますが、PHP 5.6でのインストールについては失敗します。
update / u / upgrade
依存関係の最新版を取得してcomposer.lock
ファイルを更新する上ではupdate
コマンドを使うと良いでしょう。
このコマンドにはupgrade
の別名が付けられていますが、apt-get
や類するパッケージ管理を連想したときにupgrade
がすることと同じだからです。
php composer.phar update
こうするとプロジェクトの全ての依存関係を解決し、厳密なバージョンをcomposer.lock
に書き込みます。
全てではなく、2、3のパッケージのみを更新したい場合は、以下のように列挙できます。
php composer.phar update vendor/package vendor/package2
ワイルドカードを使って複数のパッケージを一挙に更新することもできます。
php composer.phar update "vendor/*"
composer.json
を変えることなくパッケージを指定のバージョンに巻き戻したいときは、--with
を使うことができます。
このオプションには自分で選んだバージョン制約を与えます。
php composer.phar update --with vendor/package:2.0.1
なお上記では全てのパッケージが更新されます。
--with
を使って自分で選んだ制約を与えたパッケージのみを更新するには、--with
を省き、代わりに部分的な更新構文を持つ制約を使ってください。
php composer.phar update vendor/package:2.0.1 vendor/package2:3.0.*
補足: composer.jsonでも要求されているパッケージについては、自分で選んだ制約は既存の制約の部分集合でなければなりません。 composer.jsonでの制約は適用されたままであり、これらの一時的な制約の更新では変更されません。
オプション
- --prefer-install: パッケージをダウンロードする方法は
source
とdist
の2つあります。 Composerはdist
を既定で使います。--prefer-install=source
(または--prefer-source
)を渡すと、Composerは、もしあればsource
からインストールします。 プロジェクトへのバグ修正をして、依存関係のローカルgitクローンを直接取得したい場合に便利です。 Composerがパッケージの開発版用のsource
を自動的に使う、以前の挙動にしたければ、--prefer-install=auto
を使ってください。 config.preferred-installも参照してください。 このフラグを渡すと、設定値より優先されます。 - --dry-run: 実際には何もせず、コマンドを模擬します。
- --dev:
require-dev
に挙げられたパッケージをインストールします(既定の挙動です)。 - --no-dev:
require-dev
に挙げられたパッケージのインストールを飛ばします。 自動読み込み器の生成でautoload-dev
規則を読み飛ばします。 COMPOSER_NO_DEVも参照してください。 - --no-install: composer.lockを更新した後のインストール過程を走らせません。
- --no-audit: composer.lockを更新した後の監査過程を走らせません。COMPOSER_NO_AUDITも参照してください。
- --audit-format: 監査の出力形式です。 "table"、"plain"、"json"、または"summary"(既定)のどれかでなければなりません。
- --lock: パッケージのバージョンを更新せず、固定ファイルが期限切れであることについての警告を抑えるために固定ファイルを上書きします。 ミラーやURLといったパッケージのメタデータが変更されていれば更新します。
- --with: 一時的に追加するバージョン制約です。例えばfoo/bar:1.0.0やfoo/bar=1.0.0です。
- --no-autoloader: 自動読み込み器の生成を飛ばします。
- --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --with-dependencies (-w): 引数リスト中のパッケージの依存関係も更新します。 ただし根幹要件は除きます。 COMPOSER_WITH_DEPENDENCIES=1 環境変数で設定することもできます。
- --with-all-dependencies (-W): 引数リスト中のパッケージの依存関係も更新します。 根幹要件を含みます。 COMPOSER_WITH_ALL_DEPENDENCIES=1 環境変数でも設定できます。
- --optimize-autoloader (-o): PSR-0自動読み込みをクラスマップに変換して、より高速な自動読み込み器を取得します。 特に実運用で推奨されますが、走らせるのに少し時間が掛かるため、現時点では既定では有効になっていません。
- --classmap-authoritative (-a): クラス対応表からクラスのみを自動読み込みします。
暗黙裡に
--optimize-autoloader
を有効にします。 - --apcu-autoloader: APCuを使って、クラスの有無をキャッシュします。
- --apcu-autoloader-prefix: APCu自動読み込み器のキャッシュ用に独自の接頭辞を使います。
暗黙裡に
--apcu-autoloader
を有効にします。 - --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。 ワイルドカードを使って複数の要件を無視できます。+
を後ろに付けることで要件の上限値だけを無視できます。 例えばパッケージがphp: ^7
を要求しているとき、オプション--ignore-platform-req=php+
はPHP8でのインストールを許しますが、PHP 5.6でのインストールについては失敗します。 - --prefer-stable: 依存関係の安定板を選ぶようにします。COMPOSER_PREFER_STABLE=1環境変数を介しても設定できます。
- --prefer-lowest:
依存関係の最も低いバージョンを選ぶようにします。最小バージョン要件を試す際に便利で、一般的には
--prefer-stable
と共に使われます。COMPOSER_PREFER_LOWERST=1環境変数を介しても設定できます。 - --minimal-changes (-m): 依存関係に関して絶対に必須の変更のみ行います。 パッケージが現在固定されているバージョンに留めておけないときは更新されます。 部分更新については、許可一覧にあるパッケージは常に完全に更新されます。 COMPOSER_MINIMAL_CHANGES=1環境変数でも設定できます。
- --patch-only: 現在インストールされている依存関係について、パッチバージョンの更新のみ許可します。
- --interactive: 自動補完付きの対話的なインターフェースで、更新するパッケージを選択します。
- --root-reqs: 更新を一次依存関係に制限します。
- --bump-after-update:
更新後に
bump
を走らせます。dev
やno-dev
を設定すると、それぞれの依存関係のみのバージョンを上げます。
引数として単語mirrors
、lock
、nothing
からどれか1つを指定すると、オプション--lock
を指定することと同じ効果があります。
例えばcomposer update mirrors
はcomposer update --lock
と全く同じです。
require / r
require
コマンドはcomposer.json
ファイルに現在のディレクトリから新しいパッケージを追加します。1つもファイルが存在しなければ必要に応じて作られます。
パッケージを指定しない場合、Composerはパッケージを探すためにプロンプトを出し、要件にするものに照合する一覧を提供します。
php composer.phar require
要件を加えたり変えたりした後に、変更された要件がインストールされたり更新されたりします。
対話的に要件を選びたくなければコマンドに渡すこともできます。
php composer.phar require "vendor/package:2.*" vendor/package2:dev-master
バージョン制約を指定しなければ、composerは利用できるパッケージのバージョンに基づいて相応しいものを選びます。
php composer.phar require vendor/package vendor/package2
すぐには新しい依存関係をインストールしたくない場合は--no-update付きで呼べます。
オプション
- --dev: パッケージを
require-dev
に追加します。 - --dry-run: 実際には何もせず、コマンドを模擬します。
- --prefer-install: パッケージをダウンロードする方法は
source
とdist
の2つあります。 Composerはdist
を既定で使います。--prefer-install=source
(または--prefer-source
)を渡すと、Composerは、もしあればsource
からインストールします。 プロジェクトへのバグ修正をして、依存関係のローカルgitクローンを直接取得したい場合に便利です。 Composerがパッケージの開発版用のsource
を自動的に使う、以前の挙動にしたければ、--prefer-install=auto
を使ってください。 config.preferred-installも参照してください。 このフラグを渡すと、設定値より優先されます。 - --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --no-update: 依存関係の自動的な更新を無効にします(--no-installを暗示します)。
- --no-install: composer.lockを更新した後のインストール過程を走らせません。
- --no-audit: composer.lockを更新した後の監査過程を走らせません。COMPOSER_NO_AUDITも参照してください。
- --audit-format: 監査の出力形式です。 "table"、"plain"、"json"、または"summary"(既定)のどれかでなければなりません。
- --update-no-dev:
--no-dev
オプションと共に依存関係の更新を走らせます。COMPOSER_NO_DEVも参照してください。 - --update-with-dependencies (-w): 新しく要求するパッケージの依存関係も更新します。 ただし根幹要件は除きます。 COMPOSER_WITH_DEPENDENCIES=1 環境変数でも設定できます。
- --update-with-all-dependencies (-W): 新しく要求するパッケージの依存関係も更新します。 根幹要件も含まれます。 COMPOSER_WITH_ALL_DEPENDENCIES=1 環境変数でも設定できます。
- --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視して、たとえローカルマシンが満たしていなかったとしても、インストールを強行します。 ワイルドカードを使って複数の要件を無視できます。 - --prefer-stable: 依存関係の安定板を選ぶようにします。COMPOSER_PREFER_STABLE=1環境変数を介しても設定できます。
- --prefer-lowest:
依存関係の最も低いバージョンを選ぶようにします。最小バージョン要件を試す際に便利で、一般的には
--prefer-stable
と共に使われます。COMPOSER_PREFER_LOWERST=1環境変数を介しても設定できます。 - --minimal-changes (-m):
-w
/-W
での更新の際に、遷移的な依存関係に関して絶対に必須の変更のみを実施するようにします。 COMPOSER_MINIMAL_CHANGES=1環境変数を介して設定することもできます。 - --sort-packages:
パッケージを
package.json
で整列した状態にします。 - --optimize-autoloader (-o): PSR-0自動読み込みをクラスマップに変換して、より高速な自動読み込み器を取得します。 特に実運用で推奨されますが、走らせるのに少し時間が掛かるため、現時点では既定では有効になっていません。
- --classmap-authoritative (-a): クラス対応表からクラスのみを自動読み込みします。
暗黙裡に
--optimize-autoloader
を有効にします。 - --apcu-autoloader: APCuを使って、クラスの有無をキャッシュします。
- --apcu-autoloader-prefix: APCu自動読み込み器のキャッシュ用に独自の接頭辞を使います。
暗黙裡に
--apcu-autoloader
を有効にします。
remove / rm / uninstall
remove
コマンドは現在のディレクトリにあるcomposer.json
ファイルからパッケージを削除します。
php composer.phar remove vendor/package vendor/package2
要件を削除した後は変更対象の要件がアンインストールされます。
オプション
- --unused(もう)直接ないし間接の依存関係ではない、使われていないパッケージを削除します。
- --dev:
require-dev
からパッケージを削除します。 - --dry-run: 実際には何もせず、コマンドを模擬します。
- --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --no-update: 依存関係の自動的な更新を無効にします(--no-installを暗示します)。
- --no-install: composer.lockを更新した後のインストール過程を走らせません。
- --no-audit: インストールが完了した後の監査過程を走らせないようにします。 COMPOSER_NO_AUDITも参照してください。
- --audit-format: 監査の出力形式です。 "table"、"plain"、"json"、または"summary"(既定)のどれかでなければなりません。
- --update-no-dev: --no-devオプションで依存関係の更新を走らせます。COMPOSER_NO_DEVも参照してください。
- --update-with-dependencies (-w): 削除されたパッケージの依存関係も更新します。 COMPOSER_WITH_DEPENDENCIES=1 環境変数でも設定できます(廃止されました。 現在は既定の挙動になっています)。
- --update-with-all-dependencies (-W): 全ての継承する依存関係が更新されるようにします。 根幹要件のものも含みます。 COMPOSER_WITH_ALL_DEPENDENCIES=1 環境変数でも設定できます。
- --minimal-changes (-m):
-w
/-W
での更新の際に、遷移的な依存関係に関して絶対に必須の変更のみを実施するようにします。 COMPOSER_MINIMAL_CHANGES=1環境変数を介して設定することもできます。 - --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視して、たとえローカルマシンが満たしていなかったとしても、インストールを強行します。 ワイルドカードを使って複数の要件を無視できます。 - --optimize-autoloader (-o): PSR-0の自動読み込みをクラス対応表に変換して自動読み込みを高速にします。 実運用では特にお勧めしますが、走らせるのに少し時間が掛かることがあるので、現在は既定ではされません。
- --classmap-authoritative (-a): クラス対応表からクラスのみを自動読み込みします。
暗黙裡に
--optimize-autoloader
を有効にします。 - --apcu-autoloader: APCuを使って、クラスの有無をキャッシュします。
- --apcu-autoloader-prefix: APCu自動読み込み器のキャッシュ用に独自の接頭辞を使います。
暗黙裡に
--apcu-autoloader
を有効にします。
bump
bump
コマンドはcomposer.jsonの要件の下限を現在インストールされているバージョンに引き上げます。これにより依存関係が何らかの競合によりうっかりダウングレードされてしまわないようになったり、Composerが探すパッケージのバージョンの数が抑えられるため依存関係解決を僅かに向上させられます。
許される依存関係を狭めてしまうため、ライブラリでこれを無闇に走らせるのは推奨されません。
依存関係を狭めることは利用者に依存関係地獄を招きかねません。
しかしライブラリで--dev-only
を走らせるのは、開発用要件がライブラリに対して局所的で、パッケージの消費者には影響しないため問題ないでしょう。
オプション
- --dev-only: "require-dev" 中の要件のみbumpします。
- --no-dev-only: "require" にある要件のみbumpします。
- --dry-run: bumpするパッケージを出力しますが、何も実行しません。
reinstall
reinstall
コマンドは名前からインストールされているパッケージを見付けだし、アンインストールと再インストールをします。
こうすることでファイルを散らかしたり--prefer-installを使ってインストールの種類を変えたいと思ったりしたときにクリーンインストールできます。
php composer.phar reinstall acme/foo acme/bar
再インストールするパッケージ名を1つ以上指定できます。 またはワイルドカードを使って複数パッケージの一括選択もできます。
php composer.phar reinstall "acme/*"
オプション
- --prefer-install: パッケージをダウンロードする方法は
source
とdist
の2つあります。 Composerはdist
を既定で使います。--prefer-install=source
(または--prefer-source
)を渡すと、Composerは、もしあればsource
からインストールします。 プロジェクトへのバグ修正をして、依存関係のローカルgitクローンを直接取得したい場合に便利です。 Composerがパッケージの開発版用のsource
を自動的に使う、以前の挙動にしたければ、--prefer-install=auto
を使ってください。 config.preferred-installも参照してください。 このフラグを渡すと、設定値より優先されます。 - --no-autoloader: 自動読み込み器の生成を飛ばします。
- --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --optimize-autoloader (-o): PSR-0の自動読み込みをクラス対応表に変換して自動読み込みを高速にします。 実運用では特にお勧めしますが、走らせるのに少し時間が掛かることがあるので、現在は既定ではされません。
- --classmap-authoritative (-a): クラス対応表からクラスのみを自動読み込みします。
暗黙裡に
--optimize-autoloader
を有効にします。 - --apcu-autoloader: APCuを使って、クラスの有無をキャッシュします。
- --apcu-autoloader-prefix: APCu自動読み込み器のキャッシュ用に独自の接頭辞を使います。
暗黙裡に
--apcu-autoloader
を有効にします。 - --ignore-platform-reqs: 全てのプラットフォーム要件を無視します。 再インストールコマンド用の自動読み込み器の生成のときにのみ効果があります。
- --ignore-platform-req: 特定のプラットフォーム要件を無視します。 再インストールコマンド用の自動読み込み器の生成のときにのみ効果があります。 複数の要件をワイルドカードで無視できます。
check-platform-reqs
check-platform-reqsコマンドはPHPと拡張のバージョンがインストールされているパッケージのプラットフォーム要件を満たしているかを確認します。 例えば実運用サーバーでインストール後に、プロジェクトを走らせるのに必要な全ての拡張があることを検証したいときに使えます。
updateやinstallとは異なり、このコマンドはconfig.platform設定を無視し、実際のプラットフォームパッケージを検査します。 そのため要求されているプラットフォーム依存関係があることを確かめられます。
オプション
- --lock: インストールされたパッケージからではなく、固定ファイルのみから要件を検査します。
- --no-dev: require-devのパッケージ要件の検査を無効にします。
- --format (-f): 出力の書式です。text(既定)またはjsonです。
global
globalコマンドはinstall
、remove
、require
、update
のようなコマンドをあたかもCOMPOSER_HOMEディレクトリから走らせているように実行できます。
中心的な場所に保管されたプロジェクトを管理するためのただの補助であり、CLIツールやComposerプラグインのような、どこでも使えるようにしたいものを置いておけます。
大域的にCLIユーティリティをインストールするのに使えます。 以下は一例です。
php composer.phar global require friendsofphp/php-cs-fixer
これでphp-cs-fixer
バイナリが大域的に使えるようになりました。大域的なベンダーバイナリディレクトリが$PATH
環境変数の中にあるようにしてください。インストールした場所は以下のコマンドで得られます。
php composer.phar global config bin-dir --absolute
後になってバイナリを更新したいと思ったら、global updateを走らせられます。
php composer.phar global update
search
searchコマンドを使うと、現在のプロジェクトのパッケージリポジトリ全体を検索できます。 大抵はpackagistです。 検索したい用語を渡せます。
php composer.phar search monolog
複数の引数を渡すことで1つ以上の用語を探すこともできます。
オプション
- --only-name (-N): パッケージの名前のみから検索します。
- --only-vendor (-O): ベンダー・組織名のみから検索します。 結果として「ベンダー」のみが返ります。
- --type (-t): 特定のパッケージの種類から探します。
- --format (-f):
text(既定)かjson出力かのどちらかを選べます。
jsonではname及びdescriptionキーのみが存在することが保証されています。
残り(
url
、repository
、downloads
、favers
)はPackagist.orgの検索結果で得られるものであって、その他のリポジトリが返す情報はそれより多かったり少なかったりします。
show / info
使えるパッケージの全てを一覧にするにはshow
コマンドが使えます。
php composer.phar show
一覧を絞り込むには、ワイルドカードを使ってパッケージマスクを渡せます。
php composer.phar show "monolog/*"
monolog/monolog 2.4.0 Sends your logs to files, sockets, inboxes, databases and various web services
何かのパッケージの詳細を見たければ、パッケージ名を渡すことができます。
php composer.phar show monolog/monolog
name : monolog/monolog
descrip. : Sends your logs to files, sockets, inboxes, databases and various web services
keywords : log, logging, psr-3
versions : * 1.27.1
type : library
license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
homepage : http://github.com/Seldaek/monolog
source : [git] https://github.com/Seldaek/monolog.git 904713c5929655dc9b97288b69cfeedad610c9a1
dist : [zip] https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1 904713c5929655dc9b97288b69cfeedad610c9a1
names : monolog/monolog, psr/log-implementation
support
issues : https://github.com/Seldaek/monolog/issues
source : https://github.com/Seldaek/monolog/tree/1.27.1
autoload
psr-4
Monolog\ => src/Monolog
requires
php >=5.3.0
psr/log ~1.0
パッケージのバージョンを渡すこともできます。 こうすると特定のバージョンでの詳細が分かります。
php composer.phar show monolog/monolog 1.0.2
オプション
- --all: リポジトリで使える全てのパッケージを一覧にします。
- --installed (-i): インストールされているパッケージを一覧にします(既定で有効になっており、時代遅れのオプションです)。
- --locked: composer.lockから固定されたパッケージを一覧にします。
- --platform (-p): プラットフォームパッケージ(phpと拡張)のみを一覧にします。
- --available (-a): 利用できるパッケージのみにします。
- --self (-s): 根幹パッケージ情報を一覧にします。
- --name-only (-N): パッケージ名のみを一覧にします。
- --path (-P): パッケージのパスを一覧にします。
- --tree (-t): 依存関係を木構造で一覧にします。パッケージ名を渡した場合はそのパッケージの依存関係を示します。
- --latest (-l): インストールされている全てのパッケージをその最新バージョンと共に一覧にします。
- --outdated (-o): --latestを暗示しますが、新しいバージョンが手に入るパッケージのみを一覧にします。
- --ignore:
ワイルドカード (
*
) を含められます。 指定されたパッケージを無視します。 パッケージの新しいバージョンについて通知を受けたくなければ--outdatedオプションと一緒に使ってください。 - --no-dev: パッケージ一覧から開発用の依存関係を除外します。
- --major-only (-M): --latestまたは--outdatedと一緒に使ってください。 メジャーなセマンティックバージョニング互換の更新があるパッケージのみ示されます。
- --minor-only (-m): --latestまたは--outdatedと一緒に使ってください。 マイナーなセマンティックバージョニング互換の更新があるパッケージのみ示されます。
- --patch-only: --latestまたは--outdatedと一緒に使ってください。 パッチ水準のセマンティックバージョニング互換の更新があるパッケージのみが示されます。
- --sort-by-age (-A): インストールされたバージョンの経過時間を表示し、古い順にパッケージを整列します。 --latestないし--outdatedオプションと一緒に使ってください。
- --direct (-D): パッケージの一覧を直接的な依存関係に限定します。
- --strict: 時代遅れのパッケージがあるときは非ゼロの終了コードを返します。
- --format (-f): 出力形式としてtext(既定)ないしjsonを選びます。
- --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、たとえローカルマシンがこれらの要件を満たしていなくても、インストールを強行します。--outdatedオプションと一緒に使ってください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、たとえローカルマシンがその要件を満たしていなくても、インストールを強行します。 ワイルドカードを介して複数の要件を無視できます。 --outdatedオプションと一緒に使ってください。
outdated
outdated
コマンドは、更新が利用できるインストール済みパッケージの一覧を、現在のバージョンと最新のバージョンを含めて示します。
基本的にcomposer show -lo
の別名になっています。
色彩コードは以下の通り。
- green (=): 依存関係は最新バージョンであり、最新式です。
- yellow (
~
): 依存関係に新しいバージョンが利用できるものがありますが、セマンティックバージョニングに於ける後方互換性の破壊が含まれます。 そのため更新できそうならしても良いですが、作業が発生する可能性があります。 - red (!): 依存関係にセマンティックバージョニング上互換性のある新しいバージョンがあり、更新するべきです。
オプション
- --all (-a): 時代遅れのものだけでなく、全てのパッケージを示します(
composer show --latest
の別名です)。 - --direct (-D): パッケージの一覧を直接的な依存関係に限定します。
- --strict: 1つもパッケージが時代遅れでなければ、非ゼロの終了コードを返します。
- --ignore:
指定されたパッケージを無視します。
ワイルドカード (
*
) を含められます。 何かしらのパッケージの新しいバージョンについて知らされたくないときに使ってください。 - --major-only (-M): メジャーなセマンティックバージョニング上の互換性を伴う更新のみ示します。
- --minor-only (-m): マイナーなセマンティックバージョニング上の互換性を伴う更新のみ示します。
- --patch-only (-p): パッチ水準のセマンティックバージョニング上の互換性を伴う更新のみ示します。
- --sort-by-age (-A): インストールされたバージョンの経過時間を表示し、古い順にパッケージを整列します。
- --format (-f): 出力形式としてtext(既定)ないしjsonを選びます。
- --no-dev: 時代遅れの開発用依存関係を表示しません。
- --locked: 固定ファイルを元にしたパッケージの更新を示します。 現在のベンダーディレクトリの中身は措かれます。
- --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、たとえローカルマシンがこれらの要件を満たしていなくても、インストールを強行します。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視して、たとえローカルマシンが満たしていなかったとしても、インストールを強行します。 ワイルドカードを使って複数の要件を無視できます。
browse / home
browse
(別名home
)はパッケージのリポジトリURLまたはホームページをブラウザで開きます。
オプション
- --homepage (-H): リポジトリではなくホームページのURLを開きます。
- --show (-s): ホームページないしリポジトリのURLを表示するだけにします。
suggests
現在インストールされているパッケージの集合から提案される全てのパッケージを一覧にします。
おまけとして複数のパッケージ名をvendor/package
の形式で渡し、これらのパッケージのみについて提案を出力するように制限できます。
--by-package
(既定)ないし--by-suggestion
フラグを使って出力をグループ分けできます。それぞれ提案を行うパッケージによるグループ分けと提案されたパッケージによるグループ分けになっています。
提案されたパッケージ名の一覧だけが欲しければ--list
を使ってください。
オプション
- --by-package: 提案を行ったパッケージによって出力をグループ分けします(既定)。
- --by-suggestion: 提案されたパッケージによって出力をグループ分けします。
- --all: 推移的なものを含む全ての依存関係から提案を示します(既定では直接的な依存関係の提案のみが示されます)。
- --list: 提案されたパッケージ名のみを一覧として示します。
- --no-dev:
require-dev
パッケージからの提案を除外します。
fund
依存関係の維持管理に投資して支援する方法が分かります。
このコマンドはインストールされている依存関係から全ての投資のリンクを一覧にします。
機械で読むことのできる出力を得るには--format=json
を使ってください。
オプション
- --format (-f): 出力形式としてtext(既定)ないしjsonを選びます。
depends / why
depends
コマンドは特定のパッケージに依存する他のパッケージを教えてくれます。
インストールの際、require-dev
の関係は根幹パッケージのみ考慮されます。
php composer.phar depends doctrine/lexer
doctrine/annotations 1.13.3 requires doctrine/lexer (1.*)
doctrine/common 2.13.3 requires doctrine/lexer (^1.0)
おまけとしてパッケージの後にバージョン制約を指定することで検索結果を絞り込むことができます。
--tree
や-t
フラグを加えると、なぜそのパッケージが依存されているのかの再帰的な木構造が示されます。例えば以下の通りです。
php composer.phar depends psr/log -t
psr/log 1.1.4 Common interface for logging libraries
├──composer/composer 2.4.x-dev (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/composer dev-main (requires psr/log ^1.0 || ^2.0 || ^3.0)
├──composer/xdebug-handler 3.0.3 (requires psr/log ^1 || ^2 || ^3)
│ ├──composer/composer 2.4.x-dev (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
│ └──composer/composer dev-main (requires composer/xdebug-handler ^2.0.2 || ^3.0.3)
└──symfony/console v5.4.11 (conflicts psr/log >=3) (circular dependency aborted here)
オプション
- --recursive (-r): 再帰的に根幹パッケージまで木構造を解決します。
- --tree (-t): 入れ子の木構造を結果に出力します。-rを暗示します。
prohibits / why-not
prohibits
コマンドを使うと与えられたパッケージがインストールされる上でどのパッケージが障壁になっているのかが分かります。
バージョン制約を指定するとプロジェクトにおいて更新が実施できるかを検証し、もしできなければその理由を示します。
以下の例をご覧ください。
php composer.phar prohibits symfony/symfony 3.1
laravel/framework v5.2.16 requires symfony/var-dumper (2.8.*|3.0.*)
なおプラットフォーム要件も指定できます。 例えばサーバーをPHP 8.0に更新できるかどうかを確認するにはこうします。
php composer.phar prohibits php 8
doctrine/cache v1.6.0 requires php (~5.5|~7.0)
doctrine/common v2.6.1 requires php (~5.5|~7.0)
doctrine/instantiator 1.0.5 requires php (>=5.3,<8.0-DEV)
depends
と同様に再帰的な探索を求めることができます。その場合は競合を起こしているパッケージに依存している全てのパッケージを一覧にします。
オプション
- --recursive (-r): 再帰的に根幹パッケージまで木構造を解決します。
- --tree (-t): 入れ子の木構造を結果に出力します。-rを暗示します。
validate
composer.json
ファイル(と、当てはまるときはcomposer.lock
)をコミットしたり、リリースのタグ付けをしたりする前には、必ずvalidate
コマンドを走らせるべきです。
composer.json
が正当であるか検査します。
composer.lock
があるとき、composer.json
に対して最新かも検査します。
php composer.phar validate
オプション
- --no-check-all:
composer.json
中の要件が範囲のないものであったり、過度に厳密なバージョン制約であったりする場合について、警告を出しません。 - --no-check-lock:
composer.lock
が存在し、且つ更新されていない場合について、警告を出しません。 - --check-lock 固定ファイルが最新か検査します(config.lockが偽の場合も含みます)
- --no-check-publish:
Packagistに投稿するには相応しくないが、そうでなければ妥当な
composer.json
になっている場合について、エラーを出しません。 - --no-check-version: バージョンフィールドがあるとき、警告を出しません。
- --with-dependencies: 全てのインストールされた依存関係についてもcomposer.jsonを検証します。
- --strict: エラーに加えて警告についても非ゼロの終了コードを返します。
status
依存関係のコードを変更したり、ソースからインストールしたりする必要がしばしばある場合は、status
コマンドを使うとその中からローカルで加えた変更があるか確認できます。
php composer.phar status
--verbose
コマンドで変化したところについてのより詳しい情報を得られます。
php composer.phar status -v
You have changes in the following dependencies:
vendor/seld/jsonlint:
M README.mdown
self-update / selfupdate
Composer自体を最新版に更新したければself-update
コマンドを走らせてください。composer.phar
を最新版に置き換えます。
php composer.phar self-update
そうではなく特定のリリースに更新したければそのように指定してください。
php composer.phar self-update 2.4.0-RC1
Composerをシステム全体にインストールしたときは(大域的なインストールを参照)、コマンドをroot
権限で走らせなくてはならないかもしれません。
sudo -H composer self-update
ComposerがPHARとしてインストールされていなければこのコマンドは使えません(Composerがオペレーティングシステムのパッケージ管理によってインストールされたときはこの場合に当たることがあります)。
オプション
- --rollback (-r): インストールした直近のバージョンに巻き戻します。
- --clean-backups: 更新時に古いバックアップを削除します。更新後は現在のComposerのバージョンのみがバックアップとして残ります。
- --no-progress: ダウンロードの進捗バーを出力しません。
- --update-keys: キーの更新を利用者に尋ねます。
- --stable: 更新を安定チャンネルに強制します。
- --preview: 更新をプレビューチャンネルに強制します。
- --snapshot: 更新をスナップショットチャンネルに強制します。
- --1: 更新を安定チャンネルに強制しますが、1.x版のみを使います。
- --2: 更新を安定チャンネルに強制しますが、2.x版のみを使います。
- --set-channel-only: チャンネルを既定のものとして保存するだけして終了します。
config
config
コマンドではローカルのcomposer.json
ファイルまたは大域的なconfig.json
ファイルにあるComposerの設定やリポジトリを編集できます。
加えてローカルのcomposer.json
にある殆どのプロパティを編集できます。
php composer.phar config --list
使い方
config [options] [setting-key] [setting-value1] ... [setting-valueN]
setting-key
は設定のオプション名で、setting-value1
は設定値です。
(github-protocols
のような)値の配列を取ることができる設定については、複数の設定値の引数が可能です。
プロパティの値を編集することもできます。
description
、homepage
、keywords
、license
、minimum-stability
、name
、prefer-stable
、type
、version
がそうです。
妥当な設定オプションについては設定の章を参照してください。
オプション
- --global (-g):
既定では
$COMPOSER_HOME/config.json
に位置する大域設定ファイルを編集します。 このオプションがなければ、このコマンドはローカルのcomposer.jsonファイルないし
--file`により指定されたファイルに作用します。 - --editor (-e):
ローカルのcomposer.jsonファイルを
EDITOR
環境変数で定義されたテキストエディタを使って開きます。--global
オプションと一緒に使うと大域設定ファイルを開きます。 - --auth (-a): 認証設定ファイルに作用します(--editorの使用限定です)。
- --unset:
setting-key
の名前が付いている設定要素を削除します。 - --list (-l): 現在の設定変数の一覧を示します。
global
オプションと一緒に使うと大域設定のみを一覧にします。 - --file="..." (-f): composer.jsonではなく特定のファイルについて編集します。
なお、
--global
オプションと織り交ぜて使うことはできません。 - --absolute:
*-dir
設定値を取得するとき、相対パスではなく絶対パスを返します。 - --json: 設定値をJSONでデコードします。このデコード結果は
extra.*
キーで使うことができます。 - --merge: 設定値を現在の値と統合します。
--json
と組み合わせてextra.*
キーに使えます。 - --append: リポジトリを追加するとき、既存のものの先頭に追加する(最優先)のではなく末尾に付ける(低優先)ようにします。
- --source: 設定値がどこから読み込まれたのかを表示します。
リポジトリを変更する
設定部分を変更することに加えて、config
コマンドを以下のように使うことでリポジトリ部分を変更することにも対応しています。
php composer.phar config repositories.foo vcs https://github.com/foo/bar
リポジトリにより多くの設定オプションが必要なら、代わりにそのJSON表現を渡すことができます。
php composer.phar config repositories.foo '{"type": "vcs", "url": "http://svn.example.org/my-project/", "trunk-path": "master"}'
追加の値を変更する
設定部分を変更することに加えて、config
コマンドを以下のように使って追加部分を変更することにも対応しています。
php composer.phar config extra.foo.bar value
ドットは入れ子の連なりを表していますが、深さは3段階までです。上は"extra": { "foo": { "bar": "value" } }
を設定します。
複雑な値を加えたり変更したりする場合は--json
や--merge
フラグを使って追加のフィールドをJSONとして編集できます。
php composer.phar config --json extra.foo.bar '{"baz": true, "qux": []}'
create-project
Composerを使って既存のパッケージから新しいプロジェクトを作ることができます。
git cloneやsvn checkoutをしてから、ベンダーにあるものをcomposer install
することと等価です。
このコマンドにはいくつかの活用法があります。
- アプリケーションパッケージをデプロイできます。
- 任意のパッケージをチェックアウトして、例えばパッチを開発できます。
- 複数人の開発者がいるプロジェクトでこの機能を使い、開発のための初期のアプリケーションに着手できます。
Composerで新しいプロジェクトを作るためにはcreate-project
コマンドが使えます。パッケージ名とプロジェクトを作成するディレクトリを渡してください。また、3つ目の引数としてバージョンを与えることもでき、与えない場合は最新版が使われます。
ディレクトリがその時点で存在しなければインストールの過程で作られます。
php composer.phar create-project doctrine/orm path "2.2.*"
プロジェクトに着手するための既存のcomposer.json
があるディレクトリ内では、引数がなくともコマンドを走らせることができます。
既定ではコマンドはパッケージをpackagist.orgで確認します。
オプション
- --stability (-s): パッケージの最小安定性です。
stable
が既定です。 - --prefer-install: パッケージをダウンロードする方法は
source
とdist
の2つあります。 Composerはdist
を既定で使います。--prefer-install=source
(または--prefer-source
)を渡すと、Composerは、もしあればsource
からインストールします。 プロジェクトへのバグ修正をして、依存関係のローカルgitクローンを直接取得したい場合に便利です。 Composerがパッケージの開発版用のsource
を自動的に使う、以前の挙動にしたければ、--prefer-install=auto
を使ってください。 config.preferred-installも参照してください。 このフラグを渡すと、設定値より優先されます。 - --repository:
パッケージを探索するための独自のリポジトリを与えます。このリポジトリはpackagistの代わりに使われます。
composer
ディレクトリを指すHTTP URLでも、ローカルのpackages.json
ファイルへのパスでも、あるいはリポジトリキーが受け付けるものに似たJSON文字列でも大丈夫です。複数回使って複数のリポジトリを設定できます。 - --add-repository: composer.jsonの中に独自のリポジトリを加えます。 固定ファイルが存在している場合、一旦削除されインストールの代わりに更新が走ります。
- --dev:
require-dev
に挙げられたパッケージをインストールします。 - --no-dev: require-devのパッケージのインストールを無効にします。
- --no-scripts: 根幹パッケージで定義されているスクリプトの実行を無効にします。
- --no-progress: 進捗表示を除きます。 バックスペース文字を扱わない端末やスクリプトではこの表示があることで散らかってしまうからです。
- --no-secure-http: 根幹パッケージのインストール中、一時的にsecure-http設定オプションを無効にします。 自己責任でご利用ください。 このフラグを使うのは関心しません。
- --keep-vcs: 作成されるプロジェクトのVCSメタデータの削除を飛ばします。 これが役に立つのはコマンドを非対話的なモードで走らせているときが殆どです。
- --remove-vcs: プロンプト無しにVCSメタデータを強制削除します。
- --no-install: ベンダーのインストールを無効にします。
- --no-audit: インストールが完了した後の監査過程を走らせないようにします。 COMPOSER_NO_AUDITも参照してください。
- --audit-format: 監査の出力形式です。 "table"、"plain"、"json"、または"summary"(既定)のどれかでなければなりません。
- --ignore-platform-reqs:
全てのプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、ローカルマシンがたとえこれらを満たしていなくてもインストールを強行します。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視して、たとえローカルマシンが満たしていなかったとしても、インストールを強行します。 ワイルドカードを使って複数の要件を無視できます。 - --ask: 利用者に新しいプロジェクトの対象ディレクトリを入れてもらうようにします。
dump-autoload / dumpautoload
例えばクラスマップパッケージ中に新しいクラスができたことによって自動読み込み器を更新する必要がある場合は、インストールや更新を行わずともdump-autoload
が使えます。
加えて、効率性の理由からPSR-0/4のパッケージをクラスマップのものに変換する、最適化された自動読み込み器を吐き出すことができます。 多くのクラスがある比較的大規模なアプリケーションでは、自動読み込み器には毎回のリクエストに掛かる時間のうち無視できない時間が掛かります。 開発時に常にクラスマップを使うことはあまり便利ではありませんが、このオプションを使えば便宜上PSR-0/4を使いつつも、効率性のためにクラスマップを使うことができます。
オプション
- --optimize (-o): PSR-0/4自動読み込みをクラスマップに変換し、より高速な自動読み込み器を得ます。 実運用で特に推奨されますが、走らせるのに少し時間が掛かるため、現時点では既定で有効になっていません。
- --classmap-authoritative (-a):
クラスマップからのみクラスを自動読み込みします。暗に
--optimize
を有効します。 - --apcu: APCuを使って、クラスの有無をキャッシュします。
- --apcu-prefix: APCu自動読み込み器のキャッシュに独自の接頭辞を使います。暗に
--apcu
を有効にします。 - --dry-run: 操作内容を出力しますが、何も実行しません。
- --no-dev: autoload-dev規則を無効にします。
既定では、Composerは直近の
install --no-dev
またはupdate --no-dev
の状態に随って自動的にこれを推測します。 - --dev: autoload-dev規則を有効にします。
既定では、Composerは直近の
install --no-dev
またはupdate --no-dev
の状態に随って自動的にこれを推測します。 - --ignore-platform-reqs:
全ての
php
、hhvm
、lib-*
、ext-*
要件を無視し、これらのプラットフォーム検査を飛ばします。platform
設定オプションも参照してください。 - --ignore-platform-req:
特定のプラットフォーム要件(
php
、hhvm
、lib-*
、ext-*
)を無視し、それについてのプラットフォーム検査を飛ばします。 ワイルドカードを使って複数の要件を無視できます。 - --strict-psr: PSR-4またはPSR-0の対応付けでの失敗が存在する場合は、失敗の終了コード (1) を返します。 動作には--optimizeが必要です。
- --strict-ambiguous: 複数ファイルに同じクラスがあるとき、失敗の終了コード (2) を返します。 動作には--optimizeが必要です。
clear-cache / clearcache / cc
Composerのキャッシュディレクトリから全ての内容を削除します。
オプション
- --gc: ガベージコレクションのみを走らせます。完全なキャッシュの消去は行いません。
licenses
インストールされている全てのパッケージの名前、バージョン、使用許諾を一覧にします。
--format-json
を使うと、機械で読み込みやすい出力が得られます。
オプション
- --format: 出力の形式です。text、json、summaryの何れかです(既定では「text」)。
- --no-dev: 出力から開発依存関係を除きます。
run-script / run
オプション
- --timeout: スクリプトの制限時間を秒単位で設定します。0は制限時間無しです。
- --dev: 開発モードを設定します。
- --no-dev: 開発モードを無効にします。
- --list (-l): 利用者が定義したスクリプトを一覧にします。
スクリプトを手動で走らせるにはこのコマンドを使うことができます。スクリプト名と任意で必要な引数を与えます。
exec
ベンダーのバイナリやスクリプトを実行します。 どんなコマンドも実行できますし、コマンドが走る前に必ずComposerのbin-dirがPATHに加えられます。
オプション
- --list (-l): 利用できるComposerのバイナリを一覧にします。
diagnose
バグや奇妙な挙動を発見したと思ったら、diagnose
コマンドを走らせて、多くのよくある問題について自動化された検査を実施できます。
php composer.phar diagnose
archive
このコマンドを使うと、与えられたバージョンの与えられたパッケージについてzip/tarアーカイブを生成します。 除外・無視対象のファイルを除く、プロジェクト全体をアーカイブするために使うこともできます。
php composer.phar archive vendor/package 2.0.21 --format=zip
オプション
- --format (-f): アーカイブ結果の形式です。tar、tar.gz、tar.bz2、zipのいずれかです(既定:「tar」)。
- --dir: アーカイブをこのディレクトリに書き出します(既定:「.」)。
- --file: 与えられたファイル名でアーカイブを書き出します。
audit
このコマンドを使うと、インストールしたパッケージに対し、セキュリティ上の問題がありうるか監査できます。
既定ではPackagist.org
apiを使い、セキュリティ上の脆弱性に対する推奨事項を確認して一覧にします。
composer.json
のrepositories
節で指定されたときは、他のリポジトリが使われます。
このコマンドでは、放棄されたパッケージも検出されます。
監査コマンドでは、脆弱なパッケージや放棄されたパッケージがあるか判定されます。 見つかったものに基づいて、以下の終了コードを返します。
0
は、問題なし1
は、脆弱なパッケージ2
は、放棄されたパッケージ3
は、脆弱なパッケージと放棄されたパッケージ
php composer.phar audit
オプション
- --no-dev: require-devのパッケージの監査を無効にします。
- --format (-f): 出力の形式を監査します。監査の出力は「table」(既定)、「plain」、「json」、「summary」の何れかです。
- --locked: 固定ファイルのパッケージを監査します。 現時点でベンダーディレクトリに何があるかは無視されます。
- --abandoned: 放棄されたパッケージに対して動作します。 「ignore」「report」「fail」のどれかでなければなりません。 audit.abandonedもご参照ください。 このフラグを渡すと、構成値と環境変数がオーバーライドされます。
- --ignore-severity: 特定の深刻度の水準の勧告を無視します。 複数の深刻度を無視するために1回以上渡せます。
help
あるコマンドについて詳細が知りたければhelp
が使えます。
php composer.phar help install
コマンドラインインターフェース
コマンドライン補完は、composer completion --help
コマンドを走らせると有効にできます。
また、以下の手順に従ってください。
環境変数
環境変数を設定して多くの設定を上書きできます。
できる限りこうした設定は環境変数ではなくcomposer.json
のconfig
部分で指定することをお勧めします。
環境変数はcomposer.json
で指定された値より常に優先されるということ以外に利点はありません。
COMPOSER
COMPOSER
環境変数を設定することにより、composer.json
のファイル名を何か別のものに設定できます。
例えば:
COMPOSER=composer-other.json php composer.phar install
生成される固定ファイルは同じ名前を使います。
この例ではcomposer-other.lock
です。
COMPOSER_ALLOW_SUPERUSER
1に設定すると、この環境変数はコマンドをルートないし特権のある利用者として走らせることについての警告を無効にします。 自動的なsudoセッションの消去も無効にするため、必ずDockerコンテナのような特権のある利用者として、常時Composerを使うときにのみ設定するようにしてください。
COMPOSER_ALLOW_XDEBUG
1に設定すると、Xdebug拡張を持たないPHPを再始動させることなく、環境変数はXdebug拡張が有効のときにComposerを走らせられるようにします。
COMPOSER_AUTH
COMPOSER_AUTH
変数では、環境変数として認証を設定できます。
変数の内容はJSON形式のオブジェクトで、http-basic、github-oauth、bitbucket-oauth、……といった必要に応じたものです。
オブジェクトは設定の仕様に従います。
COMPOSER_BIN_DIR
このオプションを設定するとbin
ディレクトリ(ベンダーバイナリ)をvendor/bin
とは違う別のどこかに変更できます。
COMPOSER_CACHE_DIR
COMPOSER_CACHE_DIR
変数ではComposerのキャッシュディレクトリを変更できます。
cache-dir
オプションを介しても設定できます。
Windowsにおいて既定ではC:\Users\<user>\AppData\Local\Composer
(もしくは%LOCALAPPDATA%/Composer
)を指します。
*nixシステムではXDG Base Directory Specificationsに従い、$XDG_CACHE_HOME/composer
を指します。他の*nixシステムとmacOSにおいては$COMPOSER_HOME/cache
を指します。
COMPOSER_CAFILE
この環境値を設定することで、パスを証明書バンドルファイルに設定してSSL/TLSピア検証で使えるようにします。
COMPOSER_DISABLE_XDEBUG_WARN
1に設定すると、ComposerがXdebug拡張が有効の状態で走っているときに出す警告をこの環境変数により抑制します。
COMPOSER_DISCARD_CHANGES
この環境変数はdiscard-changes
設定オプションを制御します。
COMPOSER_FUND
この環境変数を0に設定すると、インンストール時に投資のお知らせを抑制します。
COMPOSER_HOME
COMPOSER_HOME
変数によりComposerのホームディレクトリを変えられます。
全てのプロジェクトで共有される、隠された(マシン上の使用者毎の)大域的なディレクトリです。
composer config --global home
を使ってホームディレクトリの場所を確認してください。
既定では、WindowsにおいてはC:\Users\<user>\AppData\Roaming\Composer
を、macOSにおいては/Users/<user>/.composer
を指します。*nixシステムではXDG Base Directory Specificationsに従い、$XDG_CONFIG_HOME/composer
を指します。他の*nixシステムでは/home/<user>/.composer
を指します。
COMPOSER_HOME/config.json
config.json
ファイルをCOMPOSER_HOME
が指す場所に置くことができます。Composerはinstall
及びupdate
コマンドを走らせたとき、部分的に(config
およびrepositories
キーのみ)この設定をプロジェクトのcomposer.json
と統合します。
このファイルがあれば使用者のプロジェクト用にリポジトリと構成を設定できます。
大域的な設定がローカルの設定に合致した場合、プロジェクトのcomposer.json
が常に優先されます。
COMPOSER_HTACCESS_PROTECT
既定では1
です。0
に設定するとComposerはComposerのホーム、キャッシュ、データディレクトリに.htaccess
ファイルを作りません。
COMPOSER_MEMORY_LIMIT
設定すると、その値がphpのメモリ上限として使われます。
COMPOSER_MIRROR_PATH_REPOS
1に設定すると、この環境変数は既定のパスリポジトリ戦略をsymlink
ではなくmirror
に変更します。既定の戦略が設定されているため、リポジトリオプションで上書きすることもできます。
COMPOSER_NO_INTERACTION
1に設定すると、この環境変数によりComposerがあたかも全てのコマンドについて--no-interaction
フラグを渡されたかのように動作します。
build box/CIで設定できます。
COMPOSER_PROCESS_TIMEOUT
この環境変数はコマンド(例えばgitコマンド)が実行終了するまでの待機時間を制御します。既定値は300秒(5分)です。
COMPOSER_ROOT_VERSION
この変数を設定することで、根幹パッケージのバージョンがVCSの情報から推測できず、composer.json
にもないときに、そのバージョンを指定できます。
COMPOSER_VENDOR_DIR
この変数を設定することでComposerに依存関係をvendor
以外のディレクトリにインストールさせられます。
COMPOSER_RUNTIME_ENV
これによりどの環境でComposerが走っているのかの手掛かりが得られ、Composerで何らかの環境特有の問題を回避するための助けになります。
現在対応している唯一の値はvirtualbox
で、こうするといくつかの短いsleep()
呼び出しを有効にして、ファイルシステムが適切にファイルに書き込むのを待ってからそのファイルを読み込むようにします。
VagrantやVirtualboxを使っていてファイルが存在しているのにも関わらずインストール時にファイルがない旨問題に遭遇したときは、この環境変数を設定すると良いでしょう。
http_proxyやHTTP_PROXY
HTTP_PROXY_REQUEST_FULLURI
HTTPS_PROXY_REQUEST_FULLURI
no_proxyやNO_PROXY
プロキシの環境変数の使い方についての詳細は、プロキシのドキュメントを参照してください。
COMPOSER_AUDIT_ABANDONED
ignore
、report
、fail
に設定すると、audit.abandoned構成オプションをオーバーライドします。
COMPOSER_MAX_PARALLEL_HTTP
整数を指定し、並列で何個のファイルをダウンロードするか設定します。 既定で12になっており、1から50の間でなければいけません。 プロキシに並列性の問題があるときはこの値を下げたいかもしれません。 この値を増加させても一般には効率性が上がる結果にはならないでしょう。
COMPOSER_MAX_PARALLEL_PROCESSES
整数を設定し、並列でいくつのプロセスを実行できるか構成します。 既定では10で、1と50の間でなければなりません。
COMPOSER_IPRESOLVE
4
ないし6
に設定するとそれぞれIPv4ないしIPv6の解決を強制します。
ダウンロード用にcurl拡張が使用されている場合にのみ機能します。
COMPOSER_SELF_UPDATE_TARGET
設定した場合、self-updateコマンドが元あるファイルではなく与えられたパスに新しいComposerのpharファイルを書き込むようにします。読み込み専用のファイルシステムでComposerを更新するときに便利です。
COMPOSER_DISABLE_NETWORK
1
に設定するとネットワークアクセスを(最大限の努力で)無効にします。この変数はComposerをデバッグしたり貧弱な接続環境下で走らせたりするのに使えます。
prime
に設定した場合、GitHub VCSリポジトリはキャッシュに前もって溜め込んでおくため、1
で完全にオフラインで使えるようになります。
COMPOSER_DEBUG_EVENTS
1
に設定するとディスパッチされたイベントについての情報を出力します。プラグインの作者にとって何が厳密にどの時点で発火しているのか特定するのに便利かもしれません。
COMPOSER_SKIP_SCRIPTS
イベント名のコンマ区切りリストを受け付けます。
例えば、スクリプト実行をスキップするためのpost-install-cmd
があります。
COMPOSER_NO_AUDIT
1
に設定すると、require
、update
、remove
、create-project
コマンドに--no-audit
コマンドを渡すことと等価になります。
COMPOSER_NO_DEV
1
に設定すると--update-no-dev
をrequire
に渡したりinstall
、update
に--no-dev
オプションを渡すのと等価になります。
COMPOSER_NO_DEV=0
を設定することで1回のコマンドについてこの設定を上書きできます。
COMPOSER_PREFER_STABLE
1
に設定するとupdate
やrequire
に--prefer-stable
オプションを渡すことと等価になります。
COMPOSER_PREFER_LOWEST
1
に設定するとupdate
やrequire
に--prefer-lowest
オプションを渡すことと等価になります。
COMPOSER_MINIMAL_CHANGES
1
に設定すると、update
やrequire
やremove
に--minimal-changes
オプションを渡すことと等価になります。
COMPOSER_IGNORE_PLATFORM_REQやCOMPOSER_IGNORE_PLATFORM_REQS
COMPOSER_IGNORE_PLATFORM_REQS
を1
に設定すると、--ignore-platform-reqs
引数を渡すことと等価になります。
他方でCOMPOSER_IGNORE_PLATFORM_REQ
でコンマ区切りのリストを指定すると、これらの特定の要件を無視します。
例えば開発ワークステーションが全くデータベースクエリを走らせない場合、データベースの要件が利用できることの要件を無視するのに使うことができます。COMPOSER_IGNORE_PLATFORM_REQ=ext-oci8
を設定すると、Composerはoci8
PHP拡張が有効になっていなくともパッケージをインストールします。
COMPOSER_WITH_DEPENDENCIES
1
に設定すると、update
やrequire
やremove
に、--with-dependencies
オプションを渡すことと同じです。
COMPOSER_WITH_ALL_DEPENDENCIES
1
に設定すると、update
やrequire
やremove
に、--with-all-dependencies
オプションを渡すことと同じです。
composer.jsonのスキーマ
この章ではcomposer.json
で利用できる全てのフィールドについて説明します。
JSONスキーマ
形式をドキュメント化するJSON
schemaがあり、composer.json
を検証するのにも使えます。実際、validate
コマンドによって使われています。
https://getcomposer.org/schema.json から取得できます。
根幹パッケージ
根幹パッケージとは、composer.json
でプロジェクトの根幹に定義されたパッケージのことです。
プロジェクトの要件を定義しているのが主眼のcomposer.json
なのです。
フィールドの中には根幹パッケージの文脈でのみ適用されるものがあります。
この一例はconfig
フィールドです。
根幹パッケージのみが設定を定義できます。
依存関係の設定は無視されます。
このようにしてconfig
フィールドはroot-only
になるのです。
補足: パッケージは文脈によって根幹パッケージになったりならなかったりします。 例えばプロジェクトが
monolog
ライブラリに依存している場合、そのプロジェクトは根幹パッケージです。 しかしもし不具合修正のためにGitHubからmonolog
をクローンしてきたとすれば、monolog
が根幹パッケージになります。
プロパティ
name
パッケージ名です。ベンダー名とプロジェクト名から構成され、/
で区切られます。例えば:
- monolog/monolog
- igorw/event-source
名前は小文字で、単語は-
や.
や_
で区切られていなくてはなりません。
名前全体は^[a-z0-9]([_.-]?[a-z0-9]+)*/[a-z0-9](([_.]|-{1,2})?[a-z0-9]+)*$
に照合します。
name
プロパティは公開されるパッケージ(ライブラリ)には必須です。
補足: Composerのバージョン2.0より前は、名前には空白込みでどんな文字も含められました。
description
パッケージの短い説明です。 大抵1行分の長さです。
公開されるパッケージ(ライブラリ)には必須です。
version
パッケージのバージョンです。 殆どの場合は必須でなく、省略すべきです(後述)。
X.Y.Z
やvX.Y.Z
の形式に従っていなければなりません。
オプションで-dev
、-patch
(-p
)、-alpha
(-a
)、-beta
(-b
)、-RC
を接尾辞に付けても構いません。
また、patch、alpha、beta、RCの接尾辞には数字を続けても大丈夫です。
例:
- 1.0.0
- 1.0.2
- 1.1.0
- 0.2.5
- 1.0.0-dev
- 1.0.0-alpha3
- 1.0.0-beta2
- 1.0.0-RC5
- v2.0.4-p1
パッケージのリポジトリのどこかしらからバージョンが推測できるのであれば、このプロパティはオプションです。 例えばVCSリポジトリのVCSのタグ名などです。 その場合は省略することが推奨されます。
補足: PackagistはVCSリポジトリを使うため、上の記載はPackagistにも全く同じことが言えます。 自分でバージョンを指定すると、ほぼ確実にいつか手作業による誤りにより問題が生じることでしょう。
type
パッケージの種別です。既定はlibrary
です。
パッケージの種別は独自のインストールの仕組みに使われます。
何らかの特別な仕組みが必要なパッケージがあるとき、symfony-bundle
、wordpress-plugin
、typo3-cms-extension
といった独自の種別を定義できます。
これらの種別は全て特定のプロジェクトに特有のものであって、その種別のパッケージのインストールができるようなインストーラを提供する必要があります。
その中でも特にComposerは4つの種別に対応しています。
- library:
既定です。
ファイルを
vendor
に複製します。 - project: ライブラリではなくプロジェクトであることを示します。 例えば標準版Symfonyのようなアプリケーションのシェル、SilverstripeインストーラのようなCMS、あるいはパッケージとして配布される完全なアプリケーションがこれにあたります。 例として、IDEから新しいワークスペースを作る際に、初期化するプロジェクトの一覧を提供するのに使えます。
- metapackage: 要件を含む空のパッケージでありインストールの条件になりますが、ファイルを含んでおらずファイルシステムに何も書き込まないものです。 そうしたわけで、インストールできるdistやsourceキーを必要としません。
- composer-plugin:
種別
composer-plugin
のパッケージは独自の種別を持つ他のパッケージのインストーラを提供することがあります。 詳細は専門記事を参照してください。 - php-extとphp-ext-zend: これらの名前はCで書かれたPHPの拡張パッケージ用に予約されています。 これらの種別はPHPで書かれたパッケージ用に使わないでください。
インストール時に独自の仕組みが必要な場合にのみ独自の種別を使ってください。
このフィールドを省略し、既定のlibrary
にするのがお勧めです。
keywords
パッケージに関係するキーワードの配列です。検索と絞り込みに使えます。
例:
- logging
- events
- database
- redis
- templating
補足:
--dev
オプション無しでcomposer require
するようにし、パッケージをrequire
ではなくrequire-dev
に追加しても良いか利用者にプロンプトを出す特別なキーワードがあります。dev
、testing
、static analysis
がそれです。
補足:文字列内で許される文字の範囲には、ユニコードの英数字、空白
" "
、ドット.
、下線_
、ダッシュ-
(正規表現:'{^[\p{N}\p{L} ._-]+$}u'
)の制限があります。 その他の文字を使うと、composer validate
を走らせるときに警告が出ます。 またパッケージのPackagist.orgへの更新が失敗する原因となります。
省略可能です。
homepage
プロジェクトのwebサイトへのURLです。
省略可能です。
readme
readmeドキュメントへの相対パスです。
既定ではREADME.md
です。
主にパッケージがGitHubにないときに有用です。 GitHubのパッケージの場合、Packagist.orgではGitHub側で検出されたものを取得するreadme APIを使うからです。
省略可能です。
time
当該バージョンのリリース日です。
YYYY-MM-DD
またはYYYY-MM-DD HH:MM:SS
の形式で、UTCタイムゾーンでなければなりません。
省略可能です。
license
パッケージの利用許諾です。 文字列または文字列の配列にできます。
最頻出の利用許諾についての推奨される記法は以下の通り(辞書順)。
- Apache-2.0
- BSD-2-Clause
- BSD-3-Clause
- BSD-4-Clause
- GPL-2.0-only / GPL-2.0-or-later
- GPL-3.0-only / GPL-3.0-or-later
- LGPL-2.1-only / LGPL-2.1-or-later
- LGPL-3.0-only / LGPL-3.0-or-later
- MIT
オプションにはなりますが、このプロパティを付けることは強く推奨されます。他の識別子はSPDX Open Source License Registryに一覧になっています。
Note: ソースが閉鎖的なソフトウェアについては、利用許諾の識別子として
"proprietary"
を使うことができます。
一例:
{
"license": "MIT"
}
あるパッケージについて、複数の利用許諾から選択できる場合(「離接的利用許諾」)、複数のものを配列として指定できます。
離接的利用許諾の例です。
{
"license": [
"LGPL-2.1-only",
"GPL-3.0-or-later"
]
}
代わりに「or」で区切って括弧で囲むこともできます。
{
"license": "(LGPL-2.1-only or GPL-3.0-or-later)"
}
これに似ていますが、複数の利用許諾が適用される必要があるときは(「結合的利用許諾」)、「and」で区切って()で囲むことになります。
authors
パッケージの作者です。 オブジェクトの配列です。
それぞれの作者オブジェクトは以下のプロパティを持つことができます。
- name: 作者名です。大抵は実名です。
- email: 作者のEメールアドレスです。
- homepage: 作者のwebサイトへのURLです。
- role: プロジェクトに於ける作者の役割です(例:開発者や翻訳者)
一例:
{
"authors": [
{
"name": "Nils Adermann",
"email": "naderman@naderman.de",
"homepage": "https://www.naderman.de",
"role": "Developer"
},
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "https://seld.be",
"role": "Developer"
}
]
}
省略可能なプロパティですが、付けることを強く推奨します。
support
プロジェクトについてのサポートを得るための様々な情報です。
サポート情報には以下が含まれます。
- email: サポート用Eメールアドレスです。
- issues: 課題管理表へのURLです。
- forum: フォーラムへのURLです。
- wiki: wikiへのURLです。
- irc: irc://server/channelのような、サポート用IRCチャンネルです。
- source: ソースを閲覧したりダウンロードしたりするURLです。
- docs: ドキュメントへのURLです。
- rss: RSSフィードへのURLです。
- chat: チャットチャンネルへのURLです。
- security: 脆弱性公表ポリシー (vulnerability disclosure policy; VDP) へのURLです。
一例:
{
"support": {
"email": "support@example.org",
"irc": "irc://irc.freenode.org/composer"
}
}
省略可能です。
funding
パッケージの作者が維持管理と新しい機能の開発を行えるよう、投資を提供するためのURLの一覧です。
それぞれの項目は以下のものからなります。
- type: 投資の種別、または投資を行えるプラットフォームです。例えばpatreon、opencollective、tidelift、githubです。
- url: 詳細が記載されたwebサイトへのURLと、パッケージに投資する方法です。
一例:
{
"funding": [
{
"type": "patreon",
"url": "https://www.patreon.com/phpdoctrine"
},
{
"type": "tidelift",
"url": "https://tidelift.com/subscription/pkg/packagist-doctrine_doctrine-bundle"
},
{
"type": "other",
"url": "https://www.doctrine-project.org/sponsorship.html"
}
]
}
省略可能です。
パッケージのリンク
以下の全ては、バージョン制約を介してパッケージ名とパッケージのバージョンを対応付けるオブジェクトを取ります。 バージョンについての詳細はこちらをお読みください。
例:
{
"require": {
"monolog/monolog": "1.0.*"
}
}
全てのリンクは省略可能なフィールドです。
require
とrequire-dev
は追加で安定性フラグ(根幹限定)に対応しています。
"constraint@stability flag" の形式を取っています。
これらによりパッケージの安定性を、最小安定性の範疇を超え、更に制限したり拡張したりできます。
こうしたフラグは制約や空の制約に適用できます。
後者は例えば依存関係に不安定なパッケージを許容したい場合などです。
例:
{
"require": {
"monolog/monolog": "1.0.*@beta",
"acme/foo": "@dev"
}
}
依存関係のうち、不安定なパッケージに依存しているものがあれば、同様に明示的に必要安定性フラグと共に要件に加えなければなりません。
例:
doctrine/doctrine-fixtures-bundle
が"doctrine/data-fixtures": "dev-master"
を要件としているとすると、根幹のcomposer.jsonの中で以下の2行目を加えてdoctrine/data-fixtures
パッケージの開発版リリースを許容する必要があります。
{
"require": {
"doctrine/doctrine-fixtures-bundle": "dev-master",
"doctrine/data-fixtures": "@dev"
}
}
require
とrequire-dev
は追加で明示的な参照(つまりコミット)に対応しており、たとえ更新を走らせたとしても、開発版のバージョンが与えられた状態で確実に固定されているようにします。
明示的に開発版を要件にして、参照に#<ref>
を付けたときにのみ動作します。
また根幹限定の機能であり、依存関係では無視されます。
例:
{
"require": {
"monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
"acme/foo": "1.0.x-dev#abc123"
}
}
補足: この機能には厳しい技術的制約があり、composer.jsonのメタデータはハッシュの前に指定されたブランチ名から読み込んでしまいます。 したがって、この機能は開発時に一時的に取る解決法とするべきです。 一時的な問題を矯正するための、タグ付けされたリリースに切り替えるまでの対処法なのです。 Composerチームはこの機能に活発に対応しておらずこれに関するバグ報告を受け付けません。
パッケージ制約をインラインエイリアスすることも可能で、そうでなければ合致しない制約に合致させられます。詳細についてはエイリアスの記事を参照してください。
require
とrequire-dev
はまた、プロジェクトを正常に走らせるために必要な特定のPHPとPHPの拡張のバージョンとへの参照に対応しています。
例:
{
"require": {
"php": ">=7.4",
"ext-mbstring": "*"
}
}
補足: プロジェクトが要件とするPHP拡張を一覧にすることは重要です。 PHPのインストールが全て同じようになされるとは限りません。 標準と考えている拡張が欠けているものもあるでしょう(例えば
ext-mysqli
は、Fedora/CentOSの最小インストールシステムでは既定ではインストールされません)。 必要なPHPの要件を一覧にし損ねると、利用者体験が悪化することに繋がります。 Composerはパッケージをインストールするときは失敗することなく、実行時に失敗するからです。composer show --platform
コマンドはシステムで利用できる全てのPHP拡張を一覧にします。 これを使えば、使用する拡張の一覧をコンパイルして要件に加える補助になるでしょう。 代えてサードパーティーツールを使ってプロジェクトを解析し、使用されている拡張の一覧が得られるかもしれません。
require
このパッケージが必要とするパッケージの対応付けです。 これらの要件が満たされない限り、パッケージはインストールされません。
require-dev (根幹限定)
このパッケージを開発したり、テストを走らせたりなどするのに必要なパッケージへの対応付けです。
根幹パッケージの開発要件は既定でインストールされます。
install
とupdate
の両方とも--no-dev
オプションに対応しており、開発依存関係がインストールされるのを阻止できます。
conflict
このバージョンのパッケージと競合するパッケージへの対応付けです。 それらのパッケージがこのパッケージと共にインストールされるのを許容しないようにします。
なお、conflict
リンクで<1.0 >=1.1
のような範囲を指定する場合、1.0より小さく且つ同時に1.1かそれより新しい全てのバージョンと競合しているという意味になります。
恐らくやりたいことではないでしょう。
この場合は<1.0 || >=1.1
としたいことでしょう。
replace
このパッケージが置き換えるパッケージへの対応付けです。 これによりパッケージをフォークし、独自のバージョン番号を持つ異なる名前で公開できます。 また元のパッケージが置き換わっているため、元のパッケージを要件とするパッケージはフォークしたパッケージを使って動作し続けることになります。
副パッケージを含むパッケージについても有用です。 例えば主眼のsymfony/symfonyパッケージには個々のパッケージとしても使える全てのSymfony Componentが含まれています。 主眼のパッケージを要件にすると、自動的に個々のコンポーネントのうち、どれか1つの要件が充足されます。 主眼のパッケージがコンポーネントを置き換えるからです。
上記で説明した副パッケージの目的で置き換えを使う際は忠告があります。
その場合は通常、self.version
をバージョン制約として使うことで置き換えるだけにしておくべきです。
主眼のパッケージが厳密なバージョンの副パッケージのみを置き換えるようにするためです。
他のバージョンになるとおかしなことになるでしょう。
provide
このパッケージにより提供されるパッケージの対応付けです。
これが最も役立つのは、共通化されたインターフェースの実装です。
パッケージは仮想パッケージに依存できます。
例としてはpsr/log-implementation
で、このロガーインターフェースを実装する任意のライブラリはprovide
の一覧に加えます。
実装しているパッケージはPackagist.orgで探せます。
仮想的なパッケージではなく、実際のパッケージの名前でprovide
を使うことは、そのパッケージのコードも世に出ているということを暗示します。
その場合、一般的にはreplace
がより良い選択です。
インターフェースを提供して実装を提供する他のパッケージに任せる際(例えばPSRのインターフェース)のよくある慣習は、インターフェースパッケージに対応する仮想パッケージの名前に-implementation
後置詞を使うことです。
suggest
このパッケージを向上させたりいい感じに動かせたりするようなお勧めのパッケージです。 これらは通知のようなもので、パッケージがインストールされた後に表示されます。 利用者にもっとパッケージを加えてもらえるような手掛かりを与えるためのもので、厳密には必要でなかったとしても大丈夫です。
形式は上述のパッケージリンクと同様ですが、値が自由な内容のテキストで、バージョン制約ではない点は異なります。
例:
{
"suggest": {
"monolog/monolog": "Allows more advanced logging of the application flow",
"ext-xml": "Needed to support XML format in class Foo"
}
}
autoload
PHPの自動読み込み器用の自動読み込みの対応付けです。
PSR-4
とPSR-0
の自動読み込み、classmap
生成、files
による包含に対応しています。
PSR-4はずっと簡単に使えるためお勧めの方法です(クラスを追加したときに自動読み込み器を再生成する必要がありません)。
PSR-4
psr-4
キー配下では名前空間からパスへの対応付けを定義します。
パスはパッケージの根幹から相対的なものです。
Foo\\Bar\\Baz
のようなクラスを自動読み込みする場合、ディレクトリsrc/
を指す名前空間の前部分Foo\\
は、自動読み込み器がsrc/Bar/Baz.php
という名前のファイルを探索し、もしあれば含めるという意味です。
なお、比較的古いPSR-0の様式とは反対に、前部分 (Foo\\
) はファイルパスに存在しません。
名前空間の前置詞は、似た前置詞との競合を避けるため、\\
で終わっていなければなりません。
例えばFoo
はFooBar
名前空間のクラスに照合するので、後ろにバックスラッシュを付けると問題が解決します。
Foo\\
とFooBar\\
は独立しています。
PSR-4の参照は、installやupdateの際に、単一のキー=>バリュー配列に全て結合されます。生成されるファイルvendor/composer/autoload_psr4.php
で確認できます。
例:
{
"autoload": {
"psr-4": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": ""
}
}
}
複数のディレクトリで同じ前置詞を検索する必要がある場合は、以下のように配列として指定できます。
{
"autoload": {
"psr-4": { "Monolog\\": ["src/", "lib/"] }
}
}
任意の名前空間が探索されるようなフォールバックディレクトリを持たせたければ、次のように空の前置詞が使えます。
{
"autoload": {
"psr-4": { "": "src/" }
}
}
PSR-0
psr-0
キーの配下では名前空間からパスへの対応付けを定義します。
このパスはパッケージの根幹から相対的です。
なお、PEARの様式の名前空間が付いていない変換にも対応しています。
注意していただきたいのは、自動読み込み器が厳密に応答するよう、名前空間の宣言が\\
で終わるようにすべきということです。
例えばFoo
はFooBar
に照合してしまうため、後ろにバックスラッシュを付けると問題が解決するでしょう。
Foo\\
とFooBar\\
は独立しています。
PSR-0の参照はinstallやupdateの際に全て単一のキー=>配列値に束ねられます。
生成されたファイルvendor/composer/autoload_namespaces.php
で確認できます。
例:
{
"autoload": {
"psr-0": {
"Monolog\\": "src/",
"Vendor\\Namespace\\": "src/",
"Vendor_Namespace_": "src/"
}
}
}
複数のディレクトリで同じ前置詞を検索する必要がある場合は、以下のように配列として指定できます。
{
"autoload": {
"psr-0": { "Monolog\\": ["src/", "lib/"] }
}
}
PSR-0の様式は名前空間の宣言のみに留まらず、クラス水準にまで指定できます。 大域的な名前空間で、ただ1つのクラスを持つライブラリについては便利かもしれません。 例えばphpのソースファイルがパッケージの根幹に位置している場合、このように宣言できます。
{
"autoload": {
"psr-0": { "UniqueGlobalClass": "" }
}
}
どの名前空間にもなれるフォールバックディレクトリを持たせたければ、次のような空の前置詞を使うことができます。
{
"autoload": {
"psr-0": { "": "src/" }
}
}
クラスマップ
classmap
参照はinstall/update中に単一のキー=>バリュー配列に全て束ねられ、vendor/composer/autoload_classmap.php
にファイルが生成されます。この対応付けは与えられたディレクトリやファイルにある全ての.php
または.inc
ファイル中のクラスを読み取ることによって構築されます。
クラスマップ生成を使ってPSR-4に従わない全てのライブラリ用の自動読み込み器を定義できます。 これを設定するには、クラスを検索する全てのディレクトリないしファイルを指定します。
例:
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}
クラスマップのパスではワイルドカード (*
) にも対応しており、任意のディレクトリ名に照合するよう展開されます。
例:
{
"autoload": {
"classmap": ["src/addons/*/lib/", "3rd-party/*", "Something.php"]
}
}
ファイル
必要に応じて特定のファイルを明示的にrequireしたい場合は、files
自動読み込み機構を使うことができます。
PHPによって自動読み込みできないPHPの関数を含むパッケージがあるときに便利です。
例:
{
"autoload": {
"files": ["src/MyLibrary/functions.php"]
}
}
filesの自動読み込みの規則はvendor/autoload.php
が含まれたときは常に取り込まれ、ちょうど自動読み込み器が登録された後になります。
取り込み順序はパッケージの依存関係によります。
そのためパッケージAがBに依存している場合、パッケージBにあるファイルが最初に取り込まれます。
パッケージAのファイルが取り込まれた時点でパッケージBが完全に取り込まれて準備ができているようにするためです。
2つのパッケージが同量の依存関係を持つ、あるいは依存関係がない場合、順番は辞書順になります。
根幹パッケージのfilesは常に最後に読み込まれるため、filesを使って依存関係由来の関数を上書きするために自身を自動読み込みさせることはできません。
そうしたい場合はComposerのvendor/autoload.php
を取り込む前に独自の関数を取り込むことをお勧めします。
クラスマップからファイルを除外する
クラスマップから何らかのファイルやディレクトリを除外したければexclude-from-classmap
プロパティを使うことができます。
例えば、実環境でテストクラスを除外するのに便利かもしれません。
最適化された自動読み込み器を構築しているときでも、クラスマップから読み飛ばされるからです。
クラスマップ生成器はここで設定されたパスにある全てのファイルを無視します。
パスはパッケージの根幹ディレクトリからの絶対位置にあり、スラッシュ以外の全てに照合する*
と任意のものに照合する**
に対応しています。
**
はパスの末尾に暗黙に追加されます。
例:
{
"autoload": {
"exclude-from-classmap": ["/Tests/", "/test/", "/tests/"]
}
}
自動読み込み器を最適化する
自動読み込み器がリクエスト時間にかなり無視できない影響があることがあります(沢山のクラスを使う大きなフレームワークではリクエストあたり50-100msです)。 この影響を低減する方法についての詳細は自動読み込み器の最適化についての記事を参照してください。
autoload-dev (根幹限定)
この節では開発目的の自動読み込み規則を定義できます。
テストスートを走らせるのに必要なクラスは、主眼のの自動読み込み規則に含めるべきではありません。 実運用や他の人がパッケージを依存関係として使う際に、自動読み込み器を汚染するのを避けるためです。
したがって単体試験専用のパスを用意してautoload-dev節内に追加するのは良いことです。
例:
{
"autoload": {
"psr-4": { "MyLibrary\\": "src/" }
},
"autoload-dev": {
"psr-4": { "MyLibrary\\Tests\\": "tests/" }
}
}
include-path
時代遅れ : 古びたプロジェクトに対応するためだけに存在し、全ての新しいコードでは自動読み込み器の方を使うべきです。 そうしたわけで時代遅れなものですが、機能自体はComposerから消えることはきっとないでしょう。
PHPのinclude_path
に後付けされるパスのリストです。
例:
{
"include-path": ["lib/"]
}
省略可能です。
target-dir
時代遅れ : 古びたPSR-0様式の自動読み込みに対応するためだけに存在しており、全ての新しいコードはtarget-dir無しのPSR-4を使うべきです。 PHPの名前空間と共にPSR-0を使っているプロジェクトは代わりにPSR-4への移行が推奨されます。
インストール対象を定義します。
パッケージの根幹が名前空間宣言の元にある場合は適切に自動読み込みできません。
target-dir
はこの問題を解決します。
一例はSymfonyです。これにはコンポーネント毎に独立のパッケージがあります。
YamlコンポーネントはSymfony\Component\Yaml
以下にあります。
パッケージの根幹はそのYaml
ディレクトリです。
自動読み込みできるようにするには、必ずvendor/symfony/yaml
ではなくvendor/symfony/yaml/Symfony/Component/Yaml
にインストールされるようにしなければいけません。
自動読み込み器がvendor/symfony/yaml
から読み込めるようにするためです。
そうするために、autoload
とtarget-dir
は以下のように定義されています。
{
"autoload": {
"psr-0": { "Symfony\\Component\\Yaml\\": "" }
},
"target-dir": "Symfony/Component/Yaml"
}
省略可能です。
minimum-stability (根幹限定)
安定性によってパッケージの絞り込みをする既定の挙動を定義します。
この既定はstable
になっているので、dev
のパッケージに依っている場合は、驚くようなことになるのを避けるためにファイルを指定しておくべきです。
各パッケージの全バージョンについて安定性が検査され、minimum-stability
設定より安定していないものは、プロジェクトの依存関係の解決の際に無視されます(なお、require
ブロック中で指定するバージョン制約中の安定性フラグを使って、パッケージ毎に安定性の要件を指定することもできます(詳細はパッケージリンクを参照))。
使えるオプションは(安定性の順番で)dev
、alpha
、beta
、RC
、stable
です。
prefer-stable (根幹限定)
これが有効になっているとき、互換性のある安定的なパッケージが使える場合に、不安定なものより安定なパッケージを贔屓します。 開発版が必要だったりパッケージでアルファ版しか使えなかったりする場合については、minimum-stabilityが許容するかどうかが考慮された上で選択されます。
有効にするには"prefer-stable": true
を使ってください。
repositories (根幹限定)
独自に使用するパッケージリポジトリです。
既定ではComposerはpackagistリポジトリのみを使います。 リポジトリを指定することによって、パッケージをどこからでも取得できます。
リポジトリは再帰的に解決されません。
主眼のcomposer.json
に加えることができるだけです。
依存関係のリポジトリのcomposer.json
にある宣言は無視されます。
以下のリポジトリの種別に対応しています。
- composer:
Composerリポジトリはネットワーク(HTTP、FTP、SSH)越しに提供されている
packages.json
であり、追加のdist
ないしsource
の情報付きのcomposer.json
のリストを含みます。packages.json
ファイルはPHPのストリームを使って読み込まれます。options
パラメータを使ってストリームについての追加のオプションを設定できます。 - vcs: パッケージをgit、svn、fossil、hgのリポジトリから取得できるバージョン管理システムリポジトリです。
- package:
何らのComposer対応がされていないプロジェクトに依存する場合、
package
リポジトリを使ってパッケージの定義を書き下すことができます。基本的にcomposer.json
オブジェクトを書き下します。
これらについての詳細な情報についてはリポジトリを参照してください。
例:
{
"repositories": [
{
"type": "composer",
"url": "http://packages.example.com"
},
{
"type": "composer",
"url": "https://packages.example.com",
"options": {
"ssl": {
"verify_peer": "true"
}
}
},
{
"type": "vcs",
"url": "https://github.com/Seldaek/monolog"
},
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "https://smarty-php.googlecode.com/svn/",
"type": "svn",
"reference": "tags/Smarty_3_1_7/distribution/"
}
}
}
]
}
補足: ここでは順番に意味があります。 パッケージを探すとき、Composerは最初から最後までリポジトリを探し、最初に照合したものを拾います。 既定ではPackagistが最後に加えられており、つまり独自のリポジトリがPackagistのパッケージより優先されるのです。
JSONオブジェクト記法を使うこともできます。 しかしJSONのキーバリュー対は順序なしとして見做されるため、一貫した挙動は保証されません。
{
"repositories": {
"foo": {
"type": "composer",
"url": "http://packages.foo.com"
}
}
}
config (根幹限定)
設定オプションの集合です。プロジェクト限定で使われます。それぞれのオプションについての説明については設定を参照してください。
scripts (根幹限定)
Composerではスクリプトの使用を通じてインストールの過程の様々な部分でフックを掛けることができます。
イベントについての詳細と例についてはスクリプトを参照してください。
extra
scripts
によって消費される任意の追加データです。
理論上何でも構いません。 スクリプトのイベント制御子中でアクセスするには以下のようにします。
$extra = $event->getComposer()->getPackage()->getExtra();
省略可能です。
bin
バイナリとして扱われるべきファイルの集合で、(設定の)bin-dir
で使えるようにします。
詳細はベンダーバイナリを参照してください。
省略可能です。
archive
パッケージアーカイブをつくるためのオプションの集合です。
以下のオプションに対応しています。
- name:
アーカイブの基底名を設定できます。既定(設定されていない場合で、かつコマンドライン引数として
--file
が渡されていない場合)ではpreg_replace('#[^a-z0-9-_]#i', '-', name)
が使われます。
例:
{
"name": "org/strangeName",
"archive": {
"name": "Strange_name"
}
}
- exclude: 除外されるパス用のパターンのリストを設定できます。 パターンの構文は.gitignoreファイルのものと同一です。 先頭のびっくりマーク (!) はそれ以前のパターンが除外していたとしても照合したファイルを含めることになります。 先頭のスラッシュはプロジェクトの相対パスの開始部分にのみ照合します。 アスタリスクはディレクトリの区切りに展開されません。
例:
{
"archive": {
"exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
}
}
例では/dir/foo/bar/file
、/foo/bar/baz
、/file.php
、/foo/my.test
を含みますが、/foo/bar/any
、/foo/baz
、/my.test
は除外します。
省略可能です。
abandoned
このパッケージが放棄されたものかどうかを示します。
真偽値または推奨される代替を指すパッケージ名やURLです。
例:
"abandoned": true
を使うと、このパッケージが放棄されたことを示します。
"abandoned": "monolog/monolog"
を使うと、このパッケージが放棄され、推奨される代替がmonolog/monolog
であることが示されます。
既定では偽です。
省略可能です。
_comment
コメントを入れておく場所として使える最上位のキーです(文字列または文字列の配列にできます)。
{
"_comment": [
"パッケージfoo/barはビジネスロジックに必要でした",
"foo/barを削除するときはfoo/bazパッケージを削除してください"
]
}
既定では空です。
省略可能です。
non-feature-branches
数値でないブランチ名の正規表現パターン(例:「latest」など)のリストです。 機能用ブランチを決して扱いません。 文字列の配列です。
数値でないブランチ名がある場合、例えば「latest」「current」「latest-stable」などについては、バージョン番号には見えないので、Composerはそうしたブランチを機能用ブランチとして制御します。 つまりバージョンや特別なブランチ(masterなど)で終わっているような親ブランチを探し、根幹パッケージのバージョン数が親ブランチのバージョンまたは少なくともmasterなどになるということです。
数値でない名前のブランチを、妥当なバージョンやmasterのような特別なブランチ名の親ブランチを探す代わりに、バージョンとして扱うようにするには、開発版ブランチとして制御されるべきブランチ名のパターンを設定できます。
「self.version」を使う依存関係があるときは本当に便利です。 このときdev-masterでなくとも同じブランチがインストールされます(例:latest-testing)。
一例:
テストブランチがある場合で、そのブランチがテストフェーズで手厚く維持管理され、ステージング環境にデプロイされるのであれば、通常composer show -s
とするとversions : * dev-master
になります。
機能用ブランチではないもの用にlatest-.*
をパターンとして設定する場合はこのようにします。
{
"non-feature-branches": ["latest-.*"]
}
それからcomposer show -s
とするとversions : * dev-latest-testing
になります。
省略可能です。
← コマンドラインインターフェース | リポジトリ →
リポジトリ
この章ではパッケージとリポジトリの概念、利用できるリポジトリの種類に何があるか、そしてどういう仕組みになっているのかを解説します。
概念
リポジトリのそれぞれの存在する種別を見ていく前に、Composerが立脚する基礎概念を理解する必要があります。
パッケージ
Composerは依存関係管理ツールです。 パッケージをローカルにインストールします。 パッケージは本質的には何かを含むディレクトリです。 この場合はその何かがPHPのコードですが、理論上何でも良いわけです。 そしてパッケージの名前とバージョンを持つパッケージの説明を含みます。 名前とバージョンはパッケージを特定するのに使われます。
実際、内部的にはComposerはそれぞれのバージョンを個別のパッケージとして見做します。 この区別はComposerを使っているときは問題になりませんが、Composer自体を変更したいと思ったときはかなり重要になります。
名前とバージョンに加えて有用なメタデータがあります。 インストールに最も関係する情報はソースの定義で、どこかでパッケージの内容を取得するのかを記述します。 パッケージのデータはパッケージの内容を指します。 そしてここで2つの選択肢があります。 distとsourceです。
dist: distはパッケージデータのパッケージ化されたバージョンです。大抵はリリースバージョンで、中でも大抵は安定リリースです。
source: ソースは開発に使われます。 大抵gitのようなソースコードリポジトリを起源とします。 ダウンロードされたパッケージを変更したいときはこれを取得できます。
パッケージはこれらの何れか、または両方を与えられます。 利用者により与えられたオプションやパッケージの安定性などの何らかの要因により、どちらかが相応ということになるでしょう。
リポジトリ
リポジトリはパッケージソースで、パッケージとバージョンのリストです。 Composerは全てのリポジトリを見て回り、プロジェクトに必要なパッケージを見付けてきます。
既定ではPackagist.orgリポジトリがComposerに登録されています。composer.json
に宣言することでプロジェクトにもっとリポジトリを加えることができます。
リポジトリは根幹パッケージでのみ利用でき、依存関係で定義されたリポジトリは読み込まれません。 なぜそうなっているかを知りたければFAQの項目をお読みください。
依存関係解決をするとき、パッケージはリポジトリを上から下への順で見ていき、どこかにパッケージがあったらComposerは他のリポジトリを見るのを止めます。 詳細はリポジトリの優先度の記事を読んで、この挙動を変える方法を見てください。
種別
composer
主なリポジトリの種別はcomposer
リポジトリです。全てのパッケージメタデータを含む単一のpackages.json
ファイルを使っています。
packagistが使っているリポジトリの種別でもあります。
composer
リポジトリを参照するには、packages.json
ファイルの前にパスを与えてください。
packagistの場合、そのファイルは/packages.json
に配置されるので、リポジトリのURLはrepo.packagist.org
となります。
example.org/packages.json
についてはリポジトリのURLはexample.org
になります。
{
"repositories": [
{
"type": "composer",
"url": "https://example.org"
}
]
}
packages
唯一必要なフィールドはpackages
です。JSONの構造は以下のようなものです。
{
"packages": {
"vendor/package-name": {
"dev-master": { @composer.json },
"1.0.x-dev": { @composer.json },
"0.0.1": { @composer.json },
"1.0.0": { @composer.json }
}
}
}
@composer.json
の印は、最小のものとして含むパッケージのバージョンに由来するcomposer.json
の内容になります。
- name
- version
- distまたはsource
以下は最小限のパッケージの定義です。
{
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
}
}
スキーマには指定される他のフィールドの何れかを含められます。
notify-batch
notify-batch
フィールドでは利用者がパッケージをインストールするときに毎回呼ばれるURLを指定できます。
URLは絶対パス(リポジトリと同じドメイン)ないし完全に修飾されたURLです。
値の一例:
{
"notify-batch": "/downloads/"
}
monolog/monolog
パッケージを含むexample.org/packages.json
について、このようにすると以下のJSON要求本文とともにexample.org/downloads/
へPOST要求を送ります。
{
"downloads": [
{"name": "monolog/monolog", "version": "1.2.1.0"}
]
}
バージョンフィールドはバージョン数の正規化された表現を含みます。
このフィールドは省略できます。
metadata-url、available-packages、available-package-patterns
metadata-url
フィールドでは、リポジトリにある全てのパッケージを提供するURLテンプレートを与えます。
プレースホルダー%package%
を含まなければなりません。
このフィールドはComposer
v2で新しく登場したもので、provider-includes
とproviders-url
が両方とも存在する場合、これらより優先されます。
Composer v1とComposer v2両方の互換性のため、理想的には両方とも提供したいでしょう。
しかし新しいリポジトリの実装はv2対応のみに対応しさえすれば良いです。
一例:
{
"metadata-url": "/p2/%package%.json"
}
Composerがパッケージを探すときは毎回%package%
をパッケージ名で置き換え、そのURLを取得します。開発安定性がそのパッケージについて許容される場合、$packageName~dev
で再びURLを読み込むことができます(例:/p2/foo/bar~dev.json
はfoo/bar
の開発版を探します)。
パッケージのバージョンを含むfoo/bar.json
とfoo/bar~dev.json
ファイルはfoo/barパッケージのバージョンのみを含まなければなりません。{"packages":{"foo/bar":[……ここにバージョン……]}}
のような感じです。
キャッシュはIf-Modified-Sinceヘッダを使うことで行われます。ですから必ずLast-Modifiedヘッダを返して正確な内容であるようにしてください。
バージョンの配列はcomposer/metadata-minifierのComposer\MetadataMinifier\MetadataMinifier::minify()
を使って最小化することもできます。
もしそうした場合、最上位に"minified": "composer/2.0"
キーを付け、Composerにバージョンのリストを展開して元のデータに戻さなければいけないことを示すべきです。
一例として https://repo.packagist.org/p2/monolog/monolog.json を参照してください。
存在しないパッケージを要求されたら404ステータスコードを返さなければなりません。このステータスコードによりComposerにこのパッケージがリポジトリに存在しないことが示されます。404応答は早く返してComposerがブロックされるのを回避するようにしてください。代替の404ページへのリダイレクトは避けてください。
リポジトリにごく少数のパッケージしかなく、404になる要求を避けたければpackages.json
にリポジトリに含まれる全てのパッケージ名が配列になった"available-packages"
キーを指定することもできます。代わりにパッケージ名のパターンの配列である"available-package-patterns"
キーを指定することもできます(*
だと任意の文字列に照合します。例:vendor/*
ではComposerはこのリポジトリにある全ての照合したパッケージ名を探します)。
このフィールドは省略できます。
providers-api
providers-api
フィールドでは、与えられたパッケージ名を提供する全てのパッケージをサーバーから返すURLの雛形を与えられます。
ただし、その名前を持つパッケージが存在したとしても、そのパッケージは含まれません。
プレースホルダー%package%
を含まなければなりません。
例えば https://packagist.org/providers/monolog/monolog.json は、psr/log-implementationに「provide」規則があるパッケージを一覧にします。
{
"providers-api": "https://packagist.org/providers/%package%.json",
}
このフィールドは省略できます。
list
list
フィールドでは与えられたフィールド(もしくはフィルタが存在しなければ全ての名前)に照合するパッケージの名前を返せます。
任意で?filter=xx
クエリパラメータを受け付けますが、これには任意の部分文字列に照合するワイルドカードとして*
を含められます。
replace/provide規則はここでは考慮すべきではありません。
パッケージ名の配列を返さねばなりません。
{
"packageNames": [
"a/b",
"c/d"
]
}
例についてはhttps://packagist.org/packages/list.json?filter=composer/*を参照してください。
このフィールドは省略できます。
provider-includesとproviders-url
provider-includes
フィールドでは、このリポジトリから提供されるパッケージ名を一覧にするファイルの集まりを列挙できます。
この場合ハッシュはファイルのsha256になります。
providers-url
は提供するファイルをサーバーで見付ける方法を記述します。
リポジトリの根幹からの絶対パスです。
%package%
と%hash%
のプレースホルダーを含まなければいけません。
これらのフィールドは、Composer v1かリポジトリがmetadata-url
フィールドを設定していない場合に使われます。
一例:
{
"provider-includes": {
"providers-a.json": {
"sha256": "f5b4bc0b354108ef08614e569c1ed01a2782e67641744864a74e788982886f4c"
},
"providers-b.json": {
"sha256": "b38372163fac0573053536f5b8ef11b86f804ea8b016d239e706191203f6efac"
}
},
"providers-url": "/p/%package%$%hash%.json"
}
これらのファイルにはファイルの完全性を検証するハッシュが含まれます。例えば次の通りです。
{
"providers": {
"acme/foo": {
"sha256": "38968de1305c2e17f4de33aea164515bc787c42c7e2d6e25948539a14268bb82"
},
"acme/bar": {
"sha256": "4dd24c930bd6e1103251306d6336ac813b563a220d9ca14f4743c032fb047233"
}
}
}
上のファイルはproviders-url
で参照されたファイルを読み込むことにより、このリポジトリにacme/fooとacme/barがあることを宣言しています。
ベンダーの名前空間が付いたパッケージ名で%package%
を、%hash%
をsha256フィールドを、それぞれ置き換えます。
これらのファイル自体には上で前述したパッケージの定義が含まれます。
これらのフィールドは省略可能です。 恐らく独自のリポジトリでは必要ないでしょう。
cURLとストリームオプション
リポジトリへはcURL(ext-curlが有効なComposer 2)またはPHPストリームの何れかを使ってアクセスします。
options
パラメータを使って追加のオプションを設定できます。
PHPストリームについては、任意の妥当なPHPストリームコンテキストオプションを設定できます。
詳細はコンテキストオプションとパラメータを参照してください。
cURLが使われているとき、ごく一部のhttp
とssl
オプションしか設定できないように制限されます。
{
"repositories": [
{
"type": "composer",
"url": "https://example.org",
"options": {
"http": {
"timeout": 60
}
}
}
],
"require": {
"acme/package": "^1.0"
}
}
VCS
VCSはバージョンコントロールシステム (Version Control System) から来ています。これにはgit、svn、fossil、hgのようなバージョニングシステムが含まれます。Composerにはこれらのシステムからパッケージをインストールするリポジトリ種別があります。
VCSリポジトリからパッケージを読み込む
これにはいくつかの使い途があります。
一番よくあるものとしては、サードパーティライブラリの独自のフォークを維持管理することです。
プロジェクトで或るライブラリを使用していて、ライブラリ内の何かを変更し、プロジェクトでパッチを適用したバージョンを使用しようと思ったとします。
ライブラリがGitHubにある場合(殆どのライブラリが当てはまります)、フォークして、変更をフォークにプッシュできます。
その後、プロジェクトのcomposer.json
を更新します。
する必要があるのは、フォークをリポジトリとして追加し、バージョン制約を更新してカスタム ブランチを指すようにすることだけです。
composer.json
でのみ、カスタムブランチ名の前に"dev-"
を付けるべきです(実際のブランチ名の一部にしないでください)。
バージョン制約の命名規則については、ライブラリを参照してください。
bugfix
ブランチのバグを修正するためにmonologにパッチを当てたときの例は以下です。
{
"repositories": [
{
"type": "vcs",
"url": "https://github.com/igorw/monolog"
}
],
"require": {
"monolog/monolog": "dev-bugfix"
}
}
php composer.phar update
を実行すると、修正したバージョンのmonolog/monolog
が取得されます。packagistからのものではありません。
長期的にフォークするつもりがない限り、パッケージを改名しないでください。 また、もし変更するならするで、元のパッケージから完全に離れたものにする必要があります。 独自リポジトリはpackagistよりも優先されるため、Composerは元のパッケージではなく自前のパッケージを正しく選択します。 パッケージを改名する場合、パッケージ名が既定のブランチから取得されるため、機能ブランチではなく、既定の(多くの場合master)ブランチで行う必要があります。
また、フォークされたリポジトリのcomposer.json
ファイルのname
プロパティを変更すると、上書きが機能しないことに注意してください。
上書きが機能するには元のものと合致する必要があるからです。
他の依存関係がフォークしたパッケージに依存している場合は、それをインラインエイリアスして、他の方法では一致しない制約に一致させることができます。 詳細についてはエイリアスの記事を参照してください。
私有リポジトリを使う
GitHubとBitbucketの私有リポジトリを全く同じやり方で扱えます。
{
"repositories": [
{
"type": "vcs",
"url": "git@bitbucket.org:vendor/my-private-repo.git"
}
],
"require": {
"vendor/my-private-repo": "dev-master"
}
}
唯一の要件は、gitクライアント用のSSHキーがインストールされていることです。
Gitの代替案
VCSリポジトリで対応しているバージョン管理システムはGitだけではありません。 以下に対応しています。
- Git: git-scm.com
- Subversion: subversion.apache.org
- Mercurial: mercurial-scm.org
- Fossil: fossil-scm.org
これらのシステムからパッケージを取得するにはそれぞれのクライアントがインストールされてる必要がありますが、これだと不便かもしれません。
このため、GitHubとBitbucketについては、これらのサイトが提供するAPIを使用して、バージョン管理システムをインストールせずにパッケージを取得する特別な対応が入っています。
VCSリポジトリは、パッケージをzipとして取得するdist
を提供します。
- GitHub: github.com (Git)
- Bitbucket: bitbucket.org (Git)
使用するVCSドライバーは、URLに基づいて自動的に検出されます。
ただし、何らかの理由で指定する必要がある場合は、vcs
に代えてbitbucket
、github
、gitlab
、perforce
、fossil
、git
、svn
、hg
がリポジトリの種類として使えます。
githubリポジトリでno-api
キーをtrue
に設定すると、GitHub
APIは使用せず、他のgitリポジトリと同様にリポジトリがクローンされます。
ただし、git
ドライバーを直接使用する場合とは異なり、Composerは依然としてgithubのzipファイルを使用しようとします。
以下の点に注意してください。
- Composerに使用するドライバを選ばせるには、リポジトリの種類は「vcs」として定義されている必要があります
- 既に私有リポジトリを使っている場合、Composerはキャッシュへクローンすることになります。
同じパッケージをドライバと一緒にインストールしたい場合、
composer clearcache
コマンドに続けてcomposer update
とすることでComposerのキャッシュを消去しdistからパッケージをインストールさせられることを覚えておきましょう - VCSドライバ
git-bitbucket
はbitbucket
に取って代わられたため時代遅れです
Bitbucketドライバ設定
Bitbucketのリポジトリのエンドポイントはgitではなくhttpsになっている必要がある点に注意してください。
bitbucketリポジトリが準備できたら認証の準備もする必要があるでしょう。
Subversionのオプション
Subversion自体にはブランチとタグの概念がないため、Composerは既定でコードが$url/trunk
、$url/branches
、$url/tags
にあるという前提を置きます。
リポジトリの配置が異なる場合は、それらの値を変更できます。
たとえば、大文字の名前を使用した場合、次のようにリポジトリを構成できます。
{
"repositories": [
{
"type": "vcs",
"url": "http://svn.example.org/projectA/",
"trunk-path": "Trunk",
"branches-path": "Branches",
"tags-path": "Tags"
}
]
}
ブランチのディレクトリもタグのディレクトリもなければbranches-path
ないしtags-path
をfalse
に設定することで完全に無効にできます。
パッケージが副ディレクトリにある、例えば/trunk/foo/bar/composer.json
と/tags/1.0/foo/bar/composer.json
にあるなら、"package-path"
オプションを副ディレクトリに設定することでComposerがアクセスできるようにさせられます。
この例では"package-path": "foo/bar/"
となるでしょう。
私有Subversionリポジトリがあるなら設定のhttp-basic節に資格情報を保存しておけます(スキーマを参照)。
{
"http-basic": {
"svn.example.org": {
"username": "username",
"password": "password"
}
}
}
Subversionクライアントが既定で資格情報を保存するように構成されている場合、これらの資格情報は現在の利用者用に保存され、このサーバー用に保存されている既存の資格情報は上書きされます。
この挙動を変更するには、次のようにリポジトリ構成で"svn-cache-credentials"
オプションを設定します。
{
"repositories": [
{
"type": "vcs",
"url": "http://svn.example.org/projectA/",
"svn-cache-credentials": false
}
]
}
パッケージ
上記のどの方法でもComposerに対応していないプロジェクトを使いたい場合でも、package
リポジトリを使って自分でパッケージを定義できます。
基本的にcomposer
リポジトリのpackage.json
に含まれるのと同じ情報を定義しますが、単一のパッケージ用限定です。
繰り返しますが、最小限必要なフィールドはname
、version
、そしてdist
またはsource
の何れかです。
以下は雛形エンジンのsmartyの例です。
{
"repositories": [
{
"type": "package",
"package": {
"name": "smarty/smarty",
"version": "3.1.7",
"dist": {
"url": "https://www.smarty.net/files/Smarty-3.1.7.zip",
"type": "zip"
},
"source": {
"url": "http://smarty-php.googlecode.com/svn/",
"type": "svn",
"reference": "tags/Smarty_3_1_7/distribution/"
},
"autoload": {
"classmap": ["libs/"]
}
}
}
],
"require": {
"smarty/smarty": "3.1.*"
}
}
source部分は放置しておくのが普通です。本当に必要なことはまずないからです。
sourceキーが含まれているとき、referenceフィールドはインストールされるバージョンへの参照となります。
typeフィールドがgit
のとき、このフィールドはコミットIDやブランチやタグ名になります。
補足: referenceフィールドにGitのブランチ名を使うことはお勧めしません。
git checkout
に対応しているため妥当ではあるのですが、ブランチ名は可変なので固定できないのです。
フィールドがsvn
のとき、referenceフィールドにはsvn co
を走らせるときに後ろに付ける参照が含まれます。
補足: このリポジトリ種別には2、3の制約があり、できる限り避けるべきです。
- Composerは
version
フィールドを変えない限りパッケージを更新しません。- Composerはコミット参照を更新しません。 そのため、参照として
master
を使う場合、強制的に更新するためにパッケージを削除し、不安定な固定ファイルに対処しなければならなくなるでしょう。
package
リポジトリ中の"package"
キーには複数バージョンのパッケージを定義する配列を設定できます。
{
"repositories": [
{
"type": "package",
"package": [
{
"name": "foo/bar",
"version": "1.0.0",
...
},
{
"name": "foo/bar",
"version": "2.0.0",
...
}
]
}
]
}
自分でホスティングする
多分殆どの場合でパッケージをpackagistに置きたいものと思われますが、自分のリポジトリをホスティングすることによる用途もあります。
-
企業の私有パッケージ: 内部的なパッケージ用にComposerを使っている企業に所属しているなら、それらのパッケージを私有としておきたいかもしれません。
-
別のエコシステム: 独自のエコシステムを持つプロジェクトがあり、より大きなPHPコミュニティからそのパッケージを実際に再利用できない場合は、packagistから分離させておきたいかもしれません。 一例はWordPressプラグインです。
自分のパッケージをホスティングするには、ネイティブなcomposer
の種類のリポジトリが推奨されます。
一番の効率性が齎されるからです。
composer
リポジトリを作る上で、手助けになるツールはいくつかあります。
私有Packagist
私有PackagistではGitHub、Packagist.org、その他のパッケージリポジトリのミラーリングと共に私有パッケージのホスティングを提供するアプリケーションです。 Packagistでも立てられていますが、自分で立てることもできます。
詳細はPackagist.comをご確認ください。
Satis
Satisは静的なcomposer
リポジトリ生成器です。
packagistを超軽量にして、静的なファイルを基盤にしたバージョンのようなものです。
Satisにはリポジトリを含むcomposer.json
を与えます。
リポジトリとしてよくあるのはVCSやパッケージレポジトリの定義です。
require
されるパッケージを全て取得し、packages.json
を吐き出しますが、これがcomposer
リポジトリになります。
詳細はsatisのGitHubリポジトリとプライベートパッケージを扱うことについての記事をご確認ください。
アーティファクト
前述のどのリポジトリの種類もオンラインにできない場合があります。
VCSが使われていたとしても例外ではありません。
よくある例は、ビルドアーティファクトによる組織間のライブラリ交換です。
もちろん殆どの場合で、これらは私有とされます。
これらのアーカイブをそのまま使用するには、これらの私有パッケージのZIPまたはTARアーカイブを含むフォルダーに対して、種別artifact
のリポジトリを使用できます。
{
"repositories": [
{
"type": "artifact",
"url": "path/to/directory/with/zips/"
}
],
"require": {
"private-vendor-one/core": "15.6.2",
"private-vendor-two/connectivity": "*",
"acme-corp/parser": "10.3.5"
}
}
それぞれのzipアーティファクトとは、根幹のフォルダにあるcomposer.json
があるZIPアーカイブです。
unzip -l acme-corp-parser-10.3.5.zip
composer.json
...
パッケージのバージョンが異なる2つのアーカイブがある場合、両方ともインポートされます。
新しいバージョンのアーカイブがアーティファクトフォルダーに追加された状態でupdate
を実行すると、そのバージョンもインポートされ、Composerは最新版に更新されます。
パス
アーティファクトリポジトリに加えて、絶対パスまたは相対パスのローカルディレクトリに依存するパスを使用できます。 モノリシックリポジトリを扱う場合に特に役立ちます。
例えばリポジトリが以下のディレクトリ構造になっているとします。
...
├── apps
│ └── my-app
│ └── composer.json
├── packages
│ └── my-package
│ └── composer.json
...
そうして依存関係としてapps/my-app/composer.json
ファイルにパッケージmy/package
を加えるには、以下の構成が使えます。
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package"
}
],
"require": {
"my/package": "*"
}
}
パッケージがローカルのVCSリポジトリである場合、バージョンは現在チェックアウトされているブランチまたはタグによって推測されます。
それ以外の場合は、パッケージのcomposer.json
ファイルでバージョンを明示的に定義すべきです。
これらの方法でバージョンが解決できない場合は、dev-master
と見なされます。
バージョンがローカルのVCSリポジトリから推測できない場合、もしくはそのバージョンを上書きしたい場合は、リポジトリの宣言時にversions
オプションが使えます。
{
"repositories": [
{
"type": "path",
"url": "../../packages/my-package",
"options": {
"versions": {
"my/package": "4.2-dev"
}
}
}
]
}
可能なときはローカルパッケージがシンボリックリンクされます。
この場合端末の出力はSymlinking from ../../packages/my-package
となります。
シンボリックリンクできない場合はパッケージが複製されます。
その場合端末の出力はMirrored from ../../packages/my-package
となります。
既定のフォールバック戦略に代えて、"symlink": true
としてシンボリックリンクにしたり、"symlink": false
オプションでミラーリングしたりすることを強制できます。
ミラーリングを強制すると、モノリシックレポジトリからパッケージをデプロイしたり生成したりする際に便利なことがあります。
補足: Windowsでは管理者でない利用者によって作成される可能性があるため、NTFSジャンクションを使ってディレクトリのシンボリックリンクが実装されています。 Windows 7より前のバージョンまたは
proc_open
が無効にされている場合は常にミラーリングが使用されます。
{
"repositories": [
{
"type": "path",
"url": "../../packages/*",
"options": {
"symlink": false
}
}
]
}
チルダを先頭に付けると現在の利用者のホームフォルダに展開され、環境変数はWIndowsとLinux/Macの両方の記法で解析されます。
例えば~/git/mypackage
は自動的に/home/<利用者名>/git/mypackage
からクローンしたmypackageを読み込みます。
$HOME/git/mypackage
としたり%USERPROFILE%/git/mypackage
としても同じことです。
補足: リポジトリのパスは
*
や?
のようなワイルドカードも含められます。 詳細についてはPHPのglob関数を参照してください。
(composer.lockファイルに現れる)パッケージのdistへの参照が構築される方法を構成できます。
以下のモードが存在します。
none
:参照は常に空です。 これにより固定ファイル間の競合を低減する助けになる可能性がありますが、直近に更新があるとパッケージが最新の状態になっているかが比較的不明瞭になります。config
:参照はパッケージのcomposer.jsonとリポジトリの設定のハッシュに基づいて構築されますauto
(既定で使用されます):参照はcomfig
のようなハッシュに基づいて構築されます。 ただしパッケージフォルダがgitリポジトリを含んでいる場合、代わりにHEADコミットのハッシュが参照として使われます。
{
"repositories": [
{
"type": "path",
"url": "../../packages/*",
"options": {
"reference": "config"
}
}
]
}
Packagist.orgを無効にする
以下をcomposer.json
に加えると既定のPackagist.orgリポジトリを無効にできます。
{
"repositories": [
{
"packagist.org": false
}
]
}
大域的な構成フラグを使うことで、大域的にPackagist.orgを無効にできます。
php composer.phar config -g repo.packagist.org false
構成
本章ではcomposer.json
のスキーマのconfig
節について記述していきます。
process-timeout
プロセス実行の制限時間で、秒単位です。
既定では300(5分)です。
git clone
のような時間の掛かるプロセスは、Composerによりプロセスの異常終了が推定されるまで、実行できます。
接続が遅い場合やベンダーが大きい場合は、これを増やす必要があるかもしれません。
例:
{
"config": {
"process-timeout": 900
}
}
個々のスクリプトのコマンドで制限時間を無効にする
scripts
以下の独自コマンドでプロセスの制限時間を無効にするには、静的ヘルパーが使えます。
{
"scripts": {
"test": [
"Composer\\Config::disableProcessTimeout",
"phpunit"
]
}
}
allow-plugins
既定は{}
で、1つもプラグインを読み込むことはできません。
Composer
2.2.0では、allow-plugins
オプションによってセキュリティの層が追加され、Composerの実行中にどのComposerプラグインがコードを実行できるかを制限できるようになりました。
新しいプラグインが最初に活性化され、それが構成オプションにまだ挙げられていなければ、Composerは警告を印字します。 Composerを対話的に実行すると、プラグインを実行するかどうかを決めるようプロンプトを出します。
この設定を使うと、信頼できるパッケージのみがコードを実行できるようになります。 パッケージ名パターンをキーに持つオブジェクトに設定します。 値は、許可する場合はtrueで、許可しない場合はfalseです。 何れもこれ以外の警告とプロンプトは抑制されます。
{
"config": {
"allow-plugins": {
"third-party/required-plugin": true,
"my-organization/*": true,
"unnecessary/plugin": false
}
}
}
構成オプション自体をfalse
にして全てのプラグインを拒否したり、true
にして全てのプロラグインが走るのを許可したり(全くお勧めしません)するようにも設定できます。
例えば以下の通りです。
{
"config": {
"allow-plugins": false
}
}
use-include-path
既定ではfalse
です。
true
にすると、Composerの自動読み込み器はPHPのインクルードパスにあるクラスも探します。
preferred-install
既定ではdist
で、source
、dist
、auto
の何れかです。
このオプションではComposerが優先して使うインストール方法を設定できます。
お好みで、より柔軟なインストール設定のためにキーにパッケージ名のパターンがあるオブジェクトにすることもできます。
{
"config": {
"preferred-install": {
"my-organization/stable-package": "dist",
"my-organization/*": "source",
"partner-organization/*": "auto",
"*": "dist"
}
}
}
source
は、Composerが(存在する場合)source
からパッケージをインストールすることを意味します。 通常、git cloneまたは同等のパッケージが使用するバージョン管理システムのチェックアウトです。 プロジェクトにバグ修正を行い、依存関係のローカルgitクローンを直接取得する場合に便利です。auto
は遺物的な動作です。 開発バージョンの場合にComposerはsource
を自動的に使用し、それ以外の場合はdist
を使用します。dist
(Composer 2.1以降で既定)は、可能であればComposerがdist
からインストールすることを意味します。 通常、zipファイルのダウンロードであり、リポジトリ全体のクローンよりも高速です。
補足: 順番は重要です。 より限定されたパターンは、より緩いパターンの前に来るべきです。 大域構成やパッケージ構成で文字列表記とハッシュ構成を混在させると、文字列表記は
*
パッケージパターンに解釈されます。
audit
セキュリティ監査の構成オプション
ignore
勧告の識別子、リモートの識別子、CVEの識別子のリストです。 報告はされますが監査コマンドは通過させます。
{
"config": {
"audit": {
"ignore": {
"CVE-1234": "The affected component is not in use.",
"GHSA-xx": "The security fix was applied as a patch.",
"PKSA-yy": "Due to mitigations in place the update can be delayed."
}
}
}
}
もしくは以下です。
{
"config": {
"audit": {
"ignore": ["CVE-1234", "GHSA-xx", "PKSA-yy"]
}
}
}
abandoned
Composer 2.6ではreport
が既定値であり、Composer 2.7以降ではfail
が既定値です。
監査コマンドが放棄されたパッケージを報告するかどうかを定義するもので、3つの値を取り得ます。
ignore
は、監査コマンドが放棄されたパッケージを全く考慮しないという意味です。report
は、放棄されたパッケージが失敗として報告されるものの、非ゼロコードでコマンドが終了してしまわないようにする意味です。fail
は、放棄されたパッケージにより監査が非ゼロコードで失敗するようになる意味です。
{
"config": {
"audit": {
"abandoned": "report"
}
}
}
Composer
2.7以降、COMPOSER_AUDIT_ABANDONED
環境変数を介して、オプションをオーバーライドできます。
Composer
2.8以降、--abandoned
コマンドラインオプションを介して、オプションをオーバーライドできます。
このオプションにより、構成値と環境変数が共にオーバーライドされます。
use-parent-dir
composer.jsonがないディレクトリでComposerを実行しており、その上のディレクトリにcomposer.jsonがある場合、Composerは既定で、そのディレクトリのcomposer.jsonを代わりに使用するかどうかを尋ねます。
このプロンプトに対して常に「はい」と答えたい場合は、この構成値をtrue
に設定できます。
プロンプトが表示されないようにするには、false
に設定します。
既定は"prompt"
です。
補足: この構成を機能させるには、大域的な利用者全体の構成で設定しなければなりません。 例えば
php composer.phar config --global use-parent-dir true
を使用して設定します。
store-auths
認証のプロンプトの後にする動作です。
true
(常に保存する)、false
(保存しない)、"prompt"
(毎回確認する)の何れか1つで、既定では"prompt"
です。
github-protocols
既定では["https", "ssh", "git"]
です。
github.comからクローンを作成するときに使用するプロトコルのリストで、優先度順に並べます。
既定ではgit
が存在しますが、gitプロトコルは暗号化されていないため、secure-httpが無効になっている場合のみ使われます。
originのリモートプッシュURLでssh (git@github.com:...
)
ではなくhttpsを使用する場合、プロトコルリストを["https"]
のみに設定すると、ComposerはプッシュURLをSSHのURLに上書きすることを取り止めます。
github-oauth
ドメイン名とoauthキーのリストです。
たとえば、このオプションの値として{"github.com": "oauthtoken"}
を使用すると、oauthtoken
を使用してgithubの私有リポジトリにアクセスし、APIのIPに基づく低いレート制限を回避します。
Composerは、必要に応じて資格情報を要求する場合がありますが、これらは手動で設定することもできます。
GitHubのOAuthトークンを取得する方法及びcliの構文の詳細については、こちらを参照してください。
gitlab-domains
既定では["gitlab.com"]
です。
GitLabサーバーのドメインのリストです。
gitlab
リポジトリ種別を使う場合に使用されます。
gitlab-oauth
ドメイン名とoauthキーのリストです。
たとえば、このオプションの値として{"gitlab.com": "oauthtoken"}
を使用すると、oauthtoken
を使用してgitlabの私有リポジトリにアクセスします。
なお、パッケージがgitlab.comでホストされていない場合、ドメイン名もgitlab-domains
オプションで指定する必要があります。
詳細情報はこちらにもあります。
gitlab-token
ドメイン名と私有トークンのリストです。
私有トークンは、単純な文字列、または利用者名とトークンを含む配列の何れかです。
たとえば、このオプションの値として{"gitlab.com": "privatetoken"}
を使用すると、privatetoken
を使用してgitlabの私有リポジトリにアクセスします。
{"gitlab.com": {"username": "gitlabuser", "token": "privatetoken"}}
を使用すると、利用者名とトークンの両方を使ってgitlabのデプロイトークン機能 (https://docs.gitlab.com/ ee/user/project/deploy_tokens/) を使用します。
なお、パッケージがgitlab.comでホストされていない場合、ドメイン名もgitlab-domains
オプションで指定する必要があります。
トークンにはapi
またはread_api
スコープが必要です。
詳細情報はこちらにもあります。
gitlab-protocol
パッケージメタデータのsource
値用にリポジトリのURLを作成するときに、強制的に使用するプロトコルです。
git
またはhttp
の何れかです(https
はhttp
の同義語として扱われます)。
HTTPベーシック認証を使ったGitLabのCI_JOB_TOKENにより、後々GitLab
CIのジョブでクローンされる私有リポジトリを参照するプロジェクトを扱う際に役立ちます。
既定では、Composerは私有リポジトリについてはgit-over-SSHのURLを生成し、公開リポジトリについてはHTTP(S)のみを生成します。
disable-tls
既定はfalse
です。
真に設定すると、すべてのHTTPSのURLが代わりにHTTPで試行され、ネットワークレベルの暗号化は実行されません。
これを有効にすることはセキュリティ上の危険性であり、全く推奨されません。
より良い方法は、php.iniでphp_openssl拡張機能を有効にすることです。
これを有効にすると、secure-http
オプションが暗黙に無効になります。
secure-http
既定ではtrue
です。
真に設定すると、HTTPSのURLのみがComposer経由でダウンロードできるようになります。
何かしらへのHTTPアクセスが絶対に必要な場合は無効にできますが、Let's
Encryptを使用して無料のSSL証明書を取得する方が一般的にはより良い代替手段です。
bitbucket-oauth
ドメイン名と消費者のリストです。
例えば{"bitbucket.org": {"consumer-key": "myKey", "consumer-secret": "mySecret"}}
のように使います。
より詳しくはこちらを読んでください。
cafile
ローカルファイルシステム上の認証局ファイルの配置場所です。 PHP 5.6以降ではシステムCAファイルを自動的に検出できますが、PHP 5.6以降でも、php.iniのopenssl.cafileを介してこれを設定すべきです。
capath
cafileが指定されていない場合、またはそこに証明書がない場合は、capathが指すディレクトリで適切な証明書が探索されます。 capathは正しくハッシュされた証明書ディレクトリでなければなりません。
http-basic
認証するためのドメイン名と、利用者名とパスワードのリストです。
たとえば、このオプションの値として{"example.org": {"username": "alice", "password": "foo"}}
を使用すると、Composerはexample.orgに対して認証します。
詳細については、こちらを参照してください。
bearer
認証するドメイン名とトークンのリストです。
たとえば、このオプションの値として{"example.org": "foo"}
を使用すると、ComposerはAuthorization: Bearer foo
ヘッダーを使用して、example.orgに対して認証を行うことができます。
platform
プラットフォームパッケージ(PHP及び拡張機能)を偽装して、運用環境をエミュレートしたり、構成で対象のプラットフォームを定義したりできるようにします。
例えば{"php": "7.0.3", "ext-something": "4.0.3"}
です。
これにより、ローカルで実行する実際のPHPバージョンに関係なく、PHP 7.0.3以上を必要とするパッケージをインストールできなくなります。
ただし、依存関係が正しく検査されなくなったことも意味します。
PHP 5.6を実行すると、7.0.3を想定しているため問題なくインストールされますが、実行時に失敗します。
これは、{"php":"7.4"}
が指定されることも意味します。
7.4.1
を最小のバージョンとして定義するパッケージは使用されません。
したがって、これを使用する場合は、デプロイ戦略の一部としてcheck-platform-reqs
コマンドも走らせることをお勧めしますし、より安全です。
ローカルにインストールしていない拡張機能が依存関係に必要な場合は、代わりに--ignore-platform-req=ext-foo
をupdate
、install
、またはrequire
に渡して無視できます。
しかし長い目で見れば、今は無視するにせよ必要な拡張はインストールすべきで、1箇月後に新しいパッケージでも必要になると、知らず知らずのうちに本番環境に問題が発生する可能性があります。
拡張をローカルにインストールしているが本番環境ではそうではない場合、{"ext-foo": false}
を使ってComposerから意図的に隠すこともできます。
vendor-dir
既定はvendor
です。
お好みで違うディレクトリに依存関係をインストールできます。
vendor-dirと以下の全ての*-dir
オプション中では、$HOME
と~
はホームディレクトリに置換されます。
bin-dir
既定ではvendor/bin
です。
プロジェクトがバイナリを含む場合、それらのバイナリはこのディレクトリにシンボリックリンクが張られます。
data-dir
既定では、WindowsではC:\Users\<user>\AppData\Roaming\Composer
、XDG Base Directory Specificationsに従うunixシステムでは$XDG_DATA_HOME/composer
、その他のunixシステムでは$COMPOSER_HOME
です。
現在、過去のcomposer.pharファイルを保存して古いバージョンにロールバックできるようにするためにのみ使用されています。
COMPOSER_HOMEも参照してください。
cache-dir
既定では、WindowsではC:\Users\<user>\AppData\Local\Composer
、macOSでは/Users/<user>/Library/Caches/composer
、XDG Base Directory Specificationに従うunixシステムでは$XDG_CACHE_HOME/composer
、他のunixシステムでは$COMPOSER_HOME/cache
になります。
Composerで使う全てのキャッシュが保管されます。
COMPOSER_HOMEも参照してください。
cache-files-dir
既定では$cache-dir/files
です。
パッケージのzipアーカイブを保管します。
cache-repo-dir
既定では$cache-dir/repo
です。
composer
の種別用のリポジトリのメタデータと、svn
、fossil
、github
、gitbucket
の種別のVCSリポジトリを保管します。
cache-vcs-dir
既定では$cache-dir/vcs
です。
git
及びhg
の種別用のVCSリポジトリメタデータを読み込むためのVCSクローンを保管し、インストールを高速にします。
cache-files-ttl
既定では15552000
(6箇月)です。
Composerはダウンロードした全てのdist(zip、tar、……)をキャッシュします。
既定では使われていないものについて6箇月経った後に削除します。
このオプションはこの期間を(秒数で)調整ないし0に設定することで、完全に無効にできるようにするものです。
cache-files-maxsize
既定では300MiB
です。
Composerはダウンロードした全ての配布パッケージ(zip、tar、……)をキャッシュします。
ガベージコレクションが定期的に走っている場合、キャッシュで使える最大量です。
最後のキャッシュヒットから時間が経った(比較的使われていない)ファイルが削除されます。
cache-read-only
既定ではfalse
です。
Composerのキャッシュを読取専用モードで使うかどうかを決めます。
bin-compat
既定ではauto
です。
インストールするバイナリの互換性を決定します。
auto
の場合、Composerは、WindowsまたはWSLの場合に.batプロキシファイルのみをインストールします。
full
に設定すると、Windows用の.batファイルとUnixベースのオペレーティングシステム用のスクリプトの両方がバイナリごとにインストールされます。
主にLinux VM内でComposerを実行しているが、WindowsホストOSで使用できる.bat
プロキシが必要な場合に役立ちます。
proxy
に設定すると、ComposerはbashでUnixスタイルのプロキシファイルのみを作成し、WindowsないしWSLでも.batファイルを作成しません。
prepend-autoloader
既定はtrue
です。
false
にするとComposerの自動読み込み器は既存の自動読み込み器の前に置かれなくなります。
他の自動読み込み器との相互運用性の問題を修正する際に必要になることがあります。
autoloader-suffix
既定ではnull
です。
空でない文字列に設定した場合、生成されたComposerの自動読み込み器の接尾辞に使われます。
null
に設定された場合、可能であればcomposer.lock
ファイルのcontent-hash
値が使われます。
そうでなければ、乱択された接尾辞が生成されます。
optimize-autoloader
既定ではfalse
です。
true
の場合、自動読み込み器を吐き出す際に常に最適化されます。
sort-packages
既定ではfalse
です。
true
の場合、新しいパッケージを追加したときにcomposer.json
中のrequire
コマンドでパッケージが名前順に整列された状態に保たれます。
classmap-authoritative
既定ではfalse
です。
true
にするとComposerの自動読み込み器はクラスマップからのクラスのみを読み込みます。
暗にoptimize-autoloader
を有効にします。
apcu-autoloader
既定ではfalse
です。
true
の場合、Composerの自動読み込み器はAPCuを確認し、拡張が有効になった場合にクラスの有無をキャッシュするのに使います。
github-domains
既定では["github.com"]
です。
githubモードで使われるドメインのリストです。
GitHub Enterpriseの準備で使われます。
github-expose-hostname
既定ではtrue
です。
false
にするとgithub APIにアクセスするために作られるOAuthトークンがマシンのホスト名ではなく日付になります。
use-github-api
既定ではtrue
です。
特定のリポジトリに於けるno-api
キーに似ており、use-github-api
をfalse
に設定すると、他のgitリポジトリのように、全てのGitHubリポジトリについて、GitHub
APIを使う代わりにリポジトリをクローンするように大域的な挙動を定義します。
しかしgit
ドライバを直接使うのではなく、ComposerはやはりGitHubのzipファイルを使うことを試みます。
notify-on-install
既定ではtrue
です。
Composerではリポジトリが通知のURLを定義できるようにしており、そのリポジトリからパッケージがインストールされたことの通知を受けられます。
このオプションはその挙動を無効にできます。
discard-changes
既定ではfalse
で、true
、false
、またはstash
の何れかにできます。
このオプションでは非対話モードでダーティアップデートを制御する既定の方式を設定できます。
true
はベンダーの変更を常に破棄しますが、"stash"
は取っておいて再適用しようとします。
よくベンダーを変更する場合は、CIサーバーやデプロイスクリプトにこれを使ってください。
archive-format
既定ではtar
です。
archiveコマンドにより使われる既定の形式を上書きします。
archive-dir
既定では.
です。
archiveコマンドによる作られる、アーカイブの既定の対象パスです。
例:
{
"config": {
"archive-dir": "/home/user/.composer/repo"
}
}
htaccess-protect
既定ではtrue
です。
false
に設定すると、ComposerはComposerのホーム、キャッシュ、データディレクトリに.htaccess
ファイルを作りません。
lock
既定ではtrue
です。
false
に設定すると、Composerはcomposer.lock
ファイルを作らず、存在している場合は無視します。
platform-check
既定では、PHPのバージョンのみをチェックするphp-only
に設定されています。
拡張子の存在も確認するには、true
に設定します。
false
に設定すると、Composerは自動読み込み器のブートストラップの一部としてplatform_check.php
ファイルを作成せず、requireもしません。
secure-svn-domains
既定では[]
です。
安全なSubversionまたはSVNの移送を使用しているものとして信頼し、印を付けるべきドメインの一覧です。
既定では、svn://プロトコルは安全ではないと見なされ、throwされますが、この構成オプションを["example.org"]
に設定すれば、そのホスト名でsvnのURLを使用できます。
secure-http
を完全に無効にするよりも優れた安全な代替手段です。
bump-after-update
既定はfalse
で、true
、false
、"dev"
、"no-dev"
のどれかにできます。
真に設定すると、Composerはupdate
コマンドを走らせた後に、bump
コマンドを走らせます。
"dev"
や"no-dev"
に設定すると、対応する依存関係のみのバージョンが上がります。
allow-missing-requirements
既定はfalse
です。
要件から何か欠けているものがあるとき、install
時にエラーを無視します。
状況としては、composer.json
にある最新の変更点に対して、固定ファイルが最新でないときです。
実行時Composerユーティリティ
Composerはほぼプロジェクトに依存関係をインストールするのに使われますが、実行時に使える機能もいくつかあります。
特定のバージョンに於けるこれらの機能のどれかに依る必要があれば、composer-runtime-api
パッケージをrequireできます。
自動読み込み
自動読み込み器は最も使われるものであり、既に基本的な使い方の手引きで押さえられています。 全てのComposerのバージョンで使えます。
インストールされたバージョン
composer-runtime-api
2.0では、現在インストールされているバージョンを調べるための静的メソッドを提供する新しいComposer\InstalledVersions
クラスが導入されました。
Composerの自動読み込み器が含まれている限り、コードで自動的に使用できます。
このクラスの主な用例は以下の通りです。
パッケージX(あるいは仮想パッケージ)が存在するか見る
\Composer\InstalledVersions::isInstalled('vendor/package'); // 真偽値を返す
\Composer\InstalledVersions::isInstalled('psr/log-implementation'); // 真偽値を返す
Composer 2.1から、2つ目の引数に偽を渡すことによりrequire-devを介してインストールされたかを確認することもできます。
\Composer\InstalledVersions::isInstalled('vendor/package'); // このパッケージがインストールされていれば真を返す
\Composer\InstalledVersions::isInstalled('vendor/package', false); // vendor/packageがrequireにあれば真を、require-devにあれば偽を返す
なお、プラットフォームパッケージがインストールされているかどうかを確認するのには使えません。
パッケージXのバージョンYがインストールされているかどうかを見る
補足: これを使うためには
"composer/semver": "^3.0"
をrequireしなければなりません。
use Composer\Semver\VersionParser;
\Composer\InstalledVersions::satisfies(new VersionParser, 'vendor/package', '2.0.*');
\Composer\InstalledVersions::satisfies(new VersionParser, 'psr/log-implementation', '^1.0');
例えば、vendor/packageについて、2.0.*
に適合するバージョンでインストールされている場合だけでなく、与えられたパッケージ名が何らかの他のパッケージにより置き換えられていたり与えられていたりする場合にも真を返します。
パッケージのバージョンを見る
補足: 求めるパッケージ名自体はインストールされていないものの、他のパッケージから与えられていたり置き換えられていたりする場合は
null
を返します。 したがって少なくともライブラリのコードでは、satisfies()を使うことをお勧めします。 アプリケーションのコードではもう少し制御できるため、あまり重要ではありません。
// vendor/packageがインストールされている場合、正規化されたバージョン(例:1.2.3.0)が返ります。
// パッケージが提供されたり置き換えられたりしたものであればnullを返します。
// パッケージが全くインストールされていなければOutOfBoundsExceptionを投げます。
\Composer\InstalledVersions::getVersion('vendor/package');
// vendor/packageがインストールされていれば元のバージョン(例:v1.2.3)を返します。
// 提供されたり置き換えられたりしたものであればnullを返します。
// パッケージが全くインストールされていなければOutOfBoundsExceptionを投げます。
\Composer\InstalledVersions::getPrettyVersion('vendor/package');
// vendor/packageがインストールされていれば、パッケージのdistまたはsourceの参照(例:gitのコミットハッシュ)を返します。
// 提供されたり置き換えられたりしたものであればnullを返します。
// そのパッケージが全くインストールされていなければOutOfBoundsExceptionを投げます。
\Composer\InstalledVersions::getReference('vendor/package');
パッケージ自体のインストールされたバージョンを見る
パッケージ自体のバージョンを取得することにのみ関心がある場合、getVersion/getPrettyVersion/getReferenceで充分でしょう。 例えばacme/fooのソースで、現在実行中のacme/fooのバージョンがどれかを利用者に表示したい場合などです。
上の節の警告はこの場合には適用されません。 なぜならコードが走っている場合はパッケージは存在しており置き換えられてもいないからです。
とはいうものの、できる限りの安全性のためにnull
の返り値まで心を配って制御することは良い考えです。
より複雑な用例については他の方法がいくつか利用できます。 クラス自体のソースやドキュメント部分を参照してください。
パッケージがインストールされているパスを見る
getInstallPath
メソッドはパッケージがインストールされている絶対パスを取得します。
補足: パスは絶対的ではありますが、
../
やシンボリックリンクは含まれることがあります。realpath()
と等価なものであるという保証はないので、問題に挙がる状況ではrealpathを走らせるべきです。
// vendor/packageがインストールされていればパッケージのインストール場所への絶対パスを返します。
// 提供されていたり置き換えられていたり、あるいはパッケージがメタパッケージの場合はnullを返します。
// そのパッケージが全くインストールされていなければOutOfBoundsExceptionを投げます。
\Composer\InstalledVersions::getInstallPath('vendor/package');
Composer 2.1から使えます(つまり
composer-runtime-api ^2.1
です)
与えられた種類でどのパッケージがインストールされているのかを見る
getInstalledPackagesByType
メソッドはパッケージの種類(例:foo-plugin)を受け入れ、インストールされているその種類のパッケージを一覧にします。
その後、上記のメソッドを使用して、必要に応じて各パッケージに関する詳細情報を取得できます。
この方法により、プラグインをベンダーディレクトリに残すのではなく、特定のパスに配置するカスタムインストーラーの必要性が軽減されます。 それからInstalledVersionsを介して実行時に初期化するプラグインを見付け、必要に応じてgetInstallPathを介してそれらのパスを含めることができます。
\Composer\InstalledVersions::getInstalledPackagesByType('foo-plugin');
Composer 2.1から使えます(つまり
composer-runtime-api ^2.1
です)
プラットフォームの検査
composer-runtime-api
2.0では新しいvendor/composer/platform_check.php
ファイルが導入されました。
Composerの自動読み込み器を含めた際に、自動的に含まれます。
プラットフォーム要件(つまり、php及びphp拡張機能)が現在実行中のPHPプロセスで満たされていることを確認します。 要件が満たされていない場合、スクリプトは不足している要件に関する警告を出力し、コード104で終了します。
実稼働環境で予期せず失敗した際のPHP拡張機能の曖昧な警告が表示される空白ページを回避するには、デプロイやビルドの工程の一部としてcomposer check-platform-reqs
を実行し、0以外のコードが返された場合に中止すると良いでしょう。
既定値はphp-only
であり、PHPのバージョンのみを検査します。
何らかの理由でこの安全性の検査を使いたくなく、コードが実行されるときの実行時の失敗の惧れを許容する場合は、platform-check
構成オプションをfalse
に設定することで無効にできます。
検査にPHP拡張機能が存在することの検証を含めたい場合は、configオプションをtrue
に設定します。
その後、ext-*
の要件が検証されますが、効率上の理由から、Composerは拡張機能の存在のみをチェックし、その正確なバージョンは検査しません。
lib-*
の要件は、プラットフォーム検査機能では全く対応されておらず、検査もされません。
バイナリの自動読み込みパス
composer-runtime-api
2.2では、Composerでインストールされたバイナリを実行するときに設定される$_composer_autoload_path
大域変数が新しく導入されました。
詳細については、ベンダーバイナリドキュメントを参照してください。
バイナリプロキシによって設定されるので、Composerのvendor/autoload.php
ではプロジェクトに使うことはできません。
このファイルはそれ自体を指すように戻ってしまうので、役に立たないのです。
バイナリパス (bin-dir)
composer-runtime-api 2.2.2では、新しい$_composer_bin_dir
大域変数が導入されました。
Composerでインストールされたバイナリを使った際に設定されます。
これについての詳細はベンダーバイナリのドキュメントをお読みください。
バイナリプロキシによって設定されるため、Composerのvendor/autoload.php
によるプロジェクトでは利用できません。
コミュニティ
既に多くの人々がcomposerを使い、少なくない方々が貢献しています。
貢献
Composerに貢献したいときは、READMEとCONTRIBUTINGのドキュメントを読んでください。
最重要の指針は以下に記述されます。
全てのコードの貢献は、コミット権限をもつ人を含めて、プルリクエストを通じて行われます。 マージ前に中核開発者による承認がなされなければなりません。 これは全てのコードに適切なレビューを確実に行うためです。
プロジェクトをフォークし、機能ブランチを作成し、そしてプルリクエストを送ってください。
一貫性のあるコードベースにするためにコードがPSR-12コーディング規約に従っていることを確認すべきです。
翻訳
日本語訳の改善を歓迎します。
translations/po/ja.po
に原文と翻訳の対応があり、このファイルから日本語用のMarkdownファイルtranslations/ja/**/*.md
が生成されます。
したがって後者のMarkdownファイルではなく、前者のGettext POファイルを編集してください。
翻訳はpo4aで管理されています。
npm run translate
とするとPOファイルの更新とMarkdownファイルの生成が行われます。
また、package.json
にはtest:ja
とtest:md
のnpm scriptsが定義されています。
test:ja
はTextlintにより日本語を検査し、test:md
はmarkdownlintによりMarkdownの構文を検査します。
サポート
IRCチャンネルは<irc.libera.chat>の #composer にあります。
Stack Overflow と GitHub Discussions には両方ともComposerに関係する質問が寄せられています。
有料のサポートについては、Composerに関係するサポートをPrivate Packagistの顧客にチャットとEメールを介して提供しています。
← ランタイム
Composerをプログラムでインストールする方法
ダウンロードページに附記したように、インストーラースクリプトにはチェックサムが含まれており、このチェックサムはインストーラのコードにより変化します。 そのため長い目で見るとこの値に依るべきではありません。
代替案はこのスクリプトを使うことです。 UNIXのユーティリティがあってのみ動作します。
#!/bin/sh
EXPECTED_CHECKSUM="$(php -r 'copy("https://composer.github.io/installer.sig", "php://stdout");')"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]
then
>&2 echo 'ERROR: Invalid installer checksum'
rm composer-setup.php
exit 1
fi
php composer-setup.php --quiet
RESULT=$?
rm composer-setup.php
exit $RESULT
スクリプトは失敗した場合に1で、成功した場合に0で、それぞれ終了します。 また、何らエラーが起きなければ何も出ません。
別案として、そっくりそのままのインストーラーに頼りたければ、GitHubの履歴から特定のバージョンを取得できます。 GitHubのサーバーを信用できる限りにおいて、コミットハッシュは一意性と認証性を与えるに充分でしょう。 例えば以下です。
wget https://raw.githubusercontent.com/composer/getcomposer.org/f3108f64b4e1c1ce6eb462b159956461592b3e3e/web/installer -O - -q | php -- --quiet
コミットハッシュは https://github.com/composer/getcomposer.org/commits/main にある何かしら最新のコミットハッシュで置き換えると良いでしょう。
何故、比較とワイルドカードが組み合わさったバージョン制約が良くないのか
>=2.*
や>=1.1*
のようなパッケージの要件でバージョン制約を定義することは、それなりによく見られる誤りです。
ただし本当に意味しているところを考えれば直ちに意味を成さないことに気付かれるでしょう。
>=2.*
を分解すると2つに分けられます。
>=2
はパッケージがバージョン2.0.0以上であるべきだとしています。2.*
は、パッケージがバージョン2.0.0(このバージョンを含む)と3.0.0(このバージョンを含まない)の間にあるべきだとしています。
見ての通り、両方の規則ではパッケージが2.0.0以上でなければならないという事実について合意されています。
しかし、それを書いた時にバージョン3.0.0のパッケージのことを考えていたかについては判定できないのです。
>=2
を求めたので照合すべきでしょうか。
それとも2.*
を求めたので照合しないべきでしょうか。
こうした理由からComposerはエラーを投げて不当であるとします。 修正するには本当に意味しているところについて考え、これらの規則のうち1つだけを使うことです。
プロキシを隔ててComposerを使う方法
Composerは他の多くのツールと同様、環境変数を使ってプロキシサーバーの使用を制御します。 以下に対応しています。
http_proxy
- HTTP要求を使うプロキシhttps_proxy
- HTTPS要求を使うプロキシCGI_HTTP_PROXY
- HTTP要求をCLIの文脈ではないところで使うプロキシno_proxy
- プロキシを必要としないドメイン
これらの名前付き変数は慣習によるもので、公式の標準があるわけではありません。 また異なるオペレーティングシステムやツールに亙る進展や用法については複雑なものとなっています。 Composerでは小文字の名前が望ましいものの、適当な場合には大文字の名前も受け付けます。
使い方
ComposerはHTTPとHTTPSの要求に関して所定の環境変数を必要とします。 例えば以下です。
http_proxy=http://proxy.com:80
https_proxy=http://proxy.com:80
大文字の名前も使えます。
CLIでない使い方
ComposerはCLIでない文脈ではhttp_proxy
やHTTP_PROXY
を探しません。
このような方法で走らせている場合(例えばCMSや似たような用途に統合しているなど)、HTTP要求用にCGI_HTTP_PROXY
を使わなければなりません。
CGI_HTTP_PROXY=http://proxy.com:80
https_proxy=http://proxy.com:80
# cgi_http_proxyも使えます
補足: CGI_HTTP_PROXYは、要求ヘッダの操作を防ぐため、2001年にPerlで導入されました。 この脆弱性が広く報告された2016年に一般に認知されました。 https://httpoxy.org を参照してください。
構文
上の例にある通り、scheme://host:port
を使ってください。
スキームが欠けているとhttpが既定になり、ポートが欠けているとhttpやhttpsのスキーム用に80や443の既定になりますが、その他のツールではこれらの値が必要になることがあります。
IPv4用のドットで4つに区切られた記法を使ったIPアドレスとしても、IPv6用に角括弧で囲まれた記法でも、ホストを指定できます。
認証
Composerはscheme://user:pass@host:port
構文を使ったBasic認証に対応しています。
利用者名ないしパスワード中の予約されたURLの文字はパーセント符号化されていなければなりません。
例えば以下です。
利用者:me@company
パスワード:p@ssw$rd
プロキシ:http://proxy.com:80
# パーセント符号化された認証
me%40company:p%40ssw%24rd
scheme://me%40company:p%40ssw%24rd@proxy.com:80
補足: 利用者名とパスワードの構成要素は個々にパーセント符号化され、それからコロンの区切り文字で連結しなければなりません。 利用者名には(パーセント符号化されたとしても)コロンを含められません。 なぜならプロキシは最初に見付けたコロンで構成要素を分割するからです。
HTTPSのプロキシサーバー
ComposerはHTTPSのプロキシサーバーに対応しています。 ここでのHTTPSはプロキシに接続されるために使われるスキームですが、PHP 7.3以降かつcurlのバージョン7.52.0以降のみです。
http_proxy=https://proxy.com:443
https_proxy=https://proxy.com:443
特定のドメインでプロキシを迂回する
no_proxy
(またはNO_PROXY
)を使うと、プロキシが使われるべき「でない」ドメインのコンマ区切りリストが設定されます。
no_proxy=example.com
# example.comとそのサブドメインについてはプロキシを迂回します。
no_proxy=www.example.com
# www.example.comとそのサブドメインについてはプロキシを迂回します。
# example.comについては迂回されません。
ドメインは特定のポート(例えば:80
)に制限できます。
またIPアドレスやCIDRの記法でIPアドレスのブロックとして指定することもできます。
IPv6アドレスはhttp_proxy/https_proxyの値と同様、角括弧で囲む必要はありません。 ただしこの形式は受け付けられます。
値を*
に設定すると全ての要求に対するプロキシを迂回します。
補足: ドメインの先頭のドットには意味がありません。 処理される前に取り除かれます。
廃止された環境変数
Composerは元々HTTP_PROXY_REQUEST_FULLURI
及びHTTPS_PROXY_REQUEST_FULLURI
を提供してプロキシの良くない挙動を緩和しようとしていました。
これらは必要ではなくなり、使われることもありません。
パッケージと制約
ComposerのバージョンとVCSのバージョン
Composerはgitのような版管理システムを活用する方向に大きく舵を切っているため、「バージョン」という用語は少し曖昧です。
版管理システムの意味では、「バージョン」は特定のデータを含む特定のファイルの集まりです。
gitの用語法では、これは「ref」もしくは特定のコミットのことです。
これはブランチのHEADやタグで表されることがあります。
あるバージョン……例えばタグv1.1
やコミットe35fa0d
……がVCSにあることを確認するには、単一の既知のファイルの集まりが欲しいものであり、常に同じファイルが取り寄せられます。
Composerで何気なくバージョンとしてよく指すもの……つまり要件の行でパッケージ名に続く文字列(例えば~1.1
や1.2.*
)……とは実のところ、より具体的にはバージョン制約です。
Composerはバージョン制約を使い、VCSからチェックアウトすべきrefを調べます(もしくは、composer.json
中のversion
指定で静的に維持されたライブラリのときは、与えられたライブラリが許容されるか検証します)。
VCSのタグとブランチ
以下の説明では、以下のライブラリリポジトリ例があるとします。
~/my-library$ git branch
v1
v2
my-feature
another-feature
~/my-library$ git tag
v1.0
v1.0.1
v1.0.2
v1.1-BETA
v1.1-RC1
v1.1-RC2
v1.1
v1.1.1
v2.0-BETA
v2.0-RC1
v2.0
v2.0.1
v2.0.2
タグ
通常Composerはタグを扱います(ブランチではありません。
意味するところが分からなければ、版管理システムをご一読ください)。
バージョン制約を書くとき、特定のタグ(例えば1.1
)を参照することや、有効なタグの範囲(例えば>=1.1 <2.0
や~4.0
)を参照することがあります。
こうした制約を解決するため、ComposerはまずVCSに全ての利用できるタグを挙げるよう頼みます。
それからこれらのタグに基づいて利用できるバージョンの内部的な一覧を作ります。
上の例では、composerの内部リストにはバージョン1.0
、1.0.1
、1.0.2
、1.1
のベータリリース、1.1
の1つ目と2つ目のリリース候補、1.1
の最終リリースバージョンなどが含まれます(なおComposerは最終的に有効なバージョン番号を得るため、自動的に実際のタグ名からv
接頭辞を除きます)。
ComposerにVCSで利用できるバージョンの完全な一覧ができたら、プロジェクトの全てのバージョン制約に合致する最も大きいバージョンを探します(他のパッケージが自分で指定したものよりそのライブラリのバージョンをより限定されたものを要件とすることがあります。
そのため選ばれるバージョンは入手できるバージョンのうち最大のものであるとは限りません)。
またそのタグのzipアーカイブをダウンロードしてvendor
ディレクトリの正しい場所に開封します。
ブランチ
タグではなくブランチをチェックアウトしたいときは、特別なdev-*
接頭辞(接尾辞のときもあります。後述)を使ってブランチを指す必要があります。
ブランチをチェックアウトすると、ブランチで作業したいと仮定し、実際にリポジトリをvendor
ディレクトリの正しい場所にクローンします。
タグについては、実際にはリポジトリをクローンせず、正しいファイルを複製します(--prefer-sourceや--prefer-distでこの挙動を変えられます。
インストールオプションを参照してください)。
上の例ではmy-feature
ブランチをチェックアウトしたいため、require
節のバージョン制約としてdev-my-feature
を指定することになります。
こうするとmy-liberay
リポジトリがvendor
ディレクトリにクローンされ、my-feature
ブランチがチェックアウトされます。
ブランチ名がバージョンのように見えるとき、タグではなくブランチをチェックアウトしようとしていることをはっきりしなければなりません。
上の例では2つのバージョンブランチv1
とv2
があります。
これらのブランチをチェックアウトするにはv1.x-dev
のようにバージョン制約を指定しなければなりません。
.x
は任意の文字列で、v1
タグではなくv1
ブランチについて書いていることをComposerに伝えます(代替としてブランチにv1
ではなくv1.x
と名前を付けられます)。
この場合のバージョンのような名前(この場合はv1
)を持つブランチでは、dev-
を接頭辞として使うのではなく、接尾辞として-dev
を付けます。
安定性
Composerは次の安定性を(この順で)認識します。
すなわちdev、alpha、beta、RC、stableです。
ここでRCはリリース候補 (release candidate) を表します。
バージョンの安定性は接尾辞で定義されます。
例えばバージョンv1.1-BETA
にはbeta
の安定性があり、v1.1-RC1
にはRC
の安定性があります。
そのような接尾辞がないときは、バージョンがstable
だと見做します。
例えばv1.1
です。
これに加えて全ての番号のブランチに-dev
接尾辞を自動的に加え、VCSリポジトリからインポートしたその他全てのブランチにdev-
の接頭辞を加えます。
両方の場合とも安定性dev
が割り当たります。
このことを念頭に置くと、次の節を読む助けになります。
最小安定性
チェックアウトされてプロジェクトに加わるライブラリのVCSの、ファイルに作用する点はもう1つあります。
Composerでは安定性の制約を指定し、正当と見做すタグを制限できます。
上の例で、最終的な公式リリースの前に、バージョン1.1
にベータ版と2つのリリース候補が、ライブラリでリリースされていることにご注目ください。
composer install
やcomposer update
を走らせるときにこれらのバージョンを取得するには、リリース候補やベータリリース(または所望であればアルファリリース)で良いことをComposerに陽に伝えなければなりません。
これにはプロジェクト範囲のminimum-stability
値をcomposer.json
に使うか、バージョン制約に「安定性フラグ」を使います。
詳しくはスキーマのページをお読みください。
パッケージ制約を書く
Composerでのバージョンの捉え方が分かったところで、プロジェクトの依存関係でバージョン制約を指定する方法についてお話ししましょう。
厳密なパッケージ制約
パッケージの厳密なバージョンを指定できます。 こうすると、このバージョンを、それもこのバージョンだけを、Composerにインストールするよう伝えます。 他の依存関係で違うバージョンが必要なとき、解決器は最終的に失敗し、インストールや更新の処理を途絶します。
例:1.0.2
バージョンの範囲
比較演算子を使うと、正当なバージョンの範囲を指定できます。
正当な演算子は>
、>=
、<
、<=
、!=
です。
複数の範囲を定義できます。
空白 (
) やコンマで区切られた範囲は論理積として扱われます。
二重パイプ (||
) は論理和として扱われます。
積は和より優先されます。
補足: 境界のない範囲を使うときはご注意ください。 後方互換性を壊すバージョンを予期せずインストールすることがあるからです。 安全のため、代わりにキャレット演算子を使うことをご検討ください。
補足: Composerの古いバージョンでは、単一の棒 (
|
) は論理和の推奨される代替案でした。 そのため後方互換性のため、単一の棒 (|
) は論理和として扱われたままになっています。
例:
>=1.0
>=1.0 <2.0
>=1.0 <1.1 || >=1.2
ハイフン版のバージョン範囲 (-
)
含まれるバージョンの集合です。
含まれるバージョンの右部分はワイルドカードが補完されます。
例えば1.0 - 2.0
は、2.0
が2.0.*
になるため、>=1.0.0 <2.1
と等価です。
他方で1.0.0 - 2.1.0
は>=1.0.0 <=2.1.0
と等価です。
例:1.0 - 2.0
ワイルドカードのバージョン範囲 (.*
)
*
ワイルドカードでパターンを指定できます。
1.0.*
は>=1.0 <1.1
と等価です。
例:1.0.*
次の大規模リリースの演算子
チルダのバージョン範囲 (~
)
~
演算子は例で説明するのが1番です。
~1.2
は>=1.2 <2.0.0
と等価です。
一方、~1.2.3
は>=1.2.3 <1.3.0
と等価です。
見て分かる通り、セマンティックバージョニングを尊重するプロジェクトで特に有用です。
よくある使い方は、~1.2
のように(こうすると2.0までの全バージョン、ただし2.0は含まれないものにできます)、依存する最小の小規模バージョンの印を付けることでしょう。
理論上は2.0まで後方互換性の破壊はないでしょうから、うまくいきます。
別の見方は、~
を使って最小バージョンを指定するというものです。
ただし指定された最後の桁は上げられます。
例:~1.2
補足::
2.0-beta.1
は2.0
より厳密には前ですが、~1.2
のようなバージョン制約ではインストールされません。 前述の通り、~1.2
とは.2
が変わることがありますが、1.
の部分は固定されるという意味です。
補足:
~
演算子にはメジャーリリース番号に関して挙動に例外があります。 つまり、例えば~1
は~1.0
と同じですが、これは後方互換性を保とうとする上で、メジャー番号を増やせないからです。
キャレットバージョン範囲 (^
)
^
演算子はとてもよく似た挙動ですが、よりセマンティックバージョニングに密接しており、破壊的でない更新は常に許されます。
例えば^1.2.3
は>=1.2.3 <2.0.0
と等価です。
2.0までのリリースで後方互換性を壊すものはないからです。
1.0より前のバージョンについては、安全性に留意した動作となっており、^0.3
は>=0.3.0 <0.4.0
として、^0.0.3
は>=0.0.3 <0.0.4
として扱います。
これはライブラリのコードを書く際に、最も相互運用性を高くするため推奨される演算子です。
例:^1.2.3
補足: WindowsでPowerShellを使っているとき、例えば
composer require
コマンドを使う際は、CLIで引数としてキャレットを使うときにエスケープしなければなりません。 キャレットがComposerに確実に正しく渡されるようにするため、例えば^^^^1.2.3
のように、4つの連続するキャレット演算子を使わなければなりません。
安定性の制約
安定性を陽に定義しない制約を使うとき、使われた演算子により、Composerは内部的に既定を-dev
または-stable
にします。
これは透過的に起こります。
比較で安定リリースのみを陽に検討したいときは-stable
接尾辞を加えてください。
例:
制約 | 内部 |
---|---|
1.2.3 | =1.2.3.0-stable |
>1.2 | >1.2.0.0-stable |
>=1.2 | >=1.2.0.0-dev |
>=1.2-stable | >=1.2.0.0-stable |
<1.3 | <1.3.0.0-dev |
<=1.3 | <=1.3.0.0-stable |
1 - 2 | >=1.0.0.0-dev <3.0.0.0-dev |
~1.3 | >=1.3.0.0-dev <2.0.0.0-dev |
1.4.* | >=1.4.0.0-dev <1.5.0.0-dev |
しかし制約の水準に強制せず様々な安定性を許すには、@<安定性>
(例:@dev
)のように安定性フラグを使い、与えられたパッケージが既定の最小安定性の設定とは違う安定性でインストールできることをComposerに知らせます。
使える全ての安定性フラグはスキーマのページの最小安定性の節に挙がっています。
まとめ
"require": {
"vendor/package": "1.3.2", // 1.3.2ぴったり
// >, <, >=, <= | 上限と下限を指定
"vendor/package": ">=1.3.2", // 1.3.2以上の全バージョン
"vendor/package": "<1.3.2", // 1.3.2より小さい全バージョン
// * | ワイルドカード
"vendor/package": "1.3.*", // >=1.3.0 <1.4.0
// ~ | 最後の桁は上げられます
"vendor/package": "~1.3.2", // >=1.3.2 <1.4.0
"vendor/package": "~1.3", // >=1.3.0 <2.0.0
// ^ | 破壊的な変更を許しません(セマンティックバージョニングに従い、メジャーバージョンは固定です)
"vendor/package": "^1.3.2", // >=1.3.2 <2.0.0
"vendor/package": "^0.3.2", // >=0.3.2 <0.4.0 // メジャーバージョンが0のときは例外
}
パッケージ制約の確認
semver.madewithlove.comを使ってバージョン制約を確認できます。
パッケージ名を埋めると、Composerによりcomposer.json
ファイルに加わる既定のバージョン制約が自動で埋まります。
バージョン制約を調整すると、ツールにより、合致する全てのリリースが強調されます。
困ったときは
以下はComposerを使う上でよくある罠とその回避方法です。
一般
-
Composerを使っていてどんな問題に直面したときも、必ず 最新版を使って ください。 詳しくはself-updateをご参照ください。
-
誰かに尋ねる前に、
composer diagnose
を走らせてください。 よくある問題を確認できます。 全て確認したら、次の工程にお進みください。 -
curl -sS https://getcomposer.org/installer | php -- --check
としてインストーラの検査を実行し、セットアップに問題がないことを確かめてください。 -
composer clear-cache
を走らせて、Composerのキャッシュを消去してみてください。 -
困ったときは
rm -rf vendor && composer update -v
とし、必ずcomposer.json
から直にvendorをインストール してください。 ただし、既存のvendorのインストールやcomposer.lock
の項目についての障害が考えられる場合は除きます。
パッケージが見付かりません
-
Double-check you don't have typos in your
composer.json
or repository branches and tag names. -
Be sure to set the right minimum-stability. To get started or be sure this is no issue, set
minimum-stability
to "dev". -
Packages not coming from Packagist should always be defined in the root package (the package depending on all vendors).
-
Use the same vendor and package name throughout all branches and tags of your repository, especially when maintaining a third party fork and using
replace
. -
If you are updating to a recently published version of a package, be aware that Packagist has a delay of up to 1 minute before new packages are visible to Composer.
-
If you are updating a single package, it may depend on newer versions itself. In this case add the
--with-dependencies
argument or add all dependencies which need an update to the command.
Package is not updating to the expected version
Try running php composer.phar why-not [package-name] [expected-version]
.
Dependencies on the root package
When your root package depends on a package which ends up depending (directly or indirectly) back on the root package itself, issues can occur in two cases:
-
During development, if you are on a branch like
dev-main
and the branch has no branch-alias defined, and the dependency on the root package requires version^2.0
for example, thedev-main
version will not satisfy it. The best solution here is to make sure you first define a branch alias. -
In CI (Continuous Integration) runs, the problem might be that Composer is not able to detect the version of the root package properly. If it is a git clone it is generally alright and Composer will detect the version of the current branch, but some CIs do shallow clones so that process can fail when testing pull requests and feature branches. In these cases the branch alias may then not be recognized. The best solution is to define the version you are on via an environment variable called
COMPOSER_ROOT_VERSION
. You set it todev-main
for example to define the root package's version asdev-main
. Use for example:COMPOSER_ROOT_VERSION=dev-main composer install
to export the variable only for the call to composer, or you can define it globally in the CI env vars.
根幹パッケージのバージョン制約
Composer relies on knowing the version of the root package to resolve dependencies effectively. The version of the root package is determined using a hierarchical approach:
-
composer.json Version Field: Firstly, Composer looks for a
version
field in the project's rootcomposer.json
file. If present, this field specifies the version of the root package directly. This is generally not recommended as it needs to be constantly updated, but it is an option. -
Environment Variable: Composer then checks for the
COMPOSER_ROOT_VERSION
environment variable. This variable can be explicitly set by the user to define the version of the root package, providing a straightforward way to inform Composer of the exact version, especially in CI/CD environments or when the VCS method is not applicable. -
Version Control System (VCS) Inspection: Composer then attempts to guess the version by interfacing with the version control system of the project. For instance, in projects versioned with Git, Composer executes specific Git commands to deduce the project's current version based on tags, branches, and commit history. If a
.git
directory is missing or the history is incomplete because CI is using a shallow clone for example, this detection may fail to find the correct version. -
Fallback: If all else fails, Composer uses
1.0.0
as default version.
Note that relying on the default/fallback version might potentially lead to dependency resolution issues, especially when the root package depends on a package which ends up depending (directly or indirectly) back on the root package itself.
Network timeout issues, curl error
If you see something along the lines of:
Failed to download * curl error 28 while downloading * Operation timed out after 300000 milliseconds
It means your network is probably so slow that a request took over
300seconds to complete. This is the minimum timeout Composer will use, but
you can increase it by increasing the default_socket_timeout
value in your
php.ini to something higher.
Package not found in a Jenkins-build
-
Check the "Package not found" item above.
-
The git-clone / checkout within Jenkins leaves the branch in a "detached HEAD"-state. As a result, Composer may not able to identify the version of the current checked out branch and may not be able to resolve a dependency on the root package. To solve this problem, you can use the "Additional Behaviours" -> "Check out to specific local branch" in your Git-settings for your Jenkins-job, where your "local branch" shall be the same branch as you are checking out. Using this, the checkout will not be in detached state any more and the dependency on the root package should become satisfied.
I have a dependency which contains a "repositories" definition in its composer.json, but it seems to be ignored.
The repositories
configuration property is
defined as root-only. It is not
inherited. You can read more about the reasons behind this in the "why
can't Composer load repositories
recursively?"
article. The simplest work-around to this limitation, is moving or
duplicating the repositories
definition into your root composer.json.
I have locked a dependency to a specific commit but get unexpected results.
While Composer supports locking dependencies to a specific commit using the
#commit-ref
syntax, there are certain caveats that one should take into
account. The most important one is
documented, but frequently overlooked:
Note: While this is convenient at times, it should not be how you use packages in the long term because it comes with a technical limitation. The composer.json metadata will still be read from the branch name you specify before the hash. Because of that in some cases it will not be a practical workaround, and you should always try to switch to tagged releases as soon as you can.
There is no simple work-around to this limitation. It is therefore strongly recommended that you do not use it.
Need to override a package version
Let's say your project depends on package A, which in turn depends on a specific version of package B (say 0.1). But you need a different version of said package B (say 0.11).
You can fix this by aliasing version 0.11 to 0.1:
composer.json:
{
"require": {
"A": "0.2",
"B": "0.11 as 0.1"
}
}
詳細は別称をご確認ください。
構成値がどこから来たものか調べる
php composer.phar config --list --source
を使うと、それぞれの構成値の出自がわかります。
Memory limit errors
The first thing to do is to make sure you are running Composer 2, and if possible 2.2.0 or above.
Composer 1 used much more memory and upgrading to the latest version will give you much better and faster results.
Composer may sometimes fail on some commands with this message:
PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>
In this case, the PHP memory_limit
should be increased.
Note: Composer internally increases the
memory_limit
to1.5G
.
To get the current memory_limit
value, run:
php -r "echo ini_get('memory_limit').PHP_EOL;"
Try increasing the limit in your php.ini
file (ex. /etc/php5/cli/php.ini
for Debian-like systems):
; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1
Composer also respects a memory limit defined by the COMPOSER_MEMORY_LIMIT
environment variable:
COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>
Or, you can increase the limit with a command-line argument:
php -d memory_limit=-1 composer.phar <...>
However, please note that setting the memory limit using these methods primarily addresses memory issues within Composer itself and its immediate processes. Child processes or external commands invoked by Composer may still require separate adjustments if they have their own memory requirements.
This issue can also happen on cPanel instances, when the shell fork bomb protection is activated. For more information, see the documentation of the fork bomb feature on the cPanel site.
Xdebug impact on Composer
To improve performance when the Xdebug extension is enabled, Composer
automatically restarts PHP without it. You can override this behavior by
using an environment variable: COMPOSER_ALLOW_XDEBUG=1
.
Composer will always show a warning if Xdebug is being used, but you can
override this with an environment variable:
COMPOSER_DISABLE_XDEBUG_WARN=1
. If you see this warning unexpectedly, then
the restart process has failed: please report this
issue.
"The system cannot find the path specified" (Windows)
- Open regedit.
- Search for an
AutoRun
key insideHKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor
,HKEY_CURRENT_USER\Software\Microsoft\Command Processor
orHKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Command Processor
. - Check if it contains any path to a non-existent file, if it's the case, remove them.
SSL certificate problem: unable to get local issuer certificate
- Check that your root certificate store / CA bundle is up to date. Run
composer diagnose -vvv
and look forChecked CA file ...
orChecked directory ...
lines in the first lines of output. This will show you where Composer is looking for a CA bundle. You can get a new cacert.pem from cURL and store it there. - If this did not help despite Composer finding a valid CA bundle, try disabling your antivirus and firewall software to see if that helps. We have seen issues where Avast on Windows for example would prevent Composer from functioning correctly. To disable the HTTPS scanning in Avast you can go in "Protection > Core Shields > Web Shield > uncheck Enable HTTPS scanning". If this helps you should report it to the software vendor so they can hopefully improve things.
API rate limit and OAuth tokens
Because of GitHub's rate limits on their API it can happen that Composer prompts for authentication asking your username and password so it can go ahead with its work.
If you would prefer not to provide your GitHub credentials to Composer you can manually create a token using the procedure documented here.
Now Composer should install/update without asking for authentication.
proc_open(): fork failed errors
If Composer shows proc_open() fork failed on some commands:
PHP Fatal error: Uncaught exception 'ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in phar
This could be happening because the VPS runs out of memory and has no Swap space enabled.
free -m
total used free shared buffers cached
Mem: 2048 357 1690 0 0 237
-/+ buffers/cache: 119 1928
Swap: 0 0 0
To enable the swap you can use for example:
/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/bin/chmod 0600 /var/swap.1
/sbin/swapon /var/swap.1
You can make a permanent swap file following this tutorial.
proc_open(): failed to open stream errors (Windows)
If Composer shows proc_open(NUL) errors on Windows:
proc_open(NUL): failed to open stream: No such file or directory
This could be happening because you are working in a OneDrive directory and using a version of PHP that does not support the file system semantics of this service. The issue was fixed in PHP 7.2.23 and 7.3.10.
Alternatively it could be because the Windows Null Service is not enabled. For more information, see this issue.
Degraded Mode
Due to some intermittent issues on Travis and other systems, we introduced a degraded network mode which helps Composer finish successfully but disables a few optimizations. This is enabled automatically when an issue is first detected. If you see this issue sporadically you probably don't have to worry (a slow or overloaded network can also cause those time outs), but if it appears repeatedly you might want to look at the options below to identify and resolve it.
If you have been pointed to this page, you want to check a few things:
- If you are using ESET antivirus, go in "Advanced Settings" and disable "HTTP-scanner" under "web access protection"
- If you are using IPv6, try disabling it. If that solves your issues, get in touch with your ISP or server host, the problem is not at the Packagist level but in the routing rules between you and Packagist (i.e. the internet at large). The best way to get these fixed is to raise awareness to the network engineers that have the power to fix it. Take a look at the next section for IPv6 workarounds.
- If none of the above helped, please report the error.
Operation timed out (IPv6 issues)
You may run into errors if IPv6 is not configured correctly. A common error is:
The "https://getcomposer.org/version" file could not be downloaded: failed to
open stream: Operation timed out
We recommend you fix your IPv6 setup. If that is not possible, you can try the following workarounds:
Generic Workaround:
COMPOSER_IPRESOLVE=4
環境変数を設定すると、curlをIPv4を使ってドメイン解決するよう強制します。
これはcurl拡張がダウンロード用に使われるときだけ機能します。
Workaround Linux:
On linux, it seems that running this command helps to make ipv4 traffic have a higher priority than ipv6, which is a better alternative than disabling ipv6 entirely:
sudo sh -c "echo 'precedence ::ffff:0:0/96 100' >> /etc/gai.conf"
Workaround Windows:
On windows the only way is to disable ipv6 entirely I am afraid (either in windows or in your home router).
Workaround Mac OS X:
Get name of your network device:
networksetup -listallnetworkservices
Disable IPv6 on that device (in this case "Wi-Fi"):
networksetup -setv6off Wi-Fi
Composerを実行……
You can enable IPv6 again with:
networksetup -setv6automatic Wi-Fi
That said, if this fixes your problem, please talk to your ISP about it to try to resolve the routing errors. That's the best way to get things resolved for everyone.
Composer hangs with SSH ControlMaster
When you try to install packages from a Git repository and you use the
ControlMaster
setting for your SSH connection, Composer might hang
endlessly and you see a sh
process in the defunct
state in your process
list.
The reason for this is a SSH Bug: https://bugzilla.mindrot.org/show_bug.cgi?id=1988
As a workaround, open a SSH connection to your Git host before running Composer:
ssh -t git@mygitserver.tld
php composer.phar update
詳しくは https://github.com/composer/composer/issues/4180 も参照。
Zip archives are not unpacked correctly.
Composer can unpack zipballs using either a system-provided unzip
or 7z
(7-Zip) utility, or PHP's native ZipArchive
class. On OSes where ZIP files
can contain permissions and symlinks, we recommend installing unzip
or
7z
as these features are not supported by ZipArchive
.
Disabling the pool optimizer
In Composer, the Pool
class contains all the packages that are relevant
for the dependency resolving process. That is what is used to generate all
the rules which are then passed on to the dependency solver. In order to
improve performance, Composer tries to optimize this Pool
by removing
useless package information early on.
If all goes well, you should never notice any issues with it but in case you
run into an unexpected result such as an unresolvable set of dependencies or
conflicts where you think Composer is wrong, you might want to disable the
optimizer by using the environment variable COMPOSER_POOL_OPTIMIZER
and
run the update again like so:
COMPOSER_POOL_OPTIMIZER=0 php composer.phar update
Now double check if the result is still the same. It will take significantly longer and use a lot more memory to run the dependency resolving process.
If the result is different, you likely hit a problem in the pool optimizer. Please report this issue so it can be fixed.
2.8.9 2025-05-13
- バージョン検証でのjson schemaの問題を修正 (#12376)
update --lock
後に無駄にbump-after-update
し始めてしまう点を直しました (#12371)ZipArchive
を使って解凍するとき、zip爆弾の偽陽性の判定がされてしまう点を直しました (#12409)- 空のアーカイブが作られてしまっていた点を直しました (#12408)
composer <スクリプト名
で実行するとき、実行するスクリプトの出力を削除しました (#12383)
2.8.8 2025-04-04
- バージョン検証でjson schemaの問題を修正 (#12367)
- 32ビットのマシンで走らせるときの問題を修正 (#12365)
2.8.7 2025-04-03
- 依存関係にあるjustinrainbow/json-schemaを6.xに更新 (#12348)
- Composerが開始する並列プロセスの最大数を制御する
COMPOSER_MAX_PARALLEL_PROCESS
環境変数を追加 (#12356) diagnose
コマンドの出力にzstd/brotliの存在有無を追加- エラー制御を修正し、非推奨の注意書きで散らからないようにしました (#12360)
- Composerの実行時に、InstalledVersionsが重複するデータを返していた点を修正 (#12225)
--with ...
制約の扱いを修正し、別名で置き換えられたパッケージに適用するようにしました (#12353)- ベンダーディレクトリ内で、IDEのコードインスペクションに非推奨の警告が出てくる問題を修正 (#12331)
- json schemaの完全性の問題を修正 (#12332, #12321)
- パス内の.pharが付くファイルの自動読み込みでの問題を修正 (#12326)
2.8.6 2025-02-25
--with[-all]-dependencies
フラグを有効にする環境変数COMPOSER_WITH_DEPENDENCIES
とCOMPOSER_WITH_ALL_DEPENDENCIES
を追加 (#12289)- 特定のスクリプトハンドラがスクリプト名でスキップされるようにするための、環境変数
COMPOSER_SKIP_SCRIPTS
を追加 (#12290) - Avastとcurlの証明書エラーが一緒に検出されたときのエラーヒントを追加 (#9894)
- アーカイブ作成時の、フォルダ名中のバックスラッシュの扱いを修正 (#12327)
- containerdの検出を修正し、コンテナでrootの使用についての警告がないようにしました (#12299)
2.8.5 2025-01-21
-
Added build provenance attestation so you can also now download and verify phar files from GitHub releases:
gh release --repo composer/composer download --pattern composer.phar gh attestation verify --repo composer/composer composer.phar
-
非対応の
funding
の値により、パッケージの解析エラーが起こっていた点を修正 (#12247) -
新しい寄付の書式への対応を修正 (#12257)
-
reload()
を使うときの、2.8.4であったInstalledVersionsの退行問題を修正 (#12269) -
psr-0/psr-4の規則が、
vendor/composer/autoload*.php
において不定の順番になっていた点を修正 (#12263) -
特定の状況下で、誤って起こっていた警告を修正 (#12284, #12268, #12283)
2.8.4 2024-12-11
audit
コマンドの終了コードに意味がなかった点を修正しました(脆弱性のとき1、放棄されているときは2、両方では3になりました) (#12203)- 複数のクラスが定義されている場合の、プラグインの更新時の問題を修正しました (#12226)
- phpの設定によって、出力に現れていた重複するエラーを修正しました (#12214)
- InstalledVersionsがある場合に重複するデータを返していた点を修正しました (#12225)
- installed.phpを修正し、整列が決定的になるようにしました (#12197)
- インラインの制約を使っているときに
bump-after-update
が失敗する点を修正しました (#12223) create-project
コマンドを修正しました。 パスリポジトリを引数に使った場合、シンボリックリンクを無効にするようになりました (#12222)validate --no-check-publish
を修正し、全面的に公開のエラーを隠すようにしました。 無関係なエラーのためです (#12196)- composer auditが失敗したとき、
audit
コマンドが失敗コードを返していた点を修正しました。 ビルドの失敗を引き起こすべきではないためです。 ただ、ビルドの一過程でauditを走らせること自体、あまり感心しません (#12196) - curlの使い方を修正し、プロキシが使われているときに壊れたバージョンで多重化を無効にするようにしました (#12207)
2.8.3 2024-11-17
- Windowsでのプロセス探索の扱いを修正 (#12180)
- react/promiseの要件で2.xのインストールができるように改めて修正 (#12188)
- lock:falseがrequireコマンドやbumpコマンドで設定されたときの問題を修正
2.8.2 2024-10-29
- プロバイダに説明がないとき、プロバイダの提案時にクラッシュしていた点を修正 (#12152)
- 特定の状況で、スキーマに違反する固定ファイルが作られる問題を修正 (#12149)
- 相対パスのリポジトリのパスを使う際に、2.8.1で生じた
create-project
の退行問題を修正 (#12150) - ctrl-Cで中断する操作が、テキストプロンプトで機能していなかった点を修正 (#12106)
- 所有権の違反でgitによりリポジトリが読み込めなかったときに、gitがひとりでに失敗していた点を修正 (#12178)
- プロキシを介してPHPでないバイナリを実行しているときの、シグナルの扱いを修正しました (#11716)
2.8.1 2024-10-04
init
コマンドを修正し、使用許諾が与えられなかったときの退行問題を修正しました (#12145)--strict-ambiguous
フラグの扱いを修正しました。 全ての問題を報告しないことがありました (#12148)create-project
を修正し、インストールされるプロジェクトファイルのフォルダのパーミッションを継承するようにしました (#12146)- 親ディレクトリのcomposer.jsonを使うときのプロンプトが、正しく動かない場合があった点を修正しました (#8023)
2.8.0 2024-10-02
- 後方互換性についての警告:
https_proxy
環境変数がhttp_proxy
の値にフォールバックする点を修正しました。 2.7.3のリリースノートの通り、フォールバックと警告は削除されました (#11938, #11915)。 update
コマンドに--patch-only
フラグを追加しました。 これにより、更新をパッチバージョンに制限し、全ての依存関係がより安全な方へ更新されます (#12122)audit
コマンドに--abandoned
フラグに追加しました。 放棄されたパッケージの扱い方が構成されます。audit.abandoned
構成設定を上塗りします (#12091)audit
コマンドに--ignore-severity
フラグを追加しました。 1つ以上の勧告の深刻度を無視します (#12132)update
コマンドに--bump-after-update
フラグを追加します。 更新が完了した後にbumpを走らせます (#11942)scripts
のうち、どれが追加のCLIの引数を受け取るかを制御する方法を追加しました。 また、コマンドのどこに入れるかも制御できます。 ドキュメントを参照してください (#12086)allow-missing-requirements
構成設定を追加しました。 固定ファイルがcomposer.jsonの依存関係を満たさないときのエラーを飛ばすものです (#11966)- composer.lockファイルのJSONスキーマを追加しました (#12123)
- Bitbucketのアプリパスワード対応を改善しました。 リポジトリをクローンしたりソースからインストールしたりする部分です (#12103)
reinstall
コマンドに--type
フラグを追加し、種別でパッケージを絞り込めるようにしました (#12114)dump-autoload
コマンドに--strict-ambiguous
フラグを追加しました。 重複するクラスが見つかったときにエラーコードを返すようにします (#12119)- ベンダーファイルが削除されたときに
dump-autoload
で出す警告を加えました (#12139) create-project
を走らせる際、欠けている各プラットフォームパッケージに警告を追加しました。 何度も走らせなくていいようにするためです (#12120)sort-packages
が有効のとき、allow-pluginsにパッケージの整列を追加しました (#11348)- extやlibのパッケージが欠けているときの、プロバイダパッケージやポリフィルの提案を追加しました (#12113)
- 最初に全てのパッケージと取り得る更新情報を出力し、対話的なパッケージの更新の選択を改善しました (#11990)
- 決定論的で(しばしば)論理的な方法で出力を整列し、依存関係の解決の失敗の出力を改善しました (#12111)
- PHP 8.4の
E_STRICT
の非推奨の警告を修正しました (#12116) init
コマンドを修正し、与えられた使用許諾の識別子を検証するようにしました (#12115)- 機能パッケージが2つの主線ブランチのどちらかに由来する可能性があると思われるとき、バージョンの推定を、機能ブランチに基づいてより決定論的になるよう修正しました (#12129)
- COMPOSER_ROOT_VERSION環境変数の扱いを修正しました。 例えば1.1の扱いは1.2.x-devと同じにし、1.2.0とは違うようにしました (#12109)
- requireコマンドを修正し、固定ファイルの新しい安定性フラグを飛ばすようにしました。 以前は固定ファイルの不当な差分が生じていました (#12112)
- php://stdin を修正しました。 Composerをプラグラムで走らせているときに複数回開く可能性がありました (#12107)
- プラットフォームパッケージの扱いを修正しました。 why-notコマンドと部分更新の部分です (#12110)
- 2.7.8で入った「transport-options.sslについて、ローカルの証明書の認証がロックファイルに保管されて、可搬でなかった点を修正しました (#12019)」が壊れていたため、差し戻しました。
2.7.9 2024-09-04
- 制約のある環境でのDockerの検出が壊れていた点を修正しました (#12095)
- bash補完スクリプトの上流の問題を修正しました。
completion
コマンドで更新することをお勧めします (#12015)
2.7.8 2024-08-22
outdated
のJSON出力にrelease-age
とrelease-date
とlatest-release-date
を加えました (#12053)- PHP 8.4の非推奨の警告を修正しました。
- ブランチを解決する部分を修正し、
#
記号を含むものでも機能するようにしました (#12042) bump
コマンドについて、~
制約が正しく扱われていなかった点を直しました (#11889)- COMPOSER_AUTHが./auth.jsonより優先度が上でなかった点を修正しました (#12084)
relative: true
について、パスのリポジトリのシンボリックリンクが考慮されないことがあった点を修正しました (#12092)- キャッシュからの複製について、VirtualBoxの共有フォルダを使うときに失敗することがあった点を修正しました (#12057)
- PSR-4の自動読み込み順序について、エッジケースの退行問題を修正しました (#12063)
- 重複するlib-*パッケージにより、peclとcoreのバージョンの同じPHP拡張があるときに問題が生じていた点を修正しました (#12093)
- transport-options.sslについて、ローカルの証明書の認証がロックファイルに保管されて、可搬でなかった点を修正しました (#12019)
- メモリに関して、大きなバイナリをインストールするときの問題を修正しました (#12032)
archive
コマンドについて、windowsでパスのrealpathが取れないときにクラッシュする点を修正しました (#11544)- API: BasePackage::STABILITIESをもって、BasePackage::$stabilitiesを廃止しました (685add70ec)
- Dockerの検出を改善しました (#12062)
2.7.7 2024-06-10
- セキュリティ:悪意のあるgitブランチ名を介したコマンドインジェクションに対して修正しました (GHSA-47f6-5gq3-vx9c / CVE-2024-35241)。
- セキュリティ:悪意のあるgit/hgブランチ名を介した複数のコマンドインジェクションに対して修正しました (GHSA-v9qv-c7wm-wgmf / CVE-2024-35242)。
- セキュリティ:不正なURLの形式を使って迂回される可能性のあったsecure-http検査を修正しました (fa3b9582c)。
- セキュリティ:linuxにおけるwindows固有の検査を含むFilesystem::isLocalPathを修正しました (3c37a67c)。
- セキュリティ:perforceへの引数のエスケープを修正しました (3773f775)。
- セキュリティ:アーカイブを解凍するときのzip爆弾の扱いを修正しました (de5f7e32)。
- セキュリティ:Windowsのコマンドの仮引数のエスケープを修正し、エンコーディングの変換の最尤一致によるユニコード文字の濫用を防止しました (3130a7455, 04a63b324)。
- 隠された規則の名前空間に合致しないクラスに対するPSR違反を修正しました。 これにより新たに違反項目が見つかるかもしれません (#11957)。
- プラグインがベンダーディレクトリにあるものの、ブランチを変えた後に必要でなくなったり使えなくなったりしたときのUXを修正しました (#12000)。
- 固定ファイルが古いとき、composer.jsonの新しいプラットフォーム要件が検査されない点を修正しました (#12001)。
config
コマンドがautoloadキーを削除する機能を修正しました (#11967)。init
コマンドでの空のtype
への対応を修正しました (#11999)。- gitの構成で
safe.bareRepository
がstrict
に設定されているときのgitクローンのエラーを修正しました (#11969)。 - PHP <8.1でネットワークエラーが表示される退行問題を修正しました (#11974)。
- 一部の警告でのカラーブリードを修正しました (#11972)。
2.7.6 2024-05-04
- スクリプト制御子が私有コールバックを使う自動読み込み器を加えるときの退行問題を修正しました (#11960)。
2.7.5 2024-05-03
remove
コマンドにuninstall
の別称を加えました (#11951)。- 転送で例外を起こすcurlの壊れたバージョン8.7.0/8.7.1のための対処法を加えました (#11913)。
- Podmanコンテナ内で表示される、rootを使うときの警告を修正しました (#11946)。
- configコマンドがある状況で正しくオブジェクトを扱っていなかった点を修正しました (#11945)。
- プロジェクトディレクトリがシンボリックリンクのとき、バイナリプロキシが正しいパスを含んでいなかった点を修正しました (#11947)。
- イベント制御子(scriptsとplugins)から読み込まれたときに、Composerの自動読み込み器がプロジェクトの自動読み込み器から無視される点を修正しました (#11955)。
- TransportException(httpの失敗)が個別の終了コードでなかった点を修正しました (#11954)。
100
のコードで終わるようになりました。
2.7.4 2024-04-22
- composer/composerのバージョンpre-2.7.3を要件とするプロジェクトでの退行問題(
Call to undefined method ProxyManager::needsTransitionWarning()
)を修正しました (#11943, #11940)。
2.7.3 2024-04-19
- 後方互換性についての警告:
https_proxy
環境変数がhttp_proxy
の値にフォールバックする点を修正しました。 まだそのままになっていますが、警告を伴うようになりました。 https_proxyを空に設定してフォールバックを除くことができるようになりました。 Composer 2.8.0ではフォールバックを削除するため、本警告にご注意ください (#11915)。 show
コマンドとoutdated
コマンドを修正し、パッケージの一覧を表示するときの先頭のv
を除きました。 例えばv1.2.3
のような見た目をしていました (#11925)。audit
コマンドを修正し、CVEが存在しないときに識別番号を表示しないようにしました。 勧告識別番号が表示されるようになりました (#11892)。project
種別を持つパッケージで表示される既定のバージョンが欠けていることについての警告を修正しました。 これらのパッケージは大抵バージョン管理されておらず、循環参照がないためです (#11885)。- PHP 8.4の非推奨の警告を修正しました。
clear-cache
コマンドを修正し、ローカルのcomposer.jsonのconfig.cache-dir設定を考慮するようにしました (#11921)。status
コマンドが失敗したダウンロードとインストールのプロミスを正しく扱っていなかった点を修正しました (#11889)。- GitHubの寄付ファイルの
buy_me_a_coffee
への対応を追加しました (#11902)。 - SSHのURLに
hg
の対応を追加しました (#11878)。 - 幾つかの環境変数を修正し、整数値がクラッシュを起こさないようにしました (#11908)。
- IOInterfaceをPSR-3ロガーとして使う際に文脈データが出力されないように修正しました (#11882)。
2.7.2 2024-03-11
composer --version
を走らせる際に、PHPのバージョンについての情報を追加しました (#11866)。- 根幹のバージョンが見合たらなかったときの警告を追加しました (#11858)。
- ルート権限で走らせる際に、幾つかの状況下では依然としてプラグインが有効だった問題を修正しました (c3efff91f)。
outdated --ignore ...
が依然として無視されたパッケージの最新版を読み込もうとしていた問題を修正しました (#11863)。- インストールパスの途中でシンボリックリンクが壊れたときの対処について修正しました (#11864)。
update --lock
が依然として幾つかのメタ情報を間違った内容で更新していた問題を修正しました (#11850, #11787)。
2.7.1 2024-02-09
- 2.7.0で利用者が出喰わすよくある問題に対して補足を入れるために、プラグインが無効化されたときの警告を幾つか追加しました (#11842)。
- pharから走らせたときに
diagnose
でのComposerの依存関係の監査が失敗する問題を修正しました。
2.7.0 2024-02-08
- セキュリティ:危殆化したベンダーディレクトリの内容を介したコードの実行と権限昇格の可能性を修正しました (GHSA-7c6p-848j-wh5h / CVE-2024-24821)。
audit.abandoned
構成設定の期待値をfail
に変更しました。 望ましくなければreport
やignore
に設定してください。 またはCOMPOSER_AUDIT_ABANDONED
環境変数も使えます (#11643)。update
/require
/remove
コマンドに--minimal-changes (-m) フラグを追加し、--with-dependenciesで部分的な更新を掛けつつ、推移的な依存関係で絶対に必要なものだけを変更できるようにしました (#11665)。outdated
/show
コマンドに--sort-by-age (-A) フラグを追加し、それぞれリリース日による整列(古いものが最初に来ます)とリリース日の表示ができるようにしました (#11762)。show
コマンドで--self
を--installed
や--locked
と組み合わせる対応を追加しました。 根幹パッケージを出力されるパッケージの一覧に追加できるようにするための変更です (#11785)。- 深刻度の情報を
audit
コマンドの出力に追加しました (#11702)。 - composer.jsonに
scripts-aliases
最上位キーを追加しました。 定義した自前のスクリプトに別称を定義できます (#11666)。 - 接続が時間切れになったときにIPv4にフォールバックする対応を加えました。
また、IPv4やIPv6に強制するための環境変数
COMPOSER_IPRESOLVE
も追加しました。 それぞれ4
および6
に設定できます (#11791)。 outdated
の--ignore引数にワイルドカードの対応を追加しました (#11831)。bump
コマンドに、*
を>=現在のバージョン
に上げる対応を追加しました (#11694)。validate
コマンドに、どうあっても照合する可能性のない制約の検出を追加しました (#11829)。- とても冗長なモード (-vv) で走らせているときに、パッケージのソース情報を
install
の出力に追加するようにしました。 diagnose
コマンドでComposer自体に含まれる依存関係の監査を追加しました (#11761)。diagnose
コマンドの出力にGitHubトークンの失効日を追加しました (#11688)。- why/why-notコマンドに非ゼロの状態コードを追加しました (#11796)。
show --direct <package>
を間接ないし推移的な依存関係で呼び出したときのエラーを追加しました (#11728)。COMPOSER_FUND=0
環境変数を追加し、募金の呼び掛けを隠せるようにしました (#11779)。bump
コマンドを修正し、v
前置詞が必要なパッケージのバージョンを上げないようにしました (#11764)。- ルートユーザーとして非対話的に走らせているときに、プラグインが自動的に無効になる事象を修正しました。
update --lock
を修正し、distのreference/url/checksumがピン留めされたままになっていなかった点を修正しました (#11787)。- 固定ファイルが存在していない場合に
require
コマンドが最後にクラッシュする問題を修正しました (#11814)。 - 固定された依存関係を監査するときにルートの別称が問題を起こす点を修正しました (#11771)。
require
コマンドで4つのコンポーネントでバージョンを扱うときの問題を修正しました (#11716)。- Symfony 7の互換性の問題を修正しました。
require
コマンドの--dry-runの後、composer.jsonが最新の状態に追従できない問題を修正しました (#11747)。- 特定の状況下で警告が間違って表示されていた点を修正しました (#11786, #11760, #11803)。
2.6.6 2023-12-08
- 要件symfony/consoleから7.xを除外するように修正しました。 Composer 2.6とは互換性が無いからです。 2.7では互換性があるでしょう (#11741)
- libpqの解析を修正し、可能であれば大域定数を使うようにしました (#11684)
- 一時制約の失敗があった更新でのエラー出力を修正しました (#11692)
2.6.5 2023-10-06
- vendorディレクトリに壊れたシンボリックリンクが含まれる場合の失敗を修正しました (#11670)。
- Composerのzipアーカイブから欠けていたcomposer.lockを修正しました (#11674)。
- 2.6.4で変わったAutoloadGenerator::dump()の非BCシグネチャを修正しました (cb363b0e8)。
2.6.4 2023-09-29
- セキュリティ:composer.pharが公開されててアクセスでき、PHPとして実行でき、php.iniでregister_argc_argvが有効なとき、遠隔コード実行の脆弱性がありえた点を直しました (GHSA-jm6m-4632-36hf / CVE-2023-43655)。
- auditコマンドで放棄されたパッケージのjson出力を直しました (#11647)。
- プール最適化の工程を効率良くしました (#11638)。
show -a <パッケージ名>
の効率良くしました (#11659)。