composerについて勉強したのでまとめておく。
composer.jsonファイルに設定を記述していく形式らしい。
依存パッケージの指定
{
"require" : {"illuminate/console": "5.0.22"}
}
オートローディング
以下の3つがある。
- PSR-4規約
- クラスマップ
- 指定ファイルを起動時に読み込む
PSR-4規約
{
"autoload": { "psr-4": { "Vehicle\\Car\\": "Norimono" } }
}
名前空間が\Vehicle\Car
下のクラスのアクセス時に、そのクラスがロードされていない場合、composer.jsonが置かれたディレクトリからの相対パスで指定されたNorimono
ディレクトリ以下のファイルが読み込まれる。
大文字、小文字、アンダースコアはそのまま対応する。
クラスファイル名は、「{クラス名}.php」とする。
クラスマップ
{
"autoload": { "classmap": [ "lib", "vendor/lib" ] }
}
libとvender/libディレクトリ内でクラスを定義しているPHPファイルがオートローディングの対象となる。
パスの基準は、composer.jsonが置かれたディレクトリ。
下記コマンドで、対応付けのためのクラスマップが生成される。
% composer dump-autoload
指定ファイルを起動時に読み込む
{
"autoload": { "files": { "hoge.php": "lib/fuga.php" } }
}
hoge.phpとlib/fuga.phpがオートローディングの対象となる。
パスの基準は、composer.jsonが置かれたディレクトリ。
コマンド
composerコマンドを実行するときに「-vvv」オプションを実行するとデバッグ情報が出力される。トラブル時に便利。
update
パッケージを新規インストール、アップデート、削除する。
「--no-dev」オプションを付与するとrequire-devセクションのパッケージを除外できる(本番環境で利用)。
% composer update
install
composer.lockファイルの内容に基づいてパッケージを構成する。このファイルにないものはcomposer.jsonの内容に従う(rubyのbundlerのbundle installと同等だと思う)。
% composer install
require
require-devセクションを対象にする場合には「--dev」オプションを付与する。
require-devセクションを対象外にする場合には「--update-no-dev」オプションを付与する。
% composer require ベンダー名/パッケージ名:バージョン ...
remove
オプション(--dev, --update-no-dev)に関しては、requireと同じ。
% composer remove ベンダー名/パッケージ名
global
globalを付与しない場合には、COMPOSER_HOME環境変数(通常は、「~/.composer」)に対してinstall、update、requireが実行される。
globalを付与した場合には、COMPOSER_HOME環境変数が示すディレクトリの下の「vendor/bin」にPATHを通しておくと利用できる。
% composer global require ベンダー名/パッケージ名:バージョン
% composer global update
% composer global install
self-update
composer自身を更新する。
--rollbackオプションで1つ前のバージョンに戻せる。古いバージョンはCOMPOSER_HOME環境変数の指す場所に保存されている。
--clean-backupsオプションを実行すれば、古いバックアップは削除される。
% composer self-update
create-project
基本的なプロジェクト後続を構築する。(rails newと同等)
% composer create-project ベンダー名/パッケージ名[:バージョン] [インストールパス]
dump-autoload
オートローディングに関する情報ファイルを生成するコマンド。
PSR-4規約による定義、クラスマップによるロード対象クラスの変更がった場合このコマンドを再実行する。
--optimize(又は-o)オプションを付けるとPSR-4規約のオートローディング対象となっている全クラスがクラスマップに含まれる。
これによりロード時間を速くできるらしい。
ただし、PSR-4よりもクラスマップの方が優先されるので、PSR-4の対象を変更するとオートローディングが正常に動作しないことがあるらしいので注意する。
composer update終了時もデフォルトはphp artisan optimize
が実行されるらしく、この不具合が発生する可能性がある(php artisan optimize --psr
に変更する方法があるらしいが未調査)。
% composer dump-autoload
clear-cache
composerのローカルキャッシュを削除する。
変更、更新などがうまく動作しないときは、キャッシュをクリアしてみるとよい。
% composer clear-cache
info又はshow
いずれも同じコマンド。
PHP環境とインストール済みの全パッケージの情報を表示する。
パッケージ名を指定するとそのパッケージの情報を見ることができる。
% composer info
% composer show