2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】デプロイの際やっていおいた方が良いこと

Posted at

オートローダー最適化

本番環境へデプロイする場合、アプリケーションの自動ロードを高速化するクラスマップを作成して、Composerが、指定されたクラスのファイルを素早く見つけ、ロードできるようにします。

$ composer install --optimize-autoloader --no-dev

もしくはcomposer.jsonの中身において

{
  "config": {
    "optimize-autoloader": true
  }
}

と設定すれば

$ composer install --no-dev

で済みます。

上記コマンドを実行すると、return arrayの箇所に変更が入り、クラスマップを作成してくれます。

vendor/composer/autoload_classmap.php
<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'App\\Console\\Kernel' => $baseDir . '/app/Console/Kernel.php',
    'App\\Enums\\Constant' => $baseDir . '/app/Enums/Constant.php',
    'App\\Exceptions\\FileUploadException' => $baseDir . '/app/Exceptions/FileUploadException.php',
    'App\\Exceptions\\Handler' => $baseDir . '/app/Exceptions/Handler.php',

... 中略 ...

);

他にも以下のファイルにも変更が入るようです。

vendor/composer/autoload_files.php
vendor/composer/autoload_namespaces.php
vendor/composer/autoload_psr4.php
vendor/composer/autoload_real.php
  • no-devを使用すると、required-dev内のパッケージのインストールは全てスキップされます。(開発で使用されるパッケージは削除されます)

  • class not foundのエラーが出た時は、対象のオートロードに開発時のみ必要とするパッケージを参照する必要が出てきてしまった、というパターンが多いです。その時は、対象のライブラリをrequire-devからrequireに移動させる必要があります。

$ composer require {対象ライブラリ}

その後、再度オートローダー最適化を行うと良い。

設定ローディングの最適化

$ php artisan config:cache

上記のコマンドで生成されるファイルの中身は以下の通りです。

bootstrap/cache/config.php
<?php return array (
  'app' => 
  array (
    'name' => 'SAMPLE PROJECT',
    'env' => 'local',
    'debug' => true,
    'url' => 'http://localhost',
    'asset_url' => NULL,
    'timezone' => 'Asia/Tokyo',
    'locale' => 'ja_JP',
    'fallback_locale' => 'ja_JP',
    'faker_locale' => 'ja_JP',
    'key' => 'base64:vE9tPBe2snc5C+AVFhuGSAUzuocPX5R7yjeFLvZ0nTU=',
    'cipher' => 'AES-256-CBC',
    'maintenance' => 
    array (
      'driver' => 'file',
    ),
    'providers' => 
    array (
      0 => 'Illuminate\\Auth\\AuthServiceProvider',
      1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',

... 中略 ...

)
);

このコマンドは、.envやconfig配下の全設定ファイルを1つのファイルへまとめるため、設定値をロードする場合に、数多くのファイルにアクセスする手間を減らします。

また、このキャッシュファイルがあれば元の.envは読み込まなくなります。

ルートロードの最適化

$ php artisan route:cache

上記のコマンドで生成されるファイルの中身は以下の通りです。

bootstrap/cache/routes-v7.php
<?php

/*
|--------------------------------------------------------------------------
| Load The Cached Routes
|--------------------------------------------------------------------------
|
| Here we will decode and unserialize the RouteCollection instance that
| holds all of the route information for an application. This allows
| us to instantaneously load the entire route map into the router.
|
*/

app('router')->setCompiledRoutes(
    array (
  'compiled' => 
  array (
    0 => false,
    1 => 
    array (
      '/sanctum/csrf-cookie' => 
      array (
        0 => 
        array (
          0 => 
          array (
            '_route' => 'sanctum.csrf-cookie',
          ),
          1 => NULL,
          2 => 
          array (
            'GET' => 0,
            'HEAD' => 1,
          ),
          3 => NULL,
          4 => false,
          5 => false,
          6 => NULL,
        ),
      ),

... 中略 ...

)
);

routeの数が大きいプロジェクトではパフォーマンスの改善に期待できる仕組みです。

ビューロードの最適化

$ php artisan view:cache

このコマンドは全Bladeファイルをコンパイルします。

要求ごとにコンパイルしなくて済むため、ビューを返すリクエストすべてにおいてパフォーマンスが向上します。

以上

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?