create-ai-project 1.20.9 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents-en/acceptance-test-generator.md +112 -50
- package/.claude/agents-en/task-decomposer.md +40 -4
- package/.claude/agents-en/ui-spec-designer.md +2 -0
- package/.claude/agents-en/work-planner.md +98 -29
- package/.claude/agents-ja/acceptance-test-generator.md +113 -49
- package/.claude/agents-ja/task-decomposer.md +44 -8
- package/.claude/agents-ja/ui-spec-designer.md +2 -0
- package/.claude/agents-ja/work-planner.md +96 -29
- package/.claude/commands-en/add-integration-tests.md +8 -0
- package/.claude/commands-en/build.md +75 -23
- package/.claude/commands-en/front-build.md +56 -25
- package/.claude/commands-en/front-plan.md +7 -6
- package/.claude/commands-en/front-review.md +81 -19
- package/.claude/commands-en/implement.md +36 -5
- package/.claude/commands-en/plan.md +9 -8
- package/.claude/commands-en/prepare-implementation.md +191 -0
- package/.claude/commands-en/project-inject.md +84 -56
- package/.claude/commands-en/review.md +79 -20
- package/.claude/commands-ja/add-integration-tests.md +8 -0
- package/.claude/commands-ja/build.md +77 -25
- package/.claude/commands-ja/front-build.md +59 -28
- package/.claude/commands-ja/front-plan.md +8 -7
- package/.claude/commands-ja/front-review.md +81 -19
- package/.claude/commands-ja/implement.md +36 -5
- package/.claude/commands-ja/plan.md +10 -9
- package/.claude/commands-ja/prepare-implementation.md +191 -0
- package/.claude/commands-ja/project-inject.md +84 -56
- package/.claude/commands-ja/review.md +79 -20
- package/.claude/skills-en/documentation-criteria/references/plan-template.md +22 -0
- package/.claude/skills-en/documentation-criteria/references/ui-spec-template.md +2 -0
- package/.claude/skills-en/frontend-typescript-testing/references/e2e.md +81 -7
- package/.claude/skills-en/integration-e2e-testing/SKILL.md +48 -23
- package/.claude/skills-en/integration-e2e-testing/references/e2e-design.md +31 -13
- package/.claude/skills-en/project-context/SKILL.md +2 -15
- package/.claude/skills-en/project-context/references/external-resources-api.md +76 -0
- package/.claude/skills-en/project-context/references/external-resources-backend.md +76 -0
- package/.claude/skills-en/project-context/references/external-resources-frontend.md +74 -0
- package/.claude/skills-en/project-context/references/external-resources-infra.md +76 -0
- package/.claude/skills-en/project-context/references/template.md +154 -0
- package/.claude/skills-en/subagents-orchestration-guide/SKILL.md +36 -14
- package/.claude/skills-en/task-analyzer/references/skills-index.yaml +0 -5
- package/.claude/skills-ja/documentation-criteria/references/plan-template.md +22 -0
- package/.claude/skills-ja/documentation-criteria/references/ui-spec-template.md +2 -0
- package/.claude/skills-ja/frontend-typescript-testing/references/e2e.md +81 -7
- package/.claude/skills-ja/integration-e2e-testing/SKILL.md +48 -23
- package/.claude/skills-ja/integration-e2e-testing/references/e2e-design.md +31 -13
- package/.claude/skills-ja/project-context/SKILL.md +2 -15
- package/.claude/skills-ja/project-context/references/external-resources-api.md +76 -0
- package/.claude/skills-ja/project-context/references/external-resources-backend.md +76 -0
- package/.claude/skills-ja/project-context/references/external-resources-frontend.md +74 -0
- package/.claude/skills-ja/project-context/references/external-resources-infra.md +76 -0
- package/.claude/skills-ja/project-context/references/template.md +154 -0
- package/.claude/skills-ja/subagents-orchestration-guide/SKILL.md +36 -14
- package/.claude/skills-ja/task-analyzer/references/skills-index.yaml +0 -5
- package/.husky/pre-commit +1 -0
- package/CHANGELOG.md +55 -6
- package/README.ja.md +3 -2
- package/README.md +3 -2
- package/docs/guides/en/use-cases.md +18 -3
- package/docs/guides/ja/use-cases.md +18 -3
- package/package.json +2 -1
- package/scripts/check-skills-index.mjs +173 -0
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# E2Eテスト設計(ブラウザハーネス)
|
|
2
|
+
|
|
3
|
+
このリファレンスは、本ワークフローが標準E2Eブラウザハーネスとして想定するPlaywrightをデフォルトの例として全編で使用する。プロジェクトが別のフレームワーク(Cypress、Selenium等)を選択している場合はパターンを適応させること。レーン定義、ROIルール、上限制約はいずれも同一である。
|
|
4
|
+
|
|
5
|
+
## 2つのE2Eレーン
|
|
6
|
+
|
|
7
|
+
本ワークフローのE2Eテストは2つのレーンに分割される(親スキルの「テスト種別と上限」を参照):
|
|
8
|
+
|
|
9
|
+
| レーン | 適用条件 | ROIゲート | コスト |
|
|
10
|
+
|------|------|----------|------|
|
|
11
|
+
| **fixture-e2e** | 決定論的フィクスチャ(モックバックエンド/フィクスチャデータ)によるUIジャーニー検証 | 予約スロットは免除。MAX 3 の追加スロットは ROI ≥ 20 を要求 | 統合テストと同等。インフラ準備不要でCI上で実行可能 |
|
|
12
|
+
| **service-integration-e2e** | ジャーニーの正しさが実サービス間の挙動(データ永続化、トランザクション整合性、外部コントラクト)に依存する場合 | ROI > 50(予約スロット以外) | 統合テストの3〜10倍のコスト。安全にフェイクできない検証のみに使用 |
|
|
13
|
+
|
|
14
|
+
両レーンとも通常Playwrightを使用する。違いはバックエンドがモック/フィクスチャ駆動か、実際に動作しているかである。
|
|
2
15
|
|
|
3
16
|
## E2Eテストを作成するタイミング
|
|
4
17
|
|
|
5
|
-
E2E
|
|
18
|
+
E2E候補は、複数ページにまたがる、または実ブラウザ操作を必要とする**クリティカルなユーザージャーニー**を対象とする。検証に実サービスが必要かどうかでレーンを選択する。
|
|
6
19
|
|
|
7
20
|
### 候補ソース
|
|
8
21
|
|
|
@@ -21,10 +34,10 @@ E2Eテストは、複数ページにまたがる、または実ブラウザ操
|
|
|
21
34
|
- 実DOM描画が必要なアクセシビリティ検証
|
|
22
35
|
- Viewportをまたぐレスポンシブ動作
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
- API
|
|
27
|
-
-
|
|
37
|
+
**統合テストを使用するケース**:
|
|
38
|
+
- 単一コンポーネントの状態変化のテスト → in-processのコンポーネントレンダラ(React/TSではRTL)
|
|
39
|
+
- APIレスポンス処理のテスト → in-processのAPIモック + コンポーネントレンダラ(React/TSではMSW + RTL)
|
|
40
|
+
- 純粋なデータ変換のテスト → ユニットテスト
|
|
28
41
|
|
|
29
42
|
## UI SpecからE2Eテストへのマッピング
|
|
30
43
|
|
|
@@ -41,12 +54,15 @@ UI Specが存在する場合、E2Eテスト設計の主要ソースとして使
|
|
|
41
54
|
画面遷移: [画面A] → [画面B] → [画面C]
|
|
42
55
|
AC参照: AC-{id}
|
|
43
56
|
ユーザージャーニー: [ユーザーが達成する内容の説明]
|
|
44
|
-
|
|
57
|
+
レーン: fixture-e2e | service-integration-e2e
|
|
58
|
+
前提条件: [認証状態、データ状態 — フィクスチャ駆動かライブかを明記]
|
|
45
59
|
検証ポイント:
|
|
46
60
|
- [各ステップでアサートすべき内容]
|
|
47
61
|
E2E ROIスコア: [計算スコア]
|
|
48
62
|
```
|
|
49
63
|
|
|
64
|
+
**レーン判定**: デフォルトは`fixture-e2e`を選択。検証が実サービス間の挙動の観測を必要とする場合(例: 実DB書き込みでデータが永続化することをアサートする、外部サービスが正しいペイロードを受信することをアサートする)のみ、`service-integration-e2e`に昇格させる。
|
|
65
|
+
|
|
50
66
|
## Playwrightテストアーキテクチャ
|
|
51
67
|
|
|
52
68
|
### ページオブジェクトパターン
|
|
@@ -56,9 +72,11 @@ E2E ROIスコア: [計算スコア]
|
|
|
56
72
|
```
|
|
57
73
|
tests/
|
|
58
74
|
├── e2e/
|
|
59
|
-
│ ├── pages/
|
|
60
|
-
│ ├── fixtures/
|
|
61
|
-
│
|
|
75
|
+
│ ├── pages/ # ページオブジェクト(レーン間で共通)
|
|
76
|
+
│ ├── fixtures/ # テストFixtureとヘルパー(auth、seed)
|
|
77
|
+
│ ├── data/ # fixture-e2e用の静的フィクスチャデータ
|
|
78
|
+
│ ├── *.fixture-e2e.test.ts # fixture-e2eテストファイル
|
|
79
|
+
│ └── *.service-e2e.test.ts # service-integration-e2eテストファイル
|
|
62
80
|
```
|
|
63
81
|
|
|
64
82
|
### テスト分離
|
|
@@ -81,6 +99,6 @@ UI Specでレスポンシブ動作が定義されている場合、クリティ
|
|
|
81
99
|
## 上限制約
|
|
82
100
|
|
|
83
101
|
機能あたりのハードリミット(親スキルと同一):
|
|
84
|
-
- **
|
|
85
|
-
- ROI
|
|
86
|
-
-
|
|
102
|
+
- **fixture-e2e**: 最大3テスト。予約スロットはROIゲート免除、追加スロットは ROI ≥ 20 を要求
|
|
103
|
+
- **service-integration-e2e**: 最大1-2テスト、予約スロット以外は ROI > 50
|
|
104
|
+
- 両レーンとも、多数の粒度の細かいテストより少数の包括的なジャーニーテストを優先
|
|
@@ -1,21 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: project-context
|
|
3
|
-
description: AI
|
|
3
|
+
description: AIの実行精度に必要なプロジェクト固有の前提情報を提供 — ドメイン制約、開発フェーズ、ディレクトリ規約、外部リソースのアクセス方法。セッション開始時、プロジェクト構成確認時、またはタスクがドメインルールやリポジトリ外の外部リソースを参照する時に使用。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# プロジェクトコンテキスト
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
## プロジェクト概要
|
|
11
|
-
- **このプロジェクトが何をするか**: (要設定)
|
|
12
|
-
- **ドメイン**: (要設定)
|
|
13
|
-
|
|
14
|
-
## ドメイン制約
|
|
15
|
-
(AIの判断に影響するドメイン固有のルール)
|
|
16
|
-
|
|
17
|
-
## 開発フェーズ
|
|
18
|
-
- **フェーズ**: (プロトタイプ / 本番開発 / 運用中)
|
|
19
|
-
|
|
20
|
-
## ディレクトリ規約
|
|
21
|
-
(ファイル配置ルールがあれば記載)
|
|
8
|
+
`/project-inject` を実行してこのスキルを設定する。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# APIコントラクト外部リソース軸
|
|
2
|
+
|
|
3
|
+
API コントラクト設計、クライアント統合、サーバーエンドポイント実装に関する作業向けのヒアリング軸。`/project-inject` はユーザーが API ドメインを選択したときにこのファイルを読み込む。
|
|
4
|
+
|
|
5
|
+
## Axis 1: API スキーマソース
|
|
6
|
+
|
|
7
|
+
API コントラクト(リクエスト/レスポンス形状、エンドポイント、RPC メソッド)の正本となる取得元。
|
|
8
|
+
|
|
9
|
+
**AskUserQuestion 選択肢**:
|
|
10
|
+
- OpenAPI / Swagger 仕様(リポジトリ内ファイルまたはホストされた URL)
|
|
11
|
+
- Protobuf 定義(リポジトリ内ファイル)
|
|
12
|
+
- GraphQL スキーマ(SDL ファイルまたはイントロスペクションエンドポイント)
|
|
13
|
+
- リポジトリ内のコードファースト契約定義(例: クライアントとサーバー間で共有される TypeScript 型)
|
|
14
|
+
- アドホックな JSON(正式なコントラクトなし)
|
|
15
|
+
- 該当なし
|
|
16
|
+
|
|
17
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
18
|
+
- **場所**: ファイルパスまたは URL。
|
|
19
|
+
- **アクセス方法**: ファイル読み込みまたは WebFetch。
|
|
20
|
+
|
|
21
|
+
複数のコントラクトが併存する場合(公開 API、内部サービス等)、`template.md` の複数インスタンスルールに従ってコントラクトの用途を識別接尾辞として各エントリを収集する。
|
|
22
|
+
|
|
23
|
+
## Axis 2: モック環境
|
|
24
|
+
|
|
25
|
+
ライブサーバーから独立した状態でクライアントが API を実行する手段。
|
|
26
|
+
|
|
27
|
+
**AskUserQuestion 選択肢**:
|
|
28
|
+
- スキーマから生成されたモック(例: OpenAPI / Protobuf ツールチェーンから)
|
|
29
|
+
- リポジトリ内の手書きモックサーバー
|
|
30
|
+
- ホスト型モックサービス(URL)
|
|
31
|
+
- ライブ開発サーバー(独立したモックなし)
|
|
32
|
+
- 該当なし
|
|
33
|
+
|
|
34
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
35
|
+
- **場所**: モックの URL またはリポジトリパス。
|
|
36
|
+
- **アクセス方法**: CLI コマンド、WebFetch、または生成ステップ名。スキーマ変更時にモックが自動更新されるかも記録する(例: `commit 時に openapi.yaml から再生成`)。
|
|
37
|
+
|
|
38
|
+
## Axis 3: 認証方式
|
|
39
|
+
|
|
40
|
+
API がリクエストをどのように認証・認可するか。
|
|
41
|
+
|
|
42
|
+
**AskUserQuestion 選択肢**:
|
|
43
|
+
- 認証サービスが発行する Bearer トークン(例: JWT)
|
|
44
|
+
- ヘッダーまたはクエリパラメータの API キー
|
|
45
|
+
- 別途のログインフローで設定されるセッション Cookie
|
|
46
|
+
- 相互 TLS
|
|
47
|
+
- 認証なし
|
|
48
|
+
- 該当なし
|
|
49
|
+
|
|
50
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
51
|
+
- **場所**: 開発・テスト用の認証情報を取得する認証サービス URL、環境変数名、またはフィクスチャファイルパス。
|
|
52
|
+
- **アクセス方法**: SDK 呼び出し、CLI コマンド、またはファイル読み込み。
|
|
53
|
+
|
|
54
|
+
同一のシークレットがバックエンドのシークレットストアに格納されている場合、この軸は `template.md` で定義される軸間参照記法でそのストアへの参照として出力する。
|
|
55
|
+
|
|
56
|
+
## Axis 4: スキーマ変更プロセス
|
|
57
|
+
|
|
58
|
+
破壊的変更と非破壊的変更がどのようにレビュー・展開されるか。
|
|
59
|
+
|
|
60
|
+
**AskUserQuestion 選択肢**:
|
|
61
|
+
- 文書化されたコントラクトレビュープロセス(ドキュメントへのリンク)
|
|
62
|
+
- バージョン分けされたエンドポイント(例: `/v1/`、`/v2/`)
|
|
63
|
+
- 後方互換のある変更のみ、正式なバージョニングなし
|
|
64
|
+
- 該当なし
|
|
65
|
+
|
|
66
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
67
|
+
- **場所**: ドキュメントパスまたは URL。
|
|
68
|
+
- **アクセス方法**: ファイル読み込み、WebFetch、またはバージョン交渉ルールの記述(例: `破壊的変更には新しい /vN/ パスが必要`)。
|
|
69
|
+
|
|
70
|
+
## 自己申告フェーズ
|
|
71
|
+
|
|
72
|
+
4 つの構造化軸の後、1 回だけ尋ねる: 「構造化された質問の範囲を超えて、このプロジェクトが依存する API 外部リソースは何か? 該当する項目を次のメッセージで列挙、または 'none' と返答する。」
|
|
73
|
+
|
|
74
|
+
自由記述の回答は API ブロックの「追加リソース」サブセクションに収集する。このフェーズは構造化軸が全て「該当なし」となった場合でも実行する。
|
|
75
|
+
|
|
76
|
+
自己申告でのみ表面化するリソースの例: レートリミット設定、API 前段のゲートウェイ / プロキシ、コントラクトテストスイート(例: Pact ブローカー URL)、API ゲートウェイの管理コンソール、設計時に参照したサードパーティ API ドキュメント。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# バックエンド外部リソース軸
|
|
2
|
+
|
|
3
|
+
サーバーサイド、データ、ストレージに関する作業向けのヒアリング軸。`/project-inject` はユーザーがバックエンドドメインを選択したときにこのファイルを読み込む。
|
|
4
|
+
|
|
5
|
+
## Axis 1: データベーススキーマソース
|
|
6
|
+
|
|
7
|
+
データベーススキーマ(テーブル、カラム、インデックス、制約)の正本となる取得元。
|
|
8
|
+
|
|
9
|
+
**AskUserQuestion 選択肢**:
|
|
10
|
+
- リポジトリ内のマイグレーションファイル(例: `migrations/` ディレクトリ)
|
|
11
|
+
- リポジトリ内のスキーマファイル(例: `schema.sql`、`prisma/schema.prisma`)
|
|
12
|
+
- ライブ DB を introspect する DB MCP サーバー
|
|
13
|
+
- 外部のスキーマレジストリ(URL またはホスト型カタログ)
|
|
14
|
+
- 永続データベースなし
|
|
15
|
+
- 該当なし
|
|
16
|
+
|
|
17
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
18
|
+
- **場所**: ファイルパス、URL、または MCP の対象識別子。
|
|
19
|
+
- **アクセス方法**: ファイル読み込み、WebFetch、または MCP サーバー名。
|
|
20
|
+
|
|
21
|
+
複数の DB が併存する場合(primary、analytics、cache 等)、`template.md` の複数インスタンスルールに従って DB 用途を識別接尾辞として各エントリを収集する。
|
|
22
|
+
|
|
23
|
+
## Axis 2: マイグレーション履歴
|
|
24
|
+
|
|
25
|
+
スキーマ変更が時系列でどのように追跡されるか。
|
|
26
|
+
|
|
27
|
+
**AskUserQuestion 選択肢**:
|
|
28
|
+
- リポジトリ内のバージョン管理されたマイグレーションファイル
|
|
29
|
+
- ORM 管理のマイグレーションツール(例: Alembic、Flyway、Prisma Migrate)
|
|
30
|
+
- 手動の変更ログドキュメント
|
|
31
|
+
- マイグレーション追跡なし
|
|
32
|
+
- 該当なし
|
|
33
|
+
|
|
34
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
35
|
+
- **場所**: ディレクトリパスまたはマイグレーションツール名。
|
|
36
|
+
- **アクセス方法**: 手動実行の CLI コマンド、または自動適用される場合の CI ステップ名 / デプロイフック名。
|
|
37
|
+
|
|
38
|
+
## Axis 3: シークレットストア
|
|
39
|
+
|
|
40
|
+
認証情報、API キー、その他のシークレットの保存・アクセス先。
|
|
41
|
+
|
|
42
|
+
**AskUserQuestion 選択肢**:
|
|
43
|
+
- シークレットマネージャーサービス(例: AWS Secrets Manager、Vault、GCP Secret Manager)
|
|
44
|
+
- `.env` ファイルから読み込む環境変数(開発環境のみ)
|
|
45
|
+
- リポジトリ内の暗号化されたファイル
|
|
46
|
+
- シークレットは不要
|
|
47
|
+
- 該当なし
|
|
48
|
+
|
|
49
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
50
|
+
- **場所**: シークレットマネージャーのサービス名または MCP の対象。
|
|
51
|
+
- **アクセス方法**: シークレットを読むための MCP サーバー名、CLI コマンド、または SDK 呼び出し。
|
|
52
|
+
|
|
53
|
+
実際のシークレット値はストア内に存在し、ランタイムでそこから読み出す。収集対象は到達手段のみとする。
|
|
54
|
+
|
|
55
|
+
## Axis 4: バックグラウンドジョブ基盤
|
|
56
|
+
|
|
57
|
+
非同期処理がどのようにディスパッチ・観測されるか。
|
|
58
|
+
|
|
59
|
+
**AskUserQuestion 選択肢**:
|
|
60
|
+
- キューサービス(例: SQS、Pub/Sub、RabbitMQ)
|
|
61
|
+
- デプロイプラットフォームが管理する cron / スケジュールタスク
|
|
62
|
+
- プロセス内ワーカースレッド
|
|
63
|
+
- バックグラウンド処理なし
|
|
64
|
+
- 該当なし
|
|
65
|
+
|
|
66
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
67
|
+
- **場所**: キュー名またはスケジューラー識別子。
|
|
68
|
+
- **アクセス方法**: enqueue コマンド、ジョブ確認コマンド、またはプラットフォームのコンソール URL。
|
|
69
|
+
|
|
70
|
+
## 自己申告フェーズ
|
|
71
|
+
|
|
72
|
+
4 つの構造化軸の後、1 回だけ尋ねる: 「構造化された質問の範囲を超えて、このプロジェクトが依存するバックエンド外部リソースは何か? 該当する項目を次のメッセージで列挙、または 'none' と返答する。」
|
|
73
|
+
|
|
74
|
+
自由記述の回答はバックエンドブロックの「追加リソース」サブセクションに収集する。このフェーズは構造化軸が全て「該当なし」となった場合でも実行する。
|
|
75
|
+
|
|
76
|
+
自己申告でのみ表面化するリソースの例: サードパーティ SaaS API(決済、メール、検索インデックス)、分散キャッシュサービス(Redis、Memcached)、オブジェクトストレージ(S3、GCS)、サーバー側で消費されるフィーチャーフラグサービス、可観測性プラットフォーム(ログ、トレース、メトリクス)。
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# フロントエンド外部リソース軸
|
|
2
|
+
|
|
3
|
+
フロントエンド作業(コンポーネント実装、画面設計、表示調整、デザインシステム移行)向けのヒアリング軸。`/project-inject` はユーザーがフロントエンドドメインを選択したときにこのファイルを読み込む。
|
|
4
|
+
|
|
5
|
+
## Axis 1: デザインソース
|
|
6
|
+
|
|
7
|
+
ビジュアル仕様の正本となる取得元。
|
|
8
|
+
|
|
9
|
+
**AskUserQuestion 選択肢**:
|
|
10
|
+
- デザインツール(ホスト型のデザインプラットフォーム)
|
|
11
|
+
- リポジトリ内の仕様ファイル(例: `DESIGN.md`、`docs/design/...`)
|
|
12
|
+
- 公開ドキュメントの URL
|
|
13
|
+
- 既存実装のみ(独立したデザインソースなし)
|
|
14
|
+
- 該当なし
|
|
15
|
+
|
|
16
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する(ソースタイプは上記の選択肢から自動取得):
|
|
17
|
+
- **場所**: 公開 URL、リポジトリ内ファイルパス、または MCP の対象識別子。
|
|
18
|
+
- **アクセス方法**: WebFetch、ファイル読み込み、MCP サーバー名、または手動スクリーンショット手順。
|
|
19
|
+
|
|
20
|
+
## Axis 2: デザインシステム
|
|
21
|
+
|
|
22
|
+
再利用可能なコンポーネントライブラリとデザイントークン。
|
|
23
|
+
|
|
24
|
+
**AskUserQuestion 選択肢**:
|
|
25
|
+
- MCP サーバー経由でアクセスするコンポーネントライブラリ
|
|
26
|
+
- ドキュメント URL を持つコンポーネントライブラリ
|
|
27
|
+
- Storybook 等価のコンポーネントカタログ
|
|
28
|
+
- チーム内ドキュメントのみを持つ社内パッケージ
|
|
29
|
+
- デザインシステムなし(アドホックなコンポーネント)
|
|
30
|
+
- 該当なし
|
|
31
|
+
|
|
32
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
33
|
+
- **場所**: Storybook URL、パッケージ名、または社内ドキュメントのパス。
|
|
34
|
+
- **アクセス方法**: WebFetch、ファイル読み込み、または MCP サーバー名。
|
|
35
|
+
|
|
36
|
+
## Axis 3: ガイドライン
|
|
37
|
+
|
|
38
|
+
UI 作業向けの利用ガイド、アクセシビリティルール、アンチパターン、命名規約。
|
|
39
|
+
|
|
40
|
+
**AskUserQuestion 選択肢**:
|
|
41
|
+
- プロジェクト層のガイドラインファイル(例: `DESIGN.md`、`docs/guidelines/...`)
|
|
42
|
+
- 外部のドキュメントサイト
|
|
43
|
+
- デザインシステムカタログ内のインライン記述
|
|
44
|
+
- 文書化されたガイドラインなし
|
|
45
|
+
- 該当なし
|
|
46
|
+
|
|
47
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
48
|
+
- **場所**: ファイルパスまたは URL。
|
|
49
|
+
- **アクセス方法**: ファイル読み込みまたは WebFetch。
|
|
50
|
+
|
|
51
|
+
複数のファイルが異なる関心領域を扱う場合(CSS、アクセシビリティ、i18n 等)、`template.md` の複数インスタンスルールに従って各ファイルを別エントリとして収集する。
|
|
52
|
+
|
|
53
|
+
## Axis 4: 表示検証環境
|
|
54
|
+
|
|
55
|
+
実装中にレンダリング結果を確認する手段。
|
|
56
|
+
|
|
57
|
+
**AskUserQuestion 選択肢**:
|
|
58
|
+
- スクリーンショット機能を持つ E2E テストランナー
|
|
59
|
+
- Storybook 等価の独立したコンポーネントプレビュー
|
|
60
|
+
- ブラウザ自動化ツール(専用 CLI または MCP サーバー)
|
|
61
|
+
- 手動でのブラウザ確認のみ
|
|
62
|
+
- 該当なし
|
|
63
|
+
|
|
64
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
65
|
+
- **場所**: プレビュー URL、MCP の対象、またはテストランナー識別子。
|
|
66
|
+
- **アクセス方法**: 起動コマンド、MCP サーバー名、またはブラウザ自動化ツール名。
|
|
67
|
+
|
|
68
|
+
## 自己申告フェーズ
|
|
69
|
+
|
|
70
|
+
4 つの構造化軸の後、1 回だけ尋ねる: 「構造化された質問の範囲を超えて、このプロジェクトが依存するフロントエンド外部リソースは何か? 該当する項目を次のメッセージで列挙、または 'none' と返答する。」
|
|
71
|
+
|
|
72
|
+
自由記述の回答はフロントエンドブロックの「追加リソース」サブセクションに収集する。このフェーズは構造化軸が全て「該当なし」となった場合でも実行する。
|
|
73
|
+
|
|
74
|
+
自己申告でのみ表面化するリソースの例: ブランド資産の CDN、フォントホスティングサービス、アイコンライブラリのサブスクリプション、ビジュアルバリアントを制御する A/B テストダッシュボード、ビジュアル KPI 確認用の分析ダッシュボード。
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# インフラストラクチャ外部リソース軸
|
|
2
|
+
|
|
3
|
+
デプロイ、環境設定、Infrastructure as Code に関する作業向けのヒアリング軸。`/project-inject` はユーザーがインフラストラクチャドメインを選択したときにこのファイルを読み込む。
|
|
4
|
+
|
|
5
|
+
## Axis 1: IaC ソース
|
|
6
|
+
|
|
7
|
+
インフラ定義の正本となる取得元。
|
|
8
|
+
|
|
9
|
+
**AskUserQuestion 選択肢**:
|
|
10
|
+
- リポジトリ内の Terraform 構成
|
|
11
|
+
- リポジトリ内の Pulumi または CDK コード
|
|
12
|
+
- リポジトリ内の Kubernetes マニフェスト / Helm チャート
|
|
13
|
+
- クラウドプロバイダー固有のテンプレート(例: CloudFormation、Bicep、Deployment Manager)
|
|
14
|
+
- 手動コンソール設定(IaC なし)
|
|
15
|
+
- 該当なし
|
|
16
|
+
|
|
17
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
18
|
+
- **場所**: ディレクトリパス。
|
|
19
|
+
- **アクセス方法**: 自動で plan / apply が走る場合の CI パイプライン名、または手動実行の場合の CLI コマンド。
|
|
20
|
+
|
|
21
|
+
## Axis 2: 環境設定
|
|
22
|
+
|
|
23
|
+
環境ごとの設定(開発、ステージング、本番)の差分管理方法。
|
|
24
|
+
|
|
25
|
+
**AskUserQuestion 選択肢**:
|
|
26
|
+
- リポジトリ内の環境別設定ファイル(例: `terraform/envs/`、`config/staging.yaml`)
|
|
27
|
+
- デプロイプラットフォームが管理する環境変数
|
|
28
|
+
- IaC ツール自身のワークスペースまたはスタック抽象化
|
|
29
|
+
- 共通の単一設定(環境ごとの差分なし)
|
|
30
|
+
- 該当なし
|
|
31
|
+
|
|
32
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
33
|
+
- **場所**: 環境固有の値が格納されている設定ファイルのパス、プラットフォームの設定名、またはワークスペース識別子。
|
|
34
|
+
- **アクセス方法**: ファイル読み込み、プラットフォームのコンソール URL、または CLI コマンド。
|
|
35
|
+
|
|
36
|
+
複数の環境が個別に追跡される場合(開発、ステージング、本番)、`template.md` の複数インスタンスルールに従って環境名を識別接尾辞として各エントリを収集する。
|
|
37
|
+
|
|
38
|
+
## Axis 3: インフラのシークレット
|
|
39
|
+
|
|
40
|
+
インフラコードがシークレット値をソース管理に出さずに参照する方法。
|
|
41
|
+
|
|
42
|
+
**AskUserQuestion 選択肢**:
|
|
43
|
+
- IaC のデータルックアップでシークレットマネージャーから取得
|
|
44
|
+
- apply 時に環境変数経由で注入
|
|
45
|
+
- IaC コードと共に格納された暗号化済みシークレットファイル
|
|
46
|
+
- インフラにシークレットなし
|
|
47
|
+
- 該当なし
|
|
48
|
+
|
|
49
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
50
|
+
- **場所**: シークレットマネージャーのサービス名または IaC のデータソース識別子。
|
|
51
|
+
- **アクセス方法**: データルックアップの構文、環境変数名、または apply 時の注入機構。
|
|
52
|
+
|
|
53
|
+
同一のシークレットストアがバックエンドドメインに登場する場合、この軸は `template.md` で定義される軸間参照記法でそのストアへの参照として出力する。
|
|
54
|
+
|
|
55
|
+
## Axis 4: デプロイトリガー
|
|
56
|
+
|
|
57
|
+
インフラとアプリケーションの変更が各環境にどのように到達するか。
|
|
58
|
+
|
|
59
|
+
**AskUserQuestion 選択肢**:
|
|
60
|
+
- 特定ブランチへのマージで起動する CI パイプライン
|
|
61
|
+
- CI 内の手動承認ステップ
|
|
62
|
+
- オペレーターによるローカル apply
|
|
63
|
+
- デプロイプラットフォームの push 連動オートデプロイ
|
|
64
|
+
- 該当なし
|
|
65
|
+
|
|
66
|
+
**フォローアップ(軸が該当する場合)**: 2 つのフィールドを収集する:
|
|
67
|
+
- **場所**: CI パイプライン名またはデプロイプラットフォーム識別子。
|
|
68
|
+
- **アクセス方法**: 各環境を起動するブランチ / タグ規約と、必要な手動承認ステップ。
|
|
69
|
+
|
|
70
|
+
## 自己申告フェーズ
|
|
71
|
+
|
|
72
|
+
4 つの構造化軸の後、1 回だけ尋ねる: 「構造化された質問の範囲を超えて、このプロジェクトが依存するインフラストラクチャ外部リソースは何か? 該当する項目を次のメッセージで列挙、または 'none' と返答する。」
|
|
73
|
+
|
|
74
|
+
自由記述の回答はインフラストラクチャブロックの「追加リソース」サブセクションに収集する。このフェーズは構造化軸が全て「該当なし」となった場合でも実行する。
|
|
75
|
+
|
|
76
|
+
自己申告でのみ表面化するリソースの例: IaC ツールの state 保管バックエンド、インシデント対応の runbook ドキュメント、オンコールローテーション、可観測性ダッシュボード、コスト監視ツール、コンプライアンス / 監査ログ送信先。
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# プロジェクトコンテキスト セクションカタログ
|
|
2
|
+
|
|
3
|
+
このファイルは `/project-inject` が利用するセクションカタログである。利用側エージェントは `SKILL.md` のみを読み込み、このファイルは更新操作時のみ読み込まれる。
|
|
4
|
+
|
|
5
|
+
## セクション一覧
|
|
6
|
+
|
|
7
|
+
| セクション | 採用ルール | ヒアリング質問の取得元 |
|
|
8
|
+
|------------|-----------|------------------------|
|
|
9
|
+
| プロジェクト概要 | 常に含める | このファイル(下記) |
|
|
10
|
+
| ドメイン制約 | AIの判断を変えるルールが少なくとも1つある場合に含める | このファイル(下記) |
|
|
11
|
+
| 開発フェーズ | フェーズがAIの動作を実質的に変える場合に含める(例: プロトタイプではテストひな型生成を抑制) | このファイル(下記) |
|
|
12
|
+
| ディレクトリ規約 | リポジトリ構造から自明でないファイル配置ルールがある場合に含める | このファイル(下記) |
|
|
13
|
+
| 外部リソース | プロジェクトがリポジトリ外のリソース(デザインソース、スキーマソース、シークレットストア、IaCソース等)に依存する場合に含める | `external-resources-{frontend,backend,api,infra}.md`(プロジェクトに該当するドメインのみ読み込む) |
|
|
14
|
+
|
|
15
|
+
## セクション定義
|
|
16
|
+
|
|
17
|
+
### プロジェクト概要
|
|
18
|
+
|
|
19
|
+
**採用**: 常に。
|
|
20
|
+
|
|
21
|
+
**ヒアリング**:
|
|
22
|
+
- AskUserQuestion 1: 「このプロジェクトは何をするものか?(1〜2文)」
|
|
23
|
+
- AskUserQuestion 2: 「どのドメインに属するか?」 一般的なカテゴリから具体的な選択肢例を提示する(例: 開発者ツール、金融、ヘルスケア、EC、社内プラットフォーム)。常に「その他」を含める。
|
|
24
|
+
|
|
25
|
+
**出力構造**:
|
|
26
|
+
```markdown
|
|
27
|
+
## プロジェクト概要
|
|
28
|
+
- **このプロジェクトが何をするか**: <1〜2文>
|
|
29
|
+
- **ドメイン**: <ドメイン>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### ドメイン制約
|
|
33
|
+
|
|
34
|
+
**採用**: AIが無視するとバグまたはコンプライアンス違反を引き起こす制約が少なくとも1つある場合に含める。
|
|
35
|
+
|
|
36
|
+
**ヒアリング**:
|
|
37
|
+
- AskUserQuestion: 「このプロジェクトでAIが従うべきドメイン固有のルールはあるか?」 選択肢: 「はい、列挙する」 / 「いいえ、ドメイン制約は該当しない」。
|
|
38
|
+
- 「はい」の場合: 各ルール(最大3件)について、ルール文と測定可能なチェックを収集する。pass/fail で評価できる文のみを採用し、主観的な表現は測定可能な形に書き換える(例: 「PIIに気をつける」を「ログ出力は匿名化された患者IDを使用」に変換)。
|
|
39
|
+
- 例示の言い回しは「プロジェクト概要」で得たドメインに合わせる(例: 金融なら「全ての金額変更操作で監査ログを追記」、開発者ツールなら「生成コードは lockfile コマンドが呼び出せる状態を保つ」)。
|
|
40
|
+
|
|
41
|
+
**出力構造**(制約が0件の場合はセクションごと省略):
|
|
42
|
+
```markdown
|
|
43
|
+
## ドメイン制約
|
|
44
|
+
1. <測定可能なルール 1>
|
|
45
|
+
2. <測定可能なルール 2>
|
|
46
|
+
3. <測定可能なルール 3>
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### 開発フェーズ
|
|
50
|
+
|
|
51
|
+
**採用**: フェーズがAIの動作を実質的に変える場合に含める。フェーズ間で動作が同一の場合はスキップする。
|
|
52
|
+
|
|
53
|
+
**ヒアリング**:
|
|
54
|
+
- AskUserQuestion: 「このプロジェクトはどのフェーズか?」 選択肢: 「プロトタイプ」、「本番開発」、「運用中」、「フェーズ間で意味のある違いはない」。
|
|
55
|
+
- 「フェーズ間で意味のある違いはない」の場合: セクションごと省略する。
|
|
56
|
+
|
|
57
|
+
**出力構造**:
|
|
58
|
+
```markdown
|
|
59
|
+
## 開発フェーズ
|
|
60
|
+
- **フェーズ**: <プロトタイプ | 本番開発 | 運用中>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### ディレクトリ規約
|
|
64
|
+
|
|
65
|
+
**採用**: リポジトリ構造から自明でない(コントリビュータがツリーを見て誤推測する)ファイル配置ルールが少なくとも1つある場合に含める。
|
|
66
|
+
|
|
67
|
+
**ヒアリング**:
|
|
68
|
+
- AskUserQuestion: 「AIが従うべきファイル配置ルールはあるか?」 選択肢: 「はい」 / 「いいえ」。
|
|
69
|
+
- 「はい」の場合: 各ルールをトリガーと配置先を1行で明示する形で収集する(例: 「作業中の一時ファイル: `./tmp/` 配下に配置し、完了時に削除」)。
|
|
70
|
+
|
|
71
|
+
**出力構造**(ルールが0件の場合はセクションごと省略):
|
|
72
|
+
```markdown
|
|
73
|
+
## ディレクトリ規約
|
|
74
|
+
- <ルール 1>
|
|
75
|
+
- <ルール 2>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 外部リソース
|
|
79
|
+
|
|
80
|
+
**採用**: 選択されたドメインのうち少なくとも1つに該当する軸が存在するか、自己申告の追加項目が存在する場合にセクションを含める。それ以外の場合はセクションごと省略する。
|
|
81
|
+
|
|
82
|
+
**ヒアリングのルーティング**:
|
|
83
|
+
- AskUserQuestion: 「このプロジェクトに該当する外部リソースのドメインはどれか?」 マルチセレクト選択肢:
|
|
84
|
+
- フロントエンド(デザインソース、デザインシステム、ガイドライン、表示検証環境)
|
|
85
|
+
- バックエンド(データベーススキーマ、マイグレーション履歴、シークレットストア、バックグラウンドジョブ)
|
|
86
|
+
- APIコントラクト(スキーマソース、モック、認証、スキーマ変更プロセス)
|
|
87
|
+
- インフラストラクチャ(IaCソース、環境設定、インフラのシークレット、デプロイトリガー)
|
|
88
|
+
- 該当なし
|
|
89
|
+
- 選択された各ドメインについて、下記の対応表に従って参照ファイルを読み込み、そのヒアリングプロトコルを実行する。
|
|
90
|
+
|
|
91
|
+
**ドメインとファイルの対応**:
|
|
92
|
+
| ドメイン(ユーザー向けラベル) | 参照ファイル |
|
|
93
|
+
|--------------------------------|--------------|
|
|
94
|
+
| フロントエンド | `external-resources-frontend.md` |
|
|
95
|
+
| バックエンド | `external-resources-backend.md` |
|
|
96
|
+
| APIコントラクト | `external-resources-api.md` |
|
|
97
|
+
| インフラストラクチャ | `external-resources-infra.md` |
|
|
98
|
+
|
|
99
|
+
**ヒアリングプロトコル**(ドメイン参照ファイル単位): 各参照ファイルは構造化された軸群と自己申告フェーズを定義する。構造化フェーズは軸ごとに AskUserQuestion を 1 回行い、「該当なし」を明示的な選択肢として提示する。自己申告フェーズは構造化フェーズの結果に関わらず必ず 1 回実行し、自由記述の追加項目を収集する。
|
|
100
|
+
|
|
101
|
+
**軸ごとの出力スキーマ(3 フィールド)**:
|
|
102
|
+
```markdown
|
|
103
|
+
#### <軸名>
|
|
104
|
+
- ソースタイプ: <ユーザーが選択した AskUserQuestion 選択肢の原文>
|
|
105
|
+
- 場所: <URL | ファイルパス | サービス名 / パッケージ名>
|
|
106
|
+
- アクセス方法: <WebFetch | ファイル読み込み | MCP サーバー名 | CLI コマンド | 手動手順>
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**軸出力ルール**:
|
|
110
|
+
|
|
111
|
+
1. **軸出力はスキーマを埋められるかで決まる。** ユーザーの選択肢が **場所** と **アクセス方法** の具体値が確定する外部リソースを指す場合、軸ブロックを出力する。次の選択肢では当該軸の出力行を 0 行にする:
|
|
112
|
+
- リソース不在を表明する選択肢: 「該当なし」、「<リソース>なし」、「<リソース>は不要」、「文書化された<リソース>なし」、「アドホックな<リソース>」、「手動<プロセス>(<リソース>なし)」。
|
|
113
|
+
- その他の選択肢のうち、場所とアクセス方法の値が空になるもの。
|
|
114
|
+
|
|
115
|
+
2. **同一軸内の複数インスタンス**(例: primary・analytics の DB が併存、CSS とアクセシビリティのガイドラインが別ファイル)— 識別接尾辞を付けて軸ブロックを繰り返す:
|
|
116
|
+
```markdown
|
|
117
|
+
#### データベーススキーマソース — Primary
|
|
118
|
+
- ソースタイプ: リポジトリ内のスキーマファイル
|
|
119
|
+
- 場所: prisma/schema.prisma
|
|
120
|
+
- アクセス方法: ファイル読み込み
|
|
121
|
+
|
|
122
|
+
#### データベーススキーマソース — Analytics
|
|
123
|
+
- ソースタイプ: ライブ DB を introspect する DB MCP サーバー
|
|
124
|
+
- 場所: bigquery-prod
|
|
125
|
+
- アクセス方法: MCP サーバー `bigquery`
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
3. **軸間の参照**(例: 同一のシークレットストアがバックエンドとインフラストラクチャの両方に登場)— 1 回目の出現が正本フィールドを保持し、2 回目の出現はそこへの参照として出力する:
|
|
129
|
+
```markdown
|
|
130
|
+
#### インフラのシークレット
|
|
131
|
+
- ソースタイプ: シークレットマネージャーから IaC のデータルックアップで取得するシークレット
|
|
132
|
+
- 参照先: バックエンド > シークレットストア と同一ストア
|
|
133
|
+
- アクセス方法: <継承; 差異がある場合のみ記録>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**ドメインブロックの構造**:
|
|
137
|
+
```markdown
|
|
138
|
+
### <ドメイン>
|
|
139
|
+
|
|
140
|
+
<軸ブロック群(カタログ順、上記ルールに従って出力)>
|
|
141
|
+
|
|
142
|
+
#### 追加リソース
|
|
143
|
+
|
|
144
|
+
<自己申告フェーズで項目が収集された場合のみ出力。同一ドメインブロック内の最後の該当軸の後に配置>
|
|
145
|
+
- <ユーザーが記述した自由記述の説明>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## 出力組み立てルール
|
|
149
|
+
|
|
150
|
+
ヒアリング完了後、呼び出し元コマンド(`/project-inject`)が指定する順序で設定済み `SKILL.md` を組み立てる。このファイルは各セクションの内容構造(上記)と、以下のセクション横断ルールを所有する:
|
|
151
|
+
|
|
152
|
+
1. 省略対象のセクションは出力行を 0 行にする。再構築された本文は次の採用セクションへ直接進む。
|
|
153
|
+
2. 外部リソース内のドメインブロックは、ヒアリング時のユーザー選択順とは独立してカタログ順(フロントエンド → バックエンド → APIコントラクト → インフラストラクチャ)で配置する。
|
|
154
|
+
3. 「曖昧ルールの差し戻し」ルール(`/project-inject` Step 3 で定義)は、`add` および `update` 区分の全セクションに対するヒアリング時のフィルタとして適用される。フィルタを通過したルールが通常のセクション出力経路で書き出され、フィルタ自体の出力行は 0 行となる。
|