はじめに
Laravel 公式ドキュメントの Optimization(最適化)を読んで、学んだことをまとめてみました。
Autoloader Optimization
PHPライブラリを管理するツール Composer に関する内容です。
運用環境にデプロイするときは以下のコマンドを実行すべきと書かれています。
composer install --optimize-autoloader --no-dev
composer install
はライブラリをインストールする際に使用するコマンドです。
運用環境と開発環境で違うのは --optimize-autoloader
--no-dev
オプションが付加されている点です。
--optimize-autoloader
オートローダーの最適化に関するオプションです。クラスマップというファイルを生成しておくことで、クラスの読み込み時間を短縮できるようです。
vendor\composer\autoload_classmap.php にクラスマップが生成されているので確認してみました。すると、上記のコマンドを未実行にも関わらず既にファイルが作成されており、最適化された内容が出力されていました。なぜ…?
Composer のドキュメントを確認してみると、最適化に関する同様の記述がありました。どうやら、クラスマップを生成する方法が他にもあるようです。
There are a few options to enable this:
- Set "optimize-autoloader": true inside the config key of composer.json
- Call install or update with -o / --optimize-autoloader
- Call dump-autoload with -o / --optimize
そこで composer.json を確認してみると以下の記述がありました。
"config": {
"optimize-autoloader": true,
つまり、--optimize-autoloader
オプションを付加しなくても、composer.json に "optimize-autoloader": true
があるので最適化される状態になっていました。
ということは --optimize-autoloader
は不要かもしれません。(オプションを付加しても損はないので、心配であれば付加しましょう)
--no-dev
composer.json の "require-dev" に記述されているライブラリをインストールしないようにするオプションです。"require-dev" には開発時に用いられるライブラリを記述するので運用環境では不要です。忘れずにオプションを付加しましょう。
"require-dev": {
"fakerphp/faker": "^1.9.1",
"laravel/pint": "^1.0",
"laravel/sail": "^1.18",
"mockery/mockery": "^1.4.4",
"nunomaduro/collision": "^7.0",
"phpunit/phpunit": "^10.1",
"spatie/laravel-ignition": "^2.0"
},
Caching Configuration
設定ファイル(config)のキャッシュに関する内容です。
運用環境にデプロイするときは以下のコマンドを実行すべきと書かれています。
php artisan config:cache
実行すると bootstrap\cache\config.php が生成されます。
設定ファイルを1つにまとめることで、読み込みを効率よく行えるようです。
<?php return array (
'app' =>
array (
'name' => 'Laravel',
'env' => 'local',
'debug' => true,
'url' => 'http://localhost',
'asset_url' => NULL,
'timezone' => 'UTC',
'locale' => 'en',
'fallback_locale' => 'en',
'faker_locale' => 'en_US',
作成したキャッシュを削除したい場合は以下のコマンドを実行してください。
php artisan config:clear
ちなみに、キャッシュの生成有無は以下のコマンドで確認することが可能です。
php artisan about
Cache .......................................................
Config ............................................... CACHED
Events ........................................... NOT CACHED
Routes ........................................... NOT CACHED
Views ............................................ NOT CACHED
Caching Events
イベント(events)のキャッシュに関する内容です。
アプリケーション内でイベントを利用している場合は、以下のコマンドを実行すべきと書かれています。
php artisan event:cache
実行すると bootstrap\cache\events.php が生成されます。
<?php return array (
'App\\Providers\\EventServiceProvider' =>
array (
'Illuminate\\Auth\\Events\\Registered' =>
array (
0 => 'Illuminate\\Auth\\Listeners\\SendEmailVerificationNotification',
作成したキャッシュを削除したい場合は以下のコマンドを実行してください。
php artisan event:clear
Caching Routes
ルート(routes)のキャッシュに関する内容です。
大規模なアプリケーションを構築する場合は以下のコマンドを実行すべきと書かれています。
php artisan route:cache
実行すると bootstrap\cache\routes-v7.php が生成されます。
ルートのファイルを1つにまとめることで、パフォーマンスの向上が見込まれるようです。
<?php
app('router')->setCompiledRoutes(
array (
'compiled' =>
array (
0 => false,
1 =>
array (
'/sanctum/csrf-cookie' =>
array (
0 =>
array (
0 =>
array (
'_route' => 'sanctum.csrf-cookie',
作成したキャッシュを削除したい場合は以下のコマンドを実行してください。
php artisan route:clear
Caching Views
ビュー(views)のキャッシュに関する内容です。
運用環境にデプロイするときは以下のコマンドを実行すべきと書かれています。
php artisan view:cache
実行すると storage\framework\views にファイルが生成されます。
Bladeファイルを事前にコンパイルしておくことで、パフォーマンスの向上が見込まれるようです。
作成したキャッシュを削除したい場合は以下のコマンドを実行してください。
php artisan view:clear
まとめ
運用環境でのパフォーマンス向上を求める場合は、以下のコマンドを実行してみましょう。
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan event:cache
php artisan route:cache
php artisan view:cache