> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# 2026年10月 Laravel アップデート

> 2026年10月のLaravel 13と公式プロダクトの更新。QUERYルート、レプリカの古い読み取り対策、スケジュールの単一サーバー実行、Fakeの検証、CloudのResend連携、ForgeのPHP更新通知をまとめます。

2026年10月は、リクエストの表現方法、データベースの読み取り先、複数サーバーでのスケジュール実行を制御する機能が増えました。Laravel Cloudではメール送信と定期実行の設定が簡単になり、ForgeではPHPのセキュリティ更新やプロビジョニング失敗を把握しやすくなっています。

本ページは、11月4日公開の公式ブログ「Laravel October Product Updates」と、公式Framework Changelogの10月分をもとにした月次記録です。2026年11月7日に一次情報を確認し、FrameworkはLaravel 13系のみを対象にしています。11月のリリースは含めません。

参照元：

* [Laravel October Product Updates](https://laravel.com/blog/laravel-october-product-updates)
* [Laravel Framework changelog — October 2026](https://laravel.com/framework/docs/changelog#log-2026-10)
* [Laravel Framework changelog RSS](https://laravel.com/rss/oss-changelog)

## Laravel Framework

### 10月のリリース範囲

公式Changelogの主要な新機能に加え、リリースノートから日付と導入バージョンを確認しました。

| リリース | 公開日 | 主な変更 |
| - | - | - |
| [v13.35.0](https://github.com/laravel/framework/releases/tag/v13.35.0) | 10月6日 | Fakeのプロパティ検証、ワーカーメモリの割合指定、Markdownレスポンス、`alwaysOnOneServer()`、QUERYルート。 |
| [v13.36.0](https://github.com/laravel/framework/releases/tag/v13.36.0) | 10月13日 | VitessのOLAP実行、既存バリデーションルールのBuilder追加。 |
| [v13.37.0](https://github.com/laravel/framework/releases/tag/v13.37.0) | 10月16日 | `Rule::numeric()`のstrictオプション、`onOneServer()`と`withoutOverlapping()`併用時の競合修正。 |
| [v13.38.0](https://github.com/laravel/framework/releases/tag/v13.38.0) | 10月20日 | `PreventStaleDatabaseReads`、`Connection::usingWritePdo()`。 |
| [v13.39.0](https://github.com/laravel/framework/releases/tag/v13.39.0) | 10月27日 | `RefreshDatabase`でテスト後に全トランザクション階層をロールバック、`assertSeeText('0')`の誤った成功を修正。 |

以下では、公式Changelogに掲載された9項目を詳しく紹介します。細かな修正や依存関係の変更は、各リリースノートを参照してください。

### QUERYルートでリクエストボディを持つ検索を定義

v13.35.0で、HTTPの`QUERY`メソッドに対応する`Route::query()`が追加されました。GETのクエリ文字列ではなく、リクエストボディで検索条件を受け取るルートを定義できます。

```php theme={null}
use App\Http\Controllers\SearchProductsController;
use Illuminate\Support\Facades\Route;

Route::query('/products/search', SearchProductsController::class);
```

`Route::any()`もQUERYリクエストに一致し、ルート一覧はこのメソッドを認識します。上の`SearchProductsController`は、検索処理を実装したアプリケーション側のInvokable Controllerを想定しています。

> [!WARNING]
>
> `web`ミドルウェアグループのQUERYルートは、CSRF検証の対象です。「検索だからGETと同じように検証を省略できる」とは扱わず、CSRFトークンを送信してください。

一次情報：[Register QUERY Routes](https://laravel.com/framework/docs/changelog#october-2026-register-query-routes)、[Laravel 13公式routing.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/routing.md#available-router-methods)。関連ページ：[ルーティング](https://kawax.biz/jp/routing.md)、[CSRF保護](https://kawax.biz/jp/csrf.md)

### 書き込み後の別リクエストでも古い読み取りを避ける

読み書きを分離したデータベースでは、更新直後の読み取りが、まだ同期されていないRead replicaへ向かうことがあります。既存の`sticky`設定が同一リクエスト内を対象にするのに対し、v13.38.0の`PreventStaleDatabaseReads`は、同じセッションの後続リクエストにも保護期間を設けます。

`bootstrap/app.php`で`Illuminate\Foundation\Http\Middleware\PreventStaleDatabaseReads`をimportし、`withMiddleware()`のコールバック内で、`$middleware->web(append: [PreventStaleDatabaseReads::class]);`として追加します。自動で有効になる機能ではありません。

ミドルウェアはデフォルトDB接続への書き込み時刻をセッションへ記録し、既定では書き込みから2秒間、その接続の読み取りをWrite DBへ向けます。期間は、登録するクラスを`PreventStaleDatabaseReads::for(5)`などに替えて変更できます。

```mermaid theme={null}
sequenceDiagram
    participant User as 利用者
    participant App as Laravel<br>アプリ
    participant Session as セッション
    participant Write as Write DB
    participant Read as Read replica
    User->>App: 更新リクエスト
    App->>Write: データを書き込み
    App->>Session: 書き込み時刻を記録
    User->>App: 同じセッションの次のリクエスト
    App->>Session: 書き込みからの経過時間を確認
    alt 2秒の保護期間内
        App->>Write: データを読み取り
    else 保護期間後
        App->>Read: 通常の読み取り先を使用
    end
```

セッションを使うため、`StartSession`より後に実行する必要があります。別セッションや別DB接続の読み取りまで切り替える機能ではなく、レプリカの同期完了を検知するものでもありません。

一次情報：[Avoid Stale Reads After Database Writes](https://laravel.com/framework/docs/changelog#october-2026-avoid-stale-reads-after-database-writes)、[Laravel 13公式database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#preventing-stale-database-reads)。関連ページ：[データベース](https://kawax.biz/jp/database.md)、[セッション](https://kawax.biz/jp/session.md)

### 特定の処理だけWrite DBから読み取る

同じv13.38.0で追加された`Connection::usingWritePdo()`は、コールバックの実行中だけ、その接続の読み取り先をWrite DBに切り替えます。セッション単位の保護ではなく、アプリケーション側で重要な読み取りの範囲を明示したい場合に使えます。

```php theme={null}
use Illuminate\Support\Facades\DB;

$users = DB::connection()->usingWritePdo(
    fn ($connection) => $connection->table('users')->get()
);
```

同じ接続を使うEloquentクエリやリレーションのクエリにも適用されます。コールバックの結果を返し、例外が発生しても以前の読み取り設定を復元するため、後続の処理へ切り替えが残りません。

一次情報：[Temporarily Read from the Write Database Connection](https://laravel.com/framework/docs/changelog#october-2026-temporarily-read-from-the-write-database-connection)、[Laravel 13公式database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#using-the-write-connection-for-reads)

### スケジュールを単一サーバー実行にまとめて設定

複数サーバーでスケジューラーを動かす場合に、タスクごとの`onOneServer()`指定漏れを減らすため、v13.35.0で`Schedule::alwaysOnOneServer()`が追加されました。`AppServiceProvider`の`boot()`で呼び出すと、対象となるスケジュールへまとめて適用できます。

```php theme={null}
use Illuminate\Support\Facades\Schedule;

Schedule::alwaysOnOneServer();
```

これは設定を呼び出して初めて有効になる既定値です。名前のないスケジュール済みクロージャーは対象外で、引き続き各サーバーで動きます。

> [!NOTE]
>
> `onOneServer()`には、全サーバーで共有する中央キャッシュが必要です。公式ドキュメントが挙げる対応ドライバーは`database`、`memcached`、`dynamodb`、`redis`です。設定を追加するだけで、サーバー間のロック基盤が用意されるわけではありません。

一次情報：[Run Scheduled Tasks on One Server by Default](https://laravel.com/framework/docs/changelog#october-2026-run-scheduled-tasks-on-one-server-by-default)、[Laravel 13公式scheduling.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/scheduling.md#running-tasks-on-one-server)。関連ページ：[タスクスケジューリング](https://kawax.biz/jp/scheduling.md)

### Fakeでプロパティを指定してディスパッチを検証

v13.35.0で、Queue・Bus・Event・NotificationのFakeに、期待するプロパティの配列を渡せるようになりました。単純な属性比較のために、毎回コールバックを書く必要がなくなります。

たとえば、公開`order`プロパティを持つ`ShipOrder`ジョブと、テストで用意した`$order`を使う場合は、次のように検証できます。

```php theme={null}
use App\Jobs\ShipOrder;
use Illuminate\Support\Facades\Queue;

Queue::fake();

ShipOrder::dispatch($order);

Queue::assertPushed(ShipOrder::class, ['order' => $order]);
```

指定したプロパティはすべて一致する必要があります。値は厳密比較されますが、Eloquentモデルは`is()`で比較されるため、同じモデルを表す別インスタンスも扱えます。Fakeはディスパッチの検証であり、ジョブ本体の実行結果を検証するものではありません。

一次情報：[Assert Fake Dispatches by Their Properties](https://laravel.com/framework/docs/changelog#october-2026-assert-fake-dispatches-by-their-properties)、[Laravel 13公式queues.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#testing)。関連ページ：[キュー](https://kawax.biz/jp/queues.md)、[モック](https://kawax.biz/jp/mocking.md)

### ワーカーのメモリ上限を割合で指定

v13.35.0から、`queue:work`の`--memory`に、PHPの`memory_limit`に対する割合を指定できます。環境ごとに固定MB値を計算し直さず、PHPの設定に合わせてワーカーの終了しきい値を調整できます。

```shell theme={null}
php artisan queue:work --memory=60%
```

ホストやコンテナ全体のメモリ量に対する割合ではありません。PHPの`memory_limit`が無制限の`-1`である場合は、割合ではなくMB値を使ってください。しきい値で終了したワーカーの再起動は、Supervisorなどのプロセス監視に任せます。

一次情報：[Set Queue Worker Memory Limits as Percentages](https://laravel.com/framework/docs/changelog#october-2026-set-queue-worker-memory-limits-as-percentages)、[Laravel 13公式queues.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/queues.md#resource-considerations)

### Markdownを専用のContent-Typeで返す

v13.35.0で、レスポンスファクトリーに`markdown()`が追加されました。Markdown本文を`text/markdown`として返し、ステータスコードと追加ヘッダーも指定できます。

```php theme={null}
return response()->markdown("# Report\n\nMonthly summary", 200, [
    'Cache-Control' => 'no-store',
]);
```

`wantsMarkdown()`などでレスポンス形式を選ぶ処理と組み合わせられます。MarkdownをHTMLへ変換して返す機能ではなく、Markdown自体をレスポンスとして提供するためのAPIです。

一次情報：[Return Markdown Responses](https://laravel.com/framework/docs/changelog#october-2026-return-markdown-responses)、[Laravel 13公式responses.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/responses.md#markdown-responses)。関連ページ：[レスポンス](https://kawax.biz/jp/responses.md)

### Vitessで分析クエリをOLAPモードで実行

v13.36.0で、MySQL接続に`isVitess()`と`olap()`が追加されました。VitessやPlanetScaleを利用しているかを判定し、分析用途のクエリをOLAPワークロードで実行できます。

```php theme={null}
use Illuminate\Support\Facades\DB;

$totals = DB::connection('mysql')->olap(
    fn ($connection) => $connection->table('orders')
        ->selectRaw('customer_id, sum(total) as total')
        ->groupBy('customer_id')
        ->get()
);
```

読み取り・書き込み両方の接続でワークロードを設定し、コールバック終了時にはOLTPへ戻します。例外時も復元され、Vitessではない通常のMySQL接続では、ワークロードを変えずにコールバックを実行します。

一次情報：[Use OLAP Workloads with Vitess Connections](https://laravel.com/framework/docs/changelog#october-2026-use-olap-workloads-with-vitess-connections)、[Laravel 13公式database.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/database.md#running-analytical-queries-on-vitess)

### 既存バリデーションルールをBuilderから見つける

v13.36.0で、従来は文字列で指定していた多くのルールに`Rule`のBuilderメソッドが追加されました。`requiredWith()`、`acceptedIf()`、`regex()`、`timezone()`などをIDEの補完で見つけやすくし、既存の検証動作を維持したまま記述方法を選べます。

```php theme={null}
use Illuminate\Validation\Rule;

$rules = [
    'nickname' => [Rule::requiredWith('email'), Rule::regex('/^[a-z]+$/i')],
    'terms' => [Rule::acceptedIf('account_type', 'business')],
    'timezone' => [Rule::timezone()],
];
```

メソッド名はcamel caseです。文字列ルールとの混在も可能で、既存ルールを一括で書き換える必要はありません。

一次情報：[Discover More Validation Rules Through Builders](https://laravel.com/framework/docs/changelog#october-2026-discover-more-validation-rules-through-builders)、[Laravel 13公式validation.md](https://github.com/laravel/docs/blob/f7a20c401a30827991659174d48d958f92517a9e/validation.md#rule-builders)。関連ページ：[バリデーション](https://kawax.biz/jp/validation.md)

## Laravel Cloud

公式月次ブログでは、次の3項目が紹介されています。

| 機能 | 更新内容 |
| - | - |
| Resend連携 | 組織にResendアカウントを接続すると、送信ドメインを取り込み、必要なDNSレコードと検証状況を表示します。メールリソースを環境へ接続すると、CloudがAPIキーを発行し、`RESEND_API_KEY`、`MAIL_MAILER`、`MAIL_FROM_ADDRESS`、`MAIL_FROM_NAME`を設定します。 |
| Cloud scheduler | Cloudが対応する各言語のアプリケーションで、cronのインストールやスケジューラープロセスの常駐なしに定期コマンドを実行できます。プリセットまたは独自のcron式を使い、実行結果の出力・終了コード・所要時間をLogsで確認できます。 |
| ドメインヘルスチェック | 接続済みドメインのDNSがCloudを向いていることと、SSL証明書の更新状態を毎時確認します。問題は環境キャンバスに表示され、メールやSlackでも通知されます。 |

一次情報：[Laravel October Product Updates — Laravel Cloud](https://laravel.com/blog/laravel-october-product-updates#laravel-cloud)、[Laravel Cloud changelog](https://laravel.com/cloud/docs/changelog)。関連ページ：[Laravel Cloudの紹介](https://kawax.biz/jp/blog/laravel-cloud.md)

## Laravel Forge

* **PHPセキュリティ更新の通知**：10月のPHPセキュリティリリースで影響を受けるバージョンをサーバーごとに表示し、修正版の提供状況を案内します。**Recheck versions**で、実際にインストールされているバージョンを再確認できます。表示の再確認とPHPのアップデートは別の操作です。
* **プロビジョニング失敗の扱い**：完了できないサーバーを失敗状態として表示し、通知・次の操作の案内・削除操作を提供します。PHPとNginxのインストールも、失敗を確定する前に再試行します。

月次ブログでは、10月のPHP・Node.jsセキュリティ対応を振り返るPost-mortemの公開にも触れています。対応内容や更新判断は、公式の案内を参照してください。

一次情報：[Laravel October Product Updates — Laravel Forge](https://laravel.com/blog/laravel-october-product-updates#laravel-forge)、[Laravel Forge changelog](https://laravel.com/forge/docs/changelog)

## 関連記事

> [card] [2026年9月のアップデート](https://kawax.biz/jp/blog/changelog/202609.md)
>
> AIプロバイダーの実行時構築、検索拡張、Mercure、Cloudの隔離プレビュー環境を振り返ります。

> [card] [データベースガイド](https://kawax.biz/jp/database.md)
>
> 読み書き分離やDB接続の基本を確認します。


## Related topics

- [2026年3月 Laravel アップデート](https://kawax.biz/jp/blog/changelog/202603.md)
- [2026年9月 Laravel アップデート](https://kawax.biz/jp/blog/changelog/202609.md)
- [2026年4月 Laravel アップデート](https://kawax.biz/jp/blog/changelog/202604.md)
- [2026年5月 Laravel アップデート](https://kawax.biz/jp/blog/changelog/202605.md)
- [2026年7月 Laravel アップデート](https://kawax.biz/jp/blog/changelog/202607.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.