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

# laravel/symfony-on-cloud — Symfony アプリを Laravel Cloud で動かす

> Laravel 公式の新リポジトリ調査。Symfony Messenger のマネージドキューを Laravel Cloud 上で利用できる公式 Symfony バンドルを解説します。

<Info>
  この記事は 2026年6月時点の初期調査です。`laravel/symfony-on-cloud` は開発段階のリポジトリで、今後機能が追加される予定です。
</Info>

## laravel/symfony-on-cloud とは

[laravel/symfony-on-cloud](https://github.com/laravel/symfony-on-cloud) は、**Symfony アプリケーションに Laravel Cloud の機能をもたらす**公式 Symfony バンドルです。2026年6月27日に公開された非常に新しいリポジトリです。

```mermaid theme={null}
flowchart LR
    A["Symfony アプリ"] --> B["laravel/symfony-on-cloud<br>バンドル"]
    B --> C["Laravel Cloud<br>マネージドキュー"]
    C --> D["AWS SQS"]
    C --> E["Cloud ダッシュボード<br>メトリクス表示"]
```

Laravel Cloud はこれまで Laravel アプリケーション専用のプラットフォームでしたが、このパッケージにより **Symfony 開発者も Laravel Cloud のインフラ（マネージドキュー等）を活用**できるようになります。

最初の機能は **Symfony Messenger を使ったマネージドキュー**です。README には「more Laravel Cloud capabilities will follow」とあり、今後もキュー以外の機能が追加される予定です。

## インストール

```bash theme={null}
composer require laravel/symfony-on-cloud
```

次に `config/bundles.php` にバンドルを登録します（Symfony Flex のレシピは未対応のため手動で追加します）。

```php theme={null}
return [
    // ...
    Laravel\Cloud\Symfony\LaravelCloudBundle::class => ['all' => true],
];
```

## マネージドキュー

### 基本設定

バンドルは `cloud` という名前の既成トランスポートを提供します。Laravel Cloud 環境では接続設定を自動で注入するので、DSN を手動設定する必要はありません。

```yaml theme={null}
# config/packages/messenger.yaml
framework:
    messenger:
        routing:
            '*': cloud
```

<Tip>
  既存の Symfony Messenger アプリを Laravel Cloud に移行する場合も簡単です。Cloud が `MESSENGER_TRANSPORT_DSN=laravel-cloud://managed-queue` を自動注入するため、従来の `async` トランスポート（`dsn: '%env(MESSENGER_TRANSPORT_DSN)%'`）をそのまま使っているアプリはコード変更なしで動作します。
</Tip>

### 複数キュー

Laravel Cloud 環境では複数のマネージドキュー（例：`default` と `critical`）を作成できます。各キューは独立した SQS キューとワーカーで動作します。`CloudQueueStamp` を使って特定のキューに dispatch します。

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;
use Symfony\Component\Messenger\MessageBusInterface;

$bus->dispatch(new ProcessReport($report), [new CloudQueueStamp('critical')]);
```

スタンプなしで dispatch するとデフォルトキューに送られます。

### FIFO キュー

名前が `.fifo` で終わるマネージドキューは [FIFO キュー](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html) として扱われます。メッセージが厳密な順序で配信され、重複が排除されます。

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [new CloudQueueStamp('orders.fifo')]);
```

デフォルトでは、グループ ID にキュー名、重複排除 ID に一意の値が自動設定されます。より細かい制御が必要な場合は `CloudFifoStamp` を追加します。

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudFifoStamp;
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [
    new CloudQueueStamp('orders.fifo'),
    new CloudFifoStamp(
        messageGroupId: 'customer-'.$order->customerId,
        messageDeduplicationId: 'order-'.$order->id,
    ),
]);
```

### フェアキュー

[SQS フェアキュー](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html) は、一つのテナントが大量のジョブを投入しても他のテナントを圧迫しない仕組みです。標準キューでメッセージグループ ID を付与することで、SQS がテナント間で処理能力を公平に分配します。

```php theme={null}
use Laravel\Cloud\Symfony\Queue\Messenger\CloudMessageGroupStamp;
use Laravel\Cloud\Symfony\Queue\Messenger\CloudQueueStamp;

$bus->dispatch(new ProcessOrder($order), [
    new CloudQueueStamp('orders'),
    new CloudMessageGroupStamp('customer-'.$order->customerId),
]);
```

<Info>
  `CloudMessageGroupStamp` は**標準キュー専用**で FIFO キューでは使えません。FIFO キューでのグループ指定は `CloudFifoStamp` を使います。
</Info>

### 遅延

`DelayStamp` を使うと標準キューに送信遅延を設定できます。ただし SQS の仕様により **最大 15 分**の制限があります。15 分を超えるとエラーになります（サイレントに 15 分で実行されることはありません）。

FIFO キューでは遅延がサポートされていないため、`DelayStamp` 自体がエラーになります。

### リトライ

ハンドラーが失敗した場合、バンドルはメッセージを SQS に返してビジビリティタイムアウト経由で再配信します。送信制限（15 分）ではなく SQS のビジビリティタイムアウト上限（**12 時間**）まで待機できます。

リトライ設定は Symfony Messenger 標準の `retry_strategy` を使います。

```yaml theme={null}
# config/packages/messenger.yaml
framework:
    messenger:
        transports:
            cloud:
                retry_strategy:
                    max_retries: 3    # 3回リトライ（計4回実行）
                    delay: 1000       # 最初のバックオフ（ミリ秒）
                    multiplier: 2     # バックオフ倍率
                    max_delay: 0      # 上限なし（SQS の 12 時間制限が有効）
```

`UnrecoverableExceptionInterface` を実装した例外はリトライなしで即座に失敗として記録されます。

## ローカル開発

`cloud` トランスポートはアプリで上書きできます。ローカルでは `sync://` を使うとジョブが即時同期実行されます。

```yaml theme={null}
# config/packages/messenger.yaml
when@dev:
    framework:
        messenger:
            transports:
                cloud: 'sync://'
```

機能を完全に無効化するには `laravel_cloud.queue.enabled: false` を設定します。

## まとめ

`laravel/symfony-on-cloud` は Laravel Cloud のインフラを Symfony アプリでも活用できるようにする公式バンドルです。まず**マネージドキュー**が実装されており、Symfony Messenger との統合、複数キュー、FIFO/フェアキュー、リトライ設定など実用的な機能が揃っています。

| スタンプ                     | 用途                  |
| ------------------------ | ------------------- |
| `CloudQueueStamp`        | 特定のキューに dispatch    |
| `CloudFifoStamp`         | FIFO キューの順序・重複排除制御  |
| `CloudMessageGroupStamp` | 標準キューのフェア分配（テナントキー） |

公式の README によれば今後もキュー以外の Laravel Cloud 機能が追加される予定です。Symfony アプリを Laravel Cloud で運用するケースが増えれば非常に価値あるパッケージになりそうです。

## 関連リンク

<CardGroup cols={2}>
  <Card title="laravel/symfony-on-cloud" icon="github" href="https://github.com/laravel/symfony-on-cloud">
    公式リポジトリ・README
  </Card>

  <Card title="Laravel Cloud" icon="cloud" href="https://laravel.com/cloud">
    Laravel Cloud の公式サイト
  </Card>

  <Card title="Symfony Messenger" icon="envelope" href="https://symfony.com/doc/current/messenger.html">
    Symfony Messenger 公式ドキュメント
  </Card>

  <Card title="Laravel Cloud ドキュメント" icon="book" href="https://cloud.laravel.com/docs/intro">
    Laravel Cloud 詳細ドキュメント
  </Card>
</CardGroup>
