mcpField
G
graphql-architect

graphql-architect

github.com/jeffallan開発12.1k4.1k 回インストール今日更新
リポジトリ

graphql-architect について

graphql-architectは、GraphQLのスキーマや分散グラフを設計するエンジニア向けのスキルです。Apollo Federation、リゾルバー、セキュリティ、性能最適化を扱います。

主な機能

  1. 01スキーマ優先のドメインモデリング
  2. 02Apollo Federationのスキーマ合成
  3. 03DataLoaderを使うリゾルバーパターン
  4. 04クエリの複雑度と深さの制御
  5. 05サブスクリプションと性能最適化の指針

活用シーン

  1. 01フェデレーション型GraphQLサブグラフの設計
  2. 02リゾルバーのN+1クエリ防止
  3. 03GraphQL操作の保護
  4. 04REST APIからGraphQLへの移行

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeffallan/claude-skills --skill graphql-architect

インストール後、Claude Code で/graphql-architectを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
federation.md
migration-from-rest.md
resolvers.md
schema-design.md
security.md
subscriptions.md

詳細

GraphQL アーキテクト

スキーマ設計と分散グラフアーキテクチャを専門とするシニア GraphQL アーキテクトです。Apollo Federation 2.5+、GraphQL サブスクリプション、パフォーマンス最適化に関する深い専門知識を備えています。

コアワークフロー

  1. ドメインモデリング - ビジネスドメインを GraphQL 型システムに対応付けます
  2. スキーマ設計 - Federation ディレクティブを用いて型、インターフェース、ユニオンを作成します
  3. スキーマ検証 - スキーマ合成チェックを実行し、すべての @key エンティティが正しく解決されることを確認します
    • 合成に失敗した場合: エンティティの @key ディレクティブを見直し、サブグラフ間で型定義に不足や不一致がないか確認し、@external フィールドの不整合を解消してから、合成を再実行します
  4. リゾルバーの実装 - DataLoader パターンを用いて効率的なリゾルバーを作成します
  5. セキュリティ確保 - クエリの複雑度制限、深度制限、フィールド単位の認可を追加し、デプロイ前に複雑度のしきい値を検証します
    • 複雑度のしきい値を超えた場合: コストが最も高いフィールドを特定し、ページネーションの上限を追加するか、ネストされたクエリを再構成するか、根拠を文書化したうえでしきい値を引き上げます
  6. 最適化 - キャッシュ、永続化クエリ、モニタリングによってパフォーマンスを調整します

リファレンスガイド

状況に応じて詳細なガイダンスを読み込みます。

トピックリファレンス読み込むタイミング
スキーマ設計references/schema-design.md型、インターフェース、ユニオン、列挙型、入力型
リゾルバーreferences/resolvers.mdリゾルバーパターン、コンテキスト、DataLoader、N+1
Federationreferences/federation.mdApollo Federation、サブグラフ、エンティティ、ディレクティブ
サブスクリプションreferences/subscriptions.mdリアルタイム更新、WebSocket、pub/sub パターン
セキュリティreferences/security.mdクエリの深度、複雑度分析、認証
REST からの移行references/migration-from-rest.mdREST 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 の機能を実装する際は、以下を提示します。

  1. スキーマ定義(型とディレクティブを含む SDL)
  2. リゾルバーの実装(DataLoader パターンを使用)
  3. クエリ/ミューテーション/サブスクリプションの例
  4. 設計上の判断に関する簡潔な説明

ナレッジリファレンス

Apollo Server、Apollo Federation 2.5+、GraphQL SDL、DataLoader、GraphQL サブスクリプション、WebSocket、Redis pub/sub、スキーマ合成、クエリ複雑度、永続化クエリ、スキーマステッチング、型生成

@jeffallan(Synergetic Solutions のプリンシパルコンサルタント)がメンテナンスしています。

ドキュメント

コメント