Edited at

逆引き!Composer コマンド・ライン一覧


PHP のパッケージマネージャー Composer

この記事は、Composer のコマンド・ライン一覧への逆引き辞書です。追加・誤記修正・同じコマンドの別表記など遠慮なく編集リクエスト下さい。ほぼ自動で反映させます。


  • Composer とは1



まえがき

曰く


composer.json の require を直接編集してはいけない」by @tadsan @ Qiita


つまり $ vi composer.jsoncomposer.json を直接エディタで編集するのはバッドノウハウ


コマンド・ラインで追記する例

$ # 文法

$ # composer require [vendor]/[package]
$ # 使用例
$ composer require symfony/console

餅は餅屋に任せた方が安心でうまいということ。JSON からエスケープなんて考えなくていいんだよ。

ただ Composer の中の人たちは「JSON なんだから何でも CLI で変更させる必要はないんだ、マイフレンド」というスタンスのようで、autoload などの設定はコマンド・ラインからは追加できません。(´・ω・`)


Composer コマンド・ライン一覧


逆引き一覧

README.md


  • 本記事は composer.pharcomposer としてパスを通すことを前提としています。

  • パスを通していない場合は $ composer [hoge] の箇所を $ php composer.phar [hoge] など、composer.phar の実際の設置先と置き換えて下さい。


  • $ composer の表記はコマンド・ラインでの入力例です。

  • ユーザー指定の必須項目は [] で囲っています。



    • $ composer require [vendor]/[package]$ composer require KEINOS/projectX



  • デフォルトの設定として登録する場合は global オプションをつけてください。



    • $ composer require [vendor]/[package]$ composer global require [vendor]/[package]




  • composer.json のある作成中のアプリ(ライブラリ、プロジェクト、etc)は「自身のパッケージ」と呼んでいます。(Rootパッケージ = 自身のパッケージ)



composer.json の新規作成・初期化

▼ 新規パッケージ作成(自身のパッケージ作成)用に composer.json ファイルを対話式で作りたい(初期化したい)

$ composer init

▼ 新規パッケージ作成時に依存パッケージも指定しておきたい(ついでに require もしておきたい)

$ composer init --require [vendor/package1] [vendor/package2]

▼ 新規パッケージ作成時に依存パッケージもバージョンで指定しておきたい

$ composer init --require vendor/package1:1.0.0

▼ 新規パッケージ作成時に開発用のパッケージも指定しておきたい(ついでに require-dev もしておきたい)

$ composer init --require-dev [vendor/package1] [vendor/package2]

▼ 新規パッケージ作成時に GitHub 上の自作パッケージも指定したい(一緒に require しておきたい)

composer init --repository '{"type":"vcs","url":"https://github.com/[YOUR]/[REPO]"}' --require [vendor]/[package]:dev-master


複製/フォーク

▼ 利用可能なリポジトリにある既存のパッケージを複製して自身のパッケージにしたい(パッケージをフォークしたい)

$ composer create-project [vendor]/[package]


アーカイブ/バックアップ

▼ 依存ファイル含め自身のパッケージをまるごと zip/tar アーカイブしたい


ZIP

$ composer archive [vendor]/[package] [version] --format=zip



TAR

$ composer archive [vendor]/[package] [version] --format=tar


▼ 依存ファイル含め指定したパッケージをまるごとアーカイブ/バックアップしたい


ZIP

$ composer archive [vendor]/[package] [version] --format=zip



TAR

$ composer archive [vendor]/[package] [version] --format=tar



パッケージのインストール


  • パッケージのインストール後に、パッケージを追加したい場合は「追加」セクションをご覧ください。

  • インストール済みのパッケージを確認したい場合は「確認・チェック」セクションをご覧ください。

composer.json に記載されたパッケージや依存を、現在のプロジェクト(パッケージ)にインストールしたい

$ composer install

composer.json に記載されたパッケージや依存を、現在のプロジェクト(パッケージ)にインストールする前に、インストールの挙動を確認したい。(インストールの事前確認)

$ composer install --dry-run

composer.json別名ファイルからパッケージをインストールしたい


composer-other.jsonの例

$ COMPOSER=composer-other.json composer install


▼ 依存パッケージのインストールを vendor とは違うディレクトリにインストールしたい


hogeにディレクトリを1回のみ設定

$ COMPOSER_VENDOR_DIR=hoge composer install



hogeにディレクトリを固定設定する例

$ composer config vendor-dir hoge


▼ 依存パッケージのベンダー・バイナリを bin とは違うディレクトリにインストールしたい


ディレクトリがfugaの例

$ COMPOSER_BIN_DIR=fuga composer install


▼ 依存パッケージのインストール時にプロクシを通してインストールしたい

$ http_proxy=[URL Proxy] composer install


更新(アップデート)

composer.json に記載されているパッケージや依存をすべて最新にしたい

$ composer update

composer.json に記載されているパッケージや依存をすべて最新にする前に挙動を確認したい(アップデートの事前動作確認)

$ composer update --dry-run

composer.json に記載された特定のパッケージとその依存のみを最新にしたい

$ composer update [vendor]/[package]

composer.json に記載された特定のベンダーのすべてのパッケージとその依存を最新にしたい

$ composer update [vendor]/*

▼ インストール済みのパッケージで更新可能なパッケージを知りたい

$ composer outdated

$ composer show -lo

composer 本体(composer.phar)を最新にしたい

$ composer self-update

composer 本体(composer.phar)を指定したバージョンに変更したい


v1.0.0-alpha7の例

$ composer self-update 1.0.0-alpha7


composer.jsonクラスマップの変更を autoloader.php に反映させる

$ composer dump-autoload

composer.json名前空間の割り当てマップの変更を autoloader.php に反映させる

$ composer dump-autoload


追加

composer.jsonパッケージを追加したい(from 利用可能なリポジトリ)

$ composer require [vendor]/[package]

composer.jsonパッケージを対話形式で追加したい

$ composer require

composer.json指定したバージョンのパッケージを追加したい


v2.1の例

$ composer require [vendor]/[package]:2.1


composer.json指定したメジャー・バージョンの最新パッケージを追加したい


v1.*の例

$ composer require [vendor]/[package]:1.*


composer.json指定したパッケージのマスターの最新版を追加したい(リリースの最新ではない)

$ composer require [vendor]/[package]:dev-master

composer.jsonGitHub の自分のリポジトリを追加(登録)したい

$ composer config repositories.github.com vcs https://github.com/[YOUR]/[REPO]

$ composer config repositories.github.com '{"type": "vcs", "url": "https://github.com/[YOUR]/[REPO]", "//url": "https://github.com/[YOUR]/[REPO].git"}'

composer.jsonGitHub 上のパッケージを追加したい


  1. GitHub を検索対象リポジトリに追加する


  2. $ composer require [vendor]/[package]:dev-master を実行する

composer.jsonconfig キーに要素を追加したい


"bin-dir"キーに"bin/"を追加

$ composer config bin-dir bin/


以下の要素が追加されます。なお、追加できるキーは composer が認識できるものに限ります。

"config": {

"bin-dir": "bin/"
}


削除

composer.json の設定およびインストール済みのパッケージを削除したい

$ composer remove [vendor]/[package]

複数パッケージを一気に削除したい

$ composer remove [vendor]/[package1] [vendor]/[package2]

削除するパッケージを複数指定したい

$ composer remove [vendor]/[package1] [vendor]/[package2]

composerキャッシュ・ディレクトリを空にしたい(キャッシュをクリアしたい)

$ composer clear-cache


設定・修正

composer.json の設定内容を変更したい

config, repositories のキーのみ、コマンドで変更できます。

$ composer config [options] [setting-key] [setting-value1] ... [setting-valueN]

composer.json"config": { "bin-dir": "bin/" } の "bin/" を "phar/" に変えたい場合

$ composer config bin-dir phar/

▼ 自身のパッケージに登録済みのリポジトリ情報を修正する

$ composer config repositories.[ID] vcs https://qithub.com/[foo]/[bar]

composer.json の設定項目を削除したい

$ composer config --unset [setting-key]


確認・チェック

composer のヘルプを確認する

$ composer help

composer でインストール済みのパッケージ情報を確認する

$ composer show -i

$ composer show --installed


グローバール・インストール

$ composer global show -i

$ composer global show --installed

composer の特定のコマンドのヘルプを確認する

$ composer help [command]

composer.json の設定内容を一覧で確認したい

$ composer config --list

▼ 自身のパッケージの診断を行い結果を確認する

$ composer diagnose

composer.json でインストールしたパッケージが利用している環境で使えるか確認したい

$ composer check-platform-reqs

composer.json の必要要件を満たしているか確認したい

$ composer check-platform-reqs

▼ インストール済みのパッケージ一覧を確認したい

$ composer show

▼ インストール済みのパッケージをベンダーで絞りたい

$ composer show [vendor]/*

▼ 指定したインストール済みのパッケージの詳細を確認したい

$ composer show [vendor]/[package]

▼ インストール済みのパッケージでアップデートがあるか確認したい

$ composer outdated

$ composer show -lo

▼ 自身のパッケージのホームページもしくはリポジトリのサイトを表示して確認する

$ composer home

$ composer browse

▼ すでにインストール済みのパッケージから、追加インストールのオススメを確認したい

$ composer suggests

▼ すでにインストール済みのパッケージの依存関係を確認したい

$ composer depends [vendor]/[package]

$ composer why [vendor]/[package]

▼ すでにインストール済みのパッケージがどのパッケージの依存関係でインストールされたか知りたい

$ composer depends [vendor]/[package]

$ composer why [vendor]/[package]

▼ インストールできなかったパッケージがなぜインストール出来なかったか確認する

$ composer prohibits [vendor]/[package]

▼ 自身のパッケージおよび依存パッケージ(追加済みパッケージ)で PHP のバージョン・アップに対応できるか確認する


PHP8にバージョンアップ可能かの例

$ composer prohibits php:8


▼ 自身のパッケージの composer.json に不備がないか確認する

$ composer validate

▼ 自身のパッケージ内のインストール済みパッケージが変更されていないか(マスターとの差分を)確認する

$ composer status

▼ 自身のパッケージおよび依存パッケージのバージョンやライセンスを表示する

$ composer licenses


json形式で表示

$ composer licenses --format=json


▼ インストール済みのパッケージでベンダーが提供しているバイナリ/スクリプトを確認する

$ composer exec

$ composer exec --list

vendor/bin にあるバイナリ/スクリプトを確認する

$ composer exec

$ composer exec --list

▼ 自身のパッケージの composer.json に記載された実行スクリプトを実行する

$ composer run-script [script name] [args]

vendor/bin にあるバイナリ/スクリプトを実行して確認する

$ composer exec [script name] [args]


検索

▼ 自身のパッケージで利用可能なリポジトリのパッケージを検索する

$ composer search [package]






  1. 【Composer とは】


    PHP における Composer とは PHP ライブラリのパッケージ・マネージャーのことです。Docker の compose とは似て非なるものです。

    パッケージ・マネージャーとは、Python における pip、Ruby における gem、Node.js における npm、Anaconda における conda、Debian における apt、CentOS における yum、Alpine における apk、Mac における brew、Windows における choco などのように、自身もしくは他者が開発したプロジェクト/ライブラリ/ツール/プログラム/etc.(これらを総称して「パッケージ」) の管理を補佐するためのツールです。
    つまり、パッケージの「ダウンロード」「更新」「削除」「共有」を手助けしてくれるツールです。PHP の composer の場合は、位置付け的に Python の pip や Node.js の npm が一番近いかもしれません。

    パッケージ・マネージャーの特徴として「依存関係の管理」があります。つまり、「パッケージ A を使うためには、パッケージ B のバージョン X が必要」といった場合に、必要なメインのパッケージを宣言するだけで、芋づる式に必要な(関係する)他のパッケージも管理してくれます。

    composer のパッケージの管理方法は、自身の PHP プロジェクト(PHP プログラム)に composer.json の JSON ファイルを置き、composer プログラムを実行することで依存パッケージのダウンロードなどが行えます。逆に言えば、この内容が自分の「プロジェクトの依存関係を記載したファイル」ということでもあります。これが自分のアプリも「パッケージ」と呼ばれるゆえんです。そして、この仕組みにより自分のプログラムが他のプログラムからでも気軽に(依存の心配をせずに)使ってもらえるようになっています。また、依存プログラムも一緒に配布しなくても済むため、開発用の配布データのサイズが小さくなるというメリットもあります。

    パッケージのダウンロードcomposer の場合、指定されたリポジトリから行われます。デフォルトでは、composer の有志のコミュニティが管理している Packagist のリポジトリが検索対象になっており、Packagist に登録されたパッケージはリポジトリの追加なく「vendor/package」(作者名/パッケージ名)を指定するだけで使えるようになっています。プライベートなパッケージ(ライブラリ)や GitHub などに公開したパッケージは、リポジトリを追加することで利用できます。macOS の brew で言うところの tap みたいなものです。

    composer.lock とはcomposer コマンドを実行した際に作成・更新される「ダウンロードされたパッケージの諸情報」が記載されているファイルです。自身のパッケージが動作した時点での動作確認の取れたパッケージ類と各々のバージョン情報が記載されているファイルとも言えます。
    また、composer.json と一緒に composer.lock の配布も必要な場合があるので注意します。というのも、自身のパッケージや依存先のパッケージの、各々の composer.json ファイルに依存するパッケージのバージョン番号が記載されていない場合があります。その場合、composer は最新のバージョンを使おうとします。つまり、「ある時点」もしくは「ある環境」では動いたはずなのに、別のタイミングや環境で動かそうとすると、パッケージの最新バージョンが異なるため動かなくなる場合もあるからです。その可能性がある場合は、composer.lock も共有します。「Composer とは」@ Wikipedia