LoginSignup
5
5

Laravel公式ドキュメントから最適化の方法について学んでみた

Posted at

はじめに

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 を確認してみると以下の記述がありました。

composer.json
    "config": {
        "optimize-autoloader": true,

つまり、--optimize-autoloader オプションを付加しなくても、composer.json に "optimize-autoloader": true があるので最適化される状態になっていました。

ということは --optimize-autoloader は不要かもしれません。(オプションを付加しても損はないので、心配であれば付加しましょう)

--no-dev

composer.json の "require-dev" に記述されているライブラリをインストールしないようにするオプションです。"require-dev" には開発時に用いられるライブラリを記述するので運用環境では不要です。忘れずにオプションを付加しましょう。

composer.json
    "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つにまとめることで、読み込みを効率よく行えるようです。

config.php(一部抜粋)
<?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 が生成されます。

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つにまとめることで、パフォーマンスの向上が見込まれるようです。

routes-v7.php(一部抜粋)
<?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
5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5