📝
[Composer] classmapの使い方
Zenn初記事!
お手柔らかにどうぞ。
composerとは
いわずもがな、PHPの標準と言ってもいいパッケージ管理ツールです。インストール方法や使い方はこちらを参照してください。
PHPのライブラリ管理ツール「Composer」入門
composerとは
こういう人向けの記事です
composer.jsonを書いてライブラリ等を公開したい人向け。利用するだけの人はあまり関係ないかも。
classmapが分からなかった
composerにクラスマップ作ってくれそうな機能ないかなと思って探したらあった。でも使い方がいまいちわからなかったので調査。
classmapの書式
{
"autoload":{
"classmap": ["src/", "something.php"]
}
}
試しにクラスを置いてみる
--- proj_root
├ src
│ ├ MyClassA.php
│ └ MyClassB.php
└ MyClassC.php
各クラスの中身はこんな感じ。
<?php
class MyClassA {}
composer.jsonはこんな感じ。
{
...(省略)...
"autoload":{
"classmap": ["src/", "MyClassC.php"]
}
}
以下のコマンド実行するとオートローダーのクラスマップが生成されます。
composer update
オートローダーのクラスマップ出力先はvendor/composerディレクトリ以下の「autoload_classmap.php」です。
-vendor
└ composer
├ autoload_classmap.php
└ ...
このファイルの中身はコマンド実行後以下のようになっています。
<?php
...(省略)...
return array(
...
'MyClassA' => $baseDir . '/src/MyClassA.php',
'MyClassB' => $baseDir . '/src/MyClassB.php',
'MyClassC' => $baseDir . '/MyClassC.php',
);
$baseDirの中身はプロジェクトのルートディレクトリになります。つまり、クラス名からクラスファイルへのマップ配列(クラスマップ)が設定されたことになります。
classmapはコマンド実行時に生成される固定マップである
クラスマップは対象ディレクトリへクラスファイルを配置した後、composer updateする必要があることがわかります。つまり動的ではありません。
コマンドライブラリやプラグインライブラリのような実行時にならないとクラスファイルが確定しないライブラリの場合上記composerクラスマップでは対応できません。もしくはクラスファイルを配置後、毎回composer updateを実行する必要があるでしょう。
そのような場合は別途自前のクラスローダーを実装するとよいでしょう。
以上、composerのclassmapについてのメモでした。
Discussion