Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
composer dump-autoloadを「なんとなく使う」から「理解して使う」になる
Search
Akinori Takigawa
June 21, 2024
Technology
5k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
composer dump-autoloadを「なんとなく使う」から「理解して使う」になる
Akinori Takigawa
June 21, 2024
More Decks by Akinori Takigawa
See All by Akinori Takigawa
Nginxになりきって、FCGIでPHPと喋ろう
akinoriakatsuka
0
120
PHPUnitのテストイベントを使ってテストにかかる時間の計測をしよう
akinoriakatsuka
0
210
パイプ演算子の実装を 覗いてみよう
akinoriakatsuka
0
270
PHPでCQRS+ES入門
akinoriakatsuka
0
240
手軽に作れる電卓を作って イベントソーシングに親しもう CQRS+ESカンファレンス2026
akinoriakatsuka
0
1.1k
Rubyで作る物理エンジン - 叡電LT
akinoriakatsuka
0
53
パイプ演算子の実装を覗いてみよう - 【非公式】PHPカンファレンス福岡2025・前日Meetup
akinoriakatsuka
0
56
技術的負債の会計学 - PHPカンファレンス広島2025
akinoriakatsuka
8
1.6k
スクラムをちゃんとやる勇気
akinoriakatsuka
0
77
Other Decks in Technology
See All in Technology
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
GoCon2026 - Open Source, Open World
sanposhiho
4
3.2k
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
160
AIとペアプロを始める。人とのペアプロをやめる。ペアプロの良さを改めて知る。もっと好きになった。 / Rediscovering Pair Programming
honyanya
1
340
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/6 - 2026/8
oracle4engineer
PRO
0
160
多層防御と最⼩権限で実現する、安全なAIエージェント設計パターン
lycorptech_jp
PRO
1
260
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
150
Snowflakeのコスト最適化を支えるアーキテクチャ設計
ktatsuya
1
1.5k
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
180
TinyGo 開発サイクルを高速化する:Go で作るエミュレータ入門
zozotech
PRO
1
630
2026/09/10 Spring Bootから Jakarta EE/MicroProfileへの移行
megascus
0
320
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
980
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
440
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
570
The Spectacular Lies of Maps
axbom
PRO
1
990
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
500
How to Ace a Technical Interview
jacobian
281
24k
Docker and Python
trallard
47
4.2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Speed Design
sergeychernyshev
33
2.1k
Transcript
1 / 34 composer dump-autoload を 「なんとなく使う」から 「理解して使う」になる あかつか PHP
カンファレンス福岡2024 6/22 #phpconfuk
2 / 34 自己紹介 あかつか / @aki_artisan 神戸でPHP を書いています 株式会社オフショア
レガシーシステムのLaravel への移行プロジェクト中 役割はプロジェクトリーダー
3 / 34 こんなシステムつくってます
composer dump-autoload 使ったことありますか?
理解して使っていますか?
6 / 34 おしながき 1. composer dump-autoload とは 1. autoload
の種類 2. autoload の最適化 3. dump-autoload が必要なタイミング 4. dump-autoload の裏側で起こっていること 5. まとめ
7 / 34 と、そのまえに なんか聞いたことあるタイトルだなと思ったあなた 正解です
composer dump-autoload とは
9 / 34 composer dump-autoload とは autoload の設定とファイルの状態から、autoload が使える状態にしてくれる コマンド
内部では、 composer.json の設定に応じて、 vendor/composer/ 以下のファイルを書き換えている→後で詳しく解説 autoload とは、未定義のクラスが呼ばれた時にファイルを探して自動で読み 込んでくれる仕組み 詳しくは私のPHP カンファレンス関西の資料をご参照ください
10 / 34 autoload の種類 1. PSR-4 2. PSR-0 (非推奨)
3. classmap 4. files (ファイルの読み込みであり、クラスの読み込みではない) composer で実装されているautoload の種類
11 / 34 PSR-4 名前空間とディレクトリを紐づける App 名前空間を src src2 ディレクトリに結びつける場合
同じ名前空間に、複数のディレクトリを設定することも可能 両方のディレクトリにファイルがある場合は先に書いたものが優先される { "autoload": { "PSR-4": { "App\\": [ "src/", "src2/" ] } } }
12 / 34 classmap 指定したファイルや指定したディレクトリ配下のファイルとクラス名のマッ ピングを登録する dump-autoload 時にファイルを解析して、マッピングを設定してくれる classmap とPSR-4
に、同じクラスがある場合はclassmap が優先される { "autoload": { "classmap": ["src/", "lib/", "Something.php"] } }
13 / 34 files 他のautoload は遅延ロードだが、これは先に読み込まれる。 ヘルパー関数を定義したファイルなどに使う { "autoload": {
"files": ["src/MyLibrary/functions.php"] } }
autoload の最適化
15 / 34 autoload の最適化 dump-autoload の必要性を判断するにあたって、 autoload の最適化を知っておく必要がある。 ※
キャッシュのようなもの ゆるい最適化(-o オプション) きつい最適化(-a オプション)
16 / 34 composer dump-autoload -o PSR-4, PSR-0 の設定されたディレクトリを解析して、classmap を生成する
classmap で見つからなかったら、ディレクトリから探してくれる composer.json に "optimize-autoloader": true がある場合も
17 / 34 composer dump-autoload -a PSR-4, PSR-0 の設定されたディレクトリを解析して、classmap を生成する
classmap で見つからない場合は、見つからずにエラーになる composer.json に "classmap-authoritative": true がある場合も
dump-autoload が必要な タイミング
19 / 34 dump-autoload が必要なタイミング PSR-4, PSR-0 の設定を追加した時 classmap のディレクトリやファイルを追加した時
files のファイルリストを変更した時
20 / 34 dump-autoload が要らないタイミング PSR-4, PSR-0 の設定のあるディレクトリでファイルを追加した時 ただし、最適化されてdump-autoload されている場合は別途考慮が必要
例えば、-o とか -a でclassmap に登録されていたクラス定義ファイル を別の場所に移動したい場合は dump-autoload 必要
dump-autoload の裏側で 起こっていること
22 / 34 dump-autoload の裏側で起こっていること vendor/composer/ 以下のファイルが書き換わっている これによってautoload できるファイルが変わる 特に大事なのは、
autoload_real.php と autoload_static.php composer.json に書いた設定と、実際のファイルからautoload が動く状態 にする
23 / 34 dump-autoload の裏側で起こっていること optimize なしのPSR-4 は、ディレクトリと名前空間の紐付けだけが登録され る classmap
は、ファイルとクラスの紐付けが登録される optimize ありのPSR-4 は、 ファイルとクラスの対応がclassmap として登録される →なので、PSR-4 でディレクトリを追加しないときでも dump-autoload が必要になる場合がある
24 / 34 実際のファイルはこんな感じ autoload_static.php class ComposerStaticInitd751713988987e9331980363e24189ce { public static
$files = array ( '41da55927f7e15e2e05566a733ef4ad4' => __DIR__ . '/../..' . '/functions.php', ); // [...] public static $prefixDirsPsr4 = array ( 'App\\' => array ( 0 => __DIR__ . '/../..' . '/src', 1 => __DIR__ . '/../..' . '/src2', ), );
25 / 34 -o オプションで実行しています public static $classMap = array
( 'App\\Animal\\Cat' => __DIR__ . '/../..' . '/classmap/Cat.php', 'App\\Animal\\Dog' => __DIR__ . '/../..' . '/src/Animal/Dog.php', 'App\\Animal\\Elephant' => __DIR__ . '/../..' . '/src/Animal/Elephant.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', 'SomeVendor\\Animal\\Turtle' => __DIR__ . '/../..' . '/classmap/SomeVendor/Hoge.php', ); public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInitd751713988987e9331980363e24189ce::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInitd751713988987e9331980363e24189ce::$prefixDirsPsr4; $loader->classMap = ComposerStaticInitd751713988987e9331980363e24189ce::$classMap; }, null, ClassLoader::class); } }
まとめ
27 / 34 まとめ PSR-4 とPSR-0 は設定追加時のみ必要 files はファイルリストを変更した時に必要 classmap
は、設定追加時とファイル追加時に必要 optimize に気をつけよう 正体はclassmap classmap に登録された設定を更新する時は必要 困ったら、autoload_static.php を確認しよう
おまけ(時間が余れば)
29 / 34 細かい話 composer でインストールするパッケージも同じファイルにオートロードの 設定が書かれる composer require や
composer install でパッケージを追加した時も、 dump-autoload が走る なので、optimize の設定はcomposer.json に書いておくとよい(忘れ防 止)
30 / 34 細かい話 最適化すべきタイミング It should always be enabled
in production. と書かれている 本番環境では常に有効にしておくべき 逆に開発時はYou should not enable any of these optimizations in development
31 / 34 トラブルシューティング 目的のファイルが読み込まれなくて困った! var_dump(get_included_files()); include したファイルを配列で出してくれる array(10) {
[0]=> string(58) "/path/to/dir/main.php" [1]=> string(69) "/path/to/dir/vendor/autoload.php" [2]=> string(83) "/path/to/dir/vendor/composer/autoload_real.php" [3]=> string(81) "/path/to/dir/vendor/composer/ClassLoader.php" [4]=> string(85) "/path/to/dir/vendor/composer/autoload_static.php"
32 / 34 [5]=> string(63) "/path/to/dir/functions.php" [6]=> string(68) "/path/to/dir/src/Animal/Dog.php" [7]=>
string(66) "/path/to/dir/classmap/Cat.php" [8]=> string(73) "/path/to/dir/src/Animal/Elephant.php" [9]=> string(78) "/path/to/dir/classmap/SomeVendor/Hoge.php" }
Thank you!
34 / 34 参考文献 https://getcomposer.org/doc/04-schema.md#autoload https://getcomposer.org/doc/articles/autoloader-optimization.md https://zenn.dev/fagai/articles/bc9ebc01bd7f42