GraphQL Subscription
GraphQL でサーバーからクライアントへリアルタイムデータ更新を配信する仕組み
GraphQL Subscription とは
GraphQL Subscription は、GraphQL の 3 つの操作タイプ (Query, Mutation, Subscription) の 1 つで、サーバーからクライアントへリアルタイムにデータ更新を配信する仕組みである。WebSocket 上で動作し、チャット、通知、ダッシュボードのリアルタイム更新に使われる。
基本的な使い方
基本的な使い方の例を示す。
# スキーマ定義
type Subscription {
orderStatusChanged(orderId: ID!): Order!
newMessage(channelId: ID!): Message!
}
# クライアントからのサブスクリプション
subscription OnOrderStatusChanged($orderId: ID!) {
orderStatusChanged(orderId: $orderId) {
id
status
updatedAt
}
}
Query / Mutation との違い
Query / Mutation との違いを以下にまとめる。
| 操作 | 方向 | プロトコル | 用途 |
|---|---|---|---|
| Query | クライアント → サーバー | HTTP | データの取得 |
| Mutation | クライアント → サーバー | HTTP | データの変更 |
| Subscription | サーバー → クライアント | WebSocket | リアルタイム更新 |
AWS AppSync での実装
AppSync は GraphQL Subscription をマネージドでサポートする。WebSocket の接続管理が不要で、Mutation をトリガーに自動的にサブスクライバーに配信する。
# AppSync: Mutation が実行されると、自動的に Subscription に配信
type Mutation {
updateOrderStatus(orderId: ID!, status: String!): Order!
}
type Subscription {
onUpdateOrderStatus(orderId: ID!): Order
@aws_subscribe(mutations: ["updateOrderStatus"])
}
クライアントが onUpdateOrderStatus をサブスクライブしている状態で、別のクライアントが updateOrderStatus Mutation を実行すると、サブスクライバーに自動的に更新が配信される。
SSE / WebSocket API との使い分け
SSE / WebSocket API との使い分けを以下に整理する。
| 手法 | 用途 | GraphQL 統合 |
|---|---|---|
| GraphQL Subscription | GraphQL API のリアルタイム拡張 | ネイティブ |
| WebSocket API (API Gateway) | カスタムプロトコル、チャット | 手動実装 |
| SSE | 一方向のプッシュ通知 | 手動実装 |
GraphQL を既に使っているプロジェクトでは、Subscription が最も自然な選択だ。
スケーリングの課題
Subscription は WebSocket の永続接続を維持するため、接続数に応じてサーバーリソースが必要になる。AppSync はマネージドで接続管理を行うため、スケーリングの心配が不要だ。
GraphQL Subscription の関連書籍も参考になる。
この記事は役に立ちましたか?
関連用語
GraphQL
クライアントが必要なデータだけを指定して取得できる API クエリ言語
WebSocket
クライアントとサーバー間で双方向のリアルタイム通信を実現するプロトコル
SSE (Server-Sent Events) とは - サーバーからのリアルタイム配信の仕組み
SSE はサーバーからクライアントへ HTTP 上で一方向のリアルタイムストリームを送る仕組み。WebSocket との違い・EventSource API の使い方・再接続処理を解説
WebSocket API
API Gateway の WebSocket API でサーバーレスなリアルタイム双方向通信を実現する仕組み
ロングポーリング
サーバーがデータの準備ができるまでレスポンスを保留し、擬似的なリアルタイム通信を実現する手法
AppSync
AWS のマネージド GraphQL / Pub/Sub サービス
関連する記事
技術書の読む順番戦略 - 複数冊を組み合わせて理解を加速させる
技術書を 1 冊ずつ読むのではなく、複数冊を戦略的に組み合わせることで理解の深さと速度を飛躍的に高める方法を解説します。
機械学習・AI 本ガイド - エンジニアが読むべき技術書の選び方
機械学習の基礎から実践まで学べる技術書の選び方を紹介。「Python ではじめる機械学習」などのハンズオン本を軸に、数学が苦手な人向けの学習ルートと ML 本の賞味期限の見極め方を解説します。
技術書の中古本・古本の賢い買い方 - 安く手に入れて賢く学ぶ
技術書を中古で買うときの判断基準と注意点を解説します。中古で買っていい本と新品で買うべき本の見分け方、状態チェックのポイントを紹介。