はじめに
最近、いくつかのプロジェクトをLaravel 10から最新の13へ一気にアップグレードする機会がありました。
正直、新しいディレクトリ構造を初めて見た時の感想は……
「あれ、泥棒にでも入られた??」
と思うくらい、中身がスッキリしていて驚きました(笑)。
もしこれからアップグレードを考えている方がいたら、まず伝えたいのは、
パニックにならなくて大丈夫です。
今回は、Laravel 13(正確にはLaravel 11から導入された)Slim Skeleton の大胆な変更点と、実際にアップグレードしてみてハマったポイントを、できるだけ分かりやすくまとめてみます。
背景:何が変わったのか?
Laravel 10までは、設定ファイルやKernel周りなど、
「これ、いつ触るんだっけ……?」
みたいなファイルが結構ありましたよね。
Laravel 11以降では、そういった“ボイラープレート”を減らし、
- よりシンプルに
- より軽量に
- より直感的に
管理できる構成へ変わっています。
ただし最初は、
「設定どこ行った!?」
となりがちです。
具体的な変更点
1. Kernel廃止:すべては bootstrap/app.php へ
Laravel 10まではおなじみだった、
Http/Kernel.phpConsole/Kernel.phpHandler.php
これらがLaravel 13では消えています。
最初見た時、本当にびっくりしました。
今のLaravelでは、アプリケーションの中心が
bootstrap/app.php
に集約されています。
ミドルウェア・ルーティング・例外処理を一括管理
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__ . '/../routes/web.php',
api: __DIR__ . '/../routes/api.php',
commands: __DIR__ . '/../routes/console.php',
health: '/status',
)
->withMiddleware(static function (Middleware $middleware) {
// ミドルウェア設定
$middleware->alias([
'auth' => \App\Http\Middleware\Authenticate::class,
'check_api_version' => \App\Http\Middleware\CheckApiVersion::class,
]);
})
->withExceptions(static function (Exceptions $exceptions) {
// 例外処理もここ
})
->create();
設定が1つのファイルにまとまったおかげで、
「あのミドルウェア、どこで定義したっけ?」
という宝探しゲームをしなくて済むようになりました。
最初は、
「1ファイルに詰め込みすぎでは……?」
と思ったんですが、慣れると意外と快適です。
ファイルを何往復もしなくていいので、むしろ探しやすくなりました。
2. タスクスケジュールは routes/console.php へ
昔は Console/Kernel.php に書いていたSchedulerですが、今は違います。
Laravel 13では、
routes/console.php
に直接書くスタイルになっています。
こんな感じで書けます
use Illuminate\Support\Facades\Schedule;
use App\Jobs\CleanupFilesJob;
Schedule::command('telescope:prune --hours=48')->daily();
Schedule::job(new CleanupFilesJob())
->everyTenMinutes();
めちゃくちゃ直感的です。
3. bootstrap/providers.php の登場
以前は config/app.php に長い providers 配列がありましたよね。
Laravel 13では、Service Provider登録は専用ファイルへ移動しました。
bootstrap/providers.php
Laravelが自動でここを読み込んでくれます。
かなりスッキリしました。
4. カスタムConnection実装は要注意
ここが個人的に一番ハマったポイントです。
もしプロジェクトでLaravelのコアクラスをオーバーライドしている場合、特に注意してください。
例えば:
- カスタムDB Connection
- 独自Builder
- Custom Grammar
- 独自Queue Driver
などです。
メソッドシグネチャが変わっている
Laravel内部で、引数が追加されているケースがあります。
例えば:
- public function select($query, $bindings = [], $useReadPdo = true)
+ public function select(
+ $query,
+ $bindings = [],
+ $useReadPdo = true,
+ array $fetchUsing = []
+ )
これを修正し忘れると、起動時にPHPから
「型違うよ!!!」
と怒られます。
アップグレード時は、
grep -R "extends .*Connection" app/
みたいにして、独自実装を洗い出すのがおすすめです。
実際にアップグレードしてみた感想
1. とにかくスリム
不要なファイルが減ったことで、
- 見通しが良い
- 初見でも理解しやすい
- 「Laravelっぽさ」が減った
という印象でした。
2. 起動が軽く感じる
体感レベルですが、起動が少し軽く感じます。
特に:
- PHP 8.4
- OPcache
- Laravel Pulse
あたりと組み合わせるとかなり快適です。
3. チーム開発で迷子になりにくい
以前は、
「ミドルウェアどこだっけ?」
「例外Handlerどこ?」
みたいな会話がよくありました。
今は入口がかなり整理されたので、新規メンバーも理解しやすそうです。
アップグレード前のチェックリスト
Laravel 13へ上げる前に、これだけは確認しておくと安心です。
- PHPバージョン確認
- サードパーティPackageの対応状況
- 独自Connection実装
- 独自Middleware登録
- Exception Handlerの移行
- Scheduler移行
- PHPUnit / Pest対応確認
まとめ
Laravel 13へのアップグレードは、最初こそ構造変化に驚きます。
でも実際に触ってみると、
「あ、これ未来のLaravelだ」
という感じがしました。
特にSlim Skeletonは、
- 学習コストを減らし
- ボイラープレートを削減し
- 本来のアプリ開発に集中できる
かなり良い方向の進化だと思います。
最後に
これからアップグレードする方へ。
まずは公式ドキュメントをざっと読むのがおすすめです。
特に:
- Slim Skeleton
- Upgrade Guide
は事前に目を通しておくと安心です。
そして何より、
Package互換性チェックは先にやりましょう。
ここをサボると、後半で地獄を見ます(笑)。
皆さんのLaravelアップグレードが、残業なしで平和に終わることを祈っています 🙏