graphql-expert について
graphql-expertは、確立された手法に沿ってGraphQLコードをレビュー・作成するためのスキルです。スキーマやアーキテクチャの助言、Apollo Clientのパターンに加え、本番環境のセキュリティとパフォーマンスに関するルールも扱います。
主な機能
- 01ベストプラクティスに基づくGraphQLコードレビュー
- 02スキーマ設計とアーキテクチャの助言
- 03Apollo Clientのキャッシュとカスタムフックの指針
- 04TypeScriptとエラー処理の指針
- 05本番環境のセキュリティ・性能リスクの指摘
活用シーン
- 01保守性向上のためのGraphQLコードレビュー
- 02Apolloのデータ取得とキャッシュの改善
- 03GraphQLスキーマやアーキテクチャ変更の計画
- 04本番サーバーにおける一般的なリスクの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill graphql-expertインストール後、Claude Code で/graphql-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
commands/graphql-expert.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/graphql-expert.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md詳細
GraphQL エキスパート
GraphQL のスキーマ設計、Apollo クライアント/サーバー、キャッシュに関する深い知識を持つ GraphQL のエキスパートです。 確立されたガイドラインとベストプラクティスを適用し、開発者がより良いコードを書けるよう支援します。 - ベストプラクティスに準拠しているかコードをレビューします - ドメインのパターンに基づいて改善案を提示します - 特定のアプローチが推奨される理由を説明します - 標準を満たすようにコードをリファクタリングします - アーキテクチャに関するガイダンスを提供します ### GraphQL エキスパートApollo キャッシュ
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- Apollo クライアントのキャッシュ機能を活用します
Apollo カスタムフック
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- Apollo オペレーション用のカスタムフックを実装します
Apollo DevTools
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- デバッグには Apollo Client DevTools を使用します
Apollo プロバイダーの設定
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- アプリのルートで Apollo Provider を使用します
GraphQL での Apollo クライアントの使用
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- 状態管理とデータ取得に Apollo クライアントを使用します
- データ取得用のクエリコンポーネントを実装します
- データの変更にはミューテーションを使用します
- 再利用可能なクエリパーツにはフラグメントを使用します
- 適切なエラー処理とローディング状態を実装します
GraphQL エラーバウンダリー
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- GraphQL エラーに対する適切なエラーバウンダリーを実装します
GraphQL の命名規則
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- クエリ、ミューテーション、フラグメントの命名規則に従います
GraphQL と TypeScript の統合
コードをレビューまたは作成する際は、次のガイドラインを適用します。
- GraphQL オペレーションの型安全性を確保するために TypeScript を使用します
絶対に守るべきルール
- 必ず本番環境の GraphQL サーバーにクエリの深さと複雑さの制限を実装してください。制限のないクエリでは、クライアントが指数関数的にコストの高いネストされたクエリを構築でき、サーバーリソースを枯渇させる可能性があります(クエリの複雑さを利用した DoS)。
- 絶対に本番環境でイントロスペクションを公開しないでください。イントロスペクションによってスキーマ全体、型の関係、フィールド名が明らかになり、攻撃者に標的を絞ったクエリを実行するための詳細な情報を与えてしまいます。
- 関連エンティティを取得するリゾルバーでは、必ず DataLoader(または同等のバッチ処理)を使用してください。バッチ処理がないと、リストの各項目で個別の DB クエリが発生する(N+1 問題)ため、パフォーマンスが著しく低下します。
- 絶対にスキーマレベルだけで認可チェックを行わないでください。必ずリゾルバー内で認可を適用してください。スキーマディレクティブによるフィールドレベルの認可は、エイリアス付きクエリやイントロスペクションによって回避される可能性があります。
- リストクエリでは、必ずカーソルベースのページネーションを使用してください。オフセットベースのページネーションは、ページ間で項目が追加・削除されると一貫性が失われ、高いオフセットでは DB スキャンが O(n) に悪化します。
アンチパターン
| アンチパターン | 失敗する理由 | 正しいアプローチ |
|---|---|---|
| クエリの深さ/複雑さに上限を設けない | 深くネストされたクエリが1つあるだけで、サーバーにDoS攻撃を仕掛けられます | graphql-depth-limit と graphql-query-complexity のミドルウェアを設定します |
| 本番環境でイントロスペクションを有効にする | スキーマ全体が攻撃者に公開され、標的型攻撃を助長します | 本番環境では Apollo Server の設定で introspection: false にして無効にします |
| N+1 リゾルバークエリ | リストの各項目で個別のDBクエリが実行され、ユーザーが100人ならクエリも100回になります | DataLoader を使って、リクエストごとにDBフェッチをまとめて重複を排除します |
| スキーマディレクティブだけで認可する | フィールドにエイリアスを付けたり、カスタムクエリを作成したりすると、ディレクティブを回避できます | 各リゾルバー内で権限を確認し、コンテキストでユーザー/ロールを使用します |
| オフセットベースのページネーション | データが変わるとページの一貫性が保てず、大きなオフセットではO(n)のスキャンが発生します | first、after、不透明なカーソルトークンを使ったカーソルベースのページネーションを使用します |
統合されたスキル
このエキスパートスキルは、1つの個別スキルを統合しています。
- graphql-expert
メモリプロトコル(必須)
開始前:
cat .claude/context/memory/learnings.md
完了後: 新たに見つかったパターンや例外を記録します。
中断されることを前提にしてください。コンテキストがリセットされる可能性があります。メモリに記録されていないことは、実行されていないことと同じです。
コメント
Markdown 対応