【2026年6月】Laravel 13の変更点まとめ|押さえるべき新機能

Laravel

Laravel 13のリリースとサポート期間

2026年のLaravel本体の大きな変更は、Laravel 13のリリースです。Laravel 13は2026年3月17日にリリースされ、対応PHPは8.3〜8.5です。

Laravel 13では、バグ修正は2027年第3四半期まで、セキュリティ修正は2028年3月17日まで提供されます。Laravel 12はPHP 8.2〜8.5に対応し、バグ修正は2026年8月13日まで、セキュリティ修正は2027年2月24日までです。新規開発や長期運用を考える場合は、Laravel 13を選ぶことでサポート期間を長く確保できます。

PHP 8.3以上が必須に

Laravel 13.xでは、PHPの最低要件が8.3になりました。Laravel 12ではPHP 8.2から利用できましたが、Laravel 13へ上げる場合はPHP 8.3以上の環境が必要です。

サーバー側のPHPが古いままだと、Laravel 13へアップグレードできません。Laravel本体を更新する前に、本番環境、開発環境、CI環境のPHPバージョンを確認しておく必要があります。

破壊的変更は少なめ

Laravel 13は、既存アプリケーションのコード変更をできるだけ少なくする方針でリリースされています。多くのLaravelアプリケーションでは、大きなアプリケーションコード変更なしでLaravel 13へ移行しやすい内容になっています。

ただし、確認不要という意味ではありません。PHPのバージョン、ミドルウェア名、キュー関連の変更、ルートの判定順など、アプリの構成によって影響が出る部分は事前に確認しておく必要があります。

Laravel AI SDKの追加

Laravel 13では、公式のLaravel AI SDKが追加されました。テキスト生成、ツール呼び出しを行うエージェント、埋め込み、音声、画像、ベクターストア連携などをLaravelのAPIとして扱えます。

これまで外部AIサービスを使う場合は、各サービスのSDKやAPIを個別に組み込む必要がありました。Laravel AI SDKを使うことで、Laravelの書き方に近い形でAI機能を実装しやすくなります。

use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()
    ->prompt('Analyze this sales transcript...');

return (string) $response;

AI SDKはOpenAI、Anthropic、Geminiなど複数プロバイダに対応しています。エージェント、構造化出力、ツール、MCPツール、画像生成、音声合成、文字起こし、埋め込み、リランキング、ファイル、ベクターストアなどを扱えます。

JSON:API Resourcesの追加

Laravel 13では、JSON:API仕様に沿ったレスポンスを返すための公式JSON:API Resourcesが追加されました。リソースオブジェクトのシリアライズ、リレーションのinclude、sparse fieldsets、リンク、JSON:API準拠のレスポンスヘッダーを扱えます。

APIのレスポンス形式を一定のルールにそろえたい場合に便利です。フロントエンドや外部サービスと連携するAPIでは、返すデータの形が安定しやすくなります。

CSRF保護がPreventRequestForgeryに変更

CSRFミドルウェアは、Laravel 13でVerifyCsrfTokenからPreventRequestForgeryへ名称が変わりました。VerifyCsrfTokenValidateCsrfTokenは非推奨のエイリアスとして残ります。

名称が変わったことで、CSRFトークンの確認だけでなく、不正なリクエスト送信を防ぐ役割がより分かりやすくなっています。Laravel 13では、Sec-Fetch-Siteヘッダーを使ったリクエスト元検証も加わっています。

use Illuminate\Foundation\Http\Middleware\PreventRequestForgery;

// Laravel 13.x
->withoutMiddleware([PreventRequestForgery::class]);

PHP Attributesの対応範囲拡大

Laravel 13では、PHP Attributesによる宣言的な設定が広がりました。コントローラーや認可では#[Middleware]#[Authorize]が使え、キュー関連では#[Tries]#[Backoff]#[Timeout]#[FailOnTimeout]などが利用できます。

Attributesを使うと、設定内容をクラスやメソッドの近くに書けます。関連する処理と設定を同じ場所で見られるため、コードの見通しが良くなります。

use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;

#[Middleware('auth')]
class CommentController
{
    #[Middleware('subscribed')]
    #[Authorize('create', [Comment::class, 'post'])]
    public function store(Post $post)
    {
        //
    }
}

追加のAttributesは、Eloquent、イベント、通知、バリデーション、テスト、リソースシリアライズAPIにも広がっています。

Semantic / Vector Searchの強化

Laravel 13では、ベクトル検索の機能が強化されました。PostgreSQLとpgvectorを使った類似検索、文字列からの埋め込み生成、クエリビルダでのベクトル検索が扱えます。

ベクトル検索は、キーワードが完全に一致していなくても、意味が近いデータを探せる検索方法です。FAQ検索、記事検索、商品検索、AIチャットの関連情報検索などで使いやすくなります。

$documents = DB::table('documents')
    ->whereVectorSimilarTo('embedding', 'Best wineries in Napa Valley')
    ->limit(10)
    ->get();

whereVectorSimilarToは、与えたベクトルとの類似度で結果を絞り込み、関連度順に並べます。文字列を渡した場合は、Laravel AI SDKを使って埋め込みが生成されます。

MariaDBのベクトルインデックス対応

Laravel 13の2026年6月更新では、MariaDBでもスキーマビルダからベクトルインデックスを定義できるようになりました。これにより、AI検索やセマンティック検索向けのインデックス作成で、raw SQLに頼る場面が減ります。

マイグレーション内でベクトルインデックスを管理できるため、データベース構造をコードとして扱いやすくなります。MariaDBを使っているプロジェクトでも、AI検索の実装を進めやすくなります。

Queue::routeによるキュールーティング

Laravel 13では、ジョブクラスごとのデフォルト接続先やキュー名をQueue::route()で集中管理できるようになりました。

ジョブごとに接続先やキュー名を何度も指定する必要が減ります。大量のジョブを扱うアプリでは、どのジョブがどのキューに流れるのかを管理しやすくなります。

Queue::route(
    ProcessPodcast::class,
    connection: 'redis',
    queue: 'podcasts'
);

Bus::bulkの追加

2026年6月のLaravel Framework 13.xでは、複数ジョブをまとめて投入するBus::bulk()が追加されました。ジョブを1件ずつdispatchする代わりに、キューと接続ごとにまとめてinsertできます。

大量のジョブを登録する処理では、1件ずつ追加するよりも効率的です。ユーザーごとの処理、メール送信、データ変換などをまとめてキューに入れる場面で使いやすくなります。

Bus::bulk(
    $users->map(fn (User $user) => new ProcessUser($user))->all()
);

再試行しない例外の指定

Laravel 13では、キュージョブで再試行すべきでない例外を指定できるようになりました。例外クラスにretry()メソッドを定義してfalseを返すか、bootstrap/app.phpwithExceptions()で指定できます。

入力データが不正な場合や、再実行しても成功しないエラーでは、何度もジョブを再試行する意味がありません。この変更により、不要な再試行を避けやすくなります。

Queue Attributesをtraitに定義可能に

Laravel 13では、#[Queue(...)]のようなキュー関連のPHP Attributesをtraitに定義できるようになりました。複数のジョブやイベントクラスで同じキュー設定を使う場合、trait側に設定をまとめられます。

同じ設定を何度も書く必要がなくなるため、ジョブやイベントが増えたときも管理しやすくなります。共通のキュー設定をまとめたい場合に便利です。

キュー関連イベントと契約の変更

Illuminate\Queue\Events\JobAttemptedでは、従来の$exceptionOccurred$exceptionに置き換わりました。QueueBusyイベントでは$connection$connectionNameに変更されています。

キューイベントを監視しているアプリでは、参照しているプロパティ名の変更に注意が必要です。ログ出力や通知処理でこれらのイベントを使っている場合は、アップグレード時に確認しておく必要があります。

Illuminate\Contracts\Queue\Queueには、pendingSizedelayedSizereservedSizecreationTimeOfOldestPendingJobが追加されました。独自のキュードライバを実装している場合は、これらのメソッドへの対応が必要になる場合があります。

Cache::touchの追加

Laravel 13では、既存キャッシュ値を取得して保存し直さなくてもTTLを延長できるCache::touch(...)が追加されました。

キャッシュの中身はそのままにして、有効期限だけを延ばしたい場合に使えます。ログイン状態、セッションに近い一時データ、頻繁に参照される設定値などで利用しやすい機能です。

Cache::rememberWithStateの追加

2026年6月の更新では、Cache::rememberWithState()が追加されました。キャッシュ値と同時に、キャッシュヒットだったかミスだったかを示すbooleanを受け取れます。

キャッシュから取得できたのか、新しく生成したのかを処理内で判断できます。キャッシュの動作をログに残したい場合や、取得元によって処理を分けたい場合に便利です。

ルートメタデータの追加

Laravel Framework 13.xの2026年6月更新では、ルートに任意のメタデータを持たせるmetadata()が追加されました。SEO、機能フラグ、権限などの情報をルートに紐付けられ、ルートキャッシュにも対応します。

ルートごとに補足情報を持たせられるため、URLに応じてタイトル、noindex設定、権限情報などを管理しやすくなります。グループに設定したメタデータは子ルートへ再帰的にマージされます。

Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

$request->route()->getMetadata('head.title');

ドメイン付きルートの優先順位変更

Laravel 13では、明示的なドメインを持つルートが、ドメインなしのルートより先にマッチされるようになりました。これにより、サブドメインのcatch-allルートなどの挙動が変わる場合があります。

サブドメインを使っているアプリでは、アップグレード後に想定したルートへ正しくアクセスできるか確認が必要です。特に、ワイルドカードルートや共通ルートを使っている場合は影響を受ける可能性があります。

Postgres Transaction Pooler対応

Laravel 13では、PgBouncer、AWS RDS Proxy、Neonなどのtransaction-mode connection poolerをフレームワーク側で扱えるようになりました。DB接続設定にpooled => trueを設定すると、プール環境に必要な処理をLaravel側が扱います。

コネクションプールを使うと、データベース接続を効率よく再利用できます。アクセス数が多いアプリや、サーバーレス系のデータベースを使う構成で役立ちます。

スキーマ操作やDDLのように直接接続が必要な処理では、接続名に::directを付けてプールを回避できます。

php artisan devの追加

Laravel 13の2026年6月更新では、php artisan devが追加されました。開発サーバー、キューワーカー、ログ監視、Viteを1つのArtisanコマンドで並行実行できます。

開発時に複数のコマンドを別々のターミナルで起動する手間を減らせます。npm、yarn、pnpm、bunも自動判定されます。

php artisan dev

schema:dump –without-migration-dataの追加

schema:dump--without-migration-dataオプションが追加されました。マイグレーションテーブルの行を含めず、構造だけのダンプを作れます。

データベース構造だけを保存したい場合に使えます。マイグレーション履歴を含めたくない環境や、初期構築用のスキーマを整理したい場合に便利です。

php artisan schema:dump --without-migration-data

スケジュールのtimezone指定順序の修正

Laravel 13では、スケジュール定義でbetween()unlessBetween()timezone()より先に呼んだ場合でも、指定したタイムゾーンが正しく使われるようになりました。

これまでは、メソッドを書く順番によって意図した時刻と異なる動作になる可能性がありました。この修正により、スケジュール実行の時刻指定がより扱いやすくなっています。

$schedule->command('foo')
    ->between('10:00', '12:00')
    ->timezone('Europe/Rome');

並列テスト向けarrayメンテナンスモードドライバ

Laravel 13では、並列テスト向けにインメモリのarrayメンテナンスモードドライバが追加されました。ファイルベースのメンテナンスモード状態を複数ワーカーで共有する問題を避けるための変更です。

並列テストでは、複数のテスト処理が同時に動きます。メンテナンスモードの状態をメモリ上で扱うことで、テスト同士が影響し合う問題を減らせます。

Strファクトリのテスト間リセット

Laravel 13では、テスト終了時にカスタムStrファクトリがリセットされるようになりました。UUID、ULID、ランダム文字列のカスタムファクトリが、別のテストメソッドへ残らない動作になります。

テストごとに文字列生成の状態がリセットされるため、前のテストの設定が次のテストへ影響しにくくなります。テスト結果が安定しやすくなる変更です。

Js::fromのUnicode出力変更

Illuminate\Support\Js::fromは、Laravel 13でデフォルトでJSON_UNESCAPED_UNICODEを使うようになりました。Unicode文字は\u00e8のようなエスケープ形式ではなく、そのまま出力されます。

日本語などの文字が、エスケープされた読みにくい形式ではなく、そのまま表示されやすくなります。JavaScriptへデータを渡す部分で、出力内容を確認しやすくなります。

Symfony PHP 8.5 Polyfillの追加

Laravel 13ではsymfony/polyfill-php85への依存が追加されました。PHP 8.5未満ではarray_first()array_last()などのグローバル関数がpolyfillとして定義されます。

PHP 8.5の一部機能を、PHP 8.5未満の環境でも使えるようにするための変更です。ただし、同名の古いヘルパーや独自ヘルパーがある場合は、動作に影響する可能性があります。

Pagination Bootstrap 3ビュー名の変更

Laravel 13では、Bootstrap 3用の内部ページネーションビュー名が明示的になりました。pagination::defaultpagination::simple-defaultは、Laravel 13以降ではpagination::bootstrap-3pagination::simple-bootstrap-3に変わります。

Bootstrap 3用のページネーションビューを直接指定している場合は、ビュー名の変更に対応する必要があります。ページネーション表示をカスタマイズしているアプリでは確認しておきたい項目です。

InteractsWithDataにwhenFilledEnumを追加

Laravel 13では、リクエストなどのデータからbacked enumを扱うためのwhenFilledEnum()が追加されました。キーが存在し、値が有効なenum caseに対応する場合だけコールバックが実行され、クロージャでは型付きenumインスタンスを受け取れます。

リクエスト値をenumとして安全に扱いたい場合に便利です。ステータス、種別、権限など、決まった値だけを受け付けたい処理で使いやすくなります。

$request->whenFilledEnum('status', Status::class, function (Status $status) use ($query): void {
    $query->where('status', $status);
});

Illuminate\JsonSchemaの拡張

Laravel 13では、Illuminate\JsonSchemaanyOfをサポートしました。AIの構造化出力などで、1つのフィールドが複数の形式になり得る場合に使えます。

たとえば、ある項目が文字列の場合も数値の場合もある、といったデータ構造を表現しやすくなります。AIの出力形式を定義する場面でも使いやすい変更です。

2026年6月の更新では、type['string', 'number', 'boolean']のような配列を指定するmulti-type union schemaにも対応しました。

JsonSchema::fromArray(['type' => ['string', 'number', 'boolean']]);

JsonSchema::union(['string', 'number'])->nullable();

Notification MailMessageの添付ファイル機能追加

通知のMailMessageに、attachFromStorage()attachFromStorageDisk()が追加されました。ストレージ上のファイルを通知メールに添付できます。

請求書、レポート、PDFなどを通知メールに添付したい場合に使いやすくなります。ファイルを一度読み込んでから添付する処理を減らせます。

(new MailMessage)
    ->attachFromStorage('invoices/1.pdf')
    ->attachFromStorageDisk('s3', 'invoices/1.pdf', 'Invoice.pdf', [
        'mime' => 'application/pdf',
    ]);

Laravel Boostの変更

Laravel Boostは、AI開発ツールにLaravelアプリケーションの情報を渡し、Laravelに合ったコード生成や調査を支援するための公式ツールです。Laravel 13へのアップグレードでは、Laravel Boost 2.0以上を使うことで、AI開発ツールから/upgrade-laravel-v13コマンドを利用できます。

現行のLaravel Boost本体は、Laravel 11.45.3以上、Laravel 12.41.1以上、Laravel 13.xに対応しています。Laravel 10にもBoost本体をそのまま追加できる、という内容ではありません。

BoostのMCPツールでは、アプリケーション情報、ブラウザログ、データベース接続、データベースクエリ、データベーススキーマ、絶対URLの取得、直近のエラー、ログ読み取り、ドキュメント検索などをAI開発ツールから利用できます。

2026年6月の更新では、BoostのMCPサーバーアイコンメタデータ、Pintの--dirty実行、BOOST_MCP_TOOL_TIMEOUTによるMCPツールタイムアウト設定、Pi、Google Antigravity、Factory Droid、Zedなどのエージェント対応が追加されています。

MCP ClientのHTTP TransportとPrompts対応

Laravel MCP Clientは、Streamable HTTP Transportをサポートしました。これにより、従来のstdio transportに加えて、HTTP経由でリモートMCPサーバーへ接続できます。Bearer token認証も組み込まれています。

ローカル環境だけでなく、外部サーバー上のMCPツールにも接続しやすくなります。AIツールや外部サービスとLaravelを連携させる構成で使いやすい変更です。

$client = Client::web('https://mcp.example.com/mcp');

Client::web('https://mcp.example.com/mcp')
    ->withToken(env('REMOTE_TOKEN'));

同じ更新で、MCP Clientはpromptの一覧取得と取得にも対応しました。$client->prompts()で利用可能なpromptを取得し、$client->getPrompt()で個別のpromptを取得できます。

EchoのuseSocketIdフック追加

Laravel Echoでは、React、Vue、Svelte向けアダプタにuseSocketId()フックが追加されました。現在のsocket IDを取得し、再接続でIDが変わった場合も自動更新されます。

リアルタイム通信を使うフロントエンドで、現在の接続情報を扱いやすくなります。WebSocketを使った通知、チャット、リアルタイム更新などの実装で役立ちます。

SailのPHP_EXTENSIONSビルド引数追加

Laravel Sailでは、追加のPHP拡張をDockerfileの手動編集なしで入れられるPHP_EXTENSIONSビルド引数が追加されました。docker-compose.ymlでスペース区切りの拡張名を指定できます。

gmpやimagickなど、プロジェクトごとに必要なPHP拡張を追加しやすくなります。Dockerfileを直接変更する手間を減らせるため、開発環境の管理がしやすくなります。

services:
  laravel.test:
    build:
      context: ./vendor/laravel/sail/runtimes/8.4
      dockerfile: Dockerfile
      args:
        WWWGROUP: "${WWWGROUP}"
        PHP_EXTENSIONS: "gmp imagick"

Scoutのユニークインデックスジョブ追加

Laravel Scoutでは、同じモデルの再インデックスジョブが短時間に複数キューへ入ることを避けるため、MakeSearchableUniqueRemoveFromSearchUniqueが追加されました。これらはShouldBeUniqueUntilProcessingを実装しており、利用は明示的に設定する形式です。

検索インデックス更新のジョブが重複しにくくなります。大量のモデル更新が発生するアプリでは、不要な再インデックス処理を減らしやすくなります。

use Laravel\Scout\Scout;
use Laravel\Scout\Jobs\MakeSearchableUnique;
use Laravel\Scout\Jobs\RemoveFromSearchUnique;

Scout::makeSearchableUsing(MakeSearchableUnique::class);
Scout::removeFromSearchUsing(RemoveFromSearchUnique::class);

SocialiteのUser::fake追加

Laravel Socialiteでは、テストで偽のSocialiteユーザーを作るためのUser::fake()が追加されました。従来より少ない記述でSocialite::fake()に渡すユーザーを用意できます。

Google、GitHub、Xなどの外部ログインを使うアプリで、認証テストを書きやすくなります。実際の外部サービスへ接続しなくても、ログイン処理のテストを進められます。

Laravelアプリケーションスケルトンの変更

Laravel 13系のアプリケーションスケルトンでは、Vite 8対応、Axiosの削除、npm auditのデフォルト有効化、postinstallによる悪意あるコード実行を防ぐための設定、.cursor/.codexなどAI開発ツール向けの.gitignore追加、Paoのデフォルト追加などが行われています。

新しくLaravel 13プロジェクトを作成したときの初期構成が変わっています。既存プロジェクトをアップグレードする場合でも、フロントエンド周りや開発ツールの設定を見直す参考になります。

Laravel 12系の2026年更新

Laravel 12系では、2026年にAPP_NAMEのfallbackがSlackログチャンネルのusernameやmail configに追加され、PHPUnitのCVE対応更新、phpunit.xmlのDB_URL無効化、jobs/cache migrationsの更新、failed jobs indexesの削除、filesystems configでのAPP_URL fallback追加などが行われています。

タイトルとURLをコピーしました