4月の Laravel コアは 13.3 から 13.7 まで5リリース出た。テスト高速化の #[UnitTest] 属性に始まり、FormRequest の厳格モード、デバウンス可能なジョブ、SIGTERM に反応する中断可能ジョブまで、テストとキューの実務改善が並んだ。サプライチェーン側では axios npm への RAT 混入と Composer 2.9.6 の脆弱性修正があり、依存の安全性が現実の脅威として動いた月でもある。
出典はすべて Laravel News の各記事。バージョン番号やメソッド名は原文に合わせている。
TL;DR
- コアは 13.3〜13.7。
#[UnitTest]属性、FormRequest 厳格モード、キュージョブの状態検査、デバウンス、中断可能ジョブと、テストとキューが軸。 - テスト基盤も進んだ。Pest 4.5 の不安定テスト自動リトライ、4.6 の時間ベースシャーディング、テスト出力をJSON化する PAO。
- AI と MCP が広がった。QuickBooks の MCP サーバー化、REST API 構築のエージェントスキル、Spatie のコーディング規約 AI スキル、LangChain 風の PHP フレームワーク LLPhant。
- サプライチェーン警戒。axios npm への RAT 混入、Composer 2.9.6 の Perforce コマンドインジェクション修正2件。
- エコシステムは Matt Stauffer の PHP Foundation 理事就任、Laracon US 2026(7/28-29 ボストン)決定。
Laravel コアの進化(13.3 → 13.7)
13.3:#[UnitTest] 属性でテストを部分的にユニット化
Laravel 13.3.0 の目玉は #[UnitTest] 属性だ。TestCase を継承したクラスのうち、コンテナを必要としないメソッドだけフレームワーク起動をスキップでき、素の PHPUnit テストとして桁違いに速く走る。
use Illuminate\Foundation\Testing\Attributes\UnitTest;
class LocationServiceTest extends TestCase
{
public function test_getCoordinates_resolves_address_for_us(): void
{
// needs the container
}
#[UnitTest]
public function test_getState_returns_state_from_abbreviation(): void
{
// no framework boot needed
}
}
このほか、モデル属性が配列でなく可変長引数を受け取れるようになり(#[Fillable('first_name', 'last_name')])、バッチの最初のジョブ処理時に発火する BatchStarted イベントが追加された。詳細モードのキューワーカー出力にはメモリ使用量が出るようになっている。
13.4:FormRequest 厳格モードとジョブの状態検査
13.4.0 は、rules() で宣言していない入力フィールドを拒否する FormRequest の厳格モードを入れた。is_admin や role のような未宣言フィールドがこれまで黙って無視されていた挙動を、明示的に弾けるようになる。
use Illuminate\Foundation\Http\FormRequest;
public function boot(): void
{
FormRequest::failOnUnknownFields(! app()->isProduction());
}
リクエストクラス単位で #[FailOnUnknownFields] 属性によるオプトインも可能だ。デフォルトは false なので既存挙動は変わらない。
あわせて Queue ファサードにジョブの状態検査メソッドが追加された。
Queue::pendingJobs(); // jobs ready to be processed
Queue::delayedJobs(); // jobs waiting for their delay to expire
Queue::reservedJobs(); // jobs currently being processed by a worker
返るのは uuid、name、attempts、createdAt を持つ InspectedJob のコレクション。Queue::pendingJobs()->countBy('name') のように集計できる。Database と Redis ドライバで動作し、他は空コレクションを返す。
13.5:キュー向け Redis Cluster サポート
13.5.0 は、AWS ElastiCache Serverless(Valkey)などの Redis Cluster で出ていた CROSSSLOT エラーを解消した。キューの Lua スクリプトが複数キーをまたぐ問題に対し、クラスタ接続ではキュー名を Redis のハッシュタグで自動ラップし、関連キーを同じスロットへ寄せる。
queues:{default} → slot for "default"
queues:{default}:delayed → slot for "default"
queues:{default}:reserved → slot for "default"
queues:{default}:notify → slot for "default"
ConcurrencyLimiter も同じ扱いになり、mget の Lua スクリプトがスロットをまたがなくなった。あわせてキュー済み Mailable での #[Delay] 属性対応、コントローラ Middleware 属性の子コントローラへの継承、CacheManager や MailManager など各 Manager クラスへの enum 対応拡大、updateOrCreate / firstOrNew でのクロージャ値受け付けが入った。
13.6:デバウンス可能なキュージョブ
13.6.0 は、同じジョブが一定時間内に複数回ディスパッチされても最後の1回だけ実行する #[DebounceFor] 属性を追加した。検索インデックス再構築やダッシュボード同期のような「連打されるが最後だけ実行できればよい」処理に向く。
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\Attributes\DebounceFor;
#[DebounceFor(30)]
class RebuildSearchIndex implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable;
public function __construct(public int $documentId) {}
public function debounceId(): string
{
return (string) $this->documentId;
}
public function handle(): void
{
SearchIndex::rebuild($this->documentId);
}
}
ディスパッチ箇所で dispatch(new SyncExternalData($accountId))->debounceFor(30) と適用することもでき、maxWait で遅延の上限も切れる。実行時に最後のディスパッチが勝つ点が、ディスパッチ時に追加を拒否する ShouldBeUnique との違いだ。このほか、ヘルスルート /up の JSON レスポンス対応、構造化ログ向けの JsonFormatter、Cloudflare Email Service 連携も入った。
13.7:SIGTERM に反応する中断可能なジョブ
13.7.0 は、Interruptible インターフェースを実装したジョブがワーカーへのシグナル(SIGTERM など)に反応できるようにした。デプロイで長時間ジョブが途中終了する事故に対し、停止フラグを立ててクリーンアップできる。
use Illuminate\Contracts\Queue\Interruptible;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class ReportJob implements ShouldQueue, Interruptible
{
use Queueable;
protected bool $stop = false;
public function handle(): void
{
while (! $this->stop) {
// do work...
}
}
public function interrupted(int $signal): void
{
$this->stop = true;
}
}
個々のジョブが Interruptible を実装していなくてもログやアラートに使える WorkerInterrupted イベント、Vite フォント最適化の @fonts Blade ディレクティブ、複数の JSON 値を一度に検証する assertJsonPaths()、コレクションでの SortDirection enum 対応も加わった。
$response->assertJsonPaths([
'data.id' => 1,
'data.name' => 'Taylor',
'meta.count' => 3,
]);
コア早見表
| バージョン | 目玉 | 種別 |
|---|---|---|
| 13.3 |
#[UnitTest] 属性 / BatchStarted イベント / 可変長引数のモデル属性 |
機能追加 |
| 13.4 | FormRequest 厳格モード / pendingJobs() ほかジョブ状態検査 |
機能追加 |
| 13.5 | キュー向け Redis Cluster サポート / Manager の enum 対応拡大 | 機能追加 |
| 13.6 |
#[DebounceFor] デバウンスジョブ / /up の JSON / JsonFormatter
|
機能追加 |
| 13.7 |
Interruptible 中断可能ジョブ / assertJsonPaths() / @fonts
|
機能追加 |
注目パッケージ(テーマ別に厳選)
テスト・CI
-
Pest v4.5.0:
->flaky()修飾子と--flakyフラグで、断続的に落ちるテストを設定回数(デフォルト3回)まで自動リトライする。名前空間とファイルパスの大文字小文字不一致を検出するtoBeCasedCorrectlyアサーションも入った。macOS で通って Linux 本番で落ちる事故の予防に効く。 -
Pest v4.6.0:CI のシャードをファイル数ではなく実行時間で分散させる時間ベースシャーディング。
--update-shardsでクラスごとのタイミングを記録し、生成されるtests/.pest/shards.jsonをコミットするだけで既存の--shardジョブを切り替えられる。 -
PAO:Nuno Maduro 製。テストが AI エージェント内で実行されているのを検出し、出力をコンパクトな JSON に置き換える。出力はスイート規模によらず常時およそ20トークンで、Pest では最大99.8%のトークン削減。
composer require nunomaduro/paoで導入し設定不要。
キュー・運用
-
Laritor:Laravel 構造に合わせた本番向け可観測性ツール。リクエストごとに全クエリ、外部HTTP呼び出し、フィーチャーフラグ、キャッシュを単一タイムラインで可視化する。Composer 導入と
.envの3変数だけで動き、エージェントやサイドカーは不要。Telescope を本番に持っていけない構成で選択肢になる。 -
Laravel Idempotency:
POST/PUT/PATCHのような書き込み系ルートに HTTP 冪等性を付ける。同じIdempotency-Keyと同じペイロードで再送されたら、ハンドラを再実行せずキャッシュ済みレスポンスを再生する。決済や注文作成のリトライによる二重実行を防ぐ。動作にはロック対応キャッシュ(Redis / Memcached)が要る。
use WendellAdriel\Idempotency\Http\Middleware\Idempotent;
Route::post('/orders', StoreOrderController::class)->middleware(Idempotent::class);
-
Laravel Web プッシュ通知:
laravel-notification-channels/webpushで、ネイティブアプリもサードパーティのプッシュサービスも介さず、VAPID キーだけで Web プッシュ通知チャネルを既存の通知システムに追加できる。via()にWebPushChannelを足してtoWebPush()を実装する書き方は、メールや Slack の通知と同じだ。
セキュリティ・サプライチェーン
-
axios npm パッケージの侵害:メンテナーのアカウントが乗っ取られ、
axios@1.14.1とaxios@0.30.4が公開された。axios 本体は無改変で、追加された偽の依存plain-crypto-js@4.2.1のpostinstallが RAT を投下する手口。Laravel 側は安全バージョンへのピン留めなどで対応した。 -
Composer 2.9.6:Perforce VCS ドライバーのコマンドインジェクション2件(CVE-2026-40261 / CVE-2026-40176)を修正。悪意ある
composer.jsonや細工されたソース参照から任意コマンドが実行されうる。composer self-updateでの即時更新が推奨される。2.2.27 LTS でも同じ修正が入った。 -
Spatie のコーディング規約 AI スキル:
spatie/guidelines-skillsで、PHP/Laravel、JavaScript、バージョン管理、セキュリティの4スキルを公開。skills.sh 経由で Claude Code や Cursor、Codex、GitHub Copilot など複数の AI スタックで動く。AI の出力を社の規約に揃える土台になる。
AI・MCP
-
Laravel QuickBooks MCP Server:QuickBooks Online を MCP サーバーとして公開し、AI エージェントに11エンティティ50ツールでフル CRUD を提供する。名前から ID への自動解決、ユーザーごとの接続を分けるマルチテナント対応、OAuth トークンの先行リフレッシュを備える。既存 SaaS を
laravel/mcpで AI に開放する実装例として読める。 -
REST API 構築のエージェントスキル:Steve McDougall による Laravel 13+ 向けの Claude Code スキル
api-skill。ULID 必須、simplePaginate()強制、RFC 9457 準拠のエラー、単一アクションのfinalコントローラーといった意見の強い規約を強制する。git cloneで導入できる。 -
LLPhant:LangChain と LLamaIndex に着想を得た PHP の生成 AI フレームワーク。OpenAI、Anthropic、Mistral、LM Studio、Ollama を統一インターフェースで扱え、埋め込みやベクトルストア、
QuestionAnsweringで RAG パイプラインを PHP だけで組める。ストリーミングやファンクションコーリングにも対応する。
Eloquent・UI
-
Laravel Sluggable:Nuno Maduro 製。トレイトや基底クラスでなく
#[Sluggable]属性ひとつで Eloquent のスラグを自動生成する。衝突処理、スコープ単位の一意性、複数カラム結合、Unicode と CJK の音訳までカバーし、make:sluggableがテーブルスキーマを読んで属性とマイグレーションを生成する。PHP 8.5+ / Laravel 13.5+ が必要。
use NunoMaduro\LaravelSluggable\Attributes\Sluggable;
#[Sluggable(from: 'title')]
class Post extends Model
{
}
-
Activity Log v5:Spatie の監査ログパッケージの v5。
LogsActivityとCausesActivityを統合したHasActivityトレイトと、ログを一括 INSERT するバッファリングを追加した。最低要件は PHP 8.4 / Laravel 12 で、メソッド名や設定名の改名、batch/pipe システム削除といった破壊的変更を含む。 - Commentions:Kirschbaum 製。Filament v3/v4 にコメント、メンション、リアクションをドロップインで追加する。InfoList、テーブルアクション、ヘッダーアクションの3通りで組み込め、ポーリングでリアルタイム更新する。
-
Laravel Mobile Pass:Spatie 製。Apple Wallet と Google Wallet のパス(搭乗券、イベントチケット、会員証など)を統一ビルダー API で生成する。端末にインストール済みのパスへライブ更新をプッシュでき、
save()が返すMobilePassはResponsableなのでコントローラから直接返せる。
今月のトレンド3つ
1. テストとキューの実務改善が一気に来た。 コアは #[UnitTest] 属性によるテスト高速化、FormRequest 厳格モード、ジョブの状態検査、デバウンス、中断可能ジョブと、5リリースすべてがこの2領域に効いた。Pest 4.5 のリトライと 4.6 のシャーディング、PAO のトークン削減も同じ方向で、テストとキューの運用品質を底上げする月だった。
2. AI を PHP / Laravel の中で組む流れ。 QuickBooks の MCP サーバー化、REST API 構築のエージェントスキル、Spatie のコーディング規約 AI スキル、LangChain 風の LLPhant。生成 AI は Python 一択という前提が崩れ、既存の Laravel 資産の上に AI 連携を載せる選択肢が現実的になっている。
3. サプライチェーンの脅威が現実に動いた。 axios npm への RAT 混入と Composer 2.9.6 の Perforce コマンドインジェクション修正が同じ月に出た。コア側でも install:broadcasting が npm/pnpm/yarn に --ignore-scripts を渡すようになり、依存解決とビルド時のコマンド実行リスクへの対策が進んだ。
その他の新着
- PhpStorm 2026.1:Laravel 13、Livewire、Filament のサポート強化。内蔵 MCP サーバーが inspection や quick-fix を Claude Code などのエージェントに公開し、PHP 8.5 パイプ演算子の quick-fix や Git worktree のファーストクラス対応も入った。
-
Laravel VS Code 拡張 v1.7.0:PestPHP のインテリセンス、新コマンド「Go to route」、Laravel 13 アトリビュート(
Authorize/Middleware/Fillable等)への対応。 -
Cloud CLI:Laravel Zero 製の新 CLI で、ターミナルから Laravel Cloud のデプロイや環境管理ができる。多くのコマンドが
--json対応で CI に組み込みやすい。 -
Laravel Cloud のパスブロッキング:
wp-adminや.envを探るボットの探索リクエストを無視し、休止中アプリの不要な起動を防ぐ。新規アプリではデフォルト有効。 -
Laravel スターターキットのトースト通知:4つの公式キット(React / Vue / Svelte / Livewire)がトースト通知を標準搭載。Inertia 系は
Inertia::flash()と Sonner、Livewire 系はFlux::toast()を使う。 - JSON Alexander:Wes Bos 製のブラウザ向け JSON 閲覧拡張。別の人気フォーマッタが位置情報トラッキングを注入していた懸念を受けた、信頼できる代替として公開された。
- Laravel Licensing:シート単位の上限や Ed25519 署名の PASETO v4 トークンによるオフライン検証を備えた、商用ソフト配布向けのエンタープライズ品質のライセンス管理。
-
ArtisanFlow:ノードベースのフローチャート UI を Laravel に持ち込むパッケージ。ノードとエッジを素の PHP 配列で定義し
<x-flow>Blade コンポーネントに渡すだけで、カスタム JS なしにフローを組める(執筆時点でアルファ版)。 -
Pretty PHP Info:
phpinfo()を検索可能なモダン UI に置き換え、設定をコードから問い合わせる PHP API も提供する。ini_get()では取れない php.ini のマスター値まで読める。 -
Passage:Laravel アプリをクライアントと外部 API の間に置く軽量プロキシゲートウェイ。
Passageファサードでルートを登録し、Bearer トークンや API キー、HMAC 署名の認証ヘルパーを内蔵する。 -
laravel-pdf 2.6.0:Spatie の laravel-pdf で、生成した PDF をディスク保存せず mailable や通知に直接
attach()できるようになった。 -
laravel-aigeo(GEO):自社の製品やコンテンツを AI の生成回答に露出させる GEO(生成エンジン最適化)ツール。
HasGeoProfileトレイトや<x-geo-head>Blade で構造化メタデータを出し、AI クローラ向けファイルを生成する。 - Paperdoc:PDF や Office 文書を単一 API で生成、解析、変換できるゼロ依存の PHP ライブラリ。OCR や要約などの AI 連携も持ち、Laravel 11+ 向けの一次サポートを同梱する。
- SaaSykit:決済、サブスク管理、認証、ランディングページまで備えた Laravel ベースの SaaS スターターキット。2周年記念で Complete パッケージが期間限定20%オフ。
- Polyscope の Windows 版:AI エージェント開発支援アプリ Polyscope が Windows に対応。Laravel Herd 連携や、エージェントへのメッセージごとのチェックポイント自動作成とロールバックを備える。次は Linux 対応予定。
-
MongoDB 操作を冪等にする:フロントエンドで生成した冪等性キーを
(user_id, idempotency_key)の複合ユニークインデックスでスコープし、リトライによる決済の二重課金を防ぐ実装解説。 -
MongoDB クエリ性能監視のミドルウェア:Laravel ミドルウェアと MongoDB ドライバのコマンドサブスクライバで、しきい値を超える遅いクエリを
performance_logsに記録する。ログ肥大化は TTL インデックスで抑える。 - Matt Stauffer が PHP Foundation 理事に就任:『Laravel Up and Running』著者で Tighten 代表の Matt Stauffer が就任。最も注力したいのは PHP の評判改善だと語る。
- Laracon US 2026 開催決定:2026年7月28〜29日にボストン(SoWa Power Station)で開催。初期登壇者は Taylor Otwell、Aaron Francis、Nuno Maduro ら。
- PHPantom:Rust で書かれた高速な PHP 言語サーバー。1秒未満の起動と低メモリ(約59MB)で、大規模プロジェクトでも軽快に動く。
- AI チャットエージェントを作る(MongoDB Atlas × Voyage AI):Laravel の AI SDK と Voyage AI の埋め込み、MongoDB Atlas のベクトル検索で RAG 型のチャットエージェントを構築する実装解説。
まとめ
4月は派手な新機能より、テストとキューの足回りを着実に固めたリリースが続いた。#[UnitTest] でテストを部分的にユニット化し、デバウンスと中断可能ジョブでキューの取りこぼしを減らす。Pest のリトライとシャーディングも合わせれば、CI とジョブの安定性に効く改善がそろっている。サプライチェーンの実害が出た月でもあり、依存とビルドの棚卸しは早めに進めておきたい。
このまとめは毎月続ける。詳細は各出典リンクから。