@unlaxer/dde-toolkit 0.1.2 → 0.1.3

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/flows/quick.yaml CHANGED
@@ -5,39 +5,39 @@ trigger_keywords: ["DDE して", "DDE", "ドキュメントレビュー", "用
5
5
 
6
6
  defaults:
7
7
  exclude_dirs: ["dde", "dge", "node_modules", ".git", ".claude"]
8
- article_length: medium # short / medium / long / custom
8
+ article_intent: educational # educational / reference / deep-dive
9
9
 
10
10
  workflow:
11
11
  steps:
12
12
  - id: select_docs
13
13
  display_name: "対象ドキュメント群を選択"
14
14
  mode: confirm
15
- note: "md 一覧(多い場合はフォルダ一覧)を出してユーザーが除外指定"
16
15
  - id: reader_context
17
16
  display_name: "読者コンテキスト設定"
18
17
  mode: confirm
19
18
  note: "誰が読むか(記事のトーンに使用。抽出フィルターには使わない)"
20
- - id: article_length
21
- display_name: "記事の分量設定"
19
+ - id: lang
20
+ display_name: "言語設定"
22
21
  mode: confirm
23
- note: "short(〜200字)/ medium(〜500字)/ long(〜1000字)/ 文字数直指定"
22
+ note: "en / ja / both。both の場合は <slug>.md + <slug>.ja.md を生成"
23
+ - id: article_intent
24
+ display_name: "記事のインテント設定"
25
+ mode: confirm
26
+ note: "educational / reference / deep-dive、または自由記述"
24
27
  - id: extract
25
28
  display_name: "用語抽出(LLM)— 全レベル対象"
26
29
  actor: llm
27
- note: "レベルで絞らず、誰かが分からない可能性がある用語を全て抽出"
28
30
  - id: confirm_terms
29
31
  display_name: "用語一覧を確認"
30
32
  mode: confirm
31
33
  - id: articleize
32
- display_name: "記事生成(LLM)— 3セクション構成"
34
+ display_name: "記事生成(LLM)— educational narrative"
33
35
  actor: llm
34
- note: "1用語1ファイル。expert / beginner / grandma の3セクションを1ファイルに"
35
36
  - id: save
36
37
  display_name: "単語帳保存"
37
38
  - id: link
38
39
  display_name: "dde-link 実行(CLI)"
39
40
  actor: cli
40
- note: "対象ドキュメント群と同じファイルセットに適用"
41
41
 
42
42
  must_rules:
43
43
  - id: save
@@ -56,22 +56,17 @@ extract:
56
56
  articleize:
57
57
  actor: llm
58
58
  per: term
59
- format: single_file_multi_level
59
+ format: educational_narrative
60
60
  output_dir: docs/glossary/
61
- filename_rule: "<slug>.md(英語), <slug>.ja.md(日本語)"
62
- sections:
63
- - id: summary
64
- display_name: "1行サマリー(冒頭 blockquote)"
65
- - id: expert
66
- display_name: "詳細(開発者向け)"
67
- - id: beginner
68
- display_name: "かんたん説明(初学者向け)"
69
- - id: grandma
70
- display_name: "ひとことで(技術ゼロ向け)"
71
- length:
72
- short: "〜200字。サマリー + 各セクション1-2文"
73
- medium: "〜500字。サマリー + 各セクション3-5文。デフォルト"
74
- long: "〜1000字。サマリー + 各セクション充実 + コード例 + 関連用語"
61
+ filename_rule: "en → <slug>.md / ja → <slug>.ja.md / both → 両方生成"
62
+ multilang:
63
+ en: "<slug>.md"
64
+ ja: "<slug>.ja.md"
65
+ both: "両ファイル生成。dictionary.yaml に en/ja キーで用語マッピングを追加"
66
+ intents:
67
+ educational: "読んだ人が背景・動機・仕組みごと理解できる記事。例え話・図・なぜ?を含む。分量は目的に従って自然に決める"
68
+ reference: "定義・使い方・例を簡潔に。調べたい人向けのクイックリファレンス"
69
+ deep-dive: "実装詳細・コード例・エッジケース・トレードオフまで網羅"
75
70
 
76
71
  output_dir: dde/sessions/
77
72
 
package/method.md CHANGED
@@ -5,20 +5,21 @@
5
5
  - **必要なもの**: LLM(Claude, GPT-4, Gemini 等)へのアクセス
6
6
  - **推奨**: Claude Code(skills/ で自動発動)
7
7
  - **入力**: レビュー対象のドキュメント群
8
- - **出力**: 用語集記事(3セクション構成)+ 単語帳 + クリッカブルリンク
8
+ - **出力**: educational narrative 形式の用語集記事 + クリッカブルリンク
9
9
 
10
10
  ---
11
11
 
12
12
  ## 最低限これだけ読め(3分版)
13
13
 
14
- **DDE とは**: ドキュメントを読む人全員に対して用語を抜き出して、誰でも分かる記事を作り、リンクにする。
14
+ **DDE とは**: ドキュメントを読む人全員に対して用語を抜き出して、背景ごと理解できる記事にして、リンクにする。
15
15
 
16
16
  **フロー**:
17
- 1. **Select** — 対象ドキュメント群を選ぶ(除外フォルダを確認)
17
+ 1. **Select** — 対象ドキュメント群を選ぶ
18
18
  2. **Context** — 誰が読むかを把握する(記事トーンの調整に使う)
19
- 3. **Extract** — 全用語を一括抽出(レベルで絞らない)
20
- 4. **Articleize** — 1用語1ファイル・3セクション記事を生成
21
- 5. **Link** — dde-link でリンクを埋め込む
19
+ 3. **Intent** — 記事の目的を決める(「教育用」「リファレンス」など)
20
+ 4. **Extract** — 全用語を一括抽出(レベルで絞らない)
21
+ 5. **Articleize** — educational narrative 形式で記事を生成
22
+ 6. **Link** — dde-link でリンクを埋め込む
22
23
 
23
24
  ---
24
25
 
@@ -26,37 +27,49 @@
26
27
 
27
28
  同じドキュメントをエンジニアも業務担当者も読む。
28
29
  「このレベルの人には不要」を抽出段階で判断するより、
29
- **記事の中に全レベルのセクションを書いてしまう**方がシンプルで漏れがない。
30
+ **誰が読んでも背景ごと理解できる記事を1つ書く**方がシンプルで漏れがない。
30
31
 
31
- ```
32
- 抽出: レベルで絞らない(誰かが分からなければ抽出する)
33
- 記事: 1ファイルに3セクション(誰が読んでも分かる)
34
- リンク: 常に同じファイルを指す(レベル分岐なし)
35
- ```
32
+ 文字数より**インテント**で指定する:
33
+ - `educational` — 読んだ人が背景・動機・仕組みごと理解できる。分量は自然に決まる
34
+ - `reference` — 定義と使い方を簡潔に
35
+ - `deep-dive` — 実装・エッジケースまで網羅
36
+ - 自由記述 — 「新入社員が業務背景ごと理解できるように」など
36
37
 
37
38
  ---
38
39
 
39
- ## 記事フォーマット(1用語1ファイル・3セクション)
40
+ ## 記事フォーマット(educational)
40
41
 
41
42
  ```markdown
42
- # JWT
43
+ # <用語>
43
44
 
44
- > 認証に使うトークン形式(1行サマリー)
45
+ ## 一言で言うと?
46
+ <専門知識なしで分かる1-2文>
45
47
 
46
- ## 詳細(開発者向け)
47
- JSON Web Token(RFC 7519)は...
48
+ ---
48
49
 
49
- ## かんたん説明(初学者向け)
50
- JWTはログイン状態を安全に...
50
+ ## <身近な例え>
51
+ <日常のアナロジー。対応表「○○ = △△」を使う>
51
52
 
52
- ## ひとことで(技術ゼロ向け)
53
- 銀行のキャッシュカードみたいなもの。
54
- ```
53
+ ---
54
+
55
+ ## なぜ必要なの?
56
+ <「自前でやったら?」との対比。ASCIIダイアグラム・比較表>
57
+
58
+ ---
55
59
 
56
- 読者コンテキストは**セクションの厚み**を調整するためだけに使う:
57
- - エンジニアが主な読者 → 「詳細」を充実させる
58
- - 業務担当者が主な読者 → 「かんたん説明」「ひとことで」を充実させる
59
- - 混在 → バランスよく
60
+ ## <このプロジェクト文脈での説明>
61
+ <抽象論ではなく、このプロジェクト固有の実装・設計を参照>
62
+
63
+ ---
64
+
65
+ ## 具体的な例
66
+ <ステップバイステップのフロー>
67
+
68
+ ---
69
+
70
+ ## さらに学ぶために
71
+ - [関連用語](path.md) — この文脈での関連理由
72
+ ```
60
73
 
61
74
  ---
62
75
 
@@ -65,8 +78,7 @@ JWTはログイン状態を安全に...
65
78
  ```
66
79
  1. docs/glossary/ の .md ファイル名から用語を自動推定
67
80
  2. dictionary.yaml があれば上書き(日本語用語・別名対応)
68
- 3. 最長一致、段落ごとに 1 回 → [用語](docs/glossary/xxx.md) に置換
69
- (リンク先は常に単一ファイル。レベル指定なし)
81
+ 3. 最長一致、段落ごとに 1 回 → [用語](相対パス) に置換
70
82
  スキップ: コードブロック / インラインコード / 見出し / 既存リンク
71
83
  ```
72
84
 
@@ -76,4 +88,4 @@ JWTはログイン状態を安全に...
76
88
 
77
89
  - 241 の用語集記事(120 EN + 121 JA)
78
90
  - README に 334 のクリッカブルリンク
79
- - 3 段階の読者レベル対応
91
+ - educational narrative 形式(背景・動機・具体例・相互リンク)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unlaxer/dde-toolkit",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Document Deficit Extraction — find what's not understood in your docs",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -16,29 +16,29 @@
16
16
  テーマなしで「DDE」「DDE って何」と呼ばれたとき:
17
17
 
18
18
  ```
19
- DDE toolkit v0.1.2 — Document Deficit Extraction
19
+ DDE toolkit v0.1.3 — Document Deficit Extraction
20
20
 
21
- 読者コンテキストを把握して → 用語を全抽出して → 3レベル記事を生成 → クリッカブルなドキュメント
21
+ 用語を全部抜き出して、誰でも理解できる記事にして、リンクにする。
22
22
 
23
23
  📖 フロー:
24
- 1. ドキュメント群を選択(除外フォルダを確認)
25
- 2. 読者コンテキストを設定(記事のトーンに使用)
26
- 3. 記事の分量を設定(short / medium / long)
27
- 4. 全用語を一括抽出(レベルで絞らない)→ 一覧確認
28
- 5. 1用語1ファイル・3セクション記事を生成 → docs/glossary/
29
- 6. dde-link が対象ドキュメント群にリンクを埋め込む
30
-
31
- 📄 記事フォーマット(1ファイル・3セクション):
32
- # JWT
33
- > 認証に使うトークン形式
34
- ## 詳細(開発者向け)...
35
- ## かんたん説明(初学者向け)...
36
- ## ひとことで(技術ゼロ向け)...
24
+ 1. ドキュメント群を選択
25
+ 2. 読者コンテキストを把握
26
+ 3. 記事のインテントを設定(「教育用」「リファレンス」など)
27
+ 4. 全用語を一括抽出 一覧確認
28
+ 5. educational narrative 形式で記事を生成 → docs/glossary/
29
+ 6. dde-link でリンクを埋め込む
30
+
31
+ 📄 記事フォーマット(educational narrative):
32
+ # <用語>
33
+ ## 一言で言うと?
34
+ ## <身近な例え>
35
+ ## なぜ必要なの?(動機・背景)
36
+ ## <このプロジェクト文脈での説明>
37
+ ## 具体的な例
38
+ ## さらに学ぶために(相互リンク)
37
39
 
38
40
  🔗 dde-link(LLM 不要):
39
- npx dde-link README.md # 自動リンク実行
40
- npx dde-link README.md --check # リンク漏れチェック(CI 用)
41
- npx dde-link README.md --dry-run # プレビュー
41
+ npx dde-link README.md
42
42
 
43
43
  詳しくは: dde/method.md
44
44
  ```
@@ -49,62 +49,80 @@ DDE toolkit v0.1.2 — Document Deficit Extraction
49
49
 
50
50
  ### Step 0: flow 読み込み
51
51
  `dde/flows/` の YAML、なければ `kit/flows/` の YAML を読む。
52
- `defaults.exclude_dirs` を確認(デフォルト: `dde/`, `dge/`, `node_modules/`, `.git/`, `.claude/`)。
53
52
 
54
53
  ### Step 1: 対象ドキュメント群の選択(MUST: ユーザーに確認)
55
54
 
56
55
  プロジェクト内の `.md` ファイルを列挙する。
57
56
  - **50 ファイル未満**: ファイル一覧を表示
58
57
  - **50 ファイル以上**: フォルダ一覧を表示
58
+ - デフォルト除外: `dde/`, `dge/`, `node_modules/`, `.git/`, `.claude/`
59
59
 
60
60
  ```
61
61
  対象ドキュメントを選択してください。
62
- (dde/, dge/, node_modules/ は除外済み)
63
62
 
64
63
  ✅ docs/ (12 ファイル)
65
64
  ✅ README.md
66
65
  ✅ CONTRIBUTING.md
67
66
 
68
67
  除外したいファイル・フォルダがあれば指定してください。
69
- なければそのまま進みます。
70
68
  ```
71
69
 
72
70
  確定したファイルセットが「抽出元 = リンク適用先」になる。
73
71
 
74
72
  ### Step 2: 読者コンテキストの設定(MUST: ユーザーに確認)
75
73
 
76
- **ここで聞くのは「誰が読むか」であり、抽出フィルターには使わない。**
77
- 記事の各セクションのトーン・深さを調整するためだけに使う。
74
+ **抽出フィルターには使わない。記事のトーン・文脈に使う。**
78
75
 
79
76
  ```
80
- このドキュメントを読む人を教えてください(複数可):
77
+ このドキュメントを読む人は?(複数可)
81
78
 
82
79
  [ ] プログラマー・エンジニア
83
80
  [ ] 業務ドメインの担当者(非エンジニア)
84
81
  [ ] 初学者・新人
85
82
  [ ] その他: ___
83
+ ```
84
+
85
+ ### Step 3: 言語設定(MUST: ユーザーに確認)
86
+
87
+ 対象ドキュメントの言語を検出し、記事の生成言語を確認する。
86
88
 
87
- → 各読者が「詳細」「かんたん説明」「ひとことで」のどのセクションを
88
- 主に使うかを想定して記事の厚みを調整します。
89
89
  ```
90
+ ドキュメントの言語を検出しました: 日本語
90
91
 
91
- ### Step 3: 記事の分量設定
92
+ 記事を生成する言語を選んでください:
93
+ 1. ja のみ — <slug>.ja.md を生成
94
+ 2. en のみ — <slug>.md を生成
95
+ 3. both — <slug>.md + <slug>.ja.md の両方を生成
96
+ (dictionary.yaml に en/ja の用語マッピングを追加)
92
97
 
98
+ デフォルト: ドキュメントが日本語 → ja、英語 → en
93
99
  ```
94
- 記事の分量を選んでください:
95
- 1. short — 〜200字(各セクション1-2文)
96
- 2. medium — 〜500字(各セクション3-5文)← デフォルト
97
- 3. long — 〜1000字(各セクション充実 + コード例 + 関連用語)
98
- 4. カスタム — 文字数を直接指定
99
100
 
100
- このまま medium で進めますか?
101
+ **both の場合:**
102
+ - 英語記事を先に生成し、日本語記事は [English version](<slug>.md) リンクを冒頭に追加
103
+ - `dictionary.yaml` に `ja:` キーで日本語用語を登録
104
+ - dde-link は `.ja.md` ファイルに対して日本語用語でマッチング
105
+
106
+ ### Step 5: 記事のインテント設定(MUST: ユーザーに確認)
107
+
108
+ **文字数ではなく「読んだ人にどうなってほしいか」で指定する。**
109
+
110
+ ```
111
+ 記事のインテントを選んでください:
112
+ 1. educational — 背景・動機・仕組みごと理解できる記事
113
+ 例え話・図・なぜ?を含む。分量は目的に従って自然に決まる
114
+ 2. reference — 定義と使い方を簡潔に。調べたい人向け
115
+ 3. deep-dive — 実装詳細・コード例・エッジケースまで網羅
116
+ 4. 自由記述 — 例: 「新入社員が読んで業務背景ごと理解できるように」
117
+
118
+ デフォルト: educational
101
119
  ```
102
120
 
103
- ### Step 4: 用語抽出(LLM)
121
+ ### Step 6: 用語抽出(LLM)
104
122
 
105
123
  **レベルで絞らず、誰かが分からない可能性がある用語を全て抽出する。**
106
124
 
107
- 理由: 同じドキュメントをエンジニアも業務担当者も読む。「このレベルには不要」の判断を抽出段階でするより、記事に全レベルのセクションを書いてしまう方がシンプル。
125
+ 対象ドキュメント群を読んで用語を一括抽出する。
108
126
 
109
127
  **抽出ルール:**
110
128
  - `docs/glossary/` に既存記事があるものは除外
@@ -127,64 +145,99 @@ N 件抽出しました。記事を生成しますか?
127
145
  除外したい用語があれば番号で指定してください(例: 3,5)。
128
146
  ```
129
147
 
130
- ### Step 5: 記事生成(LLM)— 1用語1ファイル・3セクション
148
+ ### Step 7: 記事生成(LLM)— educational narrative
131
149
 
132
150
  確認後、用語ごとに `docs/glossary/<slug>.md` を生成して保存する。
133
151
 
134
- **スラッグ規則:** 小文字、スペース → ハイフン(`json-web-token.md`)
152
+ **記事フォーマット(educational intent の場合):**
153
+
154
+ ```markdown
155
+ # <用語>
156
+
157
+ ## 一言で言うと?
158
+ <1-2文でコアを定義。専門知識がない人でも分かる言葉で。>
159
+
160
+ ---
161
+
162
+ ## <読者が直感的に分かる例え・タイトル>
163
+ <日常の具体的なアナロジー。箇条書きや対応表で「○○ = △△」を示す。>
164
+
165
+ ---
166
+
167
+ ## なぜ<この用語 / このアプローチ>が必要なの?
168
+ <「自前でやったらどうなるか」との比較で動機を説明。
169
+ ASCIIダイアグラムや対比表を使って直感的に。>
170
+
171
+ ---
172
+
173
+ ## <このプロジェクト / この文脈での説明>
174
+ <抽象的な説明ではなく、このドキュメントが属するプロジェクトの文脈で具体的に説明する。
175
+ このプロジェクト固有の実装・設計を参照する。>
135
176
 
136
- **テンプレート:**
177
+ ---
178
+
179
+ ## 具体的な例
180
+ <ステップバイステップのフロー。コードブロックや番号付きリストで。
181
+ 読者が「なるほど、こう動くのか」と分かるレベルまで具体的に。>
182
+
183
+ ---
184
+
185
+ ## さらに学ぶために
186
+ - [関連用語A](<相対パス>) — この文脈でなぜ関連するか1行で
187
+ - [関連用語B](<相対パス>) — この文脈でなぜ関連するか1行で
188
+ ```
189
+
190
+ **reference intent の場合:**
137
191
  ```markdown
138
- # <Term>
192
+ # <用語>
139
193
 
140
- > <1行サマリー — 誰が読んでも分かる核心を1文で>
194
+ <1文定義>
141
195
 
142
- ## 詳細(開発者向け)
143
- <技術的な定義・仕様・実装の詳細。コード例があれば添付。>
196
+ ## 使い方
197
+ <コード例または手順>
144
198
 
145
- ## かんたん説明(初学者向け)
146
- <例えを交えた3-5文。前提知識を仮定しない。>
199
+ ## 関連用語
200
+ - [<term>](<path>)
201
+ ```
147
202
 
148
- ## ひとことで(技術ゼロ向け)
149
- <日常の身近な例え1-2文。>
203
+ **deep-dive intent の場合:**
204
+ ```markdown
205
+ # <用語>
150
206
 
207
+ ## 定義
208
+ ## 内部動作
209
+ ## コード例
210
+ ## エッジケース・注意点
211
+ ## トレードオフ
151
212
  ## 関連用語
152
- - [<関連用語>](<相対パス>)
153
213
  ```
154
214
 
155
- **読者コンテキストの使い方:**
156
- - エンジニアが主な読者 → 「詳細」セクションを厚く
157
- - 業務担当者が主な読者 → 「かんたん説明」「ひとことで」を厚く
158
- - 混在 → バランスよく(デフォルト)
215
+ **インテントが自由記述の場合:**
216
+ ユーザーの言葉(例: 「新入社員が業務背景ごと理解できるように」)をそのまま
217
+ 記事の生成方針として使う。
159
218
 
160
219
  `dde-tool save docs/glossary/<slug>.md` で保存。
161
220
 
162
- ### Step 6: 単語帳(dictionary.yaml)更新
221
+ ### Step 8: 単語帳(dictionary.yaml)更新
163
222
 
164
- 日本語ドキュメントが対象の場合、`docs/glossary/dictionary.yaml` を生成・更新する。
223
+ 日本語記事が必要な場合、`docs/glossary/dictionary.yaml` を生成・更新する。
165
224
 
166
225
  ```yaml
167
- # docs/glossary/dictionary.yaml
168
226
  jwt.md:
169
227
  en: ["JWT", "JSON Web Token"]
170
228
  ja: ["JWT"]
171
-
172
- oauth.md:
173
- en: ["OAuth", "OAuth 2.0"]
174
- ja: ["OAuth"]
175
229
  ```
176
230
 
177
- ### Step 7: dde-link 実行(CLI)
231
+ ### Step 9: dde-link 実行(CLI)
178
232
 
179
- **適用先は Step 1 で選択したドキュメント群と同じ。**
180
- リンクは常に `<slug>.md`(レベル指定なし)を指す。
233
+ Step 1 で選択したドキュメント群と同じファイルセットに適用。
181
234
 
182
235
  ```bash
183
236
  npx dde-link README.md --dry-run # 確認
184
237
  npx dde-link README.md # 実行
185
238
  ```
186
239
 
187
- ### Step 8: 次アクション提示(MUST: 省略しない)
240
+ ### Step 10: 次アクション提示(MUST: 省略しない)
188
241
 
189
242
  ```
190
243
  1. 別のドキュメント群も処理する
@@ -196,7 +249,7 @@ npx dde-link README.md # 実行
196
249
  ---
197
250
 
198
251
  ## 注意
199
- - 抽出は「レベルで絞らない」— 記事の中で全レベルをカバーする
200
- - `docs/glossary/` に既存記事がある場合は上書きしない(差分のみ提案)
252
+ - 記事の分量は文字数ではなくインテントに従って自然に決める
253
+ - `docs/glossary/` に既存記事がある場合は上書きしない
201
254
  - dde-link の `--fix` は上書き。事前に `--dry-run` を推奨
202
255
  - 将来フェーズ: HTML からの用語抽出 + ホバー表示(v0.2.0 予定)
package/version.txt CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.1.3