nodeのnpmに近いphpのパッケージと依存マネージャ。
composerはパッケージマネージャではなく依存マネージャ。パッケージやライブラリの管理は行うがあくまでプロジェクト単位で行う。パッケージやライブラリはvendorディレクトリ配下にインストールされ、デフォルトではグローバルにインストールされない。npmやbundlerに近い。
プロジェクトが多数のライブラリに依存し、そのライブラリも他のライブラリに依存している場合に依存関係を解決してインストールしてくれる。
動作にはPHP5.3.2以上が必要。いくつかのphpフラグやコンパイルフラグも必要。インストーラを使えば警告で知らせてくれる。
compser自体のインストール
詳しくは省略。
https://getcomposer.org/installerをダウンロードしてphpで実行するか(Windows以外)。https://getcomposer.org/Composer-Setup.exeを実行してインストール。
composerはcomposer.pharという1つのファイルになっているので、これをプロジェクトに含めてもいいかもしれない。
Windowsでのバッチファイル
以下のバッチファイルをつくって、プロジェクトのルートに置くと便利。
1 2 |
@echo off php composer.phar %* |
composerの設定はcomposer.jsonに記述する。プロジェクトの依存関係が記述される。プロジェクトのルートディレクトリに置く。
1 2 3 4 5 |
{ "require": { "monolog/monolog": "1.0.*" } } |
デフォルトではPackagistというレポジトリからrequireで記述されたパッケージをインストールする(installコマンド)。パッケージ名はベンダー名/プロジェクト名になる。上記のバージョン指定は、1.0以上で1.1以下のパッケージを指定している。
パッケージのインストール
php composer.phar install
このコマンドを最初に実行したとき(まだcomposer.lockがない)は、必要なすべてのパッケージをvendor配下にインストールしてcomposer.lockにインストールしたバージョンを記述する。インストール時にcomposer.lockがあればこのファイルに記載されたバージョンをインストールする。このファイルを共有しておけば、開発者間でパッケージのバージョンを一致させられる。
アップデート
php composer.phar update
プラットフォームパッケージ
PHPそのものはcomposerでインストールするものではないが、依存関係は記述したい場合PHPをプラットフォームパッケージまたは仮想パッケージと呼ぶ。show –platformコマンドで一覧を表示できる。
オートロード
ライブラリがautoloadの指定を行っていれば、composerはvendor/autoload.phpを作成する。ユーザはこのファイルをインクルードしてライブラリを使うことができる。
1 2 3 4 5 |
require __DIR__ . '/vendor/autoload.php'; $log = new Monolog\Logger('name'); $log->pushHandler(new Monolog\Handler\StreamHandler('app.log', Monolog\Logger::WARNING)); $log->addWarning('Foo'); |
自分自身のコードをautoloadに指定することもできる。
1 2 3 4 5 |
{ "autoload": { "psr-4": {"Acme\\": "src/"} } } |
ここではネームスペースとディレクトリのマップをしている。srcディレクトリはプロジェクトのルートでvendorと同じ階層。これでたとえばsrc/Foo.phpはAcme\Fooクラスを含んでいることになる。
autoloadフィールドを追加した場合はvendor/autoload.phpを再構築するためにdump-autoloadコマンドを実行する必要がある。
ライブラリ
上記のautoloadの設定を行うとプロジェクトはほぼパッケージになる。違いは名前があるかどうかでこれはcomposer.jsonのnameプロパティを設定すればいい。
1 2 3 4 5 6 |
{ "name": "acme/hello-world", "require": { "monolog/monolog": "1.0.*" } } |
バージョンはVCSから推論するのでcomposer.jsonには記述しない。がVCSを使っていない場合はcomposer.jsonに記述できる。
コマンド
help
ヘルプ。引数にサブコマンドを指定すると、そのコマンドのヘルプ。
init
php composer init
composer.jsonを作成
引数なしまたはlist
ヘルプを表示
install または i
パッケージをインストール
update または u
パッケージをアップデート
search
レポジトリからパッケージを探す。composer.jsonでリポジトリを指定していない限りpackagist(デフォルトのレポジトリ)から探す。
php composer.phar search monolog
show
インストールされているパッケージを表示。*を指定してフィルタできる。パッケージを指定すると詳細を表示。
browse または home
パッケージのウェブサイトをブラウザで表示
php composer.phar browse p3k/picofeed
depends
指定されたパッケージに依存しているパッケージを表示
config
composerの設定情報の設定と表示。設定にはグローバルとローカルがある。ローカルはcomposer.jsonに保存される。レポジトリの設定などがある。
php composer.phar config –list
diagnose
エラー診断。エラーが出たときやってみるといい。