#30 Laravel基礎
デプロイとパフォーマンスチューニング
本番デプロイの基本手順
ローカルで開発したアプリを本番サーバーに展開する一連の手順です。
デプロイ時のコマンド
定番のデプロイスクリプト
# ① コードを取得
git pull origin main
# ② 依存関係を更新(devパッケージを除く)
composer install --optimize-autoloader --no-dev
# ③ フロントエンドのビルド
npm ci && npm run build
# ④ DBマイグレーション(--force で本番でも実行)
php artisan migrate --force
# ⑤ 各種キャッシュを再生成
php artisan config:cache # 設定キャッシュ
php artisan route:cache # ルートキャッシュ
php artisan view:cache # ビューキャッシュ
php artisan event:cache # イベントキャッシュ(Laravel 10以降)
# ⑥ キューワーカーを再起動
php artisan queue:restart
メンテナンスモード
デプロイ中は503ページを表示してユーザーへの影響を最小化できます。
# メンテナンスモードを開始
php artisan down --render="errors.503" --retry=60
# デプロイ処理...
# メンテナンスモードを終了
php artisan up
--secret=token を付けると、特定のURLからはメンテナンス中でもアクセスできます。
.env の本番設定
# 📁 .env(本番環境)
APP_ENV=production
APP_DEBUG=false # ← 必ず false にする(エラー内容をユーザーに見せない)
APP_URL=https://example.com
# ← 本番用のメール・DB・キャッシュ設定を記述
キャッシュによる高速化
設定キャッシュ
php artisan config:cache
config/*.php の全設定を1つのファイルにまとめてキャッシュします。リクエストごとに設定ファイルを読み込む処理がなくなります。
ルートキャッシュ
php artisan route:cache
ルート定義をシリアライズしてキャッシュします。ルートが多いアプリで効果的です。
クラスオートローダーの最適化
composer install --optimize-autoloader
Composerのクラスマップを最適化して、ファイルの自動読み込みを高速化します。
データベースパフォーマンスのチューニング
インデックスの確認
よく検索・ソートするカラムにはインデックスが必要です。
// スロークエリを記録する(開発時)
// 📁 app/Providers/AppServiceProvider.php
use Illuminate\Support\Facades\DB;
public function boot(): void
{
if (config('app.debug')) {
DB::listen(function ($query) {
if ($query->time > 100) { // 100ms以上かかったクエリをログに残す
\Log::warning("スロークエリ: {$query->sql} ({$query->time}ms)");
}
});
}
}
Eloquentの最適化ポイント
// ❌ N+1問題(必ず修正する)
$posts = Post::all();
foreach ($posts as $post) {
echo $post->user->name; // ← ループごとにSQLが走る
}
// ✅ Eagerロードで解決
$posts = Post::with('user')->get();
// ❌ 全カラム取得(必要なカラムだけにする)
$posts = Post::all();
// ✅ 必要なカラムだけ取得
$posts = Post::select('id', 'title', 'user_id', 'created_at')->get();
デバッグバーの活用
開発環境では barryvdh/laravel-debugbar を使うとSQL数・実行時間・メモリ使用量をブラウザで確認できます。
composer require barryvdh/laravel-debugbar --dev
ストレージのシンボリックリンク
php artisan storage:link
本番サーバーでも必ず実行してください。
キューワーカーを常時起動する(Supervisor)
本番では Supervisor でキューワーカーを常時起動します。
# /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
numprocs=4
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
まとめ
デプロイ時のチェックリスト:
-
APP_DEBUG=falseになっているか -
APP_ENV=productionになっているか -
php artisan migrate --forceを実行したか -
config:cache,route:cache,view:cacheを実行したか -
composer install --optimize-autoloader --no-devを実行したか -
php artisan storage:linkを実行したか -
php artisan queue:restartでワーカーを再起動したか
このシリーズを終えて
30回にわたるLaravel基礎シリーズを終了します。
このシリーズでカバーした主な内容:
| 分野 | 回 |
|---|---|
| ルーティング・コントローラー | 1〜3 |
| DI・Blade | 4〜5 |
| Eloquent(リレーション・スコープ・ソフトデリート) | 6〜10 |
| マイグレーション・ファクトリー・トランザクション | 11〜13 |
| ページネーション・認証・認可 | 14〜16 |
| ファイル・設定・キャッシュ | 17〜19 |
| メール・キュー・通知 | 20〜22 |
| API認証・イベント・コマンド | 23〜25 |
| CSV・テスト・Collection | 26〜29 |
| デプロイ | 30 |
実務では「どう組み合わせるか」が重要です。ぜひ自分のアプリを作りながら定着させてください。