【Laravel】Laravel 13とは?Laravel 12からの変更点まとめ

laravelアイキャッチ Laravel

こんにちは、かつコーチです。
2026年3月17日にLaravel 13がリリースされました。
「アップグレードした方がいいの?」「Laravel 12と何が違うの?」と気になっている方も多いと思います。
この記事では、Laravel 13の全体像をダイジェストでまとめます。
細かい機能ごとの使い方は後続記事で深掘りするので、まずはここで「何が変わったか」を押さえてください。

Laravel 13とは?

バージョンの位置づけとサポート期間

Laravel 13は、Laravel 12の後継として2026年3月17日にリリースされたメジャーバージョンです。
バグ修正サポートは2027年Q3まで、セキュリティ修正は2028年3月17日まで提供される予定です。
公式は「破壊的変更を最小限に抑えた」とアナウンスしていますが、実務でハマりやすいポイントもいくつかあるので、この記事の後半で紹介します。

動作要件:PHP 8.3以上が必須に

もっとも実務インパクトが大きい変更が、動作要件(フレームワークを動かすために必要な環境条件)の引き上げです。
Laravel 12はPHP 8.2以上に対応していましたが、Laravel 13ではPHP 8.3以上が必須になりました。
古いサーバーでPHP 8.2運用のままLaravel 13を導入しようとすると、composerのインストール段階でエラーになります。
筆者が実際に検証環境をLaravel 12から13へ上げた際も、最初にPHPのバージョン不一致でcomposer updateが止まりました。
アップグレード作業に着手する前に、まず本番・ステージング環境のPHPバージョンを確認しておきましょう。

php -v
# PHP 8.3.x 以上であることを確認する

Laravel 13の主要新機能ダイジェスト

ここからは、Laravel 13の目玉機能を一通り紹介します。
それぞれの詳しい使い方は、専用記事で深掘りしていく予定です。

Laravel AI SDK 正式版

これまでプレビュー扱いだったLaravel AI SDK(AIモデルをLaravelアプリから統一的に扱うための公式SDK)が正式版になりました。
SalesCoach::make()->prompt(...)のようなプロバイダー非依存API(OpenAI・Anthropic・Gemini・Azure・Groq・DeepSeek・Ollamaなどを同じ書き方で扱える仕組み)が用意されており、テキスト・画像・音声生成に対応しています。
会話履歴を保存するRemembersConversations、構造化出力、自動フェイルオーバー(あるプロバイダーで失敗したら別プロバイダーに自動で切り替える機能)も備えています。
詳しい実装例は次回の記事で解説します。

セマンティック検索(ベクトル検索)

セマンティック検索(文字列の一致ではなく、文章の意味の近さで検索する仕組み)を実現するwhereVectorSimilarTo()メソッドが追加されました。
利用にはPostgreSQL + pgvector拡張が必須です。
RAG(Retrieval-Augmented Generation:検索した情報をもとにAIが回答を生成する仕組み)アプリを作る際の土台として使えます。
こちらも専用記事でハンズオン形式で解説します。

PHP Attributes構文への統一

Laravel 13では、モデルやジョブの設定をPHP Attributes#[...]の形式でクラスやプロパティにメタ情報を付与するPHPの言語機能)で書けるように統一されました。
たとえば以下のような書き方です。

#[Fillable()]
class Article extends Model
{
    // ...
}

#[Middleware('auth')]
class DashboardController extends Controller
{
    // ...
}

#[Tries(3)]
class SendInvoiceJob implements ShouldQueue
{
    // ...
}

なお、旧来のプロパティ宣言(protected $fillable = [...]のような書き方)も引き続き動作するため、既存コードをすぐに書き換える必要はありません。

Queue Routing

ジョブごとに接続先・キュー名をまとめて指定できるQueue Routingが追加されました。

use Illuminate\Support\Facades\Queue;

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

これまでジョブクラスの中に散らばりがちだった接続・キュー先の設定を、1箇所に集約できるようになります。

JSON:API Resources

APIリソースがJSON:API(APIレスポンスの構造を統一するための標準仕様)に準拠しました。
?include=authorで関連データを含めたり、?fields[articles]=titleでレスポンスに含めるフィールドを絞り込んだりできます。

GET /api/articles?include=author&fields[articles]=title

Cache::touch()

キャッシュの値を再保存せずにTTL(有効期限)だけを延長できるCache::touch()が追加されました。

// 値はそのまま、有効期限だけを60秒延長する
Cache::touch('article:1', now()->addSeconds(60));

これまでTTLを延ばすには値ごと再保存する必要があったので、値が大きいキャッシュでは地味に嬉しい変更です。

よくあるつまずきポイント・エラー対処

つまずき1:CSRF関連クラス名の変更

Laravel 13ではCSRF(クロスサイトリクエストフォージェリ:悪意あるサイトから正規ユーザーの権限で不正リクエストを送らせる攻撃)関連のクラス名が変更されています。
筆者の検証環境でも、bootstrap/app.phpのミドルウェア設定を旧クラス名のまま引き継いだところ、Class not foundエラーが発生しました。

// ❌ Before(Laravel 12のクラス名のまま)
$middleware->validateCsrfTokens(except: [
    'stripe/*',
]);
// ✅ After(Laravel 13の新しいクラス名を確認して置き換える)
// アップグレード時は公式のアップグレードガイドで
// CSRF関連クラスの新しい名前空間・クラス名を必ず確認すること

エラーメッセージに出てきたクラス名をそのまま検索し、公式アップグレードガイドの該当箇所を確認するのが一番早い解決法です。

つまずき2:キャッシュキーの区切り文字変更

キャッシュキーのデフォルトの区切り文字が、アンダースコア(_)からハイフン(-)に変更されました。
既存のキャッシュキーを直接文字列で指定しているコードがあると、Laravel 12までとキーが一致せずキャッシュがヒットしなくなることがあります。

// ❌ Before:区切り文字の変更に気づかず、
// 古い形式のキーをハードコードしたまま運用してしまう
Cache::get('article_1_comments');
// ✅ After:Cacheのキー生成をヘルパーやメソッドに集約し、
// 区切り文字の変更があっても1箇所の修正で済むようにする
Cache::get(cacheKeyFor('article', 1, 'comments'));

キャッシュキーを直書きせず、生成ロジックを共通化しておくと、こうしたバージョンアップの影響を最小限に抑えられます。

応用・一歩先の使い方

Laravel 13の新機能は、単体で見ると小粒に見えるものもありますが、組み合わせると効果を発揮します。
たとえば、AI SDKで生成した回答をセマンティック検索の結果と組み合わせてRAGアプリを構築したり、Queue RoutingでAI SDKの音声生成ジョブだけ専用キューに逃がしたりといった使い方が考えられます。
まずは自分のアプリで影響範囲の小さい機能(Cache::touch()やJSON:API Resourcesなど)から試してみて、慣れてきたらAI SDKやセマンティック検索のような大きめの機能に手を広げていくのがおすすめです。

まとめ

この記事のポイント

  • Laravel 13は2026年3月17日リリース。PHP 8.3以上が必須になった
  • 目玉機能はAI SDK正式版、セマンティック検索、PHP Attributes構文統一、Queue Routing、JSON:API Resources、Cache::touch()
  • CSRF関連クラス名とキャッシュキーの区切り文字変更は実務でハマりやすいので要注意
  • 破壊的変更は最小限とはいえ、アップグレード前にPHPバージョンとCSRF・キャッシュキー周りは必ず確認する

次に読むべき記事

  • 「Laravel 13のAI SDKを徹底解説(テキスト・画像・音声生成)」
  • 「Laravel 13のセマンティック検索(ベクトル検索)を試す」

タグ: #Laravel #Laravel13 #初心者向け #入門

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