@aramassa/ai-rules 0.2.1 → 0.3.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.
@@ -0,0 +1,100 @@
1
+ ---
2
+ type: test
3
+ category: github-actions
4
+ focus: test-policy
5
+ ---
6
+
7
+ # GitHub Actions Testing Policy
8
+
9
+ ## 概要
10
+
11
+ GitHub Actions workflow files should not have dedicated test files. Workflow configuration is verified through alternative methods that are more effective and practical.
12
+
13
+ ## 基本方針
14
+
15
+ ### Workflow テストの禁止
16
+
17
+ GitHub Actions の workflow 定義ファイル(`.github/workflows/*.yml`, `.github/workflows/*.yaml`)に対する専用のテストファイルは作成しないでください。
18
+
19
+ ## 理由・背景
20
+
21
+ ### 実効性のない検証
22
+
23
+ - **YAML シンタックス検証**: GitHub Actions には組み込みの YAML バリデーション機能があるため、独自のテストは冗長
24
+ - **想定ベースの検証**: 実際の GitHub Actions 環境で実行されないため、実際の動作との乖離が発生する可能性
25
+ - **環境依存の問題**: ローカル環境での想定テストは、実際のCI環境での動作を保証できない
26
+
27
+ ### テストの可読性・保守性への悪影響
28
+
29
+ - **複雑性の増加**: workflow 設定のテストは通常複雑になりがちで、メンテナンスコストが高い
30
+ - **false positive/negative**: モックやスタブを使った検証では、実際の問題を見逃したり、存在しない問題を検出する可能性
31
+ - **開発効率の低下**: 実効性の低いテストの作成・保守に時間を費やすことになる
32
+
33
+ ## 推奨される検証方法
34
+
35
+ ### 1. GitHub Actions 組み込み検証
36
+
37
+ - **YAML 構文バリデーション**: GitHub Actions が自動的に実行
38
+ - **Action 存在確認**: 使用している Action の存在性と互換性をプラットフォーム側で検証
39
+ - **権限チェック**: 必要な権限の設定が適切かどうかをプラットフォーム側で確認
40
+
41
+ ### 2. Pull Request レビューでの手動確認
42
+
43
+ - **設定の妥当性**: トリガー条件、ジョブ間の依存関係、環境変数の設定を目視確認
44
+ - **セキュリティ観点**: 権限設定、secret の使用方法、外部 Action の安全性をレビュー
45
+ - **業務ロジック**: ワークフローが想定された業務プロセスに沿っているかを確認
46
+
47
+ ### 3. 実際の実行による検証
48
+
49
+ - **実環境での動作確認**: 実際に workflow を動作させることで、真の動作を検証
50
+ - **段階的デプロイメント**: テスト用ブランチやタグを使用した安全な動作確認
51
+ - **監視とログ**: workflow の実行ログとメトリクスによる継続的な動作確認
52
+
53
+ ## 実装ガイドライン
54
+
55
+ ### 適用範囲
56
+
57
+ 以下のファイルには専用のテストファイルを作成しないでください:
58
+
59
+ - `.github/workflows/*.yml`
60
+ - `.github/workflows/*.yaml`
61
+ - その他の GitHub Actions 関連設定ファイル
62
+
63
+ ### 代替検証手順
64
+
65
+ 1. **事前検証**
66
+ - YAML 構文チェックツール(yq, yamllint 等)での基本的な構文確認
67
+ - 使用する Action の公式ドキュメント確認
68
+ - 必要な権限と secret の設定確認
69
+
70
+ 2. **段階的テスト**
71
+ - テスト専用のブランチまたはタグでの小規模実行
72
+ - 本格的なデプロイ前の dry-run 相当の確認
73
+ - エラー時の適切なログ出力の確認
74
+
75
+ 3. **継続的監視**
76
+ - workflow 実行の成功率監視
77
+ - 実行時間とリソース使用量の監視
78
+ - 失敗時の迅速な原因特定と対処
79
+
80
+ ## 例外的な状況
81
+
82
+ ### 許可される場合
83
+
84
+ 以下の場合においても、workflow 自体のテストではなく、関連するスクリプトやツールのテストに留めてください:
85
+
86
+ - **カスタムスクリプトのテスト**: workflow 内で実行するシェルスクリプトや Node.js スクリプト等のテスト
87
+ - **設定生成ツールのテスト**: workflow ファイルを動的生成するツールがある場合、そのツール自体のテスト
88
+ - **ヘルパー関数のテスト**: workflow で使用する共通ロジックを含むライブラリのテスト
89
+
90
+ ### 注意事項
91
+
92
+ これらの場合でも、workflow ファイル自体の設定や構造をテストするのではなく、その中で使用される個別のコンポーネントをテストすることが重要です。
93
+
94
+ ## 関連情報
95
+
96
+ - [GitHub Actions Documentation](https://docs.github.com/en/actions)
97
+ - [YAML Syntax Validation Tools](https://yamllint.readthedocs.io/)
98
+ - [Workflow Security Best Practices](https://docs.github.com/en/actions/security-guides)
99
+
100
+ この方針により、実効性のある検証に集中し、開発効率と品質の両立を図ることができます。
@@ -0,0 +1,509 @@
1
+ ---
2
+ type: prompt
3
+ category: instruction-generation
4
+ ---
5
+
6
+ ## Recipe ファイル作成ルール
7
+
8
+ ### 目的
9
+
10
+ AI-rules プロジェクトにおけるレシピファイル(recipe files)を効率的に作成するための包括的なガイドライン。複数のinstructionファイルを組み合わせて、特定の目的に応じたドキュメントを自動生成するための設定ファイル作成を支援する。
11
+
12
+ ### 前提条件
13
+
14
+ #### 必要な知識
15
+
16
+ - YAML形式の基本構文
17
+ - ai-rules CLIの基本的な使用方法
18
+ - instructionファイルの構造とfrontmatter属性
19
+ - ファイルパスとディレクトリ構造の理解
20
+
21
+ #### 準備事項
22
+
23
+ - `artifact/instructions/` または `artifact/prompts/` ディレクトリに対象となるinstructionファイルが存在する
24
+ - 出力先ディレクトリの権限設定が適切である
25
+ - プロジェクトの要件とファイル構成を把握している
26
+
27
+ ### 実行タスク
28
+
29
+ #### 手順1: 要件分析とファイル調査
30
+
31
+ **ファイル構成の調査**
32
+ 1. 利用可能なinstructionファイルを確認
33
+ 2. 各ファイルのfrontmatter属性(type、language、category、focus等)を分析
34
+ 3. 既存のプリセットレシピを参考として確認
35
+
36
+ **要件の明確化**
37
+ - 生成するドキュメントの目的と対象読者
38
+ - 必要なinstruction種別とフィルタリング条件
39
+ - 出力ファイル構成と配置場所
40
+ - FrontMatter継承とカスタム属性の必要性
41
+
42
+ #### 手順2: レシピ構造設計
43
+
44
+ **基本構造の決定**
45
+ ```yaml
46
+ config:
47
+ baseDir: [出力先ディレクトリ] # オプション - 出力ファイルの配置場所を指定
48
+ recipe:
49
+ - title: "[レシピアイテムのタイトル]"
50
+ out: "[ファイル名のみ]" # baseDirが設定されている場合はファイル名のみ推奨
51
+ # フィルタリング条件
52
+ # 出力設定
53
+ # FrontMatter設定
54
+ ```
55
+
56
+ **設定項目の選択**
57
+ - **config section**: 共通設定(baseDir等)
58
+ - **import**: 既存プリセットの活用
59
+ - **filtering**: 対象ファイルの絞り込み
60
+ - **output**: 出力先とモード設定
61
+ - **frontmatter**: メタデータの管理
62
+
63
+ ### ファイル命名規則とbaseDir活用のベストプラクティス
64
+
65
+ #### ファイル命名規則
66
+
67
+ **拡張子ルール**
68
+ - **instructionファイル**: `.instructions.md`
69
+ - **promptファイル**: `.prompt.md`
70
+ - **一般的なドキュメント**: `.md`
71
+
72
+ #### baseDir活用の正しい方法
73
+
74
+ **✅ 推奨: baseDirを出力先ディレクトリに設定**
75
+ ```yaml
76
+ config:
77
+ baseDir: .github/instructions # 出力先ディレクトリを指定
78
+
79
+ recipe:
80
+ - title: "TypeScript Guidelines"
81
+ out: "typescript-rules.instructions.md" # ファイル名のみ
82
+ type: coding-rules
83
+ language: typescript
84
+ ```
85
+
86
+ **❌ 避けるべき: baseDirをソースディレクトリに設定して複雑なパス指定**
87
+ ```yaml
88
+ config:
89
+ baseDir: artifact/instructions # ソースディレクトリ指定は混乱の原因
90
+
91
+ recipe:
92
+ - title: "TypeScript Guidelines"
93
+ out: "./.github/instructions/typescript-rules.md" # 複雑なパス指定
94
+ type: coding-rules
95
+ ```
96
+
97
+ #### 出力パス設定のベストプラクティス
98
+
99
+ **シンプルなパス管理**
100
+ - `baseDir`: 出力先ディレクトリを指定
101
+ - `out`: ファイル名のみ(拡張子含む)を指定
102
+ - パスの複雑な指定は避ける
103
+
104
+ **環境変数展開の活用**
105
+ ```yaml
106
+ config:
107
+ baseDir: ~/.config/vscode-prompts # チルダ展開や環境変数展開に対応
108
+
109
+ recipe:
110
+ - title: "Custom Rules"
111
+ out: "custom-rules.instructions.md"
112
+ ```
113
+
114
+ #### 手順3: フィルタリング条件の設定
115
+
116
+ **標準フィルター**
117
+ ```yaml
118
+ type: [instruction-type] # 単一値または配列
119
+ language: [target-language] # 単一値または配列
120
+ ```
121
+
122
+ **高度なフィルター**
123
+ ```yaml
124
+ filters:
125
+ category: [category-value] # カテゴリによる絞り込み
126
+ focus: [focus-area] # フォーカス領域による絞り込み
127
+ applyTo: [file-pattern] # ファイルパターンによる絞り込み
128
+ [custom-attr]: [value] # カスタム属性による絞り込み
129
+ ```
130
+
131
+ **配列値サポート**
132
+ - フィルター値は単一値または配列を指定可能
133
+ - 配列の場合はOR条件(いずれかにマッチ)
134
+ - 複数フィルター間はAND条件(すべてにマッチ)
135
+
136
+ #### 手順4: 出力設定とモード指定
137
+
138
+ **出力ファイル設定**
139
+ ```yaml
140
+ out: "filename.instructions.md" # ファイル名のみ(baseDirが設定されている場合)
141
+ mode: overwrite # overwrite(デフォルト)、append、prepend
142
+ ```
143
+
144
+ **パス指定のパターン**
145
+ ```yaml
146
+ # パターン1: baseDir + ファイル名のみ(推奨)
147
+ config:
148
+ baseDir: .github/instructions
149
+ recipe:
150
+ - out: "typescript.instructions.md"
151
+
152
+ # パターン2: 絶対パスまたは相対パス(baseDirを無視)
153
+ recipe:
154
+ - out: "./docs/typescript.md"
155
+
156
+ # パターン3: 環境変数展開
157
+ recipe:
158
+ - out: "$HOME/.vscode/prompts/typescript.instructions.md"
159
+ ```
160
+
161
+ **複数アイテムでの同一ファイル出力**
162
+ - 同じoutputファイルに複数アイテムが出力される場合、2番目以降は自動的にappendモード
163
+ - 明示的にmodeを指定することで上書き可能
164
+
165
+ #### 手順5: FrontMatter とメタデータ設計
166
+
167
+ **直接指定方式**
168
+ ```yaml
169
+ frontmatter:
170
+ description: "ドキュメントの説明"
171
+ applyTo: "**/*.ts"
172
+ customField: "カスタム値"
173
+ ```
174
+
175
+ **継承方式(@ syntax)**
176
+ ```yaml
177
+ frontmatter:
178
+ "@description": true # テンプレートから説明を継承
179
+ "@tools": true # ツール配列を継承
180
+ customField: "上書き値" # カスタムフィールド追加
181
+ ```
182
+
183
+ **継承のマージルール**
184
+ - 文字列: 改行で連結(重複除去)
185
+ - 配列: すべての要素を結合
186
+ - オブジェクト: 後の値で上書き
187
+
188
+ #### 手順6: インポートと拡張性
189
+
190
+ **プリセット活用**
191
+ ```yaml
192
+ recipe:
193
+ - import: :basic # パッケージプリセット
194
+ - import: :typescript # 言語固有プリセット
195
+ - title: "追加設定" # カスタムアイテム
196
+ # ...
197
+ ```
198
+
199
+ **インポートレベルbaseDir**
200
+ ```yaml
201
+ recipe:
202
+ - import:
203
+ recipe: :custom-preset
204
+ baseDir: ./custom/path # インポート固有のベースディレクトリ
205
+ ```
206
+
207
+ ### 出力フォーマット
208
+
209
+ #### 基本レシピテンプレート
210
+
211
+ ```yaml
212
+ # Recipe file for [PURPOSE]
213
+ # Generated by ai-rules prompt system
214
+
215
+ config:
216
+ baseDir: [OUTPUT_DIRECTORY] # 出力先ディレクトリを指定
217
+
218
+ recipe:
219
+ - title: "[DOCUMENT_TITLE]"
220
+ out: "[FILENAME].instructions.md" # instructionファイルの場合
221
+ type: [INSTRUCTION_TYPE]
222
+ language: [TARGET_LANGUAGE]
223
+ frontmatter:
224
+ description: |
225
+ [DOCUMENT_DESCRIPTION]
226
+ applyTo: "[FILE_PATTERN]"
227
+
228
+ # Additional recipe items as needed
229
+ ```
230
+
231
+ #### 複合型レシピテンプレート
232
+
233
+ ```yaml
234
+ # Advanced recipe with multiple filtering and inheritance
235
+ recipe:
236
+ # Import base configurations
237
+ - import: :basic
238
+
239
+ # Main content with advanced filtering
240
+ - title: "[PRIMARY_CONTENT]"
241
+ out: "[PRIMARY_OUTPUT]"
242
+ type: [TYPE]
243
+ filters:
244
+ category: [CATEGORY]
245
+ focus:
246
+ - [FOCUS1]
247
+ - [FOCUS2]
248
+ frontmatter:
249
+ "@description": true
250
+ "@tools": true
251
+ customization: "[CUSTOM_VALUE]"
252
+
253
+ # Appendix or additional sections
254
+ - title: "[SECONDARY_CONTENT]"
255
+ out: "[PRIMARY_OUTPUT]"
256
+ mode: append
257
+ type: [SECONDARY_TYPE]
258
+ frontmatter:
259
+ section: "appendix"
260
+ ```
261
+
262
+ ### 品質基準
263
+
264
+ #### 構造の健全性
265
+
266
+ - [ ] **YAML構文**: 正しいYAML形式で記述されている
267
+ - [ ] **必須フィールド**: title、outが全アイテムに指定されている
268
+ - [ ] **フィルター整合性**: 指定したフィルターに対応するファイルが存在する
269
+ - [ ] **パス有効性**: 出力先パスが適切で、ディレクトリが存在または作成可能
270
+
271
+ #### ファイル出力の品質チェック
272
+
273
+ - [ ] **baseDir設定**: 出力先ディレクトリが正しく設定されている
274
+ - [ ] **出力パス**: outフィールドがファイル名のみになっている(baseDirを活用する場合)
275
+ - [ ] **拡張子**: ファイルタイプに応じた適切な拡張子を使用
276
+ - instructionファイル: `.instructions.md`
277
+ - promptファイル: `.prompt.md`
278
+ - 一般ドキュメント: `.md`
279
+ - [ ] **パス複雑性**: 不要な相対パス指定を避けている
280
+
281
+ #### 機能性の検証
282
+
283
+ - [ ] **フィルタリング**: 期待するファイル群が正しく抽出される
284
+ - [ ] **出力制御**: 指定したモード(append/prepend/overwrite)で正しく動作
285
+ - [ ] **FrontMatter**: 継承と直接指定が適切に機能する
286
+ - [ ] **インポート**: プリセット活用が正しく展開される
287
+
288
+ #### 保守性の確保
289
+
290
+ - [ ] **コメント**: レシピの目的と使用方法が明記されている
291
+ - [ ] **命名規則**: ファイル名とタイトルが分かりやすい
292
+ - [ ] **バージョニング**: 変更履歴と更新理由が追跡可能
293
+ - [ ] **ドキュメント**: 関連するREADMEやドキュメントが整備されている
294
+
295
+ ### 使用例
296
+
297
+ #### シンプルなプロジェクト向け
298
+
299
+ ```yaml
300
+ # Basic project setup
301
+ config:
302
+ baseDir: .github/instructions # 出力先ディレクトリ
303
+
304
+ recipe:
305
+ - title: "Project Guidelines"
306
+ out: "project-guidelines.instructions.md" # ファイル名のみ
307
+ type: planning
308
+ frontmatter:
309
+ description: "Basic project development guidelines"
310
+ applyTo: "**/*"
311
+ ```
312
+
313
+ #### TypeScriptプロジェクト向け
314
+
315
+ ```yaml
316
+ # TypeScript project comprehensive rules
317
+ config:
318
+ baseDir: .github/instructions
319
+
320
+ recipe:
321
+ - import: :basic
322
+ - import: :typescript
323
+
324
+ - title: "Custom TypeScript Rules"
325
+ out: "custom-typescript.instructions.md" # ファイル名のみ
326
+ type: coding-rules
327
+ language: typescript
328
+ filters:
329
+ focus:
330
+ - testing
331
+ - performance
332
+ frontmatter:
333
+ "@description": true
334
+ customization: "high"
335
+ applyTo: "**/*.ts"
336
+ ```
337
+
338
+ #### マルチ出力設定
339
+
340
+ ```yaml
341
+ # Generate multiple specialized documents
342
+ config:
343
+ baseDir: ./docs
344
+
345
+ recipe:
346
+ - title: "Development Guidelines"
347
+ out: "development.instructions.md" # ファイル名のみ
348
+ type: coding-rules
349
+ filters:
350
+ category: development
351
+
352
+ - title: "Testing Guidelines"
353
+ out: "testing.instructions.md" # ファイル名のみ
354
+ type: test
355
+ filters:
356
+ category: best-practices
357
+
358
+ - title: "Deployment Guidelines"
359
+ out: "deployment.instructions.md" # ファイル名のみ
360
+ filters:
361
+ category: configuration
362
+ focus: deployment
363
+ ```
364
+
365
+ ### カスタマイズ指針
366
+
367
+ #### プロジェクト規模による調整
368
+
369
+ **小規模プロジェクト**
370
+ - 単一レシピファイルでの包括的な設定
371
+ - プリセット(:basic)の積極活用
372
+ - シンプルなフィルタリング条件
373
+
374
+ **中規模プロジェクト**
375
+ - 機能別・技術別の複数レシピファイル
376
+ - カスタムfrontmatterによる詳細管理
377
+ - 高度なフィルタリングとインポート活用
378
+
379
+ **大規模プロジェクト**
380
+ - ドメイン別の階層化されたレシピ構成
381
+ - 継承とテンプレート機能の最大活用
382
+ - 自動化ワークフローとの統合
383
+
384
+ #### 技術スタック別設定
385
+
386
+ **フロントエンド中心**
387
+ ```yaml
388
+ config:
389
+ baseDir: .github/instructions
390
+
391
+ recipe:
392
+ - import: :typescript
393
+ - title: "React Guidelines"
394
+ out: "react-guidelines.instructions.md"
395
+ type: coding-rules
396
+ language: [typescript, javascript]
397
+ filters:
398
+ category: frontend
399
+ focus: react
400
+ ```
401
+
402
+ **バックエンド中心**
403
+ ```yaml
404
+ config:
405
+ baseDir: .github/instructions
406
+
407
+ recipe:
408
+ - import: :typescript
409
+ - title: "API Development"
410
+ out: "api-development.instructions.md"
411
+ type: coding-rules
412
+ filters:
413
+ category: backend
414
+ focus: [api, database, security]
415
+ ```
416
+
417
+ **フルスタック**
418
+ ```yaml
419
+ config:
420
+ baseDir: .github/instructions
421
+
422
+ recipe:
423
+ - import: :basic
424
+ - import: :typescript
425
+ - title: "Full Stack Guidelines"
426
+ out: "fullstack-guidelines.instructions.md"
427
+ type: coding-rules
428
+ filters:
429
+ category: [frontend, backend]
430
+ ```
431
+
432
+ ### トラブルシューティング
433
+
434
+ #### baseDir設定に関する一般的な問題
435
+
436
+ **問題1: 意図しない場所にファイルが出力される**
437
+ ```yaml
438
+ # ❌ 問題のある例
439
+ config:
440
+ baseDir: instructions # ソースディレクトリを指定
441
+
442
+ recipe:
443
+ - out: "./.github/instructions/file.md" # 複雑なパス指定
444
+ # 結果: instructions/.github/instructions/file.md に出力
445
+ ```
446
+
447
+ ```yaml
448
+ # ✅ 修正例
449
+ config:
450
+ baseDir: .github/instructions # 出力先ディレクトリを指定
451
+
452
+ recipe:
453
+ - out: "file.instructions.md" # ファイル名のみ
454
+ # 結果: .github/instructions/file.instructions.md に出力
455
+ ```
456
+
457
+ **問題2: ファイル拡張子の規則が統一されていない**
458
+ ```yaml
459
+ # ❌ 問題のある例
460
+ recipe:
461
+ - out: "typescript-rules.md" # instructionファイルなのに .md
462
+
463
+ # ✅ 修正例
464
+ recipe:
465
+ - out: "typescript-rules.instructions.md" # 正しい拡張子
466
+ ```
467
+
468
+ #### 一般的な問題と解決法
469
+
470
+ **フィルタリング結果が空**
471
+ - frontmatter属性の確認
472
+ - 大文字小文字の一致確認
473
+ - 配列形式での指定確認
474
+
475
+ **FrontMatter継承が機能しない**
476
+ - @ syntax の正確な記述確認
477
+ - 継承元ファイルの存在確認
478
+ - フィルタリング条件の見直し
479
+
480
+ **出力ファイルが期待と異なる**
481
+ - modeの明示的指定
482
+ - 出力パスの絶対/相対パス確認
483
+ - 環境変数展開の動作確認
484
+
485
+ **プリセットインポートエラー**
486
+ - プリセット名(:prefix)の確認
487
+ - プリセットファイルの存在確認
488
+ - 循環参照の回避
489
+
490
+ ### 関連リソース
491
+
492
+ #### 参考ドキュメント
493
+
494
+ - [CLI Options Documentation](../../../docs/cli_options.md)
495
+ - [FrontMatter Inheritance Guide](../../../docs/frontmatter-inheritance.md)
496
+ - [Existing Presets](../../../presets/)
497
+ - [Example Recipes](../../../example/)
498
+
499
+ #### 活用ツール
500
+
501
+ - `npx ai-rules stats --src artifact` - 利用可能属性の確認
502
+ - `npx ai-rules presets` - プリセット一覧の表示
503
+ - `npx ai-rules extract --recipe [file]` - レシピ実行
504
+
505
+ #### コミュニティリソース
506
+
507
+ - プロジェクトのIssue追跡システム
508
+ - 既存レシピファイルの実装例
509
+ - プロンプト改善提案とベストプラクティス共有
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAygBA;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBpG"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAqjBA;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyBpG"}