optimize — キャッシュを一括作成して起動を高速化

artisan
  • カテゴリ: artisan
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN / コマンド: php artisan optimize
  • 関連: config:cache / route:cache / view:cache / event:cache / optimize:clear
  • 変更履歴: 5.5で非推奨→5.6で削除。その後のバージョンで構成/イベント/ルート/ビューの一括キャッシュとして提供(Laravel 12の公式ドキュメントに記載)。(Laravel News)

要点(TL;DR)

  • 何に使うか:本番デプロイ時に、設定・イベント・ルート・ビューを一括キャッシュして起動/初回レスポンスを速くする。(Laravel)
  • 最低限の使い方php artisan optimize
  • よくある罠
    • env()設定ファイル外で使っていると config:cache 後に null になる。(Laravel)
    • ルートにクロージャが多いと route:cache でエラー/非対応となることがある(コントローラに切替)。(Laravel)
    • bootstrap/cache に書込権限がないと失敗する。(Laravel)

注:キャッシュ再生成は変更時にデプロイで実行するのが基本。定期実行は必要なときだけ。(Laravel)

概要

optimize は本番向けの一括最適化コマンドです。config:cache / event:cache / route:cache / view:cache を順に実行し、ファイルシステムへのアクセスやコンパイルの回数を減らします。CI/CD のデプロイ手順の一部として呼ぶのが基本です。(Laravel)

構文 / シグネチャ

php artisan optimize
  • 引数(オプション)
    | 引数 | 型 | 必須 | 既定値 | 説明 |
    |—|—|—:|—|—|
    | なし | — | いいえ | — | Laravel 12 時点で特別なオプションは不要。 |
  • 戻り値:終了コード(0=成功)
  • 例外/副作用bootstrap/cache 配下にキャッシュファイルを生成/上書き。権限不足で失敗。(Laravel)

使用例

最小例

# 本番サーバで
php artisan optimize

実務例(GitHub Actionsでのデプロイジョブ)

# .github/workflows/deploy.yml(一部)
- name: Install deps
  run: composer install --no-dev --prefer-dist --optimize-autoloader

- name: Build caches
  run: php artisan optimize

- name: Health check
  run: curl -fsS https://example.com/up

ポイントoptimizeconfig / events / routes / views を一括でキャッシュします。個別に実行する代わりに一行で済みます。(Laravel)

よくある落とし穴・注意

  • env()の位置config:cache 後は .env を読まないため、env()設定ファイル内だけで使用。コード本体では config() から取得。(Laravel)
  • ルートの書き方route:cache は一部ケースでクロージャルートと相性が悪い。コントローラメソッドへ移行。(Laravel)
  • 権限bootstrap/cachestorage は Webサーバユーザーに書込可にする。(Laravel)
  • 開発環境では不要:ローカル開発中は頻繁に変更するため、基本はキャッシュしない。(Laravel)

代替・関連APIとの比較

  • optimize:4つ(config/events/routes/views)を一括。デプロイの定番。(Laravel)
  • 個別実行:config:cache / event:cache / route:cache / view:cache を用途別に実行。トラブル切り分け時に有効。(Laravel)
  • クリア系:optimize:clear は各種キャッシュファイルと既定キャッシュドライバのキーをまとめて削除。全消ししたい時に。(Laravel)

テスト例(Pest)

<?php

use Illuminate\Support\Facades\Artisan;

it('builds caches on deploy', function () {
    // 実際に最適化を走らせる
    expect(Artisan::call('optimize'))->toBe(0);

    // 代表的なキャッシュファイルの存在を確認(環境に合わせて調整)
    expect(base_path('bootstrap/cache/config.php'))->toBeFile();
});

トラブルシュート(エラー別)

症状/エラー原因対処
env()null になるconfig:cache 後は .env を読まない設定値は config/ に集約し、アプリでは config() で参照。(Laravel)
Route cache file could not be written などbootstrap/cache の権限不足Webサーバユーザーに書込権限を付与。(Laravel)
ルートキャッシュで例外(クロージャ使用)一部クロージャルートがキャッシュ非対応ルートをコントローラに移行。(Laravel)
何を消せばいいかわからない個別に消すと漏れがちphp artisan optimize:clear で一括クリア。(Laravel)

参考リンク

  • Laravel公式:Deployment / Optimization(optimize・optimize:clear と各キャッシュ) (Laravel)
  • Laravel公式:Artisan(コマンド一覧) (Laravel)
  • Laravel公式:Configuration Caching(config:cache の注意点) (Laravel)
  • Laravel News:Laravel 5.6でoptimize削除(履歴) (Laravel News)
レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする