Communitygithub.com

Zoha/agent-skills

NestJS GraphQL(コードファースト)アプリケーションにおけるファイル配置と構造のガイド。新しいファイルの配置場所の決定、機能優先ディレクトリレイアウトの設計・レビュー、新機能モジュールのスキャフォールディング、モジュール間の接続やGraphQLフィールド・リレーションの解決に使用します。

agent-skills とは?

このスキルは、NestJS GraphQL(コードファースト)アプリケーションのファイル配置とモジュール構成に特化したガイドです。「どのファイルがどのフォルダに属するか」「各ファイルの責務は何か」「モジュールがどのように接続してフィールドやリレーションを解決するか」を詳細に説明します。対象範囲は、アプリケーション構造マップ、モジュール、サービス、リゾルバ(クエリ、ミューテーション、サブスクリプション、フィールド)、入力型と引数、ページネーション、エンティティ(Mongooseスキーマのベストプラクティス)、リポジトリ専用モデルインジェクション、モデル/マッパー、リポジトリ、Mongoose判別器、導出フィールド、プロバイダ、ローダー、イベント、バックグラウンドジョブ、認証、例外、カスタムスカラー、設定、共通ビルディングブロック、インフラセットアップ、命名/テスト/リント規則、および循環依存関係などのモジュール解決に関する問題まで多岐にわたります。本スキルは構造とモジュール構成に焦点を当てており、フレームワークの振る舞い(DIの深さ、セキュリティ、パフォーマンス、エラーハンドリング)については「nestjs-best-practices」スキルを参照するよう設計されています。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Zoha/agent-skills/tree/HEAD/skills/nestjs-graphql-structure

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

NestJS GraphQL 構造

NestJS GraphQL(コードファースト)アプリケーションにおける各ファイルの所属場所とその動作を定義します。このスキルは配置と構造のガイドです。「このファイルはどのフォルダに属するのか?」「このファイルの責務は何か?」「モジュールはどのように接続してフィールドやリレーションを解決するのか?」に答えます。ベース構造マップに加え、モジュール、サービス、リゾルバ(クエリ、ミューテーション、サブスクリプション、フィールド)、入力型と引数、ページネーション、エンティティ(共有型のMongooseスキーマベストプラクティス)、リポジトリ専用モデルインジェクション、モデル/マッパー、リポジトリ、Mongoose判別器、導出フィールド、プロバイダ、ローダー、イベント、バックグラウンドジョブ、認証、例外、カスタムスカラー、設定、共通ビルディングブロック、インフラセットアップ、命名/テスト/リント規則に至るまでのファイル別ルールを網羅します。

このスキルは意図的に nestjs-best-practices スキルとは分離されています。後者のスキルはフレームワークの振る舞い(依存性注入の深さ、セキュリティ、パフォーマンス、エラーハンドリング、マイクロサービス、DevOps)を扱い、本スキルは構造とモジュール構成を扱います。重複する部分(機能モジュール、循環依存関係)については、本スキルは配置の観点から見て、行動の深さについては他方のスキルを相互参照します。

このスキルは構造ルール(ファイルの配置場所) とモジュール解決ルール(実行時のモジュール接続方法、循環依存関係の解決など) の両方をカバーします。モジュール解決ルールはセクション2と3にあります。

適用タイミング

以下の場合にこれらのガイドラインを参照してください:

  • NestJS GraphQLコードベースに新しいファイルを配置する場所を決めるとき
  • 機能優先のディレクトリレイアウトを設計またはレビューするとき
  • 新しい機能モジュールとそのファイルをスキャフォールディングするとき
  • ポリモーフィックドキュメント(Mongoose判別器)をモデル化し、そのGraphQL型を自動公開する方法を決めるとき
  • Mongooseモデルを注入できる場所、およびデータベースアクセスをリポジトリの背後に保つ方法を決めるとき
  • ある値がデータベースに保存されるべきか、読み取り時に導出されるべきかを決めるとき
  • 別のモジュールに存在するフィールドやリレーションをモジュールが解決する方法を検討するとき
  • モジュール間の接続問題(循環依存関係、エクスポート漏れ)を解決するとき

優先度別ルールカテゴリ

優先度カテゴリ影響度接頭辞
1アプリケーション構造クリティカルstruct-
2モジュールとブートストラップクリティカルmodule-
3リレーションとクロスモジュールクリティカルrelations-
4サービス高service-
5GraphQLリゾルバ高resolver-
6GraphQLタイプと入力高type-
7データアクセス中高data-
8設定、共通、インフラ中infra-
9規則とテスト中conventions-

クイックリファレンス

1. アプリケーション構造(クリティカル)

  • struct-auth-feature - 認証を独自の機能モジュールに保持する
  • struct-canonical-layout - 標準的なアプリケーション構造
  • struct-feature-decomposition - 機能が大きくなったらサブモジュールに分割する
  • struct-file-placement-table - ファイル配置テーブル
  • struct-module-kinds - ドメイン機能とアプリレベルモジュールを区別する
  • struct-schema-artifact - 生成されたスキーマ成果物の場所とポリシー

2. モジュールとブートストラップ(クリティカル)

  • module-bootstrap - main.ts と app.module.ts は薄く保つ
  • module-export-policy - 機能の公開API(サービス)のみをエクスポートする
  • module-feature-module - 機能モジュールファイル

3. リレーションとクロスモジュール(クリティカル)

  • relations-avoid-circular - 循環モジュール依存関係を解決する
  • relations-dataloader - リクエストごとのDataLoaderでリレーションをバッチ処理する
  • relations-events - イベントでモジュールを疎結合にする
  • relations-field-resolvers - @ResolveField でリレーションを解決する
  • relations-owning-module - リレーションフィールドをデータを所有するモジュールに配置する

4. サービス(高)

  • service-background-jobs - キュープロセッサとスケジュールジョブを機能と共に保持する
  • service-external-providers - サードパーティクライアントを providers/ に保持する
  • service-interfaces-tokens - サービス契約とインジェクショントークンを interfaces/ で宣言する
  • service-single-responsibility - モジュールごとに複数の焦点を絞ったサービス
  • service-small-focused-methods - サービスのメソッドを小さく焦点を絞って保つ

5. GraphQLリゾルバ(高)

  • resolver-computed-fields - フィールドは型で宣言し、計算フィールドはリゾルバで解決する
  • resolver-organization - 役割に応じてリゾルバを resolvers/ に分割する
  • resolver-per-type - フィールドリゾルバを持つ型ごとに1つのリゾルバファイル
  • resolver-subscriptions - サブスクリプションリゾルバを resolvers/ に、PubSubを infra/ に配置する

6. GraphQLタイプと入力(高)

  • type-args - @Args クラスを dto/ に定義する
  • type-inputs - GraphQL入力を dto/ に定義する
  • type-pagination - リストクエリを共有のページタイプでページネーションする
  • type-polymorphic-discriminators - 判別されたドキュメントをインターフェースまたはユニオンとして公開する
  • type-unions-interfaces - ユニオン型とインターフェース型をモジュールの型と共に配置する

7. データアクセス(中高)

  • data-derived-fields - 導出フィールドは計算する;保存しない
  • data-discriminators - ポリモーフィックサブタイプを判別器でモデル化する
  • data-entity-mongodb - MongoDBエンティティを entities/ に配置する
  • data-model-injection - モデルはリポジトリでのみ注入する
  • data-models-mappers - APIがストレージと異なる場合、 models/ と mappers/ を分割する
  • data-mongoose-schema - 共有型のMongooseスキーマベストプラクティス
  • data-repository - データアクセスを repositories/ に保持する

8. 設定、共通、インフラ(中)

  • infra-common-types - 共有型を common/types/ に配置する
  • infra-common - 共有ビルディングブロックを common/ に配置する
  • infra-config - 型付き設定を config/ に配置する
  • infra-custom-scalars - カスタムスカラーを common/scalars/ に実装する
  • infra-database - データベース設定とマイグレーションを infra/database/ に配置する
  • infra-directives - スキーマディレクティブを common/directives/ に配置する
  • infra-exceptions - 例外を exceptions/ に配置する
  • infra-graphql - GraphQL設定を infra/graphql/ に配置する
  • infra-seeds - シードスクリプトを infra/database/seeds/ に配置する
  • infra-shared-module - 横断的サービスには SharedModule を使用する

9. 規則とテスト(中)

  • conventions-barrels-aliases - バレルとパスエイリアスを意図的に使用する
  • conventions-cli-generator - Nest CLIジェネレータを使用し、その後調整する
  • conventions-constants-enums - 定数と列挙型をクラスファイルの外に保持する
  • conventions-module-boundaries - リントでモジュール境界を強制する
  • conventions-naming - ファイルとクラスの命名規則
  • conventions-test-fixtures - テストフィクスチャ、ファクトリ、ヘルパーを test/ に配置する
  • conventions-testing - テストファイルの配置

使い方

ベース構造ルールから始め、作業中の特定のファイル種別のルールを読んでください。ルールファイルは rules/ の下にあります:

rules/struct-canonical-layout.md
rules/_sections.md

各ルールファイルには以下が含まれています:

  • 目的と配置(ファイルがどこに存在し、どのように命名されるか)
  • 責務と非責務
  • 説明付きの誤った例
  • 説明付きの正しい例

完全なコンパイルドキュメント

すべてのルールを1つのドキュメントに展開した完全版ガイドは AGENTS.md を参照してください。

関連スキル