PHP

composerについて初期学習まとめ

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