graphql について
Federation、スキーマ設計パターン、DataLoader、クエリ最適化を扱うGraphQLリファレンスです。サービスをまたぐAPIの設計や、性能とクエリ制御の指針を必要とする開発者向けです。
主な機能
- 01Apollo Federationによるサービス合成
- 02DataLoaderのバッチ処理とキャッシュ
- 03Relayページネーションとエラーパターン
- 04永続化クエリとクエリ制限
活用シーン
- 01ゲートウェイを介したGraphQLサービスの合成
- 02N+1データベースクエリの削減
- 03ページネーション付きGraphQLレスポンスの設計
- 04クエリ深度とコストの制御追加
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ thebeardedbearsas/ claude-craft --skill graphqlインストール後、Claude Code で/graphqlを入力して読み込まれたか確認します。
詳細
GraphQL — Apollo Federation、スキーマ設計
フェデレーション、DataLoader、最適化を備えたモダンな API です。
GraphQL と REST の比較
GraphQL — オーダーメイドのクエリ 1 つ、バージョン管理なし、自動イントロスペクション
REST — 複数のエンドポイント、過剰なデータ取得、v1/v2/v3
Apollo Federation
# Users service
type User @key(fields: "id") { id: ID!, name: String! }
# Orders service
extend type User @key(fields: "id") {
id: ID! @external
orders: [Order!]!
}
ゲートウェイがサービスを自動的に合成します。
N+1 問題 — DataLoader
// ❌ N+1 queries
User: { orders: (u) => db.orders.findByUserId(u.id) }
// ✅ DataLoader batch
const loader = new DataLoader(async (ids) => {
const orders = await db.orders.findByUserIds(ids);
return ids.map(id => orders.filter(o => o.userId === id));
});
User: { orders: (u) => loader.load(u.id) }
パターン
ページネーション(Relay)
type UserConnection {
edges: [{ node: User!, cursor: String! }]!
pageInfo: { hasNextPage: Boolean!, endCursor: String }!
}
エラーハンドリング
type CreateUserPayload {
user: User
errors: [{ field: String, message: String! }]
}
最適化
DataLoader — バッチ処理とキャッシュ
永続化クエリ — ハッシュ検索
深度制限 — DoS 対策
コスト分析 — クエリ予算
設計については @api-designer を参照してください
コメント
Markdown 対応