Communityコーディング&開発github.com

Zoha/agent-skills

NestJS バックエンドに Elasticsearch による全文検索を追加・保守する際に使用します。クライアントとモジュールの配線、MongoDB から Elasticsearch への同期と再インデックス、インデックスマッピングと検索プロジェクション、ID のみのクエリと MongoDB によるハイドレーション、カーソルページネーション、エンティティ間の派生フィールド、設定可能なバックエンドシームによる検索のオプション化、モックシームや実際の使い捨てクラスターを使ったテストを含みます。

agent-skills とは?

このスキルは、NestJS GraphQL + MongoDB アプリケーションに Elasticsearch ベースの検索機能を統合するための包括的なガイドです。アーキテクチャの境界(汎用インフラ、共有検索レイヤー、フィーチャーごとに所有するインデックス)を固定し、検索プロジェクション、インデックス作成と同期、MongoDB ハイドレーションを伴う ID のみのクエリ、カーソルページネーション、エンティティ間の派生フィールド、設定可能なバックエンドシームによる検索のオプション化、ライブクラスターなしでのテスト、およびこれらに関する運用と DX を網羅します。基本的な契約は「Elasticsearch が検索し、MongoDB が提供する」です。Elasticsearch は識別子を返す純粋な検索インデックスであり、要求されたエンティティは常に真実の情報源である MongoDB からハイドレーションされます。このスキルは、Cursor、Claude Code、Codex などの AI エージェントが、NestJS プロジェクトで Elasticsearch を正しく効率的に実装するために必要なすべてのルールを提供します。

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

Installed? Explore more コーディング&開発 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

ドキュメント

NestJS Elasticsearch

NestJS GraphQL + MongoDB アプリケーションに Elasticsearch ベースの検索を追加するための統合ガイドです。 アーキテクチャの境界(汎用インフラ、共有検索レイヤー、フィーチャーごとに所有するインデックス)を固定し、 検索プロジェクション、インデックス作成と同期、MongoDB ハイドレーションを伴う ID のみのクエリ、 カーソルページネーション、エンティティ間の派生フィールド、設定可能なバックエンドシームによる検索のオプション化、 ライブクラスターなしでのテスト、およびこれらに関する運用と DX を網羅します。

基本契約は Elasticsearch が検索し、MongoDB が提供する です。Elasticsearch は 識別子を返す純粋な検索インデックスであり、要求されたエンティティは常に真実の情報源である MongoDB から ハイドレーションされます。

適用タイミング

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

  • 既存の NestJS GraphQL + MongoDB アプリケーションに検索を追加する場合
  • @nestjs/elasticsearch クライアントと共有検索レイヤーを配線する場合
  • インデックスマッピングまたは検索プロジェクションを定義または変更する場合
  • MongoDB から Elasticsearch への同期、再インデックス、またはインデックスマイグレーションを実装する場合
  • 検索クエリ、カーソルページネーション、または結果のハイドレーションを作成する場合
  • エンティティ間で派生値(カウント、レーティング)を検索可能にする場合
  • クラスターなしで検索をオプション化したり、設定からバックエンドを交換したりする場合
  • モックされたバックエンドシーム、または実際の使い捨てクラスターに対して検索をテストする場合
  • 古い検索結果やインデックスストームをデバッグする場合

優先順位別ルールカテゴリ

優先順位カテゴリ影響度プレフィックス
1アーキテクチャCRITICALarch-
2インデックス作成と同期CRITICALsync-
3スキーマとマッピングHIGHmap-
4クエリHIGHquery-
5エンティティ間MEDIUM-HIGHrel-
6運用と DXMEDIUMops-
7設定と環境HIGHcfg-
8テストMEDIUM-HIGHtest-

クイックリファレンス

1. アーキテクチャ (CRITICAL)

  • arch-base-search-repository - 共有インデックスとクエリロジックをベースリポジトリに配置する
  • arch-entity-vs-search-document - Elasticsearch フィールドをエンティティから分離する
  • arch-feature-owned-index - 各フィーチャーが自身のインデックスを所有および登録する
  • arch-infra-module - Elasticsearch クライアントを汎用インフラモジュールに分離する

2. インデックス作成と同期 (CRITICAL)

  • sync-bulk-index - Bulk API を使用してバッチでインデックス作成する
  • sync-debounce-same-id - 同一 ID のバーストをデバウンスする
  • sync-delete-immediately - インデックスから即座に削除する
  • sync-enqueue-index - インデックス作成をキューに入れる。Elasticsearch にインラインで書き込まない
  • sync-full-reindex-alias-swap - バージョン管理されたインデックスを通じて再インデックスし、エイリアスを交換する
  • sync-idempotent-index-creation - 決定論的な名前で冪等にインデックスを作成する

3. スキーマとマッピング (HIGH)

  • map-analyzers - テキストアナライザーを意図的に選択する
  • map-derived-fields - バッチマッパーで派生フィールドとリレーションフィールドを計算する
  • map-exclude-non-search-fields - 検索目的のあるフィールドのみインデックスする
  • map-mapping-object - マッピングを型付きオブジェクトとして宣言する
  • map-typed-search-document - 検索ドキュメントをエンティティに対して型付けする

4. クエリ (HIGH)

  • query-cursor-pagination - search_after でページネーションする
  • query-hydrate-restore-order - MongoDB からハイドレーションし、関連性順序を復元する
  • query-ids-only-search - 検索は ID のみを返す
  • query-sort-tiebreaker - 常にユニークなソートタイブレーカーを含める

5. エンティティ間 (MEDIUM-HIGH)

  • rel-derived-counter-cache - 所有ドキュメントに派生カウンターをキャッシュする
  • rel-owning-module-subscribes - 所有モジュールがサブスクライブし、他のモジュールは自身のイベントを発行する

6. 運用と DX (MEDIUM)

  • ops-cli-scripts - マイグレーションと再インデックスの CLI コマンドを提供する
  • ops-explain-debug - Explain フックを提供する
  • ops-health-check - ヘルスチェックに Elasticsearch を含める
  • ops-log-es-requests - Elasticsearch のリクエストとレスポンスをログに記録する
  • ops-no-cron-for-indexing - インプロセスタイマーでインデックス作成をスケジュールしない

7. 設定と環境 (HIGH)

  • cfg-mongo-fallback-backend - 決定論的な MongoDB ファインダーにフォールバックする
  • cfg-search-backend-seam - 検索をバックエンドシームの背後に配置する

8. テスト (MEDIUM-HIGH)

  • test-mock-elasticsearch-seam - ユニットテストで検索バックエンドシームをモックする
  • test-real-es-for-query-semantics - 実際の Elasticsearch に対してクエリセマンティクスをテストする

使用方法

個別のルールファイルで詳細な説明とコード例を参照してください:

rules/arch-entity-vs-search-document.md
rules/sync-full-reindex-alias-swap.md
rules/query-ids-only-search.md

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

  • なぜ重要か、どのレイヤーに適用されるかの簡単な説明
  • 説明付きの誤ったコード例
  • 説明付きの正しいコード例
  • 追加のコンテキストと参照

他のスキルとの関連

  • nestjs-graphql-structure — ファイル配置。このスキルはフィーチャーに search/ フォルダーと common/search/ + infra/elasticsearch/ レイヤーを追加します。そのスキルのフィーチャーモジュール、 リポジトリ、イベントルールに従います。
  • nestjs-best-practices — このスキルの例が基づくサービス、イベント、キュー、設定、ヘルスチェックの 動作ルール。
  • 1つの意図的な例外 — nestjs-graphql-structure の service-background-jobs ルールは プロセッサーを所有フィーチャーに保持します。検索パイプラインは common/search/ で1回実行され、 インデックスレジストリを通じて各フィーチャーのリポジトリを解決します。これはパイプラインが すべてのフィーチャーで同一であるためです。arch-base-search-repository を参照してください。

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

すべてのルールを展開した完全なガイドについては、AGENTS.md を参照してください。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

Zoha/agent-skills

Application structure and file-placement guide for NestJS GraphQL (code-first) applications. Use when deciding where a file belongs, designing or reviewing a feature-first directory layout, scaffolding a new feature module, or working out how modules connect to resolve GraphQL fields and relations. Covers the base structure map plus per-file rules for modules, services, resolvers (query, mutation, subscription, field), inputs and args, pagination, entities (Mongoose schema best practices for shared types), repository-only model injection, models/mappers, repositories, Mongoose discriminators, derived fields, providers, loaders, events, background jobs, auth, exceptions, custom scalars, config, common building blocks, infra setup, and the naming/testing/lint conventions — and module-resolution concerns such as circular dependencies. For behavioral rules (DI depth, security, performance, error handling) use the nestjs-best-practices skill instead.

Zoha/agent-skills

Use when caching GraphQL reads in a NestJS (code-first) app — wiring a stale-while-revalidate (SWR) cache module once, deciding what to cache and where to mount it (service, field, operation, or CDN), and keeping it leak-safe. Triggers when you need SWR, single-flight dedupe, tag invalidation, per-user vs public scoping, cache observability, a stampede or blocking-miss at TTL expiry, a shared-key data leak, a dev/ops switch that disables caching entirely, or a one-time setup reference (module, file placement, storage, referencesTTL/GC, caller identity, decorator runtime, fail-open).

関連スキル