takt/builtins/ja/KNOWLEDGE_STYLE_GUIDE.md
2026-02-17 08:45:06 +09:00

307 lines
9.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ナレッジ スタイルガイド
このガイドは `knowledge/` のファイルを作成・編集する際のルールを定義する。
## テンプレート
`templates/knowledge/` にテンプレートファイルを用意している。新規作成時はコピーして使う。
| テンプレート | 用途 | 使用例 |
|------------|------|--------|
| `knowledge.md` | ドメイン知識 | frontend, backend, security |
---
## ナレッジとは
エージェントがレビュー・実装・計画時に参照するドメイン知識。ポリシー(行動規範)やインストラクション(実行手順)とは異なり、「何を知っているべきか」を定義する。
| 項目 | 内容 |
|------|------|
| 目的 | エージェントにドメイン固有の専門知識を与える |
| 配置 | user messageinstruction 内) |
| 対象 | 特定ドメインに関わるエージェント全般 |
| 判断基準 | 「これはルールか、知識か?」→ 知識ならナレッジ |
### 実際の配置先
ナレッジは instruction 内に展開され、ポリシーと同じ Phase 1 メッセージに含まれる。
```
User Message (Phase 1):
[実行コンテキスト]
[Piece Context]
[User Request]
[Previous Response]
[Instructions]
└── [ポリシー] ← 共有行動規範
└── [ナレッジ] ← ★ ドメイン知識がここに展開される
```
ポリシーが「どう振る舞うべきか」を定義するのに対し、ナレッジは「何を知っているべきか」を提供する。同じ配置先だが役割が異なる。
### ポリシーとの分離
```
この内容は…
├── 「〜すべき」「〜してはいけない」→ ポリシー(行動規範)
├── 「〜はこう動く」「〜の構造はこう」→ ナレッジ(ドメイン知識)
└── 「〜を実行しろ」→ インストラクション(手順)
```
ナレッジにはドメイン固有の評価基準(`| 基準 | 判定 |` テーブル)を含めてよい。ポリシーの「行動規範」とナレッジの「評価基準」の違いは次の通り。
| | ポリシー | ナレッジ |
|--|---------|---------|
| 性質 | 横断的ルール | ドメイン固有の知識 |
| 例 | 「1テスト1概念」「DRY」 | 「God Component は REJECT」「Props Drilling は REJECT」 |
| 適用範囲 | 全エージェント共通 | 特定ドメインfrontend 等)のエージェント |
---
## 抽象度の原則
ナレッジは特定のツール・言語・フレームワークに依存せず、パターンや原則として記述する。コード例は具体的なツール/言語で示してよい。
```markdown
# ✅ 良い例: 原則 → 例示
テスト環境がグローバル状態DOM等に依存する場合、プロセスレベルの分離が必要。
| 環境 | 推奨 |
|------|------|
| DOM依存あり | プロセス分離 |
| 純粋ロジック | スレッド分離で十分 |
vitest の場合:
pool: 'forks'DOM依存/ pool: 'threads'(純粋ロジック)
# ❌ 悪い例: ツール固有の設定羅列
vitest.config.ts に以下を設定する:
pool: 'forks'
singleFork: true
teardownTimeout: 5000
forceExit: true
```
---
## セクション詳細
### トピック概要(必須)
-`##` トピックの冒頭1-2文で概要を記述
- 体言止めまたは「〜する」で終わる
```markdown
# 良い例
## コンポーネント設計
1ファイルにベタ書きしない。必ずコンポーネント分割する。
# 悪い例
## コンポーネント設計
コンポーネントについて説明します。 ← 丁寧語 + 情報がない
```
### 評価基準テーブル(推奨)
- トピックごとに「基準 → 判定」テーブルを置く
- 判定は OK / 警告 / REJECT / 分離を検討 等
- そのドメイン固有の品質基準を具体的に
```markdown
| 基準 | 判定 |
|------|------|
| 1コンポーネント200行超 | 分割を検討 |
| 1コンポーネント300行超 | REJECT |
| 複数の責務を持つコンポーネント | REJECT |
```
### コード例(推奨)
- 「良い例/悪い例」のペアで示す
- コメントで `// NG` `// OK` を付ける
- 原則を先に述べ、コード例は例示として配置する
- 言語は対象プロジェクトに合わせるTypeScript が主)
```markdown
# 良い例: 原則 → コード例
子コンポーネントは自身で状態を変更しない。イベントを親にバブリングし、親が状態を操作する。
// NG - 子が自分で状態を変更
const ChildBad = ({ initialValue }) => {
const [value, setValue] = useState(initialValue)
...
}
// OK - 親が状態を管理、子はコールバックで通知
const ChildGood = ({ value, onChange }) => {
return <input value={value} onChange={e => onChange(e.target.value)} />
}
```
### 選択基準テーブル(該当する場合)
- 複数の選択肢がある場合、判断基準をテーブルで示す
- 特定の1つを正解としない。条件に応じた使い分けを示す
```markdown
| 状態の性質 | 推奨配置 |
|-----------|---------|
| UIの一時的な状態 | ローカルuseState |
| 複数コンポーネントで共有 | Context or 状態管理ライブラリ |
| サーバーデータのキャッシュ | データフェッチライブラリ |
```
---
## フォーマット
```markdown
# {ドメイン名}知識
## {トピック1}
{トピックの概要。1-2文}
| 基準 | 判定 |
|------|------|
| ... | ... |
### {サブトピック}
{詳細な説明}
{コード例}
## {トピック2}
...
```
---
## DO / DON'T
| DO | DON'T |
|----|-------|
| パターンや原則を抽象的に記述する | 特定ツールの設定値をそのまま列挙する |
| コード例は具体的なツール/言語で示す | 本文を特定ツール前提で書く |
| ドメイン固有の評価基準をテーブルで示す | 横断的なルールDRY等を書く→ ポリシー) |
| 選択肢がある場合は判断基準をテーブルで示す | 1つのツールだけを正解として提示する |
| 「なぜそうすべきか」の理由を書く | 設定のコピペだけで終わる |
---
## ナレッジに書いてはいけないもの
1. **横断的な行動規範**: DRY、Fail Fast 等の全エージェント共通ルール → ポリシー
2. **実行手順**: どのファイルを読め、何を実行しろ等 → インストラクション
3. **ピース固有の概念**: ムーブメント名、レポートファイル名
4. **ツール固有のパス**: `.takt/runs/` 等の具体的なディレクトリパス
### 例外: ドメイン固有の評価基準
ポリシーの REJECT 判定と表面的に似ていても、特定ドメインの品質基準として記載する場合は許容する。
```markdown
# 許容 — フロントエンド固有の品質基準
| 基準 | 判定 |
|------|------|
| God Component | REJECT |
| Props Drilling3階層以上 | 状態管理の導入を検討 |
# 非許容 — 横断的な行動規範(ポリシーの責務)
| 原則 | 基準 |
|------|------|
| 1テスト1概念 | 複数の関心事を1テストに混ぜない |
```
ドメイン固有の評価基準「God Component は REJECT」はナレッジ。横断的な行動規範「1テスト1概念」はポリシー。
---
## カテゴリ別パターン
### 技術スタック系frontend, backend
- レイヤー構造・パッケージ設計から始める
- 各トピックに評価基準テーブル + コード例
- 大規模になりやすい500-800行
```markdown
# フロントエンド知識
## 層構造
## コンポーネント設計
## 状態管理
## データ取得
## テストインフラ
## アンチパターン検出
```
### 設計パターン系cqrs-es, architecture
- パターンの構造と適用条件を中心に
- 「いつ使うか / いつ使わないか」の判断基準を重視
- 中規模200-500行
### 横断関心事系security
- リスクレベル(重大 / 高 / 中 / 低)の評価基準
- 攻撃パターン → 対策 の構造
- チェックリスト形式が多い
---
## 共通ルール
### 見出しの深さ
最大 `###` まで。`####` 以下は使わない。深くなる場合は構造を見直す。
### テーブル
判定基準テーブルは「基準 → 判定」の形式で統一する。
```markdown
| 基準 | 判定 |
|------|------|
| 条件A | REJECT |
| 条件B | 警告 |
| 条件C | OK |
```
### 文体
- 体言止めまたは「〜する」の常体
- 丁寧語(です・ます)は使わない
- 簡潔に。冗長な説明は避ける
### ファイル命名
- `{domain}.md`(例: `frontend.md`, `backend.md`, `security.md`
- ハイフン区切り(スネークケース不可)
- 英語小文字のみ
- フラット構造(ディレクトリでグルーピングしない)
### ファイルサイズ
| 種別 | 目安 | 上限 |
|------|------|------|
| 横断関心事security 等) | 100-200行 | 300行 |
| 設計パターンcqrs-es 等) | 200-500行 | 600行 |
| 技術スタックfrontend 等) | 500-700行 | 800行 |
---
## チェックリスト
- [ ] 原則やパターンとして抽象的に記述されているか(ツール固有の設定羅列になっていないか)
- [ ] コード例は具体的なツール/言語で示しているか
- [ ] 各トピックに評価基準テーブルがあるか
- [ ] 横断的な行動規範が混入していないか(→ ポリシー)
- [ ] インストラクション(実行手順)が混入していないか
- [ ] ドメイン固有の評価基準とポリシーの境界が明確か
- [ ] `####` 以下のネストがないか
- [ ] カテゴリに応じたファイルサイズ目安に収まっているか