2026年3月17日、Laravel 13がリリースされました。
今回のリリースについて、公式は次のように述べています。
Much of our focus during this release cycle has been minimizing breaking changes.(今回のリリースサイクルでは、破壊的変更を最小限に抑えることに注力した)
https://laravel-news.com/laravel-13-released
つまり、Laravel 12からの移行は比較的スムーズだと考えられます。ただしPHP8.3以上が必要になりました。またAI・ベクター検索まわりは大きな進化があります。

変更点分かりやすくお伝えしますね。
① PHPバージョンが8.3以上必須に
Laravel 13はPHP 8.3~サポートとなります。
公式のサポート期限は以下のとおりです(公式リリースノートより)。
| バージョン | リリース日 | バグ修正サポート期限 | セキュリティ修正期限 |
|---|---|---|---|
| Laravel 10 | 2023年2月14日 | 2024年8月6日 | 2025年2月4日 |
| Laravel 11 | 2024年3月12日 | 2025年9月3日 | 2026年3月12日 |
| Laravel 12 | 2025年2月24日 | 2026年8月13日 | 2027年2月24日 |
| Laravel 13 | 2026年3月17日 | 2027年Q3 | 2028年3月17日 |
② PHPの属性(Attributes)がデフォルトに
これまでは項目ごとの設定を、クラスの中に書いていました。Laravel 13から、PHPの属性構文(#[])を使って記述できるようになりました。これはPHP 8.0からの標準の書き方です。
これまでの書き方
|
1 2 3 4 5 6 |
class User extends Authenticatable { protected $fillable = ['name', 'email', 'password']; protected $hidden = ['password', 'remember_token']; } |
Laravel 13からの新しい書き方
|
1 2 3 4 5 6 7 8 9 |
use Illuminate\Database\Eloquent\Attributes\Fillable; use Illuminate\Database\Eloquent\Attributes\Hidden; #[Fillable(['name', 'email', 'password'])] #[Hidden(['password', 'remember_token'])] class User extends Authenticatable { } |
ただ、どちらの書き方でも動きます。 デフォルトのファイルでは、この新しい書き方になっています。
③ Laravel AI SDK が正式搭載
一言でたとえてみると…、「WebアプリにAIを組み込むための公式の道具箱」です。
AIをWebアプリに組み込む工事の手間が大幅に減らせます。

これまでエンジニアが泥臭く自分で書いていた部分を、SDKが代わりにやってくれるようになりました。
Laravel AI SDKインストール

Laravel AI SDKはLaravel 12から存在していましたが、公式の安定版パッケージとして正式リリースされました。
まずはcomposerでインストールします。
|
1 |
composer require laravel/ai |
インストール後は、publishコマンドでmigrationファイルをパブリッシュします。
|
1 |
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider" |
そしてマイグレーションコマンドを実行。
|
1 |
php artisan migrate |
会話履歴を保存するテーブルが作成されます。

APIキーの設定
|
1 2 3 4 5 6 |
'default' => 'openai', 'default_for_images' => 'gemini', 'default_for_audio' => 'openai', 'default_for_transcription' => 'openai', 'default_for_embeddings' => 'openai', 'default_for_reranking' => 'cohere', |
使用するAIによってここを書き換えます。たとえばGeminiをメインで使う場合は
.envに次のようにいれておきます(××部分は変えてください)。
【.env】
|
1 |
GEMINI_API_KEY=××× |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'default' => 'gemini', 'default_for_images' => 'gemini', 'default_for_audio' => 'openai', 'default_for_transcription' => 'openai', 'default_for_embeddings' => 'gemini', 'default_for_reranking' => 'cohere', // (省略) 'gemini' => [ 'driver' => 'gemini', 'key' => env('GEMINI_API_KEY'), ], |
何が便利になったのか
Laravel AI SDKを使うと便利な点をまとめてみます。
AIごとの「バラバラなルール」を覚えなくていい
これまでは各APIに合わせて書き方を変えなければいけませんでした。ですがLaravel AI SDKを使うと、どのAIを使っても同じ書き方でOK。

コードの量もぐっと少なくできます。
|
1 2 3 4 5 |
// どのAIを使っても書き方は同じ $response = (new ChatAgent)->prompt('Laravelについて教えて'); // GeminiからClaudeに切り替えるのもこれだけ $response = (new ChatAgent)->prompt('Laravelについて教えて', provider: 'anthropic'); |
会話の記憶を自動管理してくれる(RemembersConversations)
AIとのチャットアプリを作る際、厄介なのが「AIは過去のやり取りを覚えていない」という点。
これまでは、会話履歴をDBに保存して、毎回取り出して、並び順を整えて、AIに渡し直す…というコードを自分で書く必要がありました。このLaravel AI SDKを使うと、会話履歴を自動保存してくれるデータベーステーブルが既に用意されています(マイグレーションは必要)。
実際に保存を行いたいときには、次のようにRemembersConversationsトレイトをいれるだけ。
【app/Ai/Agents】
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php namespace App\Ai\Agents; // Agentクラスにトレイトを1行追加するだけ use Laravel\Ai\Concerns\RemembersConversations; use Laravel\Ai\Contracts\Agent; use Laravel\Ai\Contracts\Conversational; use Laravel\Ai\Promptable; use Stringable; class MemoryChatAgent implements Agent, Conversational { use Promptable, RemembersConversations; /** * エージェントへの基本指示 */ public function instructions(): Stringable|string { return 'あなたは親切で優しいAIアシスタントです。日本語で自然に会話してください。'; } } |
コントローラー側もシンプルに
【AIエージェント使用例】
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
/** * メッセージを送信してAIの返答を取得する(RemembersConversationsで自動記録) */ public function send(Request $request) { $request->validate(['message' => 'required|string|max:1000']); $sessionUser = $this->sessionUser($request); $agent = new MemoryChatAgent(); // 既存の会話があれば続ける、なければ新規開始 $lastConversationId = DB::table('agent_conversations') ->where('user_id', $sessionUser->id) ->orderByDesc('updated_at') ->value('id'); if ($lastConversationId) { $agent->continue($lastConversationId, as: $sessionUser); } else { $agent->forUser($sessionUser); } // RemembersConversationsが自動でDBに保存してくれる $response = $agent->prompt($request->input('message'), provider: 'gemini'); return response()->json(['message' => (string) $response]); } |

コードがさらにシンプルになります。
Taylor氏のインタビューより
Taylor氏(Laravel開発者)は、「Building AI Applications with the Laravel AI SDK」というYoutube動画にて、Laravel AI SDKについて語っています。
「remembers conversations」については、次のように話しています。(動画 34:18頃)。
“if I use this remembers conversations trait, it’s going to automatically store conversations in a conversations table. It’s going to put the messages in like an agent messages table and it’s going to automatically pull them back out when you continue the conversation. It’s just super nice because it’s a lot of kind of like boilerplate code… So to just be able to use this trait in like one line of code it’s like oh I just have like conversation state”

生成AIとのやりとりを保存する仕組みはこれまでも可能でした。ですが、長々とコードを入れる必要がありました。Laravel AI SDKを使うとスッキリ効率化できます。
3. AIの返答を確実に構造化データで受け取れる(Structured Output)
これまではプロンプトで「JSON形式で返して」とAIにお願いしても、余計な文章を混ぜて返してきてエラーになることがありました。
Laravel AI SDKの「構造化出力(Structured Output)」を使えば、スキーマを定義するだけで確実に指定した形式で返ってきます。
4. エラー時の自動切り替え(フェイルオーバー)
もしエラーおこったら、自動で他のAIに切り替えてくれます。
|
1 2 3 4 5 |
// OpenAIが落ちたら自動でClaudeに切り替え $response = (new ChatAgent)->prompt( '質問', provider: [Lab::OpenAI, Lab::Anthropic], ); |
そのほかのLaravel AI SDKの機能
上記のほかにも、以下の機能が公式ドキュメントに記載されています。
- Images:テキストから画像を生成
- Audio (TTS):テキストを音声に変換
- Transcription (STT):音声をテキストに文字起こし)
- Embeddings:文字列をベクター化してDBに保存、セマンティック検索に活用
- Reranking:検索結果を意味の近さで並び替え
- Files:ファイルをAIプロバイダーに保存して会話で使う
- Vector Stores:ファイルをベクター化して検索可能なナレッジベースを構築
- Queueing:時間のかかるAI処理をバックグラウンドで実行
詳細はこちら
④ セマンティック検索(ベクター検索)

Laravel 13から、意味で検索するセマンティック検索が追加されました。
通常の検索は「この単語が含まれているか」で探します。セマンティック検索は「意味が近いか」で探します。「お酒」と入れたら「ワイン」「レストラン」も引っかかる、というイメージです
【セマンティック検索例】
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * セマンティック検索を実行する */ public function search(Request $request) { $request->validate(['query' => 'required|string|max:200']); $query = $request->input('query'); // whereVectorSimilarToに文字列を渡すと自動でEmbeddingを生成して比較 $results = Document::query() ->whereVectorSimilarTo('embedding', $query, minSimilarity: 0.4) ->limit(10) ->get(); return view('vector-search.index', compact('results', 'query')); } |
内部ではAIが文字列を「意味のベクトル(数値の配列)」に変換して比較しています。文字列を渡すだけで自動的にその変換もやってくれます。
なお、この機能はLaravel AI SDKの一部であるEmbeddings(文字列をベクター化する機能)を使っています。検索時のベクター変換にはconfig/ai.phpのdefault_for_embeddingsに指定したAIプロバイダーが使われます。
また本機能はPostgreSQLとpgvector拡張が必要です(MySQLは非対応)。マイグレーションでベクター列を追加します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function up(): void { // pgvector拡張を有効化 Schema::connection('pgsql')->ensureVectorExtensionExists(); Schema::connection('pgsql')->create('documents', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('content'); // Gemini embedding-001は3072次元(HNSWインデックスの上限2000を超えるためインデックスなし) $table->vector('embedding', dimensions: 3072)->nullable(); $table->timestamps(); }); }<code class="language-php"> |
※次元数は使用するAIモデルによって異なります。今回のデモではGeminiを使用したため3072を指定しています。
⑤ そのほかの変更点
ほか、下記の変更点が書かれています。
JSON:API Resources
APIのレスポンス形式をJSON:API形式でレスポンスを構築しやすくする公式機能が追加されました。複数システム間の連携案件で「JSON:API形式で返してください」と言われた時にスムーズに対応できます。
Queue Routing
ジョブ(重い処理を後回しにする仕組み)ごとの処理先を、一か所にまとめて書けるようになりました。複数のジョブを管理するときに便利です。
|
1 2 3 4 |
// AppServiceProviderなどに一覧で書ける Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts'); Queue::route(SendNewsletter::class, connection: 'redis', queue: 'emails'); |
Cache::touch()
キャッシュの有効期限だけを延ばすメソッドが追加されました。これまでは「取り出して→同じ内容で再保存」という無駄な通信が発生していました。
|
1 2 3 |
// セッションの有効期限を1時間延長(データを取り出さずに) Cache::touch('user_session:123', 3600); |
Laravel12からのアップグレード
影響の可能性が【高い】とされているのは下記2点です。
- 依存パッケージの更新が必要
-
laravel/frameworkに^13.0laravel/boostに^2.0laravel/tinkerに^3.0phpunit/phpunitに^12.0pestphp/pestに^4.0
- CSRFミドルウェアのクラス名変更
- VerifyCsrfTokenを使っている場合は要確認
まとめ
Laravel 13というより、Laravel AI SDKがベータ版から安定版になったことが一番インパクトがあると思います。
「LaravelはAIアプリ開発のフレームワークになる」という方向性が明確に感じられます。

生成AI時代にも引き続きLaravelで開発楽しんでいきましょう♪
「Laravel初めて」という方のために、「Laravelの教科書」という学習サイト運営しています。基礎編無料です♪
書籍版もあります。詳しくは記事の下見てみてくださいね。

