musubix 1.0.1 → 1.0.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/.github/AGENTS.md +242 -0
- package/.github/prompts/sdd-change-apply.prompt.md +283 -0
- package/.github/prompts/sdd-change-archive.prompt.md +241 -0
- package/.github/prompts/sdd-change-init.prompt.md +269 -0
- package/.github/prompts/sdd-design.prompt.md +250 -0
- package/.github/prompts/sdd-implement.prompt.md +387 -0
- package/.github/prompts/sdd-requirements.prompt.md +193 -0
- package/.github/prompts/sdd-steering.prompt.md +269 -0
- package/.github/prompts/sdd-tasks.prompt.md +255 -0
- package/.github/prompts/sdd-validate.prompt.md +304 -0
- package/.github/skills/musubix-code-generation/SKILL.md +229 -0
- package/.github/skills/musubix-ears-validation/SKILL.md +161 -0
- package/.github/skills/musubix-sdd-workflow/SKILL.md +137 -0
- package/AGENTS.md +286 -0
- package/docs/API-REFERENCE.md +633 -0
- package/docs/GITHUB-ACTIONS-NPM-SETUP.md +132 -0
- package/docs/INSTALL-GUIDE.ja.md +442 -0
- package/docs/INSTALL-GUIDE.md +442 -0
- package/docs/USER-GUIDE.ja.md +824 -0
- package/docs/USER-GUIDE.md +664 -0
- package/docs/evolution-from-musubi-to-musubix.md +764 -0
- package/package.json +11 -6
- package/steering/.musubi-version +1 -0
- package/steering/product.ja.md +572 -0
- package/steering/project.yml +38 -0
- package/steering/rules/constitution.md +412 -0
- package/steering/structure.ja.md +503 -0
- package/steering/tech.ja.md +42 -0
|
@@ -0,0 +1,824 @@
|
|
|
1
|
+
# MUSUBIX ユーザーガイド
|
|
2
|
+
|
|
3
|
+
> Neuro-Symbolic AI による仕様駆動開発システム
|
|
4
|
+
|
|
5
|
+
## 目次
|
|
6
|
+
|
|
7
|
+
1. [はじめに](#はじめに)
|
|
8
|
+
2. [インストール](#インストール)
|
|
9
|
+
3. [CLIの使い方](#cliの使い方)
|
|
10
|
+
4. [クイックスタート](#クイックスタート)
|
|
11
|
+
5. [基本的なワークフロー](#基本的なワークフロー)
|
|
12
|
+
6. [要件フェーズ](#要件フェーズ)
|
|
13
|
+
7. [設計フェーズ](#設計フェーズ)
|
|
14
|
+
8. [タスクフェーズ](#タスクフェーズ)
|
|
15
|
+
9. [検証フェーズ](#検証フェーズ)
|
|
16
|
+
10. [MCPサーバー連携](#mcpサーバー連携)
|
|
17
|
+
11. [YATA知識グラフ](#yata知識グラフ)
|
|
18
|
+
12. [ベストプラクティス](#ベストプラクティス)
|
|
19
|
+
13. [トラブルシューティング](#トラブルシューティング)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## はじめに
|
|
24
|
+
|
|
25
|
+
### MUSUBIXとは?
|
|
26
|
+
|
|
27
|
+
MUSUBIXは、**MUSUBI**(仕様駆動開発LLM)と**YATA**(知識グラフ)を組み合わせた**ニューロシンボリックAIシステム**です。
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
MUSUBIX = MUSUBI (LLM) + YATA (Knowledge Graph)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 主な特徴
|
|
34
|
+
|
|
35
|
+
- 🎯 **仕様駆動開発**: EARS形式の要件から実装まで一貫した開発
|
|
36
|
+
- 🏛️ **9条憲法**: 品質を保証する9つの原則に基づく開発
|
|
37
|
+
- 🔗 **完全なトレーサビリティ**: 要件→設計→タスク→テストの追跡
|
|
38
|
+
- 🧠 **知識グラフ統合**: YATAによるコンテキスト認識
|
|
39
|
+
- 🌐 **MCP対応**: Model Context Protocol による柔軟な統合
|
|
40
|
+
|
|
41
|
+
### 9条憲法(Constitutional Articles)
|
|
42
|
+
|
|
43
|
+
| 条項 | 名称 | 説明 |
|
|
44
|
+
|------|------|------|
|
|
45
|
+
| I | プロジェクトメモリ | 一貫したプロジェクトコンテキストの維持 |
|
|
46
|
+
| II | 要件仕様 | EARS形式の完全な要件定義 |
|
|
47
|
+
| III | 設計文書 | C4モデル + ADRによる設計 |
|
|
48
|
+
| IV | タスク分解 | トレーサブルなタスク生成 |
|
|
49
|
+
| V | トレーサビリティ | 双方向の追跡性 |
|
|
50
|
+
| VI | 説明可能性 | AI判断の透明性 |
|
|
51
|
+
| VII | 統合性 | シームレスな統合 |
|
|
52
|
+
| VIII | 適応性 | 柔軟な方法論対応 |
|
|
53
|
+
| IX | 品質保証 | 継続的な品質確保 |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## インストール
|
|
58
|
+
|
|
59
|
+
### 前提条件
|
|
60
|
+
|
|
61
|
+
| 項目 | 要件 |
|
|
62
|
+
|------|------|
|
|
63
|
+
| **Node.js** | >= 20.0.0 |
|
|
64
|
+
| **npm** | >= 10.0.0 |
|
|
65
|
+
| **TypeScript** | >= 5.3(開発時) |
|
|
66
|
+
|
|
67
|
+
### 方法1: npm グローバルインストール(推奨)
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# グローバルインストール
|
|
71
|
+
npm install -g musubix
|
|
72
|
+
|
|
73
|
+
# バージョン確認
|
|
74
|
+
musubix --version
|
|
75
|
+
musubix-mcp --version
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 方法2: npx で直接実行
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# インストールなしで実行
|
|
82
|
+
npx musubix --help
|
|
83
|
+
npx musubix init my-project
|
|
84
|
+
|
|
85
|
+
# MCPサーバー起動
|
|
86
|
+
npx @nahisaho/musubix-mcp-server
|
|
87
|
+
npx musubix-mcp --transport stdio
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### 方法3: プロジェクトへのインストール
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# 個別パッケージのインストール
|
|
94
|
+
npm install @nahisaho/musubix-core
|
|
95
|
+
npm install @nahisaho/musubix-mcp-server
|
|
96
|
+
npm install @nahisaho/musubix-yata-client # YATA連携用(オプション)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### 方法4: ソースからビルド
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# リポジトリをクローン
|
|
103
|
+
git clone https://github.com/nahisaho/MUSUBIX.git
|
|
104
|
+
cd MUSUBIX
|
|
105
|
+
|
|
106
|
+
# 依存関係インストール & ビルド
|
|
107
|
+
npm install
|
|
108
|
+
npm run build
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### YATA のインストール(オプション)
|
|
112
|
+
|
|
113
|
+
知識グラフ機能を使用する場合は、YATA を別途インストールします:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# YATA リポジトリをクローン
|
|
117
|
+
git clone https://github.com/nahisaho/YATA.git
|
|
118
|
+
cd YATA
|
|
119
|
+
|
|
120
|
+
# uv で依存関係をインストール
|
|
121
|
+
uv sync --all-packages
|
|
122
|
+
|
|
123
|
+
# サーバー起動
|
|
124
|
+
uv run yata serve
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
詳細は [INSTALL-GUIDE.ja.md](INSTALL-GUIDE.ja.md) を参照してください。
|
|
128
|
+
|
|
129
|
+
### プロジェクト初期化
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# MUSUBIXプロジェクトの初期化
|
|
133
|
+
musubix init my-project
|
|
134
|
+
# または
|
|
135
|
+
npx musubix init my-project
|
|
136
|
+
|
|
137
|
+
# steering ディレクトリの確認
|
|
138
|
+
ls steering/
|
|
139
|
+
# product.md structure.md tech.md rules/
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## CLIの使い方
|
|
145
|
+
|
|
146
|
+
### musubix コマンド
|
|
147
|
+
|
|
148
|
+
MUSUBIXのメインCLI:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
# ヘルプ表示
|
|
152
|
+
musubix --help
|
|
153
|
+
|
|
154
|
+
# バージョン表示
|
|
155
|
+
musubix --version
|
|
156
|
+
|
|
157
|
+
# プロジェクト初期化
|
|
158
|
+
musubix init [path] [options]
|
|
159
|
+
|
|
160
|
+
# オプション
|
|
161
|
+
# --name <name> プロジェクト名
|
|
162
|
+
# --template <type> テンプレート(default, minimal, full)
|
|
163
|
+
# --force 既存ファイルを上書き
|
|
164
|
+
# --json JSON形式で出力
|
|
165
|
+
# --verbose 詳細出力
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### musubix-mcp コマンド
|
|
169
|
+
|
|
170
|
+
MCPサーバーの起動:
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# ヘルプ表示
|
|
174
|
+
musubix-mcp --help
|
|
175
|
+
|
|
176
|
+
# stdio モードで起動(デフォルト)
|
|
177
|
+
musubix-mcp
|
|
178
|
+
musubix-mcp --transport stdio
|
|
179
|
+
|
|
180
|
+
# SSE モードで起動
|
|
181
|
+
musubix-mcp --transport sse --port 8080
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
| オプション | 説明 |
|
|
185
|
+
|-----------|------|
|
|
186
|
+
| `-t, --transport` | トランスポート: `stdio` または `sse` |
|
|
187
|
+
| `-p, --port` | SSE モードのポート(デフォルト: 3000) |
|
|
188
|
+
| `-h, --help` | ヘルプ表示 |
|
|
189
|
+
| `-v, --version` | バージョン表示 |
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## クイックスタート
|
|
194
|
+
|
|
195
|
+
### 5分で始めるMUSUBIX
|
|
196
|
+
|
|
197
|
+
```typescript
|
|
198
|
+
import {
|
|
199
|
+
createRequirementsAnalyzer,
|
|
200
|
+
createC4ModelGenerator,
|
|
201
|
+
createTaskGenerator,
|
|
202
|
+
createConstitutionalValidator
|
|
203
|
+
} from '@nahisaho/musubix-core';
|
|
204
|
+
|
|
205
|
+
// 1. 要件の分析
|
|
206
|
+
const analyzer = createRequirementsAnalyzer();
|
|
207
|
+
const requirement = analyzer.analyze(`
|
|
208
|
+
ユーザーがログインボタンをクリックしたとき、
|
|
209
|
+
システムは認証画面を表示しなければならない。
|
|
210
|
+
`);
|
|
211
|
+
|
|
212
|
+
console.log('要件ID:', requirement.id);
|
|
213
|
+
console.log('タイプ:', requirement.type);
|
|
214
|
+
|
|
215
|
+
// 2. 設計の生成
|
|
216
|
+
const c4Generator = createC4ModelGenerator();
|
|
217
|
+
const diagram = c4Generator.generateContext({
|
|
218
|
+
name: '認証システム',
|
|
219
|
+
description: 'ユーザー認証を管理するシステム'
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
console.log('C4図:', diagram.export('mermaid'));
|
|
223
|
+
|
|
224
|
+
// 3. タスクの生成
|
|
225
|
+
const taskGenerator = createTaskGenerator();
|
|
226
|
+
const tasks = taskGenerator.generate([requirement]);
|
|
227
|
+
|
|
228
|
+
console.log('生成されたタスク:', tasks.length);
|
|
229
|
+
|
|
230
|
+
// 4. 検証
|
|
231
|
+
const validator = createConstitutionalValidator();
|
|
232
|
+
const result = validator.validate(requirement);
|
|
233
|
+
|
|
234
|
+
console.log('検証結果:', result.valid ? '合格' : '不合格');
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## 基本的なワークフロー
|
|
240
|
+
|
|
241
|
+
### SDDワークフロー概要
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
245
|
+
│ SDDワークフロー │
|
|
246
|
+
├─────────────────────────────────────────────────────────────┤
|
|
247
|
+
│ │
|
|
248
|
+
│ ① ステアリング プロジェクトコンテキストの設定 │
|
|
249
|
+
│ ↓ │
|
|
250
|
+
│ ② 要件定義 EARS形式で要件を記述 │
|
|
251
|
+
│ ↓ │
|
|
252
|
+
│ ③ 設計 C4モデル + ADRの作成 │
|
|
253
|
+
│ ↓ │
|
|
254
|
+
│ ④ タスク生成 実装タスクへの分解 │
|
|
255
|
+
│ ↓ │
|
|
256
|
+
│ ⑤ 実装 コード生成・開発 │
|
|
257
|
+
│ ↓ │
|
|
258
|
+
│ ⑥ 検証 憲法に基づく検証 │
|
|
259
|
+
│ ↓ │
|
|
260
|
+
│ ⑦ レビュー 品質レビューゲート │
|
|
261
|
+
│ │
|
|
262
|
+
└─────────────────────────────────────────────────────────────┘
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### ステアリングファイル
|
|
266
|
+
|
|
267
|
+
プロジェクトの基盤となる設定ファイル:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
steering/
|
|
271
|
+
├── product.md # プロダクト情報
|
|
272
|
+
├── structure.md # アーキテクチャパターン
|
|
273
|
+
├── tech.md # 技術スタック
|
|
274
|
+
└── rules/
|
|
275
|
+
└── constitution.md # 9条憲法
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## 要件フェーズ
|
|
281
|
+
|
|
282
|
+
### EARS形式による要件定義
|
|
283
|
+
|
|
284
|
+
**EARS (Easy Approach to Requirements Syntax)** は、明確で検証可能な要件を書くための形式です。
|
|
285
|
+
|
|
286
|
+
#### 基本パターン
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
[条件] [主語] [助動詞] [動作] [目的語]
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
#### 例
|
|
293
|
+
|
|
294
|
+
```
|
|
295
|
+
【機能要件】
|
|
296
|
+
ユーザーがログインフォームで正しい認証情報を入力したとき、
|
|
297
|
+
システムはダッシュボード画面を表示しなければならない。
|
|
298
|
+
|
|
299
|
+
【非機能要件】
|
|
300
|
+
システムは、すべてのAPIリクエストに対して
|
|
301
|
+
500ミリ秒以内にレスポンスを返さなければならない。
|
|
302
|
+
|
|
303
|
+
【制約】
|
|
304
|
+
システムは、個人情報保護法に準拠して
|
|
305
|
+
ユーザーデータを暗号化しなければならない。
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
### RequirementsAnalyzer の使用
|
|
309
|
+
|
|
310
|
+
```typescript
|
|
311
|
+
import { createRequirementsAnalyzer } from '@nahisaho/musubix-core';
|
|
312
|
+
|
|
313
|
+
const analyzer = createRequirementsAnalyzer({
|
|
314
|
+
strictMode: true, // 厳密な検証
|
|
315
|
+
validateEARS: true, // EARS形式の検証
|
|
316
|
+
autoClassify: true // 自動分類
|
|
317
|
+
});
|
|
318
|
+
|
|
319
|
+
// 要件テキストの分析
|
|
320
|
+
const result = analyzer.analyze(`
|
|
321
|
+
ユーザーが商品をカートに追加したとき、
|
|
322
|
+
システムはカート内の合計金額を更新しなければならない。
|
|
323
|
+
`);
|
|
324
|
+
|
|
325
|
+
console.log('ID:', result.id); // REQ-001
|
|
326
|
+
console.log('タイプ:', result.type); // functional
|
|
327
|
+
console.log('優先度:', result.priority); // must
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### RequirementsDecomposer の使用
|
|
331
|
+
|
|
332
|
+
複雑な要件を小さな単位に分解:
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
import { createRequirementsDecomposer } from '@nahisaho/musubix-core';
|
|
336
|
+
|
|
337
|
+
const decomposer = createRequirementsDecomposer({
|
|
338
|
+
maxDepth: 4, // 最大分解深度
|
|
339
|
+
targetUnitSize: 4 // 目標単位サイズ(時間)
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
const result = decomposer.decompose(requirement, 'functional');
|
|
343
|
+
|
|
344
|
+
console.log('分解単位数:', result.units.length);
|
|
345
|
+
console.log('推定総工数:', result.stats.estimatedTotalEffort);
|
|
346
|
+
|
|
347
|
+
// Markdownでエクスポート
|
|
348
|
+
const markdown = decomposer.exportMarkdown(result);
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 設計フェーズ
|
|
354
|
+
|
|
355
|
+
### C4モデルの生成
|
|
356
|
+
|
|
357
|
+
C4モデルは4つのレベルでシステムを表現します:
|
|
358
|
+
|
|
359
|
+
1. **Context**: システムの境界と外部エンティティ
|
|
360
|
+
2. **Container**: アプリケーション・データストアの構成
|
|
361
|
+
3. **Component**: コンテナ内のコンポーネント
|
|
362
|
+
4. **Code**: コードレベルの詳細
|
|
363
|
+
|
|
364
|
+
```typescript
|
|
365
|
+
import { createC4ModelGenerator } from '@nahisaho/musubix-core';
|
|
366
|
+
|
|
367
|
+
const generator = createC4ModelGenerator({
|
|
368
|
+
defaultFormat: 'mermaid'
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
// コンテキスト図の生成
|
|
372
|
+
const contextDiagram = generator.generateContext({
|
|
373
|
+
name: 'Eコマースシステム',
|
|
374
|
+
description: 'オンラインショッピングプラットフォーム',
|
|
375
|
+
actors: [
|
|
376
|
+
{ name: '顧客', description: '商品を購入するユーザー' },
|
|
377
|
+
{ name: '管理者', description: 'システムを管理するスタッフ' }
|
|
378
|
+
],
|
|
379
|
+
externalSystems: [
|
|
380
|
+
{ name: '決済システム', description: 'クレジットカード決済' },
|
|
381
|
+
{ name: '配送システム', description: '物流管理' }
|
|
382
|
+
]
|
|
383
|
+
});
|
|
384
|
+
|
|
385
|
+
// Mermaidでエクスポート
|
|
386
|
+
console.log(generator.export(contextDiagram, 'mermaid'));
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### ADR(アーキテクチャ決定記録)
|
|
390
|
+
|
|
391
|
+
重要なアーキテクチャ決定を記録:
|
|
392
|
+
|
|
393
|
+
```typescript
|
|
394
|
+
import { createADRGenerator } from '@nahisaho/musubix-core';
|
|
395
|
+
|
|
396
|
+
const adrGenerator = createADRGenerator({
|
|
397
|
+
template: 'madr',
|
|
398
|
+
outputFormat: 'markdown'
|
|
399
|
+
});
|
|
400
|
+
|
|
401
|
+
const adr = adrGenerator.generate({
|
|
402
|
+
title: 'TypeScriptの採用',
|
|
403
|
+
status: 'accepted',
|
|
404
|
+
context: 'プロジェクトの言語選定が必要',
|
|
405
|
+
decision: 'TypeScriptを採用する',
|
|
406
|
+
rationale: '型安全性とIDEサポートの向上',
|
|
407
|
+
consequences: {
|
|
408
|
+
positive: ['バグの早期発見', 'リファクタリングの容易さ'],
|
|
409
|
+
negative: ['学習コスト', 'ビルド時間の増加']
|
|
410
|
+
},
|
|
411
|
+
alternatives: [
|
|
412
|
+
{ name: 'JavaScript', reason: '型がないため却下' },
|
|
413
|
+
{ name: 'Flow', reason: 'エコシステムが小さいため却下' }
|
|
414
|
+
]
|
|
415
|
+
});
|
|
416
|
+
|
|
417
|
+
console.log(adr.export());
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
422
|
+
## タスクフェーズ
|
|
423
|
+
|
|
424
|
+
### タスクの自動生成
|
|
425
|
+
|
|
426
|
+
要件から実装タスクを生成:
|
|
427
|
+
|
|
428
|
+
```typescript
|
|
429
|
+
import { createTaskGenerator } from '@nahisaho/musubix-core';
|
|
430
|
+
|
|
431
|
+
const taskGenerator = createTaskGenerator({
|
|
432
|
+
estimateEffort: true, // 工数見積もり
|
|
433
|
+
includeTests: true, // テストタスクを含む
|
|
434
|
+
assignmentStrategy: 'balanced'
|
|
435
|
+
});
|
|
436
|
+
|
|
437
|
+
const tasks = taskGenerator.generate(requirements);
|
|
438
|
+
|
|
439
|
+
for (const task of tasks) {
|
|
440
|
+
console.log(`
|
|
441
|
+
タスク: ${task.id}
|
|
442
|
+
タイトル: ${task.title}
|
|
443
|
+
要件参照: ${task.requirementRef}
|
|
444
|
+
推定工数: ${task.estimatedHours}時間
|
|
445
|
+
ステータス: ${task.status}
|
|
446
|
+
`);
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
### タスクの優先順位付け
|
|
451
|
+
|
|
452
|
+
```typescript
|
|
453
|
+
// 優先順位付け
|
|
454
|
+
const prioritized = taskGenerator.prioritize(tasks, {
|
|
455
|
+
criteria: ['dependency', 'risk', 'value'],
|
|
456
|
+
weights: [0.4, 0.3, 0.3]
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
console.log('優先度順タスク:');
|
|
460
|
+
prioritized.forEach((task, index) => {
|
|
461
|
+
console.log(`${index + 1}. ${task.title} (スコア: ${task.priorityScore})`);
|
|
462
|
+
});
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## 検証フェーズ
|
|
468
|
+
|
|
469
|
+
### 憲法に基づく検証
|
|
470
|
+
|
|
471
|
+
```typescript
|
|
472
|
+
import { createConstitutionalValidator } from '@nahisaho/musubix-core';
|
|
473
|
+
|
|
474
|
+
const validator = createConstitutionalValidator({
|
|
475
|
+
strictMode: true,
|
|
476
|
+
articles: ['all'] // すべての条項を検証
|
|
477
|
+
});
|
|
478
|
+
|
|
479
|
+
const result = validator.validate(artifact);
|
|
480
|
+
|
|
481
|
+
console.log('検証結果:', result.valid ? '✅ 合格' : '❌ 不合格');
|
|
482
|
+
console.log('スコア:', result.score);
|
|
483
|
+
console.log('エラー数:', result.errors.length);
|
|
484
|
+
console.log('警告数:', result.warnings.length);
|
|
485
|
+
|
|
486
|
+
// 詳細レポート
|
|
487
|
+
if (!result.valid) {
|
|
488
|
+
for (const error of result.errors) {
|
|
489
|
+
console.log(`
|
|
490
|
+
条項: ${error.article}
|
|
491
|
+
メッセージ: ${error.message}
|
|
492
|
+
推奨対応: ${error.recommendation}
|
|
493
|
+
`);
|
|
494
|
+
}
|
|
495
|
+
}
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
### カバレッジの確認
|
|
499
|
+
|
|
500
|
+
```typescript
|
|
501
|
+
console.log('カバレッジ:');
|
|
502
|
+
console.log(` 要件: ${result.coverage.requirements}%`);
|
|
503
|
+
console.log(` 設計: ${result.coverage.design}%`);
|
|
504
|
+
console.log(` タスク: ${result.coverage.tasks}%`);
|
|
505
|
+
console.log(` テスト: ${result.coverage.tests}%`);
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
---
|
|
509
|
+
|
|
510
|
+
## MCPサーバー連携
|
|
511
|
+
|
|
512
|
+
### MCPサーバーの起動
|
|
513
|
+
|
|
514
|
+
#### CLI から起動
|
|
515
|
+
|
|
516
|
+
```bash
|
|
517
|
+
# stdio モード(推奨)
|
|
518
|
+
musubix-mcp
|
|
519
|
+
npx @nahisaho/musubix-mcp-server
|
|
520
|
+
|
|
521
|
+
# SSE モード
|
|
522
|
+
musubix-mcp --transport sse --port 8080
|
|
523
|
+
```
|
|
524
|
+
|
|
525
|
+
#### プログラムから起動
|
|
526
|
+
|
|
527
|
+
```typescript
|
|
528
|
+
import { startServer, createMCPServer } from '@nahisaho/musubix-mcp-server';
|
|
529
|
+
|
|
530
|
+
// 簡易起動
|
|
531
|
+
await startServer({ transport: 'stdio' });
|
|
532
|
+
|
|
533
|
+
// カスタム設定
|
|
534
|
+
const server = createMCPServer({
|
|
535
|
+
name: 'my-musubix-server',
|
|
536
|
+
version: '1.0.0',
|
|
537
|
+
transport: 'stdio'
|
|
538
|
+
});
|
|
539
|
+
|
|
540
|
+
await server.start();
|
|
541
|
+
console.log('MCPサーバーが起動しました');
|
|
542
|
+
```
|
|
543
|
+
|
|
544
|
+
### GitHub Copilot (VS Code) との連携
|
|
545
|
+
|
|
546
|
+
`.vscode/mcp.json`:
|
|
547
|
+
|
|
548
|
+
```json
|
|
549
|
+
{
|
|
550
|
+
"mcpServers": {
|
|
551
|
+
"musubix": {
|
|
552
|
+
"command": "npx",
|
|
553
|
+
"args": ["@nahisaho/musubix-mcp-server"]
|
|
554
|
+
},
|
|
555
|
+
"yata": {
|
|
556
|
+
"command": "uv",
|
|
557
|
+
"args": ["run", "yata", "serve"],
|
|
558
|
+
"cwd": "/path/to/YATA"
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
### Claude Desktop との連携
|
|
565
|
+
|
|
566
|
+
設定ファイルの場所:
|
|
567
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
568
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
569
|
+
- **Linux**: `~/.config/Claude/claude_desktop_config.json`
|
|
570
|
+
|
|
571
|
+
```json
|
|
572
|
+
{
|
|
573
|
+
"mcpServers": {
|
|
574
|
+
"musubix": {
|
|
575
|
+
"command": "npx",
|
|
576
|
+
"args": ["@nahisaho/musubix-mcp-server"]
|
|
577
|
+
},
|
|
578
|
+
"yata": {
|
|
579
|
+
"command": "uv",
|
|
580
|
+
"args": ["run", "yata", "serve"],
|
|
581
|
+
"cwd": "/path/to/YATA"
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
### Cursor IDE との連携
|
|
588
|
+
|
|
589
|
+
`.cursor/mcp.json`:
|
|
590
|
+
|
|
591
|
+
```json
|
|
592
|
+
{
|
|
593
|
+
"mcpServers": {
|
|
594
|
+
"musubix": {
|
|
595
|
+
"command": "npx",
|
|
596
|
+
"args": ["@nahisaho/musubix-mcp-server"]
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
### ツールの呼び出し
|
|
603
|
+
|
|
604
|
+
```typescript
|
|
605
|
+
// MCP経由でのツール呼び出し例
|
|
606
|
+
const response = await client.callTool({
|
|
607
|
+
tool: 'analyze_requirements',
|
|
608
|
+
arguments: {
|
|
609
|
+
text: 'システムは...',
|
|
610
|
+
options: { validateEARS: true }
|
|
611
|
+
}
|
|
612
|
+
});
|
|
613
|
+
```
|
|
614
|
+
|
|
615
|
+
---
|
|
616
|
+
|
|
617
|
+
## YATA知識グラフ
|
|
618
|
+
|
|
619
|
+
### YATAとは?
|
|
620
|
+
|
|
621
|
+
YATA(八咫)は、AIコーディング支援のための知識グラフMCPサーバーです。MUSUBIXと組み合わせることで、ニューロシンボリックAI機能を実現します。
|
|
622
|
+
|
|
623
|
+
| 機能 | 説明 |
|
|
624
|
+
|------|------|
|
|
625
|
+
| **コード解析** | Tree-sitterによる24言語対応AST解析 |
|
|
626
|
+
| **知識グラフ** | NetworkXによるエンティティ・関係性グラフ |
|
|
627
|
+
| **フレームワーク知識** | 47フレームワーク、457K+エンティティ |
|
|
628
|
+
| **MCP対応** | 34 Tools, 3 Prompts, 1 Resource |
|
|
629
|
+
|
|
630
|
+
### YATAサーバーの起動
|
|
631
|
+
|
|
632
|
+
```bash
|
|
633
|
+
# YATAディレクトリに移動
|
|
634
|
+
cd /path/to/YATA
|
|
635
|
+
|
|
636
|
+
# stdio モードで起動
|
|
637
|
+
uv run yata serve
|
|
638
|
+
|
|
639
|
+
# SSE モードで起動
|
|
640
|
+
uv run yata serve --transport sse --port 8080
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
### YATAクライアントの設定
|
|
644
|
+
|
|
645
|
+
```typescript
|
|
646
|
+
import { createYATAClient } from '@nahisaho/musubix-yata-client';
|
|
647
|
+
|
|
648
|
+
const yata = createYATAClient({
|
|
649
|
+
transport: 'stdio', // または { type: 'sse', endpoint: 'http://localhost:8080' }
|
|
650
|
+
});
|
|
651
|
+
|
|
652
|
+
await yata.connect();
|
|
653
|
+
```
|
|
654
|
+
|
|
655
|
+
### 知識のクエリ
|
|
656
|
+
|
|
657
|
+
```typescript
|
|
658
|
+
// 要件の検索
|
|
659
|
+
const requirements = await yata.query({
|
|
660
|
+
type: 'requirement',
|
|
661
|
+
filters: {
|
|
662
|
+
priority: 'must',
|
|
663
|
+
status: 'approved'
|
|
664
|
+
}
|
|
665
|
+
});
|
|
666
|
+
|
|
667
|
+
// 関連エンティティの取得
|
|
668
|
+
const related = await yata.getRelated({
|
|
669
|
+
entityId: 'REQ-001',
|
|
670
|
+
relationTypes: ['implements', 'depends_on']
|
|
671
|
+
});
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
### 知識の保存
|
|
675
|
+
|
|
676
|
+
```typescript
|
|
677
|
+
// 新しい要件を保存
|
|
678
|
+
await yata.store({
|
|
679
|
+
type: 'requirement',
|
|
680
|
+
data: requirement,
|
|
681
|
+
relations: [
|
|
682
|
+
{ type: 'part_of', target: 'EPIC-001' }
|
|
683
|
+
]
|
|
684
|
+
});
|
|
685
|
+
|
|
686
|
+
// エンティティ間のリンク
|
|
687
|
+
await yata.link({
|
|
688
|
+
source: 'TSK-001',
|
|
689
|
+
target: 'REQ-001',
|
|
690
|
+
type: 'implements'
|
|
691
|
+
});
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
---
|
|
695
|
+
|
|
696
|
+
## ベストプラクティス
|
|
697
|
+
|
|
698
|
+
### 1. 要件定義のベストプラクティス
|
|
699
|
+
|
|
700
|
+
✅ **推奨**:
|
|
701
|
+
- EARS形式を使用する
|
|
702
|
+
- 検証可能な受け入れ基準を含める
|
|
703
|
+
- 1つの要件に1つの機能
|
|
704
|
+
|
|
705
|
+
❌ **避けるべき**:
|
|
706
|
+
- 曖昧な表現(「適切に」「迅速に」など)
|
|
707
|
+
- 複数の機能を1つの要件に含める
|
|
708
|
+
- 実装詳細を要件に含める
|
|
709
|
+
|
|
710
|
+
### 2. 設計のベストプラクティス
|
|
711
|
+
|
|
712
|
+
✅ **推奨**:
|
|
713
|
+
- C4の4レベルを活用
|
|
714
|
+
- 重要な決定はADRで記録
|
|
715
|
+
- 要件とのトレーサビリティを維持
|
|
716
|
+
|
|
717
|
+
❌ **避けるべき**:
|
|
718
|
+
- 詳細すぎる最初の設計
|
|
719
|
+
- 決定理由の省略
|
|
720
|
+
- 孤立した設計ドキュメント
|
|
721
|
+
|
|
722
|
+
### 3. タスク管理のベストプラクティス
|
|
723
|
+
|
|
724
|
+
✅ **推奨**:
|
|
725
|
+
- 4時間以内の粒度
|
|
726
|
+
- 要件への明確なリンク
|
|
727
|
+
- 完了条件の明記
|
|
728
|
+
|
|
729
|
+
❌ **避けるべき**:
|
|
730
|
+
- 大きすぎるタスク(8時間超)
|
|
731
|
+
- 要件リンクのないタスク
|
|
732
|
+
- 曖昧な完了条件
|
|
733
|
+
|
|
734
|
+
---
|
|
735
|
+
|
|
736
|
+
## トラブルシューティング
|
|
737
|
+
|
|
738
|
+
### よくある問題と解決策
|
|
739
|
+
|
|
740
|
+
#### 要件の検証エラー
|
|
741
|
+
|
|
742
|
+
```
|
|
743
|
+
エラー: EARS形式が検出されませんでした
|
|
744
|
+
```
|
|
745
|
+
|
|
746
|
+
**解決策**: 要件テキストにEARSパターンを含めてください。
|
|
747
|
+
|
|
748
|
+
```typescript
|
|
749
|
+
// 修正前
|
|
750
|
+
const text = '認証機能を実装する';
|
|
751
|
+
|
|
752
|
+
// 修正後
|
|
753
|
+
const text = 'ユーザーがログインしたとき、システムは認証を行わなければならない';
|
|
754
|
+
```
|
|
755
|
+
|
|
756
|
+
#### トレーサビリティの警告
|
|
757
|
+
|
|
758
|
+
```
|
|
759
|
+
警告: 要件 REQ-001 に設計参照がありません
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
**解決策**: 設計ドキュメントを作成し、リンクしてください。
|
|
763
|
+
|
|
764
|
+
```typescript
|
|
765
|
+
requirementsService.linkDesign('REQ-001', 'DES-001');
|
|
766
|
+
```
|
|
767
|
+
|
|
768
|
+
#### MCPサーバー接続エラー
|
|
769
|
+
|
|
770
|
+
```
|
|
771
|
+
エラー: MCPサーバーに接続できません
|
|
772
|
+
```
|
|
773
|
+
|
|
774
|
+
**解決策**:
|
|
775
|
+
1. サーバーが起動しているか確認
|
|
776
|
+
2. ポート番号を確認
|
|
777
|
+
3. ファイアウォール設定を確認
|
|
778
|
+
|
|
779
|
+
```bash
|
|
780
|
+
# サーバーの状態確認
|
|
781
|
+
ps aux | grep musubix
|
|
782
|
+
```
|
|
783
|
+
|
|
784
|
+
#### YATA接続エラー
|
|
785
|
+
|
|
786
|
+
```
|
|
787
|
+
エラー: YATAエンドポイントに接続できません
|
|
788
|
+
```
|
|
789
|
+
|
|
790
|
+
**解決策**:
|
|
791
|
+
1. エンドポイントURLを確認
|
|
792
|
+
2. APIキーを確認
|
|
793
|
+
3. ネットワーク設定を確認
|
|
794
|
+
|
|
795
|
+
```typescript
|
|
796
|
+
const client = createYATAClient({
|
|
797
|
+
endpoint: 'http://localhost:8000', // 正しいURL
|
|
798
|
+
apiKey: process.env.YATA_API_KEY // 環境変数を確認
|
|
799
|
+
});
|
|
800
|
+
```
|
|
801
|
+
|
|
802
|
+
---
|
|
803
|
+
|
|
804
|
+
## 次のステップ
|
|
805
|
+
|
|
806
|
+
- 📚 [APIリファレンス](./API-REFERENCE.md)を参照
|
|
807
|
+
- 💡 [サンプルプロジェクト](./examples/)を確認
|
|
808
|
+
- 🤝 [コントリビューションガイド](./CONTRIBUTING.md)を読む
|
|
809
|
+
|
|
810
|
+
---
|
|
811
|
+
|
|
812
|
+
## 関連ドキュメント
|
|
813
|
+
|
|
814
|
+
| ドキュメント | 説明 |
|
|
815
|
+
|-------------|------|
|
|
816
|
+
| [INSTALL-GUIDE.ja.md](INSTALL-GUIDE.ja.md) | 詳細インストールガイド |
|
|
817
|
+
| [API-REFERENCE.md](API-REFERENCE.md) | APIリファレンス |
|
|
818
|
+
| [evolution-from-musubi-to-musubix.md](evolution-from-musubi-to-musubix.md) | MUSUBIからの進化 |
|
|
819
|
+
|
|
820
|
+
---
|
|
821
|
+
|
|
822
|
+
**バージョン**: 1.0.0
|
|
823
|
+
**最終更新**: 2026-01-02
|
|
824
|
+
**MUSUBIX Project**
|