Skip to main content

はじめに

Laravel 12 は 2025年2月にリリースされました。このガイドでは Laravel 11.x から 12.x へのアップグレード手順を説明します。
アップグレードに必要な推定時間は 約5分 です。ただし、破壊的変更がアプリケーションに与える影響は規模や使用している機能によって異なります。

Laravel Shift を使った自動アップグレード

Laravel Shift を使ってアップグレードを自動化することもできます。Shift はアプリケーションの依存関係や設定ファイルを自動的に更新してくれます。

影響度別の変更点

影響度: 高

  • 依存関係の更新
  • Laravel インストーラーの更新

影響度: 中

  • Eloquent HasUuids トレイトと UUIDv7

影響度: 低

  • Carbon 3
  • Concurrency の結果インデックスマッピング
  • コンテナのクラス依存解決
  • 画像バリデーションの SVG 除外
  • ローカルファイルシステムディスクのデフォルトルートパス
  • マルチスキーマのデータベースインスペクション
  • ネストされた配列リクエストのマージ

アップグレード手順

依存関係の更新

影響度: 高 composer.json の以下の依存関係を更新してください。
更新後、以下のコマンドで依存関係をインストールします。

Laravel インストーラーの更新

影響度: 高 Laravel インストーラー CLI を使って新しい Laravel アプリケーションを作成する場合は、Laravel 12.x および新しいスターターキットに対応したバージョンに更新してください。 composer global require でインストールした場合:
php.new でインストールした場合は、OS に合わせて再インストールコマンドを実行してください。
Laravel Herd のバンドル版を使用している場合は、Herd 自体を最新リリースに更新してください。

新スターターキット

Laravel 12 では、従来の Breeze や Jetstream に代わる新しいスターターキットが導入されました。laravel new を実行すると、フロントエンドスタックを対話的に選択できます。 利用可能なスターターキット:
  • React — Inertia 2、React 19、TypeScript、Tailwind 4、shadcn/ui
  • Vue — Inertia 2、Vue Composition API、TypeScript、Tailwind 4、shadcn-vue
  • Svelte — Inertia 2、Svelte 5、TypeScript、Tailwind 4、shadcn-svelte
  • Livewire — Livewire、Tailwind 4、Flux UI
コマンドを実行するとスターターキットの選択が促されます。選択後は依存関係をインストールして開発サーバーを起動するだけです。
既存のアプリケーションをアップグレードする場合、スターターキットを導入し直す必要はありません。新規プロジェクト向けの変更です。

破壊的変更 (Breaking Changes)

Eloquent

HasUuids トレイトと UUIDv7

影響度: 中 HasUuids トレイトが UUID v7 (順序付き UUID) を返すようになりました。以前の順序付き UUID v4 の動作を維持したい場合は、HasVersion4Uuids トレイトに切り替えてください。
以前から HasVersion7Uuids トレイトを使用していた場合は、HasUuids トレイトに変更してください(同じ動作になりました)。

バリデーション

画像バリデーションの SVG 除外

影響度: 低 image バリデーションルールがデフォルトで SVG を許可しなくなりました。SVG を許可する場合は明示的に指定してください。

ストレージ

ローカルファイルシステムディスクのデフォルトルートパス

影響度: 低 filesystems 設定で local ディスクを明示的に定義していない場合、デフォルトのルートパスが storage/app から storage/app/private に変更されました。 以前の動作を維持するには、設定ファイルで local ディスクを明示的に定義してください。

データベース

マルチスキーマのデータベースインスペクション

影響度: 低 Schema::getTables()Schema::getViews()Schema::getTypes() がデフォルトですべてのスキーマの結果を返すようになりました。特定のスキーマのみを対象にするには schema 引数を渡してください。
Schema::getTableListing() がデフォルトでスキーマ修飾されたテーブル名を返すようになりました。

データベースコンストラクターシグネチャの変更

影響度: 非常に低 Illuminate\Database\Schema\BlueprintIlluminate\Database\Grammar のコンストラクターが Connection インスタンスを第一引数として要求するようになりました。
また、以下の API が削除または非推奨になりました。 テーブルプレフィックスはコネクションから直接取得してください。

Concurrency

結果インデックスマッピング

影響度: 低 Concurrency::run() に連想配列を渡した場合、結果がそれぞれのキーと対応して返されるようになりました。

コンテナ

クラス依存解決のデフォルト値

影響度: 低 DIコンテナが、クラスインスタンスを解決する際にクラスプロパティのデフォルト値を尊重するようになりました。

リクエスト

ネストされた配列リクエストのマージ

影響度: 低 $request->mergeIfMissing() でドット記法を使ったネストされた配列データをマージできるようになりました。以前はドット記法のキーがそのまま最上位のキーとして作成されていました。

ルーティング

ルートの優先順位

影響度: 低 同じ名前を持つ複数のルートがある場合の動作が、キャッシュあり・なしで統一されました。キャッシュなしのルーティングでも、最後ではなく最初に登録されたルートが優先されるようになりました。

認証

DatabaseTokenRepository コンストラクターの変更

影響度: 非常に低 Illuminate\Auth\Passwords\DatabaseTokenRepository のコンストラクターが $expires パラメーターを分単位ではなく秒単位で受け取るようになりました。

Carbon 3

影響度: 低 Carbon 2.x のサポートが削除されました。Laravel 12 のアプリケーションはすべて Carbon 3.x が必要です。

まとめ

Laravel 12 は比較的スムーズにアップグレードできるバージョンです。主な注意点をまとめます。

参考資料

最終更新日 2026年4月19日