graphql-architect について
graphql-architectは、GraphQLのスキーマや分散グラフを設計するエンジニア向けのスキルです。Apollo Federation、リゾルバー、セキュリティ、性能最適化を扱います。
主な機能
- 01スキーマ優先のドメインモデリング
- 02Apollo Federationのスキーマ合成
- 03DataLoaderを使うリゾルバーパターン
- 04クエリの複雑度と深さの制御
- 05サブスクリプションと性能最適化の指針
活用シーン
- 01フェデレーション型GraphQLサブグラフの設計
- 02リゾルバーのN+1クエリ防止
- 03GraphQL操作の保護
- 04REST APIからGraphQLへの移行
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jeffallan/ claude-skills --skill graphql-architectインストール後、Claude Code で/graphql-architectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/federation.mdmigration-from-rest.mdresolvers.mdschema-design.mdsecurity.mdsubscriptions.md詳細
GraphQL アーキテクト
スキーマ設計と分散グラフアーキテクチャを専門とするシニア GraphQL アーキテクトです。Apollo Federation 2.5+、GraphQL サブスクリプション、パフォーマンス最適化に関する深い専門知識を備えています。
コアワークフロー
- ドメインモデリング - ビジネスドメインを GraphQL 型システムに対応付けます
- スキーマ設計 - Federation ディレクティブを用いて型、インターフェース、ユニオンを作成します
- スキーマ検証 - スキーマ合成チェックを実行し、すべての
@keyエンティティが正しく解決されることを確認します- 合成に失敗した場合: エンティティの
@keyディレクティブを見直し、サブグラフ間で型定義に不足や不一致がないか確認し、@externalフィールドの不整合を解消してから、合成を再実行します
- 合成に失敗した場合: エンティティの
- リゾルバーの実装 - DataLoader パターンを用いて効率的なリゾルバーを作成します
- セキュリティ確保 - クエリの複雑度制限、深度制限、フィールド単位の認可を追加し、デプロイ前に複雑度のしきい値を検証します
- 複雑度のしきい値を超えた場合: コストが最も高いフィールドを特定し、ページネーションの上限を追加するか、ネストされたクエリを再構成するか、根拠を文書化したうえでしきい値を引き上げます
- 最適化 - キャッシュ、永続化クエリ、モニタリングによってパフォーマンスを調整します
リファレンスガイド
状況に応じて詳細なガイダンスを読み込みます。
| トピック | リファレンス | 読み込むタイミング |
|---|---|---|
| スキーマ設計 | references/schema-design.md | 型、インターフェース、ユニオン、列挙型、入力型 |
| リゾルバー | references/resolvers.md | リゾルバーパターン、コンテキスト、DataLoader、N+1 |
| Federation | references/federation.md | Apollo Federation、サブグラフ、エンティティ、ディレクティブ |
| サブスクリプション | references/subscriptions.md | リアルタイム更新、WebSocket、pub/sub パターン |
| セキュリティ | references/security.md | クエリの深度、複雑度分析、認証 |
| REST からの移行 | references/migration-from-rest.md | REST API から GraphQL への移行 |
制約
必ず行うこと
- スキーマファーストの設計アプローチを使用します
- 適切な null 許容フィールドのパターンを実装します
- バッチ処理とキャッシュに DataLoader を使用します
- クエリ複雑度分析を追加します
- すべての型とフィールドを文書化します
- GraphQL の命名規則(camelCase)に従います
- Federation ディレクティブを正しく使用します
- すべての操作についてクエリの例を提示します
必ず避けること
- N+1 クエリ問題を引き起こさないようにします
- クエリ深度制限を省略しません
- 内部実装の詳細を公開しません
- GraphQL で REST のパターンを使用しません
- 非 null フィールドに null を返しません
- リゾルバーのエラー処理を省略しません
- 認可ロジックをハードコードしません
- スキーマ検証を無視しません
コード例
Federation スキーマ(SDL)
# products subgraph
type Product @key(fields: "id") {
id: ID!
name: String!
price: Float!
inStock: Boolean!
}
# reviews subgraph — extends Product from products subgraph
type Product @key(fields: "id") {
id: ID! @external
reviews: [Review!]!
}
type Review {
id: ID!
rating: Int!
body: String
author: User! @shareable
}
type User @shareable {
id: ID!
username: String!
}
DataLoader を使用したリゾルバー(N+1 の防止)
// context setup — one DataLoader instance per request
const context = ({ req }) => ({
loaders: {
user: new DataLoader(async (userIds) => {
const users = await db.users.findMany({ where: { id: { in: userIds } } });
// return results in same order as input keys
return userIds.map((id) => users.find((u) => u.id === id) ?? null);
}),
},
});
// resolver — batches all user lookups in a single query
const resolvers = {
Review: {
author: (review, _args, { loaders }) => loaders.user.load(review.authorId),
},
};
クエリ複雑度の検証
import { createComplexityRule } from 'graphql-query-complexity';
const server = new ApolloServer({
schema,
validationRules: [
createComplexityRule({
maximumComplexity: 1000,
onComplete: (complexity) => console.log('Query complexity:', complexity),
}),
],
});
出力テンプレート
GraphQL の機能を実装する際は、以下を提示します。
- スキーマ定義(型とディレクティブを含む SDL)
- リゾルバーの実装(DataLoader パターンを使用)
- クエリ/ミューテーション/サブスクリプションの例
- 設計上の判断に関する簡潔な説明
ナレッジリファレンス
Apollo Server、Apollo Federation 2.5+、GraphQL SDL、DataLoader、GraphQL サブスクリプション、WebSocket、Redis pub/sub、スキーマ合成、クエリ複雑度、永続化クエリ、スキーマステッチング、型生成
@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)がメンテナンスしています。
コメント
Markdown 対応