composerのオートローディングにおいて、dump-autoloadが必要かどうかをまとめた
composerのオートローディングの仕様を理解しやすいようにまとめたものです。
composer2系で確認しています。
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"app/Helpers/helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/"
}
},
autoloadに記述できるパラメータ一覧
以下はcomposerのautoload
やautoload-dev
で記述できるパラメータの一覧です。
生成ファイルは対象のパラメータごとに生成されるファイルです。(実際はvendor/composer/autoload_static.php
が読まれるのですがこちらは全部がまとまってしまっているのでわかりにくいかも)
簡易確認表
パラメータ名 | dump-autoloadが必要か |
---|---|
psr-4 | 初回以外不要 |
psr-0 | 初回以外不要 |
classmap | クラスが新しく増えたら必要 |
files | 初回以外不要 |
psr-4
生成ファイル : vendor/composer/autoload_psr4.php
dump-autoloadの必要性 : 書いた初回以外は不要
PSR-4のローディングの仕様に合わせる場合のパラメータです。
対象のディレクトリの情報だけがオートローダーに登録されるため、dump-autoloadが基本的には不要になるのが良いです。
// vendor/composer/autoload_psr4.php内の記述例
return array(
'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'),
);
psr-0
生成ファイル : vendor/composer/autoload_namespaces.php
dump-autoloadの必要性 : 書いた初回以外は不要
PSR-0のローディングの仕様に合わせる場合のパラメータです。
対象のディレクトリの情報だけがオートローダーに登録されるため、dump-autoloadが基本的には不要になるのが良いです。
ただ、PSR-4のほうがディレクトリの記述などが少なく済むので現在はほぼ使われてません。
// vendor/composer/autoload_namespaces.php内の記述例
return array(
'Sentry\\Laravel\\' => array($vendorDir . '/sentry/sentry-laravel/src'),
);
classmap
生成ファイル : vendor/composer/autoload_classmap.php
dump-autoloadの必要性 : クラスが新しく増えたら必要
名前空間が存在していない場合や、PSR-4やPSR-0に準拠してない形でクラスを作る際に利用します。
クラスごとに設定が書かれるので、クラスを新しく用意したら再度dump-autoload
の必要があるので最近はあまりつかわれていません。
// vendor/composer/autoload_classmap.php内の記述例
return array(
'Clockwork\\Clockwork' => $vendorDir . '/itsgoingd/clockwork/Clockwork/Clockwork.php',
);
files
生成ファイル : vendor/composer/autoload_files.php
dump-autoloadの必要性 : 初回以外不要、ファイルリストを編集したら必要
関数や設定値などをロードしたい場合やグローバルに利用されるクラスの初期設定(あまり使わない)などに利用します。
主に利用するケースはヘルパーくらいです。ヘルパー以外ではほぼ使うことはないです。
// vendor/composer/autoload_files.php内の記述例
return array(
'ランダム文字列?' => $vendorDir . '/laravel/framework/src/Illuminate/Support/helpers.php',
);
Discussion