musubix 3.4.0 → 3.4.2
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/README.md +50 -315
- package/bin/musubix.js +1 -9
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/package.json +51 -57
- package/.github/AGENTS.md +0 -949
- package/.github/prompts/sdd-change-apply.prompt.md +0 -283
- package/.github/prompts/sdd-change-archive.prompt.md +0 -241
- package/.github/prompts/sdd-change-init.prompt.md +0 -269
- package/.github/prompts/sdd-design.prompt.md +0 -250
- package/.github/prompts/sdd-implement.prompt.md +0 -387
- package/.github/prompts/sdd-requirements.prompt.md +0 -193
- package/.github/prompts/sdd-review.prompt.md +0 -155
- package/.github/prompts/sdd-security.prompt.md +0 -228
- package/.github/prompts/sdd-steering.prompt.md +0 -269
- package/.github/prompts/sdd-tasks.prompt.md +0 -255
- package/.github/prompts/sdd-test.prompt.md +0 -230
- package/.github/prompts/sdd-validate.prompt.md +0 -304
- package/.github/skills/musubix-adr-generation/SKILL.md +0 -209
- package/.github/skills/musubix-best-practices/SKILL.md +0 -315
- package/.github/skills/musubix-c4-design/SKILL.md +0 -162
- package/.github/skills/musubix-code-generation/SKILL.md +0 -237
- package/.github/skills/musubix-domain-inference/SKILL.md +0 -196
- package/.github/skills/musubix-ears-validation/SKILL.md +0 -161
- package/.github/skills/musubix-sdd-workflow/SKILL.md +0 -217
- package/.github/skills/musubix-technical-writing/SKILL.md +0 -444
- package/.github/skills/musubix-test-generation/SKILL.md +0 -212
- package/.github/skills/musubix-traceability/SKILL.md +0 -141
- package/AGENTS.md +0 -1134
- package/LICENSE +0 -21
- package/README.ja.md +0 -313
- package/bin/musubix-mcp.js +0 -15
- package/docs/API-REFERENCE.md +0 -1425
- package/docs/GITHUB-ACTIONS-NPM-SETUP.md +0 -132
- package/docs/INSTALL-GUIDE.ja.md +0 -459
- package/docs/INSTALL-GUIDE.md +0 -459
- package/docs/MIGRATION-v3.0.md +0 -324
- package/docs/MUSUBI-enhancement_roadmap_20260105.md +0 -651
- package/docs/MUSUBIX-v3.0-User-Guide.md +0 -1357
- package/docs/MUSUBIXv2.2.0-Manual-outline.md +0 -136
- package/docs/MUSUBIXv2.2.0-Manual.md +0 -3123
- package/docs/MUSUBIXv2.3.5-Refactering.md +0 -1310
- package/docs/MUSUBIv1.6.1-enhancement_roadmap_20260105.md +0 -291
- package/docs/MUSUBIv2.2.0-USERGUIDE.md +0 -2079
- package/docs/ROADMAP-v1.5.md +0 -116
- package/docs/SwarmCoding.md +0 -1284
- package/docs/Test-prompt.md +0 -105
- package/docs/USER-GUIDE-v1.8.0.md +0 -2371
- package/docs/USER-GUIDE.ja.md +0 -2147
- package/docs/USER-GUIDE.md +0 -3022
- package/docs/YATA-GLOBAL-GUIDE.ja.md +0 -750
- package/docs/YATA-GLOBAL-GUIDE.md +0 -595
- package/docs/YATA-LOCAL-GUIDE.ja.md +0 -989
- package/docs/YATA-LOCAL-GUIDE.md +0 -730
- package/docs/adr/0001-real-time-pattern-learning-architecture-for-v1-5-0.md +0 -75
- package/docs/adr/0002-pattern-sharing-protocol-for-cross-team-collaborat.md +0 -79
- package/docs/adr/0003-owl-2-rl-implementation-strategy-for-advanced-infe.md +0 -90
- package/docs/adr/ADR-v3.4.0-001-deep-research-architecture.md +0 -217
- package/docs/adr/ADR-v3.4.0-002-search-provider-selection.md +0 -308
- package/docs/adr/ADR-v3.4.0-003-lm-api-integration.md +0 -475
- package/docs/enterprise-knowledge-management.md +0 -1737
- package/docs/evolution-from-musubi-to-musubix.md +0 -2170
- package/docs/getting-started-with-sdd.md +0 -1602
- package/docs/moodle-refactering-codegraph-musubix.md +0 -391
- package/docs/moodle-refactering-codegraph.md +0 -278
- package/docs/overview/MUSUBIX-CodeGraph.md +0 -322
- package/docs/overview/MUSUBIX-Core.md +0 -671
- package/docs/overview/MUSUBIX-Decisions.md +0 -494
- package/docs/overview/MUSUBIX-FormalVerify.md +0 -566
- package/docs/overview/MUSUBIX-Knowledge.md +0 -1231
- package/docs/overview/MUSUBIX-Learning.md +0 -837
- package/docs/overview/MUSUBIX-MCP-Server.md +0 -535
- package/docs/overview/MUSUBIX-Overview.md +0 -264
- package/docs/overview/MUSUBIX-Phase1-Complete.md +0 -271
- package/docs/overview/MUSUBIX-Phase2-Complete.md +0 -310
- package/docs/overview/MUSUBIX-Policy.md +0 -477
- package/docs/overview/MUSUBIX-Roadmap-v2.md +0 -399
- package/docs/overview/MUSUBIX-Security-Plan.md +0 -939
- package/docs/overview/MUSUBIX-Security-v2.1.md +0 -668
- package/docs/overview/MUSUBIX-Security.md +0 -891
- package/docs/overview/MUSUBIX-YATA.md +0 -666
- package/docs/overview/MUSUBIX-v2.2.0-Advanced-Learning.md +0 -513
- package/docs/overview/Neuro-SymbolicAI.md +0 -159
- package/docs/packages/knowledge.md +0 -594
- package/docs/qiita-linux-kernel-knowledge-graph.md +0 -596
- package/scripts/generate-quality-gate-report.ts +0 -106
- package/scripts/postinstall.js +0 -94
- package/steering/.musubi-version +0 -1
- package/steering/product.ja.md +0 -572
- package/steering/project.yml +0 -66
- package/steering/rules/constitution.md +0 -491
- package/steering/structure.ja.md +0 -503
- package/steering/tech.ja.md +0 -208
|
@@ -1,3123 +0,0 @@
|
|
|
1
|
-
# MUSUBIX: Neuro-Symbolic AI Coding システムによるエンタープライズアプリケーション開発入門
|
|
2
|
-
|
|
3
|
-
:::note info
|
|
4
|
-
**Version**: 2.2.0 | **Date**: 2026-01-09 | **Author**: MUSUBIX Development Team
|
|
5
|
-
:::
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 目次
|
|
10
|
-
|
|
11
|
-
- [Part 1: イントロダクション](#part-1-イントロダクション)
|
|
12
|
-
- [1. 従来のAIコーディングの限界](#1-従来のaiコーディングの限界)
|
|
13
|
-
- [2. SDD(Specification Driven Development)の課題](#2-sddspecification-driven-developmentの課題)
|
|
14
|
-
- [3. MUSUBIXとは](#3-musubixとは)
|
|
15
|
-
- [4. エンタープライズ開発に必要な要素](#4-エンタープライズ開発に必要な要素)
|
|
16
|
-
- [Part 2: 経費精算システム開発](#part-2-経費精算システム開発)
|
|
17
|
-
- [5. プロジェクト初期化](#5-プロジェクト初期化)
|
|
18
|
-
- [6. 要件定義](#6-要件定義)
|
|
19
|
-
- [7. 設計](#7-設計)
|
|
20
|
-
- [8. タスク分解](#8-タスク分解)
|
|
21
|
-
- [9. コード生成](#9-コード生成)
|
|
22
|
-
- [10. セキュリティ分析](#10-セキュリティ分析)
|
|
23
|
-
- [11. 形式検証](#11-形式検証)
|
|
24
|
-
- [12. テスト生成](#12-テスト生成)
|
|
25
|
-
- [13. トレーサビリティ](#13-トレーサビリティ)
|
|
26
|
-
- [Part 3: 高度な機能](#part-3-高度な機能)
|
|
27
|
-
- [14. 説明生成](#14-説明生成)
|
|
28
|
-
- [15. 自己学習システム](#15-自己学習システム)
|
|
29
|
-
- [16. オントロジー](#16-オントロジー)
|
|
30
|
-
- [17. プログラム合成](#17-プログラム合成)
|
|
31
|
-
- [18. ライブラリ学習](#18-ライブラリ学習)
|
|
32
|
-
- [Part 4: チーム開発・運用](#part-4-チーム開発運用)
|
|
33
|
-
- [19. KGPR(知識グラフPull Request)](#19-kgpr知識グラフpull-request)
|
|
34
|
-
- [20. REPL対話モード](#20-repl対話モード)
|
|
35
|
-
- [21. 学習データの共有](#21-学習データの共有)
|
|
36
|
-
- [Part 5: まとめ](#part-5-まとめ)
|
|
37
|
-
- [22. MUSUBIXで実現するエンタープライズ品質](#22-musubixで実現するエンタープライズ品質)
|
|
38
|
-
- [23. 次のステップ](#23-次のステップ)
|
|
39
|
-
- [付録](#付録)
|
|
40
|
-
- [A. MUSUBIX 9条憲法](#付録a-musubix-9条憲法)
|
|
41
|
-
- [B. CLIコマンド完全リファレンス](#付録b-cliコマンド完全リファレンス)
|
|
42
|
-
- [C. EARSパターン早見表](#付録c-earsパターン早見表)
|
|
43
|
-
- [D. プロジェクト構成](#付録d-プロジェクト構成)
|
|
44
|
-
- [E. 設計パターンカタログ](#付録e-設計パターンカタログ)
|
|
45
|
-
- [F. トレーサビリティID体系](#付録f-トレーサビリティid体系)
|
|
46
|
-
- [G. SMT-LIB2 / Z3 クイックリファレンス](#付録g-smt-lib2--z3-クイックリファレンス)
|
|
47
|
-
- [H. 用語集](#付録h-用語集)
|
|
48
|
-
- [I. トラブルシューティング](#付録i-トラブルシューティング)
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
# Part 1: イントロダクション
|
|
53
|
-
|
|
54
|
-
## 1. 従来のAIコーディングの限界
|
|
55
|
-
|
|
56
|
-
### 1.1 Vibe Coding(雰囲気コーディング)の問題点
|
|
57
|
-
|
|
58
|
-
「Vibe Coding」とは、明確な仕様や設計なしに、AIに対して曖昧な指示を与えてコードを生成するスタイルです。
|
|
59
|
-
|
|
60
|
-
```
|
|
61
|
-
ユーザー: 「いい感じの経費精算システム作って」
|
|
62
|
-
AI: (なんとなく動くコードを生成)
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**問題点:**
|
|
66
|
-
|
|
67
|
-
| 問題 | 説明 | エンタープライズへの影響 |
|
|
68
|
-
|------|------|------------------------|
|
|
69
|
-
| **再現性がない** | 同じ指示でも異なるコードが生成される | 品質管理が不可能 |
|
|
70
|
-
| **仕様が不明** | 何を作ったのか後から分からない | 保守・引継ぎ困難 |
|
|
71
|
-
| **監査不可** | なぜその実装になったか説明できない | コンプライアンス違反 |
|
|
72
|
-
| **テスト困難** | 仕様がないのでテストケースが書けない | バグの見逃し |
|
|
73
|
-
| **変更影響不明** | 要件変更時の影響範囲が分からない | 予期せぬ障害 |
|
|
74
|
-
|
|
75
|
-
**実例: Vibe Codingの危険性**
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
ユーザー: 「経費の承認機能を追加して」
|
|
79
|
-
|
|
80
|
-
AIの出力(問題あり):
|
|
81
|
-
- 承認上限金額のチェックなし
|
|
82
|
-
- 自己承認が可能な実装
|
|
83
|
-
- 監査ログなし
|
|
84
|
-
- 承認済み経費の編集が可能
|
|
85
|
-
|
|
86
|
-
→ 内部統制違反、不正の温床に
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### 1.2 GitHub Copilot単体の限界
|
|
90
|
-
|
|
91
|
-
GitHub Copilotは優れたコード補完ツールですが、エンタープライズ開発には不十分です。
|
|
92
|
-
|
|
93
|
-
**Copilotの強み:**
|
|
94
|
-
- コード補完が高速・高精度
|
|
95
|
-
- 多言語対応
|
|
96
|
-
- IDE統合が優秀
|
|
97
|
-
|
|
98
|
-
**エンタープライズでの限界:**
|
|
99
|
-
|
|
100
|
-
| 機能 | Copilot | エンタープライズ要件 |
|
|
101
|
-
|------|---------|-------------------|
|
|
102
|
-
| 要件管理 | ❌ なし | 形式的な要件定義必須 |
|
|
103
|
-
| トレーサビリティ | ❌ なし | 要件↔コード追跡必須 |
|
|
104
|
-
| 設計検証 | ❌ なし | SOLID原則等の検証必須 |
|
|
105
|
-
| セキュリティ分析 | ⚠️ 限定的 | 網羅的な脆弱性検出必須 |
|
|
106
|
-
| 形式検証 | ❌ なし | ビジネスルールの数学的証明 |
|
|
107
|
-
| 監査証跡 | ❌ なし | 変更履歴・理由の記録必須 |
|
|
108
|
-
| 知識蓄積 | ❌ なし | プロジェクト固有パターンの学習 |
|
|
109
|
-
|
|
110
|
-
### 1.3 Claude Code / Cursor の課題
|
|
111
|
-
|
|
112
|
-
Claude CodeやCursorは、より高度なAIコーディング体験を提供しますが、根本的な課題は解決していません。
|
|
113
|
-
|
|
114
|
-
**Claude Codeの強み:**
|
|
115
|
-
- 長いコンテキスト理解
|
|
116
|
-
- マルチファイル編集
|
|
117
|
-
- 高度な推論能力
|
|
118
|
-
|
|
119
|
-
**Cursorの強み:**
|
|
120
|
-
- IDE統合が優秀
|
|
121
|
-
- 高速なレスポンス
|
|
122
|
-
- チャット履歴管理
|
|
123
|
-
|
|
124
|
-
**共通する限界:**
|
|
125
|
-
|
|
126
|
-
```mermaid
|
|
127
|
-
flowchart TB
|
|
128
|
-
subgraph Claude["Claude Code / Cursor の構造"]
|
|
129
|
-
subgraph Neural["Neural(LLM)のみ"]
|
|
130
|
-
subgraph Inference["確率的な推論"]
|
|
131
|
-
PM[パターンマッチング]
|
|
132
|
-
SP[統計的な予測]
|
|
133
|
-
PO[「それっぽい」出力]
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
Missing["❌ 欠けている要素"]
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
Missing --> M1["❌ 形式的な知識グラフ"]
|
|
140
|
-
Missing --> M2["❌ 論理的な検証機構"]
|
|
141
|
-
Missing --> M3["❌ 学習データの永続化"]
|
|
142
|
-
Missing --> M4["❌ トレーサビリティ"]
|
|
143
|
-
Missing --> M5["❌ 品質ゲート"]
|
|
144
|
-
|
|
145
|
-
style Claude fill:#f9f9f9,stroke:#333
|
|
146
|
-
style Neural fill:#e3f2fd,stroke:#1976d2
|
|
147
|
-
style Missing fill:#ffebee,stroke:#c62828
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
### 1.4 なぜエンタープライズ開発には不十分なのか
|
|
151
|
-
|
|
152
|
-
エンタープライズアプリケーションには、以下の特性があります。
|
|
153
|
-
|
|
154
|
-
| 特性 | 説明 | 従来AIツールの対応 |
|
|
155
|
-
|------|------|-------------------|
|
|
156
|
-
| **内部統制** | 承認ワークフロー、権限分離 | ❌ 考慮なし |
|
|
157
|
-
| **監査要件** | 変更履歴、アクセスログ | ❌ 対応なし |
|
|
158
|
-
| **コンプライアンス** | 法規制、業界標準準拠 | ❌ 検証不可 |
|
|
159
|
-
| **長期保守** | 10年以上の運用 | ❌ 仕様不明で困難 |
|
|
160
|
-
| **大規模チーム** | 100人以上での開発 | ❌ 知識共有なし |
|
|
161
|
-
| **ミッションクリティカル** | 24/365稼働 | ❌ 形式検証なし |
|
|
162
|
-
|
|
163
|
-
---
|
|
164
|
-
|
|
165
|
-
## 2. SDD(Specification Driven Development)の課題
|
|
166
|
-
|
|
167
|
-
### 2.1 SDDとは
|
|
168
|
-
|
|
169
|
-
SDD(Specification Driven Development)は、仕様書を起点とした開発手法です。
|
|
170
|
-
|
|
171
|
-
```mermaid
|
|
172
|
-
flowchart LR
|
|
173
|
-
subgraph Traditional["従来のSDD"]
|
|
174
|
-
A[仕様書] --> B[設計書] --> C[実装] --> D[テスト]
|
|
175
|
-
A1[手動] -.-> A
|
|
176
|
-
B1[手動] -.-> B
|
|
177
|
-
C1[手動] -.-> C
|
|
178
|
-
D1[手動] -.-> D
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
style Traditional fill:#fff3e0,stroke:#e65100
|
|
182
|
-
style A1 fill:#ffccbc,stroke:#bf360c
|
|
183
|
-
style B1 fill:#ffccbc,stroke:#bf360c
|
|
184
|
-
style C1 fill:#ffccbc,stroke:#bf360c
|
|
185
|
-
style D1 fill:#ffccbc,stroke:#bf360c
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
**SDDの利点:**
|
|
189
|
-
- 仕様が明確
|
|
190
|
-
- トレーサビリティ確保
|
|
191
|
-
- 品質管理が可能
|
|
192
|
-
|
|
193
|
-
### 2.2 SDDの課題
|
|
194
|
-
|
|
195
|
-
しかし、従来のSDDには重大な課題があります。
|
|
196
|
-
|
|
197
|
-
| 課題 | 説明 | 影響 |
|
|
198
|
-
|------|------|------|
|
|
199
|
-
| **手動作業が多い** | 仕様書↔コードの同期が手動 | 工数増大、同期ズレ |
|
|
200
|
-
| **AIとの統合が弱い** | AIは仕様を理解しない | AI活用の恩恵が限定的 |
|
|
201
|
-
| **形式化が困難** | 自然言語仕様は曖昧 | 解釈の齟齬 |
|
|
202
|
-
| **変更追従が困難** | 仕様変更時の影響分析が手動 | 変更コスト高 |
|
|
203
|
-
| **知識の断絶** | プロジェクト間で学習が活かせない | 車輪の再発明 |
|
|
204
|
-
|
|
205
|
-
### 2.3 SDDツールの現状
|
|
206
|
-
|
|
207
|
-
これらの課題を解決するため、SDDをAIと統合したツールが登場しています。
|
|
208
|
-
|
|
209
|
-
:::note info
|
|
210
|
-
**EARS(Easy Approach to Requirements Syntax)とは?**
|
|
211
|
-
要件を曖昧さなく記述するための形式言語です。「WHEN [条件] THE SYSTEM SHALL [動作]」のような5つのパターンで要件を構造化し、検証可能な形式にします。詳細は[6.2 EARS形式](#62-musubixが実行する処理)で解説します。
|
|
212
|
-
:::
|
|
213
|
-
|
|
214
|
-
| ツール | 提供元 | 特徴 | リリース |
|
|
215
|
-
|--------|--------|------|----------|
|
|
216
|
-
| **AWS Kiro** | Amazon Web Services | VS Code系IDE、EARS記法、requirements/design/tasks.md、Agent Hooks | 2025年 |
|
|
217
|
-
| **GitHub Spec Kit** | GitHub Next | 仕様書からのコード生成、Copilot統合(実験中) | 2025年(Preview) |
|
|
218
|
-
| **Cursor Rules** | Cursor | .cursorrules による開発ルール定義、カスタムプロンプト | 2024年〜 |
|
|
219
|
-
| **Claude Projects** | Anthropic | Project Knowledge による文脈管理、Memory機能 | 2024年〜 |
|
|
220
|
-
|
|
221
|
-
#### AWS Kiro
|
|
222
|
-
|
|
223
|
-
AWS Kiroは、Amazonが提供するSpec-Driven Development特化のAI IDE(VS Code互換)です。
|
|
224
|
-
|
|
225
|
-
**主な機能:**
|
|
226
|
-
- **EARS記法サポート**: 要件を`WHEN [条件] THE SYSTEM SHALL [動作]`形式で記述
|
|
227
|
-
- **3ファイル構成**: `requirements.md`、`design.md`、`tasks.md`による構造化
|
|
228
|
-
- **Agent Hooks**: ファイル保存時にテスト生成やドキュメント更新を自動実行
|
|
229
|
-
- **Steering Files**: プロジェクト固有のルールやコーディング標準を定義
|
|
230
|
-
- **Claude Sonnet 4.5採用**: 高度な推論能力を持つLLMを搭載
|
|
231
|
-
|
|
232
|
-
```
|
|
233
|
-
Kiroのワークフロー:
|
|
234
|
-
自然言語 → requirements.md → design.md → tasks.md → 実装
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
:::note info
|
|
238
|
-
Kiroは「Vibe Coding(雰囲気コーディング)からViable Code(実用コード)へ」をスローガンに、AI生成コードの品質向上を目指しています。
|
|
239
|
-
:::
|
|
240
|
-
|
|
241
|
-
#### GitHub Spec Kit(実験的プロジェクト)
|
|
242
|
-
|
|
243
|
-
GitHub Nextが開発中のSpec Kitは、仕様書からコードを生成する実験的プロジェクトです。GitHub Copilotとの統合を前提に設計されており、仕様とコードの双方向同期を目指しています。
|
|
244
|
-
|
|
245
|
-
#### その他のアプローチ
|
|
246
|
-
|
|
247
|
-
| アプローチ | ツール | 概要 |
|
|
248
|
-
|-----------|--------|------|
|
|
249
|
-
| **ルールベース** | Cursor Rules、Windsurf Rules | `.cursorrules`等で開発ルールを定義 |
|
|
250
|
-
| **知識ベース** | Claude Projects | プロジェクト文脈をKnowledgeとして管理 |
|
|
251
|
-
| **エージェント型** | Devin、OpenHands | 自律的にタスクを実行するAIエージェント |
|
|
252
|
-
|
|
253
|
-
### 2.4 既存SDDツールの限界
|
|
254
|
-
|
|
255
|
-
これらのツールは従来のAIコーディングより進歩していますが、依然として課題があります。
|
|
256
|
-
|
|
257
|
-
:::note info
|
|
258
|
-
**この表に登場する専門用語**
|
|
259
|
-
- **C4モデル**: システム設計を4つのレベル(Context/Container/Component/Code)で階層的に表現する手法
|
|
260
|
-
- **Z3 SMTソルバー**: Microsoftが開発した形式検証ツール。数学的にプログラムの正しさを証明できる
|
|
261
|
-
- **YATA**: MUSUBIXの知識グラフシステム。プロジェクトの知識を構造化して保存・推論する
|
|
262
|
-
- **トレーサビリティ**: 要件↔設計↔コード↔テストの対応関係を追跡できること
|
|
263
|
-
- **KGPR**: Knowledge Graph Pull Request。知識グラフの変更をGitのPRのように管理する仕組み
|
|
264
|
-
:::
|
|
265
|
-
|
|
266
|
-
| 観点 | 既存SDDツール | MUSUBIX |
|
|
267
|
-
|------|-------------|---------|
|
|
268
|
-
| **要件形式** | EARS(一部)、自由形式 | EARS完全サポート + 検証 |
|
|
269
|
-
| **設計パターン** | 限定的 | C4モデル + 設計パターン検出 |
|
|
270
|
-
| **形式検証** | ❌ なし | ✅ Z3 SMTソルバー統合 |
|
|
271
|
-
| **知識グラフ** | ❌ なし | ✅ YATA統合 |
|
|
272
|
-
| **トレーサビリティ** | 限定的 | ✅ 要件↔設計↔コード↔テスト完全追跡 |
|
|
273
|
-
| **自己学習** | ❌ なし | ✅ パターン学習・フィードバック |
|
|
274
|
-
| **チーム共有** | 限定的 | ✅ KGPR(知識グラフPR) |
|
|
275
|
-
|
|
276
|
-
### 2.5 AIコーディングとSDDの溝
|
|
277
|
-
|
|
278
|
-
```mermaid
|
|
279
|
-
flowchart LR
|
|
280
|
-
subgraph AI["AIコーディング"]
|
|
281
|
-
AI1["✅ 高速"]
|
|
282
|
-
AI2["✅ 柔軟"]
|
|
283
|
-
AI3["❌ 仕様不明"]
|
|
284
|
-
AI4["❌ 再現性なし"]
|
|
285
|
-
end
|
|
286
|
-
|
|
287
|
-
subgraph SDD["SDD"]
|
|
288
|
-
SDD1["✅ 品質管理"]
|
|
289
|
-
SDD2["✅ トレーサビリティ"]
|
|
290
|
-
SDD3["❌ 低速"]
|
|
291
|
-
SDD4["❌ 硬直的"]
|
|
292
|
-
end
|
|
293
|
-
|
|
294
|
-
AI <--> |溝| SDD
|
|
295
|
-
|
|
296
|
-
MUSUBIX["🔗 この溝を埋めるのが\nMUSUBIX"]
|
|
297
|
-
AI --> MUSUBIX
|
|
298
|
-
SDD --> MUSUBIX
|
|
299
|
-
|
|
300
|
-
style AI fill:#e3f2fd,stroke:#1976d2
|
|
301
|
-
style SDD fill:#fff3e0,stroke:#e65100
|
|
302
|
-
style MUSUBIX fill:#c8e6c9,stroke:#388e3c,stroke-width:3px
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
---
|
|
306
|
-
|
|
307
|
-
## 3. MUSUBIXとは
|
|
308
|
-
|
|
309
|
-
### 3.1 Neuro-Symbolic AI統合
|
|
310
|
-
|
|
311
|
-
:::note info
|
|
312
|
-
**Neuro-Symbolic AIとは?**
|
|
313
|
-
- **Neural(ニューラル)**: LLM(大規模言語モデル)による確率的・創造的な処理。パターン認識や自然言語理解が得意
|
|
314
|
-
- **Symbolic(シンボリック)**: 知識グラフや論理規則による厳密な推論。一貫性保証や形式検証が得意
|
|
315
|
-
- 両者を組み合わせることで、LLMの創造性とシンボリック推論の厳密性を両立させます
|
|
316
|
-
:::
|
|
317
|
-
|
|
318
|
-
MUSUBIXは、**Neural(LLM)** と **Symbolic(知識グラフ)** を統合した次世代AIコーディングシステムです。
|
|
319
|
-
|
|
320
|
-
```mermaid
|
|
321
|
-
flowchart TB
|
|
322
|
-
subgraph MUSUBIX["MUSUBIX"]
|
|
323
|
-
subgraph Neural["Neural(LLM)"]
|
|
324
|
-
N1[創造的生成]
|
|
325
|
-
N2[自然言語理解]
|
|
326
|
-
N3[パターン認識]
|
|
327
|
-
N4[柔軟な対応]
|
|
328
|
-
end
|
|
329
|
-
|
|
330
|
-
subgraph Symbolic["Symbolic(YATA)"]
|
|
331
|
-
S1[知識グラフ]
|
|
332
|
-
S2[論理推論]
|
|
333
|
-
S3[形式検証]
|
|
334
|
-
S4[一貫性保証]
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
Neural <--> Symbolic
|
|
338
|
-
|
|
339
|
-
subgraph Engine["統合推論エンジン"]
|
|
340
|
-
E1[信頼度評価]
|
|
341
|
-
E2[最終決定]
|
|
342
|
-
end
|
|
343
|
-
|
|
344
|
-
Neural --> Engine
|
|
345
|
-
Symbolic --> Engine
|
|
346
|
-
end
|
|
347
|
-
|
|
348
|
-
style MUSUBIX fill:#f5f5f5,stroke:#333,stroke-width:2px
|
|
349
|
-
style Neural fill:#e3f2fd,stroke:#1976d2
|
|
350
|
-
style Symbolic fill:#fff3e0,stroke:#e65100
|
|
351
|
-
style Engine fill:#c8e6c9,stroke:#388e3c
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
### 3.2 信頼度評価ルール
|
|
355
|
-
|
|
356
|
-
MUSUBIXは、NeuralとSymbolicの結果を以下のルールで統合します。
|
|
357
|
-
|
|
358
|
-
| シンボリック結果 | ニューラル信頼度 | 最終決定 |
|
|
359
|
-
|-----------------|-----------------|---------|
|
|
360
|
-
| invalid(無効) | - | ニューラル結果を**棄却** |
|
|
361
|
-
| valid(有効) | ≥0.8 | ニューラル結果を**採用** |
|
|
362
|
-
| valid(有効) | <0.8 | シンボリック結果を**優先** |
|
|
363
|
-
|
|
364
|
-
:::note warn
|
|
365
|
-
**なぜこのルールか**
|
|
366
|
-
- シンボリック(形式論理)は「絶対に正しい」ことを保証
|
|
367
|
-
- ニューラルが生成しても、論理的に誤りなら却下
|
|
368
|
-
- 論理的に正しく、かつAIの確信度が高い場合のみ採用
|
|
369
|
-
:::
|
|
370
|
-
|
|
371
|
-
### 3.3 MUSUBIXの構成要素
|
|
372
|
-
|
|
373
|
-
| コンポーネント | 役割 |
|
|
374
|
-
|---------------|------|
|
|
375
|
-
| **EARS検証** | 要件を5つの形式パターンで検証 |
|
|
376
|
-
| **C4モデル** | 4レベルの設計構造化 |
|
|
377
|
-
| **YATA** | 知識グラフによる推論・検証 |
|
|
378
|
-
| **Z3統合** | SMTソルバーによる形式検証 |
|
|
379
|
-
| **自己学習** | パターン抽出・蓄積・適用 |
|
|
380
|
-
| **トレーサビリティ** | 要件↔設計↔コード↔テストの追跡 |
|
|
381
|
-
| **9条憲法** | 開発ルールの強制 |
|
|
382
|
-
|
|
383
|
-
### 3.4 開発フローの変革
|
|
384
|
-
|
|
385
|
-
```mermaid
|
|
386
|
-
flowchart TB
|
|
387
|
-
subgraph Traditional["従来"]
|
|
388
|
-
T1[自然言語] --> T2[AI] --> T3["コード(品質不明)"]
|
|
389
|
-
end
|
|
390
|
-
|
|
391
|
-
subgraph MUSUBIX["MUSUBIX"]
|
|
392
|
-
M1[自然言語]
|
|
393
|
-
M2[EARS形式化]
|
|
394
|
-
M3["要件(検証済み)"]
|
|
395
|
-
M4[C4設計]
|
|
396
|
-
M5["設計(パターン適用済み)"]
|
|
397
|
-
M6[コード生成]
|
|
398
|
-
M7["コード(静的解析済み)"]
|
|
399
|
-
M8[形式検証]
|
|
400
|
-
M9[検証済みコード]
|
|
401
|
-
M10[テスト生成]
|
|
402
|
-
M11[テスト付きコード]
|
|
403
|
-
M12["✅ 完全なトレーサビリティで追跡可能"]
|
|
404
|
-
|
|
405
|
-
M1 --> M2 --> M3 --> M4 --> M5 --> M6 --> M7 --> M8 --> M9 --> M10 --> M11 --> M12
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
style Traditional fill:#ffebee,stroke:#c62828
|
|
409
|
-
style MUSUBIX fill:#e8f5e9,stroke:#2e7d32
|
|
410
|
-
style T3 fill:#ffcdd2,stroke:#b71c1c
|
|
411
|
-
style M12 fill:#a5d6a7,stroke:#1b5e20,stroke-width:2px
|
|
412
|
-
```
|
|
413
|
-
|
|
414
|
-
### 3.5 動作環境と推奨構成
|
|
415
|
-
|
|
416
|
-
MUSUBIXは、MCP(Model Context Protocol)に対応した様々なAIコーディングツールで利用可能です。
|
|
417
|
-
|
|
418
|
-
#### 対応AIコーディングツール
|
|
419
|
-
|
|
420
|
-
| ツール | 対応状況 | 備考 |
|
|
421
|
-
|--------|---------|------|
|
|
422
|
-
| **GitHub Copilot Agent mode** | ✅ 推奨 | VS Code拡張、MCPサポート |
|
|
423
|
-
| **Claude Code** | ✅ 対応 | ターミナルベース |
|
|
424
|
-
| **Cursor** | ✅ 対応 | Agent mode + MCP |
|
|
425
|
-
| **Windsurf** | ✅ 対応 | MCP対応 |
|
|
426
|
-
| **その他MCP対応ツール** | ✅ 対応 | MCP経由で連携 |
|
|
427
|
-
|
|
428
|
-
#### 推奨構成: GitHub Copilot Enterprise + Claude Opus 4.5
|
|
429
|
-
|
|
430
|
-
:::note info
|
|
431
|
-
**なぜこの組み合わせがおすすめか**
|
|
432
|
-
|
|
433
|
-
**GitHub Copilot Enterprise**を選ぶ理由:
|
|
434
|
-
- VS Codeとのシームレスな統合
|
|
435
|
-
- Agent modeによるツール呼び出し(MCP)が安定
|
|
436
|
-
- 企業向けセキュリティ・コンプライアンス対応
|
|
437
|
-
- チーム間でのナレッジ共有機能
|
|
438
|
-
|
|
439
|
-
**Claude Opus 4.5**を選ぶ理由:
|
|
440
|
-
- 長いコンテキスト(200Kトークン)の理解に優れる
|
|
441
|
-
- 複雑な推論タスクで高い精度
|
|
442
|
-
- **出力コンテキストが上限を超える場合、大きなコンテキストを扱える他のLLMに切り替え可能**
|
|
443
|
-
- コード生成の品質が高い
|
|
444
|
-
|
|
445
|
-
**組み合わせのメリット:**
|
|
446
|
-
- MUSUBIXの長い要件定義書・設計書を正確に理解
|
|
447
|
-
- 大規模なコードベースでも文脈を維持
|
|
448
|
-
- LLMの出力制限に縛られない柔軟な運用
|
|
449
|
-
- エンタープライズグレードのセキュリティ
|
|
450
|
-
:::
|
|
451
|
-
|
|
452
|
-
#### 推奨OS環境: WSL(Windows Subsystem for Linux)
|
|
453
|
-
|
|
454
|
-
:::note warn
|
|
455
|
-
**Windows環境では WSL の使用を強く推奨します**
|
|
456
|
-
|
|
457
|
-
**WSLを推奨する理由:**
|
|
458
|
-
1. **コマンド実行の安定性**: MUSUBIXのCLIツールはLinux環境で最も安定動作
|
|
459
|
-
2. **Z3インストールの容易さ**: `apt install z3`で形式検証ツールを簡単導入
|
|
460
|
-
3. **ファイルシステムの互換性**: Unix系パス表記でトラブル回避
|
|
461
|
-
4. **開発ツールチェーン**: npm、Node.js、Gitなどの動作が安定
|
|
462
|
-
5. **本番環境との一貫性**: 多くのサーバーがLinux環境
|
|
463
|
-
|
|
464
|
-
**WSL2セットアップ(Windows 10/11):**
|
|
465
|
-
```bash
|
|
466
|
-
# PowerShellを管理者権限で実行
|
|
467
|
-
wsl --install -d Ubuntu-22.04
|
|
468
|
-
|
|
469
|
-
# WSL内でNode.js環境をセットアップ
|
|
470
|
-
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
471
|
-
sudo apt install -y nodejs
|
|
472
|
-
|
|
473
|
-
# Z3(形式検証)のインストール
|
|
474
|
-
sudo apt install -y z3
|
|
475
|
-
```
|
|
476
|
-
:::
|
|
477
|
-
|
|
478
|
-
#### 最小システム要件
|
|
479
|
-
|
|
480
|
-
| 項目 | 最小要件 | 推奨 |
|
|
481
|
-
|------|---------|------|
|
|
482
|
-
| **Node.js** | 20.0.0以上 | 22.x LTS |
|
|
483
|
-
| **npm** | 10.0.0以上 | 最新 |
|
|
484
|
-
| **メモリ** | 8GB | 16GB以上 |
|
|
485
|
-
| **OS** | Windows 10 (WSL2), macOS 12+, Ubuntu 20.04+ | Ubuntu 22.04 (WSL2) |
|
|
486
|
-
|
|
487
|
-
---
|
|
488
|
-
|
|
489
|
-
## 4. エンタープライズ開発に必要な要素
|
|
490
|
-
|
|
491
|
-
### 4.1 MUSUBIXが提供する価値
|
|
492
|
-
|
|
493
|
-
エンタープライズアプリケーション開発では、単に「動くコード」を作るだけでは不十分です。内部統制、監査対応、コンプライアンス遵守など、ビジネス上の厳格な要件を満たす必要があります。
|
|
494
|
-
|
|
495
|
-
MUSUBIXは、これらのエンタープライズ要件に対して、AIコーディングの利便性を維持しながら対応する唯一のソリューションです。
|
|
496
|
-
|
|
497
|
-
| エンタープライズ要件 | MUSUBIXの対応 |
|
|
498
|
-
|---------------------|---------------|
|
|
499
|
-
| **内部統制** | EARS形式で承認ルールを形式化、Z3で正当性証明 |
|
|
500
|
-
| **監査要件** | 完全なトレーサビリティ、変更履歴自動記録 |
|
|
501
|
-
| **コンプライアンス** | 9条憲法による品質ゲート強制 |
|
|
502
|
-
| **長期保守** | 明確な仕様、設計パターンの文書化 |
|
|
503
|
-
| **大規模チーム** | KGPR(知識グラフPR)でチーム知識共有 |
|
|
504
|
-
| **ミッションクリティカル** | 形式検証、セキュリティ分析 |
|
|
505
|
-
|
|
506
|
-
:::note info
|
|
507
|
-
**従来のAIコーディングとの違い**
|
|
508
|
-
- **Vibe Coding**: 「なんとなく動く」→ 監査で説明不能
|
|
509
|
-
- **MUSUBIX**: 「なぜこう実装したか」を要件IDで追跡可能 → 監査対応可能
|
|
510
|
-
:::
|
|
511
|
-
|
|
512
|
-
### 4.2 本マニュアルで構築するシステム
|
|
513
|
-
|
|
514
|
-
**経費精算システム(Expense Management System)**
|
|
515
|
-
|
|
516
|
-
このマニュアルでは、実際に経費精算システムを構築しながら、MUSUBIXの全機能を体験します。
|
|
517
|
-
|
|
518
|
-
```mermaid
|
|
519
|
-
flowchart TB
|
|
520
|
-
EMS["経費精算システムの要素"]
|
|
521
|
-
|
|
522
|
-
EMS --> A[経費申請・登録]
|
|
523
|
-
EMS --> B[多段階承認ワークフロー]
|
|
524
|
-
EMS --> C[予算チェック]
|
|
525
|
-
EMS --> D[領収書管理]
|
|
526
|
-
EMS --> E[監査ログ]
|
|
527
|
-
EMS --> F[レポート生成]
|
|
528
|
-
|
|
529
|
-
B --> B1[金額による承認ルート分岐]
|
|
530
|
-
B --> B2[上長・経理の段階承認]
|
|
531
|
-
|
|
532
|
-
style EMS fill:#e1f5fe,stroke:#0277bd,stroke-width:2px
|
|
533
|
-
style B fill:#fff3e0,stroke:#e65100
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
**なぜ経費精算システムか:**
|
|
537
|
-
|
|
538
|
-
経費精算システムは、エンタープライズアプリケーションの典型的な要素を網羅しています。承認ワークフロー、金額計算、監査要件、セキュリティなど、MUSUBIXの各機能を実践的に学ぶのに最適な題材です。
|
|
539
|
-
|
|
540
|
-
また、多くの企業で実際に使われているシステムであるため、学んだ内容をすぐに実務に活かすことができます。
|
|
541
|
-
|
|
542
|
-
| 要素 | MUSUBIX機能との対応 |
|
|
543
|
-
|------|-------------------|
|
|
544
|
-
| 承認ワークフロー | EARS形式、状態遷移、形式検証 |
|
|
545
|
-
| 金額ルール | Z3による数学的検証 |
|
|
546
|
-
| 監査要件 | トレーサビリティ、監査ログ |
|
|
547
|
-
| セキュリティ | 金額改ざん検知、認可チェック |
|
|
548
|
-
| 経費カテゴリ | オントロジーによる階層表現 |
|
|
549
|
-
|
|
550
|
-
:::note info
|
|
551
|
-
**このマニュアルで得られるスキル**
|
|
552
|
-
- EARS形式での要件定義
|
|
553
|
-
- C4モデルでの設計
|
|
554
|
-
- トレーサビリティを維持したコード生成
|
|
555
|
-
- Z3による形式検証
|
|
556
|
-
- MUSUBIXの自己学習システムの活用
|
|
557
|
-
:::
|
|
558
|
-
|
|
559
|
-
---
|
|
560
|
-
|
|
561
|
-
**次のセクションでは、実際にプロジェクトを初期化し、経費精算システムの開発を開始します。**
|
|
562
|
-
|
|
563
|
-
---
|
|
564
|
-
|
|
565
|
-
# Part 2: 経費精算システム開発
|
|
566
|
-
|
|
567
|
-
## 5. プロジェクト初期化
|
|
568
|
-
|
|
569
|
-
それでは、実際にMUSUBIXプロジェクトを作成しましょう。
|
|
570
|
-
|
|
571
|
-
### 5.1 環境の準備
|
|
572
|
-
|
|
573
|
-
#### Step 1: WSL Ubuntuにアクセス
|
|
574
|
-
|
|
575
|
-
Windowsターミナル(またはWindows Terminal)を起動し、WSLのUbuntuにアクセスします。
|
|
576
|
-
|
|
577
|
-
```bash
|
|
578
|
-
# Windowsターミナルで新しいタブを開き、Ubuntuを選択
|
|
579
|
-
# または、PowerShellから以下を実行
|
|
580
|
-
wsl -d Ubuntu
|
|
581
|
-
```
|
|
582
|
-
|
|
583
|
-
#### Step 2: プロジェクトディレクトリの作成と移動
|
|
584
|
-
|
|
585
|
-
```bash
|
|
586
|
-
# プロジェクト用ディレクトリを作成
|
|
587
|
-
mkdir -p ~/projects/expense-management-system
|
|
588
|
-
|
|
589
|
-
# ディレクトリに移動
|
|
590
|
-
cd ~/projects/expense-management-system
|
|
591
|
-
|
|
592
|
-
# VS Codeでプロジェクトを開く
|
|
593
|
-
code .
|
|
594
|
-
```
|
|
595
|
-
|
|
596
|
-
:::note info
|
|
597
|
-
VS Codeが起動したら、GitHub Copilot拡張機能がインストールされていることを確認してください。Agent modeを使用する場合は、Copilot Chatパネルで`@workspace`を使用できます。
|
|
598
|
-
:::
|
|
599
|
-
|
|
600
|
-
### 5.2 MUSUBIXプロジェクトの初期化
|
|
601
|
-
|
|
602
|
-
VS Code上でGitHub Copilot Agent modeを使用して、プロジェクトを初期化します。
|
|
603
|
-
|
|
604
|
-
AIエージェントは内部で以下のコマンドを実行します。
|
|
605
|
-
|
|
606
|
-
```bash
|
|
607
|
-
npx musubix init expense-management-system --name "経費精算システム"
|
|
608
|
-
```
|
|
609
|
-
|
|
610
|
-
### 5.3 実行結果
|
|
611
|
-
|
|
612
|
-
```
|
|
613
|
-
{
|
|
614
|
-
success: true,
|
|
615
|
-
projectPath: '/tmp/expense-management-system',
|
|
616
|
-
filesCreated: [
|
|
617
|
-
'steering/',
|
|
618
|
-
'steering/rules/',
|
|
619
|
-
'storage/',
|
|
620
|
-
'storage/specs/',
|
|
621
|
-
'storage/archive/',
|
|
622
|
-
'storage/changes/',
|
|
623
|
-
'.github/',
|
|
624
|
-
'.github/prompts/',
|
|
625
|
-
'.github/skills/',
|
|
626
|
-
'musubix.config.json',
|
|
627
|
-
'steering/rules/constitution.md',
|
|
628
|
-
'steering/product.md',
|
|
629
|
-
'steering/tech.md',
|
|
630
|
-
'steering/structure.md',
|
|
631
|
-
'AGENTS.md',
|
|
632
|
-
'storage/archive/.gitkeep',
|
|
633
|
-
'storage/changes/.gitkeep'
|
|
634
|
-
],
|
|
635
|
-
message: "MUSUBIX project '経費精算システム' initialized successfully!"
|
|
636
|
-
}
|
|
637
|
-
```
|
|
638
|
-
|
|
639
|
-
### 5.4 生成されたプロジェクト構造
|
|
640
|
-
|
|
641
|
-
```mermaid
|
|
642
|
-
flowchart TB
|
|
643
|
-
subgraph Project["expense-management-system/"]
|
|
644
|
-
subgraph GitHub[".github/"]
|
|
645
|
-
GP["prompts/ - AIプロンプトテンプレート"]
|
|
646
|
-
GS["skills/ - エージェントスキル定義"]
|
|
647
|
-
end
|
|
648
|
-
|
|
649
|
-
subgraph Steering["steering/ - プロジェクトメモリ"]
|
|
650
|
-
SR["rules/constitution.md - 9条憲法"]
|
|
651
|
-
SP["product.md - プロダクト情報"]
|
|
652
|
-
ST["tech.md - 技術スタック"]
|
|
653
|
-
SS["structure.md - アーキテクチャ構造"]
|
|
654
|
-
end
|
|
655
|
-
|
|
656
|
-
subgraph Storage["storage/ - 成果物保存"]
|
|
657
|
-
SSp["specs/ - 要件・設計・タスク"]
|
|
658
|
-
SA["archive/ - アーカイブ"]
|
|
659
|
-
SC["changes/ - 変更履歴"]
|
|
660
|
-
end
|
|
661
|
-
|
|
662
|
-
AG["AGENTS.md - AIエージェント向けガイド"]
|
|
663
|
-
CF["musubix.config.json - プロジェクト設定"]
|
|
664
|
-
end
|
|
665
|
-
|
|
666
|
-
style Project fill:#f5f5f5,stroke:#333
|
|
667
|
-
style Steering fill:#e8f5e9,stroke:#2e7d32
|
|
668
|
-
style Storage fill:#e3f2fd,stroke:#1976d2
|
|
669
|
-
```
|
|
670
|
-
|
|
671
|
-
### 5.5 設定ファイル(musubix.config.json)
|
|
672
|
-
|
|
673
|
-
```json:musubix.config.json
|
|
674
|
-
{
|
|
675
|
-
"version": "1.1.6",
|
|
676
|
-
"project": "経費精算システム",
|
|
677
|
-
"steeringDir": "./steering",
|
|
678
|
-
"storageDir": "./storage",
|
|
679
|
-
"llm": {
|
|
680
|
-
"provider": "anthropic",
|
|
681
|
-
"model": "claude-sonnet-4-20250514",
|
|
682
|
-
"maxTokens": 4096,
|
|
683
|
-
"temperature": 0.7
|
|
684
|
-
},
|
|
685
|
-
"yata": {
|
|
686
|
-
"transport": "stdio",
|
|
687
|
-
"server": "yata-mcp",
|
|
688
|
-
"timeout": 30000
|
|
689
|
-
},
|
|
690
|
-
"integration": {
|
|
691
|
-
"neuralThreshold": 0.7,
|
|
692
|
-
"symbolicThreshold": 0.8,
|
|
693
|
-
"defaultStrategy": "neural-validated",
|
|
694
|
-
"gracefulDegradation": true
|
|
695
|
-
}
|
|
696
|
-
}
|
|
697
|
-
```
|
|
698
|
-
|
|
699
|
-
**設定項目の説明:**
|
|
700
|
-
|
|
701
|
-
| 項目 | 説明 |
|
|
702
|
-
|------|------|
|
|
703
|
-
| `llm.provider` | 使用するLLMプロバイダー(anthropic) |
|
|
704
|
-
| `llm.model` | 使用するモデル(Claude Sonnet 4) |
|
|
705
|
-
| `integration.neuralThreshold` | ニューラル信頼度閾値(0.7以上で採用検討) |
|
|
706
|
-
| `integration.symbolicThreshold` | シンボリック検証閾値(0.8以上で確定) |
|
|
707
|
-
| `integration.defaultStrategy` | デフォルト戦略(neural-validated: Neural生成→Symbolic検証) |
|
|
708
|
-
|
|
709
|
-
### 5.6 steering/(プロジェクトメモリ)の役割
|
|
710
|
-
|
|
711
|
-
:::note info
|
|
712
|
-
**steering/とは?**
|
|
713
|
-
AIエージェントが参照する「プロジェクトの記憶」です。船の操舵(steering)に由来し、プロジェクトの方向性を定めます。技術スタック、アーキテクチャルール、プロダクト情報を格納し、AIが文脈を理解した上でコードを生成できます。AWS Kiroも同様の概念を採用しています。
|
|
714
|
-
:::
|
|
715
|
-
|
|
716
|
-
MUSUBIXの特徴的な概念である **steering/** ディレクトリは、AIエージェントが参照する「プロジェクトの記憶」です。
|
|
717
|
-
|
|
718
|
-
```mermaid
|
|
719
|
-
flowchart TB
|
|
720
|
-
subgraph Steering["steering/ - プロジェクトメモリ"]
|
|
721
|
-
R["rules/"]
|
|
722
|
-
R --> C["constitution.md - 絶対に守るべき9つのルール"]
|
|
723
|
-
P["product.md - このプロダクトは何か"]
|
|
724
|
-
T["tech.md - どの技術を使うか"]
|
|
725
|
-
S["structure.md - どのような構造で作るか"]
|
|
726
|
-
end
|
|
727
|
-
|
|
728
|
-
style Steering fill:#e8f5e9,stroke:#2e7d32
|
|
729
|
-
style C fill:#ffcdd2,stroke:#c62828,stroke-width:2px
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
**9条憲法(constitution.md)** は、すべての開発活動を統治する不変のルールです。AIエージェントは、コード生成前に必ずこのファイルを参照し、ルールに違反する出力を行いません。
|
|
733
|
-
|
|
734
|
-
:::note info
|
|
735
|
-
📖 詳細は [付録A: MUSUBIX 9条憲法](#付録a-9条憲法constitutional-articles) を参照
|
|
736
|
-
:::
|
|
737
|
-
|
|
738
|
-
---
|
|
739
|
-
|
|
740
|
-
## 6. 要件定義
|
|
741
|
-
|
|
742
|
-
MUSUBIXでは、作りたいシステムを自然言語で指示するだけで、AIエージェントが対話を通じてユーザーの要件を確認し、EARS形式の要件定義書を自動作成します。
|
|
743
|
-
|
|
744
|
-
従来の要件定義では、ドキュメント作成に多大な時間がかかりましたが、MUSUBIXを使えば対話しながら要件を明確化し、形式化された要件定義書を短時間で作成できます。
|
|
745
|
-
|
|
746
|
-
```mermaid
|
|
747
|
-
flowchart LR
|
|
748
|
-
A[自然言語で指示] --> B[AIが要件を生成]
|
|
749
|
-
B --> C[ユーザーがレビュー]
|
|
750
|
-
C --> D{修正が必要?}
|
|
751
|
-
D -->|はい| E[修正指示]
|
|
752
|
-
E --> B
|
|
753
|
-
D -->|いいえ| F[要件定義完了]
|
|
754
|
-
|
|
755
|
-
style A fill:#e3f2fd,stroke:#1976d2
|
|
756
|
-
style F fill:#c8e6c9,stroke:#388e3c,stroke-width:2px
|
|
757
|
-
```
|
|
758
|
-
|
|
759
|
-
AIエージェントが作成した要件定義書をユーザーがレビューし、修正が必要な箇所があればフィードバックを伝えます。このレビューと修正のサイクルを、修正の必要がなくなるまで繰り返すことで、高品質な要件定義書が完成します。
|
|
760
|
-
|
|
761
|
-
### 6.1 自然言語での指示
|
|
762
|
-
|
|
763
|
-
プロジェクト初期化後、AIエージェントに対して自然言語で要件を伝えます。
|
|
764
|
-
|
|
765
|
-
> 「経費精算システムの要件を定義してください。
|
|
766
|
-
>
|
|
767
|
-
> 主な機能:
|
|
768
|
-
> - 経費の申請・登録
|
|
769
|
-
> - 多段階承認ワークフロー(申請者→上長→経理)
|
|
770
|
-
> - 金額による承認ルート分岐(10万円以上は部長承認必要)
|
|
771
|
-
> - 経費カテゴリ管理(交通費、宿泊費、交際費など)
|
|
772
|
-
> - 予算チェック
|
|
773
|
-
> - 領収書の添付
|
|
774
|
-
> - 監査ログの記録
|
|
775
|
-
> - レポート出力」
|
|
776
|
-
|
|
777
|
-
### 6.2 MUSUBIXが実行する処理
|
|
778
|
-
|
|
779
|
-
MUSUBIXは、この自然言語を**EARS形式**(Easy Approach to Requirements Syntax)に変換します。
|
|
780
|
-
|
|
781
|
-
:::note info
|
|
782
|
-
**EARS形式の背景**
|
|
783
|
-
EARSは2009年にRolls-Royce社のAlistair Mavin氏らが提唱した要件記述法です。航空宇宙産業で的確な要件定義が求められる中、5つのパターンで要件の曖昧さを排除します。AWS KiroもEARSを採用しており、業界標準となりつつあります。
|
|
784
|
-
:::
|
|
785
|
-
|
|
786
|
-
**EARS形式とは:**
|
|
787
|
-
|
|
788
|
-
| パターン | 構文 | 用途 |
|
|
789
|
-
|---------|------|------|
|
|
790
|
-
| Ubiquitous | `THE [system] SHALL [requirement]` | 常に満たすべき要件 |
|
|
791
|
-
| Event-driven | `WHEN [event], THE [system] SHALL [response]` | イベント発生時の要件 |
|
|
792
|
-
| State-driven | `WHILE [state], THE [system] SHALL [response]` | 特定状態での要件 |
|
|
793
|
-
| Unwanted | `THE [system] SHALL NOT [behavior]` | 禁止事項 |
|
|
794
|
-
| Optional | `IF [condition], THEN THE [system] SHALL [response]` | 条件付き要件 |
|
|
795
|
-
|
|
796
|
-
:::note info
|
|
797
|
-
📖 詳細は [付録C: EARSパターン](#付録c-earsパターン) を参照
|
|
798
|
-
:::
|
|
799
|
-
|
|
800
|
-
### 6.3 AIエージェントによるEARS変換
|
|
801
|
-
|
|
802
|
-
AIエージェント(GitHub Copilot Agent mode + MUSUBIX)は、自然言語の要件をEARS形式に変換して要件定義書を作成します。
|
|
803
|
-
|
|
804
|
-
**変換例:**
|
|
805
|
-
|
|
806
|
-
| 自然言語 | EARSパターン | EARS形式 |
|
|
807
|
-
|---------|-------------|----------|
|
|
808
|
-
| 「ユーザーが経費を申請すると通知が送られる」 | Event-driven | WHEN a user submits an expense entry, THE System SHALL send notification to the approver. |
|
|
809
|
-
| 「10万円以上は部長承認が必要」 | Optional | IF an expense amount exceeds 100,000 JPY, THEN THE System SHALL require Director approval. |
|
|
810
|
-
| 「自分の経費は自分で承認できない」 | Unwanted | THE System SHALL NOT allow users to approve their own expense entries. |
|
|
811
|
-
| 「すべての操作は監査ログに記録」 | Ubiquitous | THE System SHALL log all operations with timestamp and user ID. |
|
|
812
|
-
| 「7日以上承認待ちならリマインダー」 | State-driven | WHILE an expense is pending for more than 7 days, THE System SHALL send daily reminders. |
|
|
813
|
-
|
|
814
|
-
### 6.4 生成された要件定義書
|
|
815
|
-
|
|
816
|
-
AIエージェントが生成した要件定義書の一部を示します。
|
|
817
|
-
|
|
818
|
-
```markdown
|
|
819
|
-
## 経費申請(Expense Submission)
|
|
820
|
-
|
|
821
|
-
### REQ-EXP-001: 経費登録
|
|
822
|
-
**[Ubiquitous]**
|
|
823
|
-
> THE Expense Management System SHALL allow authenticated users to create
|
|
824
|
-
> expense entries with date, amount, category, and description.
|
|
825
|
-
|
|
826
|
-
**優先度**: P0(必須)
|
|
827
|
-
|
|
828
|
-
### REQ-EXP-002: 領収書添付
|
|
829
|
-
**[Event-driven]**
|
|
830
|
-
> WHEN a user creates an expense entry, THE Expense Management System SHALL
|
|
831
|
-
> allow attachment of receipt images in JPEG, PNG, or PDF format.
|
|
832
|
-
|
|
833
|
-
**優先度**: P0(必須)
|
|
834
|
-
```
|
|
835
|
-
|
|
836
|
-
```markdown
|
|
837
|
-
## 承認ワークフロー(Approval Workflow)
|
|
838
|
-
|
|
839
|
-
### REQ-APR-002: 金額別承認ルート
|
|
840
|
-
**[Optional]**
|
|
841
|
-
> IF an expense amount exceeds 100,000 JPY, THEN THE Expense Management System
|
|
842
|
-
> SHALL require additional Director approval before Finance approval.
|
|
843
|
-
|
|
844
|
-
**優先度**: P0(必須)
|
|
845
|
-
|
|
846
|
-
### REQ-APR-006: 自己承認禁止
|
|
847
|
-
**[Unwanted]**
|
|
848
|
-
> THE Expense Management System SHALL NOT allow users to approve their own
|
|
849
|
-
> expense entries.
|
|
850
|
-
|
|
851
|
-
**優先度**: P0(必須)
|
|
852
|
-
```
|
|
853
|
-
|
|
854
|
-
### 6.5 要件検証の実行
|
|
855
|
-
|
|
856
|
-
要件定義書をEARS形式で検証します。
|
|
857
|
-
|
|
858
|
-
**自然言語での指示:**
|
|
859
|
-
> 「作成した要件定義書のEARS形式を検証してください」
|
|
860
|
-
> or
|
|
861
|
-
> 「要件定義定義書をレビュー」
|
|
862
|
-
|
|
863
|
-
**MUSUBIXが実行するコマンド:**
|
|
864
|
-
```bash
|
|
865
|
-
npx musubix requirements validate storage/specs/REQ-EXP-001-requirements.md
|
|
866
|
-
```
|
|
867
|
-
|
|
868
|
-
**実行結果:**
|
|
869
|
-
```json
|
|
870
|
-
{
|
|
871
|
-
"success": true,
|
|
872
|
-
"valid": true,
|
|
873
|
-
"issues": [],
|
|
874
|
-
"summary": { "errors": 0, "warnings": 0, "info": 0 },
|
|
875
|
-
"message": "✅ All requirements are valid"
|
|
876
|
-
}
|
|
877
|
-
```
|
|
878
|
-
|
|
879
|
-
### 6.6 要件サマリー
|
|
880
|
-
|
|
881
|
-
| カテゴリ | P0(必須) | P1(重要) | 合計 |
|
|
882
|
-
|---------|----------|----------|------|
|
|
883
|
-
| 経費申請 | 3 | 1 | 4 |
|
|
884
|
-
| 承認ワークフロー | 5 | 2 | 7 |
|
|
885
|
-
| 予算管理 | 2 | 1 | 3 |
|
|
886
|
-
| 監査・コンプライアンス | 3 | 0 | 3 |
|
|
887
|
-
| レポート | 0 | 3 | 3 |
|
|
888
|
-
| セキュリティ | 4 | 0 | 4 |
|
|
889
|
-
| **合計** | **17** | **7** | **24** |
|
|
890
|
-
|
|
891
|
-
### 6.7 なぜEARS形式が重要か
|
|
892
|
-
|
|
893
|
-
自然言語で書かれた要件は、読み手によって解釈が異なる可能性があります。「通知する」と書かれていても、「いつ」「誰に」「どのように」通知するのかが不明確です。
|
|
894
|
-
|
|
895
|
-
EARS形式を使うことで、要件の曖昧さを排除し、誰が読んでも同じ解釈ができる要件定義書を作成できます。さらに、形式化された要件は自動検証やテストケース生成にも活用できます。
|
|
896
|
-
|
|
897
|
-
| 観点 | 自然言語 | EARS形式 |
|
|
898
|
-
|------|---------|----------|
|
|
899
|
-
| **曖昧さ** | 「通知する」→ いつ?誰に? | WHEN [trigger], SHALL [action] で明確 |
|
|
900
|
-
| **検証可能性** | テストケース作成困難 | パターンから自動生成可能 |
|
|
901
|
-
| **トレーサビリティ** | 要件↔コードの対応不明 | REQ-ID で追跡可能 |
|
|
902
|
-
| **形式検証** | 数学的検証不可 | Z3/SMTソルバーで証明可能 |
|
|
903
|
-
|
|
904
|
-
:::note info
|
|
905
|
-
**エンタープライズ開発でのメリット**
|
|
906
|
-
- 監査時に「この機能はどの要件に基づいているか」を即座に説明可能
|
|
907
|
-
- 要件変更時の影響範囲を自動分析
|
|
908
|
-
- テストケースの網羅性を要件IDで保証
|
|
909
|
-
:::
|
|
910
|
-
|
|
911
|
-
---
|
|
912
|
-
|
|
913
|
-
## 7. 設計
|
|
914
|
-
|
|
915
|
-
### 7.1 自然言語での指示
|
|
916
|
-
|
|
917
|
-
要件定義が完了したら、設計フェーズに進みます。
|
|
918
|
-
|
|
919
|
-
> 「経費精算システムの設計を作成してください。
|
|
920
|
-
> C4モデルで構造化し、適切な設計パターンを適用してください。」
|
|
921
|
-
> or
|
|
922
|
-
> 「設計書を作成」
|
|
923
|
-
|
|
924
|
-
### 7.2 MUSUBIXが実行する処理
|
|
925
|
-
|
|
926
|
-
MUSUBIXは、要件定義書を入力として**C4モデル**に基づく設計を生成します。
|
|
927
|
-
|
|
928
|
-
:::note info
|
|
929
|
-
**C4モデルの背景**
|
|
930
|
-
C4モデルはSimon Brown氏が提唱したソフトウェアアーキテクチャの可視化手法です。「地図のズーム」のように、4つのレベルでシステムを階層的に説明します。経営層にはContext、技術リーダーにはContainer、開発者にはComponent/Codeと、対象者に合わせた説明が可能です。
|
|
931
|
-
:::
|
|
932
|
-
|
|
933
|
-
**C4モデルとは:**
|
|
934
|
-
|
|
935
|
-
| レベル | 説明 | 対象読者 |
|
|
936
|
-
|-------|------|---------|
|
|
937
|
-
| **Context** | システム境界と外部アクター | 経営層、ステークホルダー |
|
|
938
|
-
| **Container** | 技術選択、コンテナ構成 | アーキテクト、技術リーダー |
|
|
939
|
-
| **Component** | コンテナ内部構造 | 開発者 |
|
|
940
|
-
| **Code** | 実装詳細 | 開発者 |
|
|
941
|
-
|
|
942
|
-
### 7.3 生成された設計書
|
|
943
|
-
|
|
944
|
-
#### Context Diagram(システムコンテキスト)
|
|
945
|
-
|
|
946
|
-
```mermaid
|
|
947
|
-
flowchart TB
|
|
948
|
-
subgraph Actors["External Actors"]
|
|
949
|
-
EMP["👤 Employee<br/>(申請者)"]
|
|
950
|
-
MGR["👤 Manager<br/>(上長)"]
|
|
951
|
-
DIR["👤 Director<br/>(部長)"]
|
|
952
|
-
FIN["👤 Finance<br/>(経理)"]
|
|
953
|
-
end
|
|
954
|
-
|
|
955
|
-
EMS["📦 Expense Management System<br/>経費精算システム"]
|
|
956
|
-
|
|
957
|
-
subgraph External["External Systems"]
|
|
958
|
-
EMAIL["📧 Email Server"]
|
|
959
|
-
LDAP["🔐 LDAP/AD<br/>(認証)"]
|
|
960
|
-
ACC["💰 Accounting System"]
|
|
961
|
-
end
|
|
962
|
-
|
|
963
|
-
EMP --> EMS
|
|
964
|
-
MGR --> EMS
|
|
965
|
-
DIR --> EMS
|
|
966
|
-
FIN --> EMS
|
|
967
|
-
|
|
968
|
-
EMS --> EMAIL
|
|
969
|
-
EMS --> LDAP
|
|
970
|
-
EMS --> ACC
|
|
971
|
-
|
|
972
|
-
style EMS fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
|
|
973
|
-
style Actors fill:#e8f5e9,stroke:#2e7d32
|
|
974
|
-
style External fill:#fff3e0,stroke:#e65100
|
|
975
|
-
```
|
|
976
|
-
|
|
977
|
-
#### Container Diagram(コンテナ図)
|
|
978
|
-
|
|
979
|
-
```mermaid
|
|
980
|
-
flowchart TB
|
|
981
|
-
subgraph EMS["Expense Management System"]
|
|
982
|
-
subgraph Frontend["Frontend Layer"]
|
|
983
|
-
WEB["🌐 Web Frontend<br/>(React/Next.js)"]
|
|
984
|
-
MOB["📱 Mobile App<br/>(React Native)"]
|
|
985
|
-
end
|
|
986
|
-
|
|
987
|
-
GW["🚪 API Gateway"]
|
|
988
|
-
|
|
989
|
-
subgraph Services["Service Layer"]
|
|
990
|
-
EXPS["Expense<br/>Service"]
|
|
991
|
-
APRS["Approval<br/>Service"]
|
|
992
|
-
BUDS["Budget<br/>Service"]
|
|
993
|
-
end
|
|
994
|
-
|
|
995
|
-
DB[("🗄️ PostgreSQL DB")]
|
|
996
|
-
|
|
997
|
-
WEB --> GW
|
|
998
|
-
MOB --> GW
|
|
999
|
-
GW --> EXPS
|
|
1000
|
-
GW --> APRS
|
|
1001
|
-
GW --> BUDS
|
|
1002
|
-
EXPS --> DB
|
|
1003
|
-
APRS --> DB
|
|
1004
|
-
BUDS --> DB
|
|
1005
|
-
end
|
|
1006
|
-
|
|
1007
|
-
style EMS fill:#f5f5f5,stroke:#333,stroke-width:2px
|
|
1008
|
-
style Frontend fill:#e3f2fd,stroke:#1976d2
|
|
1009
|
-
style Services fill:#fff3e0,stroke:#e65100
|
|
1010
|
-
style GW fill:#c8e6c9,stroke:#388e3c
|
|
1011
|
-
style DB fill:#f3e5f5,stroke:#7b1fa2
|
|
1012
|
-
```
|
|
1013
|
-
|
|
1014
|
-
### 7.4 設計パターンの適用
|
|
1015
|
-
|
|
1016
|
-
AIエージェントは、要件に基づいて適切な設計パターンを自動選択・適用します。
|
|
1017
|
-
|
|
1018
|
-
| パターン | 適用箇所 | 選択理由 |
|
|
1019
|
-
|---------|---------|---------|
|
|
1020
|
-
| **Repository** | ExpenseRepository | REQ-AUD-001の監査要件に対応、データアクセス抽象化 |
|
|
1021
|
-
| **Service** | ApprovalService | REQ-APR-001〜007の承認ロジック集約 |
|
|
1022
|
-
| **Factory** | ExpenseFactory | REQ-EXP-001の経費作成ルールカプセル化 |
|
|
1023
|
-
| **Observer** | NotificationObserver | REQ-APR-003の承認通知を疎結合に実現 |
|
|
1024
|
-
| **Strategy** | ApprovalStrategy | REQ-APR-002の金額別承認ルート切り替え |
|
|
1025
|
-
| **State** | ExpenseState | REQ-APR-007のステータス遷移管理 |
|
|
1026
|
-
|
|
1027
|
-
### 7.5 状態遷移設計
|
|
1028
|
-
|
|
1029
|
-
経費のステータス遷移を設計します。
|
|
1030
|
-
|
|
1031
|
-
```
|
|
1032
|
-
Draft → Submitted → ManagerApproved → [DirectorApproved] → FinanceApproved
|
|
1033
|
-
↘ ↘ ↘
|
|
1034
|
-
Rejected Rejected Rejected
|
|
1035
|
-
```
|
|
1036
|
-
|
|
1037
|
-
**有効な状態遷移テーブル:**
|
|
1038
|
-
|
|
1039
|
-
| 現在の状態 | 可能な次の状態 |
|
|
1040
|
-
|-----------|---------------|
|
|
1041
|
-
| Draft | Submitted, Cancelled |
|
|
1042
|
-
| Submitted | ManagerApproved, Rejected |
|
|
1043
|
-
| ManagerApproved | DirectorApproved, FinanceApproved, Rejected |
|
|
1044
|
-
| DirectorApproved | FinanceApproved, Rejected |
|
|
1045
|
-
| FinanceApproved | (最終状態) |
|
|
1046
|
-
| Rejected | (最終状態) |
|
|
1047
|
-
|
|
1048
|
-
### 7.6 トレーサビリティ(要件→設計)
|
|
1049
|
-
|
|
1050
|
-
| 要件ID | 設計ID | コンポーネント |
|
|
1051
|
-
|--------|--------|--------------|
|
|
1052
|
-
| REQ-EXP-001 | DES-SVC-001, DES-ENT-001 | ExpenseService, Expense |
|
|
1053
|
-
| REQ-APR-001 | DES-SVC-002, DES-ENT-002 | ApprovalService, Approval |
|
|
1054
|
-
| REQ-APR-002 | DES-DOM-001 | ApprovalStrategy |
|
|
1055
|
-
| REQ-APR-006 | DES-SVC-002 | ApprovalService.validateSelfApproval() |
|
|
1056
|
-
| REQ-BUD-001 | DES-SVC-003, DES-ENT-003 | BudgetService, Budget |
|
|
1057
|
-
| REQ-AUD-001 | DES-SVC-005, DES-ENT-004 | AuditService, AuditLog |
|
|
1058
|
-
|
|
1059
|
-
---
|
|
1060
|
-
|
|
1061
|
-
## 8. タスク分解
|
|
1062
|
-
|
|
1063
|
-
設計フェーズが完了したら、実装前に**タスク分解**を行います。これはMUSUBIXの推奨ワークフローにおける重要なフェーズです。
|
|
1064
|
-
|
|
1065
|
-
:::note info
|
|
1066
|
-
**なぜタスク分解が必要か?**
|
|
1067
|
-
設計書をそのまま実装に移すと、全体像が大きすぎて作業が困難になります。タスク分解により:
|
|
1068
|
-
- 作業を適切なサイズ(2-4時間程度)に分割
|
|
1069
|
-
- 依存関係を明確化し、実装順序を決定
|
|
1070
|
-
- 進捗管理が容易に
|
|
1071
|
-
- テスト駆動開発(Red-Green-Blue)サイクルの単位を明確化
|
|
1072
|
-
:::
|
|
1073
|
-
|
|
1074
|
-
### 8.1 自然言語での指示
|
|
1075
|
-
|
|
1076
|
-
> 「設計書に基づいて、実装タスクを分解してください。
|
|
1077
|
-
> 各タスクは2-4時間で完了できるサイズにしてください。
|
|
1078
|
-
> 依存関係と実装順序も明示してください。」
|
|
1079
|
-
> or
|
|
1080
|
-
> 「タスク分解を実行」
|
|
1081
|
-
|
|
1082
|
-
### 8.2 MUSUBIXが実行する処理
|
|
1083
|
-
|
|
1084
|
-
```bash
|
|
1085
|
-
npx musubix design tasks storage/design/expense-design.md
|
|
1086
|
-
```
|
|
1087
|
-
|
|
1088
|
-
MUSUBIXは以下の観点でタスクを分解します。
|
|
1089
|
-
|
|
1090
|
-
1. **設計コンポーネントの依存関係分析**
|
|
1091
|
-
2. **タスクサイズの適正化**(2-4時間を目安)
|
|
1092
|
-
3. **実装順序の決定**(依存関係に基づく)
|
|
1093
|
-
4. **トレーサビリティID(TSK-*)の付与**
|
|
1094
|
-
|
|
1095
|
-
### 8.3 生成されるタスク分解書
|
|
1096
|
-
|
|
1097
|
-
```markdown:storage/tasks/expense-tasks.md
|
|
1098
|
-
# 経費精算システム - タスク分解書
|
|
1099
|
-
|
|
1100
|
-
## 概要
|
|
1101
|
-
|
|
1102
|
-
| 項目 | 値 |
|
|
1103
|
-
|------|-----|
|
|
1104
|
-
| 設計ID | DES-EXP-001 |
|
|
1105
|
-
| 総タスク数 | 12 |
|
|
1106
|
-
| 見積工数 | 32時間 |
|
|
1107
|
-
| 優先度 | P0 |
|
|
1108
|
-
|
|
1109
|
-
## タスク一覧
|
|
1110
|
-
|
|
1111
|
-
### Phase 1: ドメイン層(Value Objects)
|
|
1112
|
-
|
|
1113
|
-
| タスクID | タスク名 | 設計ID | 見積 | 依存 |
|
|
1114
|
-
|----------|----------|--------|------|------|
|
|
1115
|
-
| TSK-001 | Amount Value Object実装 | DES-VO-002 | 2h | - |
|
|
1116
|
-
| TSK-002 | ExpenseStatus Value Object実装 | DES-VO-003 | 2h | - |
|
|
1117
|
-
| TSK-003 | ExpenseId Value Object実装 | DES-VO-001 | 1h | - |
|
|
1118
|
-
|
|
1119
|
-
### Phase 2: ドメイン層(Entities)
|
|
1120
|
-
|
|
1121
|
-
| タスクID | タスク名 | 設計ID | 見積 | 依存 |
|
|
1122
|
-
|----------|----------|--------|------|------|
|
|
1123
|
-
| TSK-004 | Expense Entity実装 | DES-ENT-001 | 3h | TSK-001, TSK-002, TSK-003 |
|
|
1124
|
-
| TSK-005 | Approval Entity実装 | DES-ENT-002 | 2h | TSK-004 |
|
|
1125
|
-
|
|
1126
|
-
### Phase 3: ドメイン層(Services)
|
|
1127
|
-
|
|
1128
|
-
| タスクID | タスク名 | 設計ID | 見積 | 依存 |
|
|
1129
|
-
|----------|----------|--------|------|------|
|
|
1130
|
-
| TSK-006 | ExpenseService実装 | DES-SVC-001 | 4h | TSK-004 |
|
|
1131
|
-
| TSK-007 | ApprovalService実装 | DES-SVC-002 | 4h | TSK-005 |
|
|
1132
|
-
| TSK-008 | ApprovalStrategy実装 | DES-DOM-001 | 3h | TSK-007 |
|
|
1133
|
-
|
|
1134
|
-
### Phase 4: インフラ層
|
|
1135
|
-
|
|
1136
|
-
| タスクID | タスク名 | 設計ID | 見積 | 依存 |
|
|
1137
|
-
|----------|----------|--------|------|------|
|
|
1138
|
-
| TSK-009 | ExpenseRepository実装 | DES-REPO-001 | 3h | TSK-004 |
|
|
1139
|
-
| TSK-010 | AuditService実装 | DES-SVC-005 | 3h | TSK-006, TSK-007 |
|
|
1140
|
-
|
|
1141
|
-
### Phase 5: 統合
|
|
1142
|
-
|
|
1143
|
-
| タスクID | タスク名 | 設計ID | 見積 | 依存 |
|
|
1144
|
-
|----------|----------|--------|------|------|
|
|
1145
|
-
| TSK-011 | Use Case層実装 | DES-UC-001 | 3h | TSK-006, TSK-007, TSK-009 |
|
|
1146
|
-
| TSK-012 | 統合テスト | - | 2h | TSK-011 |
|
|
1147
|
-
```
|
|
1148
|
-
|
|
1149
|
-
### 8.4 タスク依存関係の可視化
|
|
1150
|
-
|
|
1151
|
-
```mermaid
|
|
1152
|
-
flowchart TD
|
|
1153
|
-
subgraph Phase1["Phase 1: Value Objects"]
|
|
1154
|
-
TSK001[TSK-001<br/>Amount VO]
|
|
1155
|
-
TSK002[TSK-002<br/>ExpenseStatus VO]
|
|
1156
|
-
TSK003[TSK-003<br/>ExpenseId VO]
|
|
1157
|
-
end
|
|
1158
|
-
|
|
1159
|
-
subgraph Phase2["Phase 2: Entities"]
|
|
1160
|
-
TSK004[TSK-004<br/>Expense Entity]
|
|
1161
|
-
TSK005[TSK-005<br/>Approval Entity]
|
|
1162
|
-
end
|
|
1163
|
-
|
|
1164
|
-
subgraph Phase3["Phase 3: Services"]
|
|
1165
|
-
TSK006[TSK-006<br/>ExpenseService]
|
|
1166
|
-
TSK007[TSK-007<br/>ApprovalService]
|
|
1167
|
-
TSK008[TSK-008<br/>ApprovalStrategy]
|
|
1168
|
-
end
|
|
1169
|
-
|
|
1170
|
-
subgraph Phase4["Phase 4: Infrastructure"]
|
|
1171
|
-
TSK009[TSK-009<br/>ExpenseRepository]
|
|
1172
|
-
TSK010[TSK-010<br/>AuditService]
|
|
1173
|
-
end
|
|
1174
|
-
|
|
1175
|
-
subgraph Phase5["Phase 5: Integration"]
|
|
1176
|
-
TSK011[TSK-011<br/>Use Case層]
|
|
1177
|
-
TSK012[TSK-012<br/>統合テスト]
|
|
1178
|
-
end
|
|
1179
|
-
|
|
1180
|
-
TSK001 --> TSK004
|
|
1181
|
-
TSK002 --> TSK004
|
|
1182
|
-
TSK003 --> TSK004
|
|
1183
|
-
TSK004 --> TSK005
|
|
1184
|
-
TSK004 --> TSK006
|
|
1185
|
-
TSK005 --> TSK007
|
|
1186
|
-
TSK007 --> TSK008
|
|
1187
|
-
TSK004 --> TSK009
|
|
1188
|
-
TSK006 --> TSK010
|
|
1189
|
-
TSK007 --> TSK010
|
|
1190
|
-
TSK006 --> TSK011
|
|
1191
|
-
TSK007 --> TSK011
|
|
1192
|
-
TSK009 --> TSK011
|
|
1193
|
-
TSK011 --> TSK012
|
|
1194
|
-
```
|
|
1195
|
-
|
|
1196
|
-
### 8.5 トレーサビリティ(設計→タスク)
|
|
1197
|
-
|
|
1198
|
-
| 設計ID | タスクID | コンポーネント |
|
|
1199
|
-
|--------|----------|--------------|
|
|
1200
|
-
| DES-VO-001 | TSK-003 | ExpenseId |
|
|
1201
|
-
| DES-VO-002 | TSK-001 | Amount |
|
|
1202
|
-
| DES-VO-003 | TSK-002 | ExpenseStatus |
|
|
1203
|
-
| DES-ENT-001 | TSK-004 | Expense |
|
|
1204
|
-
| DES-ENT-002 | TSK-005 | Approval |
|
|
1205
|
-
| DES-SVC-001 | TSK-006 | ExpenseService |
|
|
1206
|
-
| DES-SVC-002 | TSK-007 | ApprovalService |
|
|
1207
|
-
| DES-DOM-001 | TSK-008 | ApprovalStrategy |
|
|
1208
|
-
| DES-REPO-001 | TSK-009 | ExpenseRepository |
|
|
1209
|
-
| DES-SVC-005 | TSK-010 | AuditService |
|
|
1210
|
-
| DES-UC-001 | TSK-011 | UseCase層 |
|
|
1211
|
-
|
|
1212
|
-
### 8.6 セルフレビューとユーザー確認
|
|
1213
|
-
|
|
1214
|
-
タスク分解が完了したら、MUSUBIXはセルフレビューを実施します。
|
|
1215
|
-
|
|
1216
|
-
**レビュー観点:**
|
|
1217
|
-
- 設計との対応確認(DES-* → TSK-*)
|
|
1218
|
-
- タスクサイズの適切性(2-4時間)
|
|
1219
|
-
- 依存関係・実行順序の妥当性
|
|
1220
|
-
- 工数見積もりの現実性
|
|
1221
|
-
|
|
1222
|
-
```
|
|
1223
|
-
📋 **レビュー結果**
|
|
1224
|
-
|
|
1225
|
-
| 観点 | 状態 | 詳細 |
|
|
1226
|
-
|------|------|------|
|
|
1227
|
-
| トレーサビリティ | ✅ OK | DES-001→TSK-001〜012 完了 |
|
|
1228
|
-
| タスクサイズ | ✅ OK | 各2-4時間で適切 |
|
|
1229
|
-
| 依存関係 | ✅ OK | Phase 1→5の順序が明確 |
|
|
1230
|
-
| 工数見積 | ⚠️ 確認 | 合計32時間(4人日相当) |
|
|
1231
|
-
|
|
1232
|
-
👉 **次のアクションを選択してください:**
|
|
1233
|
-
- 「修正」/ 具体的な修正指示 → 修正して再提示
|
|
1234
|
-
- 「承認」/「OK」/「進める」 → コード生成フェーズへ
|
|
1235
|
-
```
|
|
1236
|
-
|
|
1237
|
-
:::note warn
|
|
1238
|
-
**重要**: タスク分解の承認を得てから、コード生成フェーズに進みます。各タスクは **Red-Green-Blue** サイクル(テスト作成→実装→リファクタリング)で実装します。
|
|
1239
|
-
:::
|
|
1240
|
-
|
|
1241
|
-
---
|
|
1242
|
-
|
|
1243
|
-
## 9. コード生成
|
|
1244
|
-
|
|
1245
|
-
### 8.1 自然言語での指示
|
|
1246
|
-
|
|
1247
|
-
設計が完了したら、コード生成フェーズに進みます。
|
|
1248
|
-
|
|
1249
|
-
> 「設計書に基づいてTypeScriptコードを生成してください。
|
|
1250
|
-
> まずはドメイン層(エンティティ、Value Object)から始めてください。」
|
|
1251
|
-
|
|
1252
|
-
### 8.2 MUSUBIXが実行する処理
|
|
1253
|
-
|
|
1254
|
-
MUSUBIXは設計書を入力として、以下の順序でコードを生成します。
|
|
1255
|
-
|
|
1256
|
-
:::note info
|
|
1257
|
-
**ドメイン駆動設計(DDD)の基本用語**
|
|
1258
|
-
- **Value Object**: 金額、日付などの「値」を表す不変オブジェクト。IDを持たず、値が同じなら同じものとみなす
|
|
1259
|
-
- **Entity**: IDを持つドメインオブジェクト。「経費」「承認」など一意に識別されるもの
|
|
1260
|
-
- **Repository**: データの保存・取得を抽象化する層。DB変更時もドメイン層に影響しない
|
|
1261
|
-
- **Service**: 複数のエンティティにまたがるビジネスロジックを集約
|
|
1262
|
-
:::
|
|
1263
|
-
|
|
1264
|
-
1. **Value Objects** - 不変の値オブジェクト
|
|
1265
|
-
2. **Entities** - ドメインエンティティ
|
|
1266
|
-
3. **Repositories** - データアクセス層
|
|
1267
|
-
4. **Services** - ビジネスロジック層
|
|
1268
|
-
5. **Use Cases** - アプリケーション層
|
|
1269
|
-
|
|
1270
|
-
### 8.3 生成されたコード例
|
|
1271
|
-
|
|
1272
|
-
#### Amount Value Object(金額)
|
|
1273
|
-
|
|
1274
|
-
:::note info
|
|
1275
|
-
**Result型パターンとは?**
|
|
1276
|
-
成功または失敗を明示的に表現する型です。`Result<T, E>`は成功時に`T`型の値、失敗時に`E`型のエラーを返します。例外を使わずにエラーハンドリングを強制でき、コンパイル時にエラー処理漏れを検出できます。
|
|
1277
|
-
:::
|
|
1278
|
-
|
|
1279
|
-
```typescript:src/domain/value-objects/amount.ts
|
|
1280
|
-
/**
|
|
1281
|
-
* Amount Value Object
|
|
1282
|
-
* @requirement REQ-SEC-004 金額上限(10,000,000 JPY以下)
|
|
1283
|
-
* @design DES-VO-002
|
|
1284
|
-
*/
|
|
1285
|
-
|
|
1286
|
-
export interface Amount {
|
|
1287
|
-
readonly value: number;
|
|
1288
|
-
readonly currency: 'JPY';
|
|
1289
|
-
}
|
|
1290
|
-
|
|
1291
|
-
const MAXIMUM_AMOUNT = 10_000_000; // REQ-SEC-004: 1000万円上限
|
|
1292
|
-
|
|
1293
|
-
export function createAmount(value: number): Result<Amount, AmountError> {
|
|
1294
|
-
// 負の値チェック
|
|
1295
|
-
if (value < 0) {
|
|
1296
|
-
return { ok: false, error: { type: 'NEGATIVE_AMOUNT', message: '...' } };
|
|
1297
|
-
}
|
|
1298
|
-
|
|
1299
|
-
// 上限チェック (REQ-SEC-004)
|
|
1300
|
-
if (value > MAXIMUM_AMOUNT) {
|
|
1301
|
-
return { ok: false, error: { type: 'EXCEEDS_MAXIMUM', ... } };
|
|
1302
|
-
}
|
|
1303
|
-
|
|
1304
|
-
return { ok: true, value: { value, currency: 'JPY' } };
|
|
1305
|
-
}
|
|
1306
|
-
|
|
1307
|
-
// 部長承認が必要かどうか (REQ-APR-002)
|
|
1308
|
-
export const DIRECTOR_APPROVAL_THRESHOLD = 100_000;
|
|
1309
|
-
|
|
1310
|
-
export function requiresDirectorApproval(amount: Amount): boolean {
|
|
1311
|
-
return amount.value > DIRECTOR_APPROVAL_THRESHOLD;
|
|
1312
|
-
}
|
|
1313
|
-
```
|
|
1314
|
-
|
|
1315
|
-
:::note info
|
|
1316
|
-
**ポイント**
|
|
1317
|
-
- `@requirement` コメントで要件IDへのトレーサビリティを確保
|
|
1318
|
-
- `@design` コメントで設計IDへのトレーサビリティを確保
|
|
1319
|
-
- ビジネスルール(金額上限、部長承認閾値)を定数として明示
|
|
1320
|
-
:::
|
|
1321
|
-
|
|
1322
|
-
#### ExpenseStatus Value Object(状態遷移)
|
|
1323
|
-
|
|
1324
|
-
```typescript:src/domain/value-objects/expense-status.ts
|
|
1325
|
-
/**
|
|
1326
|
-
* @requirement REQ-APR-007 承認済み経費の編集禁止
|
|
1327
|
-
* @design DES-VO-003
|
|
1328
|
-
*/
|
|
1329
|
-
|
|
1330
|
-
// State パターン: 有効な状態遷移マップ
|
|
1331
|
-
export const VALID_STATUS_TRANSITIONS: Record<ExpenseStatus, ExpenseStatus[]> = {
|
|
1332
|
-
Draft: ['Submitted', 'Cancelled'],
|
|
1333
|
-
Submitted: ['ManagerApproved', 'Rejected'],
|
|
1334
|
-
ManagerApproved: ['DirectorApproved', 'FinanceApproved', 'Rejected'],
|
|
1335
|
-
DirectorApproved: ['FinanceApproved', 'Rejected'],
|
|
1336
|
-
FinanceApproved: [], // 最終状態 - REQ-APR-007
|
|
1337
|
-
Rejected: [], // 最終状態
|
|
1338
|
-
Cancelled: [], // 最終状態
|
|
1339
|
-
};
|
|
1340
|
-
|
|
1341
|
-
export function canTransitionTo(current: ExpenseStatus, target: ExpenseStatus): boolean {
|
|
1342
|
-
return VALID_STATUS_TRANSITIONS[current].includes(target);
|
|
1343
|
-
}
|
|
1344
|
-
```
|
|
1345
|
-
|
|
1346
|
-
:::note info
|
|
1347
|
-
**ポイント**
|
|
1348
|
-
- 状態遷移ルールを明示的なマップで定義(Stateパターン)
|
|
1349
|
-
- 最終状態(編集不可)が明確
|
|
1350
|
-
:::
|
|
1351
|
-
|
|
1352
|
-
#### Approval Entity(自己承認禁止)
|
|
1353
|
-
|
|
1354
|
-
```typescript:src/domain/entities/approval.entity.ts
|
|
1355
|
-
/**
|
|
1356
|
-
* @requirement REQ-APR-006 自己承認禁止
|
|
1357
|
-
*/
|
|
1358
|
-
export function validateNotSelfApproval(
|
|
1359
|
-
expenseUserId: string,
|
|
1360
|
-
approverId: string
|
|
1361
|
-
): Result<void, ApprovalError> {
|
|
1362
|
-
if (expenseUserId === approverId) {
|
|
1363
|
-
return {
|
|
1364
|
-
ok: false,
|
|
1365
|
-
error: {
|
|
1366
|
-
type: 'SELF_APPROVAL',
|
|
1367
|
-
message: 'Users cannot approve their own expense entries',
|
|
1368
|
-
},
|
|
1369
|
-
};
|
|
1370
|
-
}
|
|
1371
|
-
return { ok: true, value: undefined };
|
|
1372
|
-
}
|
|
1373
|
-
```
|
|
1374
|
-
|
|
1375
|
-
### 8.4 静的解析の実行
|
|
1376
|
-
|
|
1377
|
-
生成されたコードに対して静的解析を実行します。
|
|
1378
|
-
|
|
1379
|
-
**自然言語での指示:**
|
|
1380
|
-
> 「生成したコードの品質を分析してください」
|
|
1381
|
-
|
|
1382
|
-
**MUSUBIXが実行するコマンド:**
|
|
1383
|
-
```bash
|
|
1384
|
-
npx musubix codegen analyze src/
|
|
1385
|
-
```
|
|
1386
|
-
|
|
1387
|
-
**実行結果:**
|
|
1388
|
-
```json
|
|
1389
|
-
{
|
|
1390
|
-
"success": true,
|
|
1391
|
-
"metrics": {
|
|
1392
|
-
"files": 6,
|
|
1393
|
-
"lines": 754,
|
|
1394
|
-
"complexity": 75,
|
|
1395
|
-
"maintainabilityIndex": 100
|
|
1396
|
-
},
|
|
1397
|
-
"summary": { "errors": 0, "warnings": 0, "info": 15 },
|
|
1398
|
-
"message": "✅ Analyzed 6 files - No errors found"
|
|
1399
|
-
}
|
|
1400
|
-
```
|
|
1401
|
-
|
|
1402
|
-
| メトリクス | 値 | 評価 |
|
|
1403
|
-
|-----------|-----|------|
|
|
1404
|
-
| ファイル数 | 6 | - |
|
|
1405
|
-
| 総行数 | 754 | - |
|
|
1406
|
-
| 複雑度 | 75 | 良好 |
|
|
1407
|
-
| 保守性指数 | 100 | 優秀 |
|
|
1408
|
-
| エラー | 0 | ✅ |
|
|
1409
|
-
| 警告 | 0 | ✅ |
|
|
1410
|
-
|
|
1411
|
-
---
|
|
1412
|
-
|
|
1413
|
-
## 10. セキュリティ分析
|
|
1414
|
-
|
|
1415
|
-
### 9.1 自然言語での指示
|
|
1416
|
-
|
|
1417
|
-
> 「生成したコードのセキュリティを分析してください」
|
|
1418
|
-
|
|
1419
|
-
### 9.2 MUSUBIXが実行する処理
|
|
1420
|
-
|
|
1421
|
-
MUSUBIXは以下のセキュリティチェックを実行します。
|
|
1422
|
-
|
|
1423
|
-
| チェック項目 | 説明 |
|
|
1424
|
-
|-------------|------|
|
|
1425
|
-
| 脆弱性検出 | SQLインジェクション、XSS、CSRF等 |
|
|
1426
|
-
| シークレット検出 | ハードコードされた認証情報 |
|
|
1427
|
-
| テイント解析 | 信頼できない入力の追跡 |
|
|
1428
|
-
| 依存関係チェック | 既知の脆弱性を持つライブラリ |
|
|
1429
|
-
|
|
1430
|
-
### 9.3 実行結果
|
|
1431
|
-
|
|
1432
|
-
**MUSUBIXが実行するコマンド:**
|
|
1433
|
-
```bash
|
|
1434
|
-
npx musubix codegen security src/
|
|
1435
|
-
```
|
|
1436
|
-
|
|
1437
|
-
**実行結果:**
|
|
1438
|
-
```json
|
|
1439
|
-
{
|
|
1440
|
-
"success": true,
|
|
1441
|
-
"vulnerabilities": [],
|
|
1442
|
-
"summary": { "critical": 0, "high": 0, "medium": 0, "low": 0 },
|
|
1443
|
-
"score": 100,
|
|
1444
|
-
"message": "✅ Security score: 100/100 - No critical issues"
|
|
1445
|
-
}
|
|
1446
|
-
```
|
|
1447
|
-
|
|
1448
|
-
### 9.4 セキュリティスコア
|
|
1449
|
-
|
|
1450
|
-
| レベル | 検出数 | 説明 |
|
|
1451
|
-
|--------|-------|------|
|
|
1452
|
-
| Critical | 0 | 即座に対応が必要 |
|
|
1453
|
-
| High | 0 | 優先度高で対応 |
|
|
1454
|
-
| Medium | 0 | 計画的に対応 |
|
|
1455
|
-
| Low | 0 | 任意で対応 |
|
|
1456
|
-
| **総合スコア** | **100/100** | ✅ |
|
|
1457
|
-
|
|
1458
|
-
### 9.5 経費精算システムのセキュリティ設計
|
|
1459
|
-
|
|
1460
|
-
生成されたコードには、以下のセキュリティ対策が組み込まれています。
|
|
1461
|
-
|
|
1462
|
-
| 要件ID | セキュリティ対策 | 実装 |
|
|
1463
|
-
|--------|----------------|------|
|
|
1464
|
-
| REQ-SEC-004 | 金額上限 | `MAXIMUM_AMOUNT = 10_000_000` の検証 |
|
|
1465
|
-
| REQ-APR-006 | 自己承認禁止 | `validateNotSelfApproval()` 関数 |
|
|
1466
|
-
| REQ-APR-007 | 承認後編集禁止 | `isEditable()` による状態チェック |
|
|
1467
|
-
| REQ-AUD-002 | ログ改ざん防止 | `Object.freeze()` による不変性 |
|
|
1468
|
-
|
|
1469
|
-
---
|
|
1470
|
-
|
|
1471
|
-
## 11. 形式検証
|
|
1472
|
-
|
|
1473
|
-
### 10.1 自然言語での指示
|
|
1474
|
-
|
|
1475
|
-
> 「承認ワークフローのビジネスルールが正しいことを数学的に証明してください」
|
|
1476
|
-
|
|
1477
|
-
### 10.2 MUSUBIXが実行する処理
|
|
1478
|
-
|
|
1479
|
-
:::note info
|
|
1480
|
-
**SMT-LIB2とZ3ソルバーとは?**
|
|
1481
|
-
- **SMT-LIB2**: 形式検証のための標準言語。論理式を記述する共通フォーマット
|
|
1482
|
-
- **Z3ソルバー**: Microsoftが開発したSMTソルバー。「この条件を満たす反例が存在するか?」を数学的に判定
|
|
1483
|
-
- **形式検証**: テストとは異なり、「全ての可能な入力」に対してプログラムの正しさを数学的に証明する手法
|
|
1484
|
-
:::
|
|
1485
|
-
|
|
1486
|
-
MUSUBIXは、EARS形式の要件を**SMT-LIB2**形式に変換し、**Z3ソルバー**で形式検証を行います。
|
|
1487
|
-
|
|
1488
|
-
**形式検証の対象:**
|
|
1489
|
-
- REQ-APR-002: 10万円以上は部長承認必須
|
|
1490
|
-
- REQ-APR-006: 自己承認禁止
|
|
1491
|
-
- REQ-APR-007: 承認済み経費は編集不可
|
|
1492
|
-
|
|
1493
|
-
### 10.3 SMT-LIB2への変換
|
|
1494
|
-
|
|
1495
|
-
EARS形式の要件がSMT-LIB2形式に変換されます。
|
|
1496
|
-
|
|
1497
|
-
**REQ-APR-002(部長承認ルール):**
|
|
1498
|
-
|
|
1499
|
-
```lisp:storage/formal-verify/approval-rules.smt2
|
|
1500
|
-
; EARS: IF an expense amount exceeds 100,000 JPY,
|
|
1501
|
-
; THEN THE System SHALL require Director approval
|
|
1502
|
-
|
|
1503
|
-
(declare-const expense_amount Int)
|
|
1504
|
-
(declare-const DIRECTOR_THRESHOLD Int)
|
|
1505
|
-
(assert (= DIRECTOR_THRESHOLD 100000))
|
|
1506
|
-
|
|
1507
|
-
(declare-const requires_director_approval Bool)
|
|
1508
|
-
(declare-const has_director_approval Bool)
|
|
1509
|
-
(declare-const can_proceed_to_finance Bool)
|
|
1510
|
-
|
|
1511
|
-
; 10万円超なら部長承認必須
|
|
1512
|
-
(assert (= requires_director_approval (> expense_amount DIRECTOR_THRESHOLD)))
|
|
1513
|
-
|
|
1514
|
-
; 経理承認に進める条件
|
|
1515
|
-
(assert (= can_proceed_to_finance
|
|
1516
|
-
(or
|
|
1517
|
-
(not requires_director_approval)
|
|
1518
|
-
(and requires_director_approval has_director_approval)
|
|
1519
|
-
)
|
|
1520
|
-
))
|
|
1521
|
-
```
|
|
1522
|
-
|
|
1523
|
-
**REQ-APR-006(自己承認禁止):**
|
|
1524
|
-
|
|
1525
|
-
```lisp:storage/formal-verify/self-approval.smt2
|
|
1526
|
-
; EARS: THE System SHALL NOT allow users to approve their own expense entries
|
|
1527
|
-
|
|
1528
|
-
(declare-const expense_user_id Int)
|
|
1529
|
-
(declare-const approver_id Int)
|
|
1530
|
-
|
|
1531
|
-
(declare-const is_self_approval Bool)
|
|
1532
|
-
(declare-const approval_allowed Bool)
|
|
1533
|
-
|
|
1534
|
-
(assert (= is_self_approval (= expense_user_id approver_id)))
|
|
1535
|
-
(assert (= approval_allowed (not is_self_approval)))
|
|
1536
|
-
```
|
|
1537
|
-
|
|
1538
|
-
### 10.4 検証結果
|
|
1539
|
-
|
|
1540
|
-
Z3ソルバーによる検証結果:
|
|
1541
|
-
|
|
1542
|
-
| 要件ID | 検証内容 | 結果 | 意味 |
|
|
1543
|
-
|--------|---------|------|------|
|
|
1544
|
-
| REQ-APR-002 | 10万円超で部長承認なしに経理承認に進めない | `unsat` | ✅ ルール正当性証明 |
|
|
1545
|
-
| REQ-APR-006 | 自己承認が許可されない | `unsat` | ✅ ルール正当性証明 |
|
|
1546
|
-
| REQ-APR-007 | 最終状態で編集できない | `unsat` | ✅ ルール正当性証明 |
|
|
1547
|
-
|
|
1548
|
-
**`unsat`(unsatisfiable)の意味:**
|
|
1549
|
-
- 「反例が存在しない」=「ルールに違反するケースが存在しない」
|
|
1550
|
-
- つまり、ルールは数学的に正しいことが証明された
|
|
1551
|
-
|
|
1552
|
-
### 10.5 なぜ形式検証が重要か
|
|
1553
|
-
|
|
1554
|
-
テストは「バグがある」ことを見つけることはできますが、「バグがない」ことを証明することはできません。どれだけテストケースを増やしても、テストしていない入力パターンにバグが潜んでいる可能性は常に残ります。
|
|
1555
|
-
|
|
1556
|
-
形式検証は、この限界を突破します。SMTソルバーは**数学的に全ての可能な入力を検証**し、ルール違反が存在しないことを証明します。これは「テストで見つからなかった」のではなく「数学的に存在し得ない」という強い保証です。
|
|
1557
|
-
|
|
1558
|
-
| 従来のテスト | 形式検証 |
|
|
1559
|
-
|-------------|---------|
|
|
1560
|
-
| 有限のテストケース | 全ての可能な入力を検証 |
|
|
1561
|
-
| 「バグがある」ことは示せる | 「バグがない」ことを証明 |
|
|
1562
|
-
| テストケース漏れの可能性 | 網羅的な検証 |
|
|
1563
|
-
| 境界値の見落とし | 数学的に完全 |
|
|
1564
|
-
|
|
1565
|
-
**エンタープライズ開発での価値:**
|
|
1566
|
-
- 金融規制のコンプライアンス証明
|
|
1567
|
-
- 監査時のエビデンス
|
|
1568
|
-
- ビジネスルールの正当性保証
|
|
1569
|
-
|
|
1570
|
-
---
|
|
1571
|
-
|
|
1572
|
-
## 12. テスト生成
|
|
1573
|
-
|
|
1574
|
-
### 11.1 自然言語での指示
|
|
1575
|
-
|
|
1576
|
-
> 「生成したコードのテストを作成してください」
|
|
1577
|
-
|
|
1578
|
-
### 11.2 MUSUBIXが実行する処理
|
|
1579
|
-
|
|
1580
|
-
MUSUBIXは、EARS形式の要件とコードから自動的にテストケースを生成します。
|
|
1581
|
-
|
|
1582
|
-
**MUSUBIXが実行するコマンド:**
|
|
1583
|
-
```bash
|
|
1584
|
-
npx musubix test generate src/
|
|
1585
|
-
```
|
|
1586
|
-
|
|
1587
|
-
**生成結果:**
|
|
1588
|
-
```
|
|
1589
|
-
✅ Tests generated: 6 file(s), 0 test case(s)
|
|
1590
|
-
```
|
|
1591
|
-
|
|
1592
|
-
MUSUBIXはテストファイルのスケルトンを生成しますが、実際のテストケースはAIエージェントが要件トレーサビリティを参照して作成します。
|
|
1593
|
-
|
|
1594
|
-
### 11.3 要件トレースに基づくテスト作成
|
|
1595
|
-
|
|
1596
|
-
**自然言語での指示:**
|
|
1597
|
-
> 「REQ-APR-005(自己承認禁止)をテストするコードを作成して」
|
|
1598
|
-
|
|
1599
|
-
MUSUBIXのNeuro-Symbolic統合により、AIエージェントは以下の推論を行います。
|
|
1600
|
-
|
|
1601
|
-
1. **知識グラフ検索**: REQ-APR-005の詳細を取得
|
|
1602
|
-
2. **関連コードの特定**: `approval.entity.ts`の`validateNotSelfApproval`関数
|
|
1603
|
-
3. **テストケースの導出**: 正常系(他者承認OK)、異常系(自己承認NG)
|
|
1604
|
-
|
|
1605
|
-
**生成されたテストコード:**
|
|
1606
|
-
|
|
1607
|
-
```typescript:tests/approval.test.ts
|
|
1608
|
-
import { describe, it, expect, beforeEach } from 'vitest';
|
|
1609
|
-
import {
|
|
1610
|
-
createApproval,
|
|
1611
|
-
approve,
|
|
1612
|
-
reject,
|
|
1613
|
-
validateNotSelfApproval,
|
|
1614
|
-
resetApprovalCounter
|
|
1615
|
-
} from '../src/domain/entities/approval.entity';
|
|
1616
|
-
import { createAmount } from '../src/domain/value-objects/amount';
|
|
1617
|
-
|
|
1618
|
-
describe('Approval Entity', () => {
|
|
1619
|
-
beforeEach(() => {
|
|
1620
|
-
resetApprovalCounter();
|
|
1621
|
-
});
|
|
1622
|
-
|
|
1623
|
-
// REQ-APR-005: 自己承認の禁止
|
|
1624
|
-
describe('validateNotSelfApproval', () => {
|
|
1625
|
-
it('should return ok when approver is different from submitter', () => {
|
|
1626
|
-
const result = validateNotSelfApproval('user-001', 'approver-001');
|
|
1627
|
-
expect(result.isOk()).toBe(true);
|
|
1628
|
-
});
|
|
1629
|
-
|
|
1630
|
-
it('should return error when approver is same as submitter', () => {
|
|
1631
|
-
const result = validateNotSelfApproval('user-001', 'user-001');
|
|
1632
|
-
expect(result.isErr()).toBe(true);
|
|
1633
|
-
if (result.isErr()) {
|
|
1634
|
-
expect(result.error.code).toBe('SELF_APPROVAL_NOT_ALLOWED');
|
|
1635
|
-
}
|
|
1636
|
-
});
|
|
1637
|
-
});
|
|
1638
|
-
|
|
1639
|
-
// REQ-APR-006: 却下時コメント必須
|
|
1640
|
-
describe('reject', () => {
|
|
1641
|
-
it('should require comment for rejection', () => {
|
|
1642
|
-
const amountResult = createAmount(5000);
|
|
1643
|
-
if (amountResult.isErr()) throw new Error('Amount creation failed');
|
|
1644
|
-
|
|
1645
|
-
const approvalResult = createApproval({
|
|
1646
|
-
expenseId: 'EXP-20250615-001',
|
|
1647
|
-
approverId: 'approver-001',
|
|
1648
|
-
submitterId: 'user-001',
|
|
1649
|
-
amount: amountResult.value,
|
|
1650
|
-
level: 'Manager'
|
|
1651
|
-
});
|
|
1652
|
-
|
|
1653
|
-
if (approvalResult.isErr()) throw new Error('Approval creation failed');
|
|
1654
|
-
|
|
1655
|
-
// コメントなしで却下 → エラー
|
|
1656
|
-
const rejectWithoutComment = reject(approvalResult.value, '');
|
|
1657
|
-
expect(rejectWithoutComment.isErr()).toBe(true);
|
|
1658
|
-
if (rejectWithoutComment.isErr()) {
|
|
1659
|
-
expect(rejectWithoutComment.error.code).toBe('REJECTION_COMMENT_REQUIRED');
|
|
1660
|
-
}
|
|
1661
|
-
|
|
1662
|
-
// コメントありで却下 → 成功
|
|
1663
|
-
const rejectWithComment = reject(approvalResult.value, '領収書が不鮮明です');
|
|
1664
|
-
expect(rejectWithComment.isOk()).toBe(true);
|
|
1665
|
-
});
|
|
1666
|
-
});
|
|
1667
|
-
});
|
|
1668
|
-
```
|
|
1669
|
-
|
|
1670
|
-
### 11.4 境界値テスト
|
|
1671
|
-
|
|
1672
|
-
**自然言語での指示:**
|
|
1673
|
-
> 「金額の境界値をテストして。特にREQ-APR-002の部長承認閾値」
|
|
1674
|
-
|
|
1675
|
-
**テストケースの推論過程:**
|
|
1676
|
-
|
|
1677
|
-
| 要件 | 閾値 | テストケース |
|
|
1678
|
-
|------|------|--------------|
|
|
1679
|
-
| REQ-APR-002 | 100,000円 | 99,999円(課長承認)、100,000円(部長承認) |
|
|
1680
|
-
| REQ-SEC-004 | 1,000,000円 | 999,999円(OK)、1,000,001円(NG) |
|
|
1681
|
-
|
|
1682
|
-
**生成されたテストコード:**
|
|
1683
|
-
|
|
1684
|
-
```typescript:tests/amount.test.ts
|
|
1685
|
-
import { describe, it, expect } from 'vitest';
|
|
1686
|
-
import { createAmount, requiresDirectorApproval } from '../src/domain/value-objects/amount';
|
|
1687
|
-
|
|
1688
|
-
describe('Amount Value Object', () => {
|
|
1689
|
-
// REQ-SEC-004: 上限チェック
|
|
1690
|
-
describe('createAmount', () => {
|
|
1691
|
-
it('should create valid amount', () => {
|
|
1692
|
-
const result = createAmount(50000);
|
|
1693
|
-
expect(result.isOk()).toBe(true);
|
|
1694
|
-
if (result.isOk()) {
|
|
1695
|
-
expect(result.value.value).toBe(50000);
|
|
1696
|
-
expect(result.value.currency).toBe('JPY');
|
|
1697
|
-
}
|
|
1698
|
-
});
|
|
1699
|
-
|
|
1700
|
-
it('should reject amount exceeding maximum', () => {
|
|
1701
|
-
const result = createAmount(1000001);
|
|
1702
|
-
expect(result.isErr()).toBe(true);
|
|
1703
|
-
if (result.isErr()) {
|
|
1704
|
-
expect(result.error.code).toBe('AMOUNT_EXCEEDS_MAXIMUM');
|
|
1705
|
-
}
|
|
1706
|
-
});
|
|
1707
|
-
|
|
1708
|
-
it('should reject negative amount', () => {
|
|
1709
|
-
const result = createAmount(-100);
|
|
1710
|
-
expect(result.isErr()).toBe(true);
|
|
1711
|
-
});
|
|
1712
|
-
});
|
|
1713
|
-
|
|
1714
|
-
// REQ-APR-002: 部長承認閾値
|
|
1715
|
-
describe('requiresDirectorApproval', () => {
|
|
1716
|
-
it('should return false for amount below threshold', () => {
|
|
1717
|
-
const result = createAmount(99999);
|
|
1718
|
-
if (result.isOk()) {
|
|
1719
|
-
expect(requiresDirectorApproval(result.value)).toBe(false);
|
|
1720
|
-
}
|
|
1721
|
-
});
|
|
1722
|
-
|
|
1723
|
-
it('should return true for amount at threshold', () => {
|
|
1724
|
-
const result = createAmount(100000);
|
|
1725
|
-
if (result.isOk()) {
|
|
1726
|
-
expect(requiresDirectorApproval(result.value)).toBe(true);
|
|
1727
|
-
}
|
|
1728
|
-
});
|
|
1729
|
-
});
|
|
1730
|
-
});
|
|
1731
|
-
```
|
|
1732
|
-
|
|
1733
|
-
### 11.5 状態遷移テスト
|
|
1734
|
-
|
|
1735
|
-
**自然言語での指示:**
|
|
1736
|
-
> 「REQ-APR-007の経費ステータス編集禁止をテストして」
|
|
1737
|
-
|
|
1738
|
-
**生成されたテストコード:**
|
|
1739
|
-
|
|
1740
|
-
```typescript:tests/expense-status.test.ts
|
|
1741
|
-
import { describe, it, expect } from 'vitest';
|
|
1742
|
-
import {
|
|
1743
|
-
canTransitionTo,
|
|
1744
|
-
transitionStatus,
|
|
1745
|
-
isEditable,
|
|
1746
|
-
isFinalStatus,
|
|
1747
|
-
isPendingApproval,
|
|
1748
|
-
type ExpenseStatus
|
|
1749
|
-
} from '../src/domain/value-objects/expense-status';
|
|
1750
|
-
|
|
1751
|
-
describe('ExpenseStatus Value Object', () => {
|
|
1752
|
-
// REQ-APR-007: 承認後の編集禁止
|
|
1753
|
-
describe('isEditable', () => {
|
|
1754
|
-
it('should return true for Draft', () => {
|
|
1755
|
-
expect(isEditable('Draft')).toBe(true);
|
|
1756
|
-
});
|
|
1757
|
-
|
|
1758
|
-
it('should return true for Rejected', () => {
|
|
1759
|
-
expect(isEditable('Rejected')).toBe(true);
|
|
1760
|
-
});
|
|
1761
|
-
|
|
1762
|
-
it('should return false for ManagerPending', () => {
|
|
1763
|
-
expect(isEditable('ManagerPending')).toBe(false);
|
|
1764
|
-
});
|
|
1765
|
-
|
|
1766
|
-
it('should return false for FinanceApproved', () => {
|
|
1767
|
-
expect(isEditable('FinanceApproved')).toBe(false);
|
|
1768
|
-
});
|
|
1769
|
-
});
|
|
1770
|
-
|
|
1771
|
-
// 有効な状態遷移のテスト
|
|
1772
|
-
describe('canTransitionTo', () => {
|
|
1773
|
-
it('should allow Draft to ManagerPending', () => {
|
|
1774
|
-
expect(canTransitionTo('Draft', 'ManagerPending')).toBe(true);
|
|
1775
|
-
});
|
|
1776
|
-
|
|
1777
|
-
it('should not allow Draft to DirectorPending', () => {
|
|
1778
|
-
expect(canTransitionTo('Draft', 'DirectorPending')).toBe(false);
|
|
1779
|
-
});
|
|
1780
|
-
|
|
1781
|
-
it('should not allow FinanceApproved to any status', () => {
|
|
1782
|
-
const statuses: ExpenseStatus[] = [
|
|
1783
|
-
'Draft', 'ManagerPending', 'DirectorPending',
|
|
1784
|
-
'FinancePending', 'Rejected', 'Paid'
|
|
1785
|
-
];
|
|
1786
|
-
statuses.forEach(status => {
|
|
1787
|
-
expect(canTransitionTo('FinanceApproved', status)).toBe(false);
|
|
1788
|
-
});
|
|
1789
|
-
});
|
|
1790
|
-
});
|
|
1791
|
-
|
|
1792
|
-
// 状態遷移の実行テスト
|
|
1793
|
-
describe('transitionStatus', () => {
|
|
1794
|
-
it('should succeed for valid transition', () => {
|
|
1795
|
-
const result = transitionStatus('Draft', 'ManagerPending');
|
|
1796
|
-
expect(result.isOk()).toBe(true);
|
|
1797
|
-
if (result.isOk()) {
|
|
1798
|
-
expect(result.value).toBe('ManagerPending');
|
|
1799
|
-
}
|
|
1800
|
-
});
|
|
1801
|
-
|
|
1802
|
-
it('should fail for invalid transition', () => {
|
|
1803
|
-
const result = transitionStatus('Draft', 'Paid');
|
|
1804
|
-
expect(result.isErr()).toBe(true);
|
|
1805
|
-
if (result.isErr()) {
|
|
1806
|
-
expect(result.error.code).toBe('INVALID_STATUS_TRANSITION');
|
|
1807
|
-
}
|
|
1808
|
-
});
|
|
1809
|
-
});
|
|
1810
|
-
});
|
|
1811
|
-
```
|
|
1812
|
-
|
|
1813
|
-
### 11.6 テスト実行
|
|
1814
|
-
|
|
1815
|
-
**自然言語での指示:**
|
|
1816
|
-
> 「テストを実行して結果を確認して」
|
|
1817
|
-
|
|
1818
|
-
**MUSUBIXが実行するコマンド:**
|
|
1819
|
-
```bash
|
|
1820
|
-
npm test
|
|
1821
|
-
```
|
|
1822
|
-
|
|
1823
|
-
**実行結果:**
|
|
1824
|
-
```
|
|
1825
|
-
✓ tests/amount.test.ts (5 tests)
|
|
1826
|
-
✓ tests/approval.test.ts (4 tests)
|
|
1827
|
-
✓ tests/expense-status.test.ts (8 tests)
|
|
1828
|
-
|
|
1829
|
-
Test Files 3 passed (3)
|
|
1830
|
-
Tests 17 passed (17)
|
|
1831
|
-
Start at 15:30:45
|
|
1832
|
-
Duration 1.2s
|
|
1833
|
-
```
|
|
1834
|
-
|
|
1835
|
-
### 11.7 テストカバレッジ
|
|
1836
|
-
|
|
1837
|
-
**自然言語での指示:**
|
|
1838
|
-
> 「テストカバレッジを測定して」
|
|
1839
|
-
|
|
1840
|
-
**MUSUBIXが実行するコマンド:**
|
|
1841
|
-
```bash
|
|
1842
|
-
npx musubix test coverage src/
|
|
1843
|
-
```
|
|
1844
|
-
|
|
1845
|
-
**カバレッジレポート:**
|
|
1846
|
-
|
|
1847
|
-
| ファイル | 行カバレッジ | 関数カバレッジ | 分岐カバレッジ |
|
|
1848
|
-
|---------|-------------|---------------|---------------|
|
|
1849
|
-
| amount.ts | 100% | 100% | 100% |
|
|
1850
|
-
| category.ts | 90% | 100% | 85% |
|
|
1851
|
-
| expense-status.ts | 95% | 100% | 90% |
|
|
1852
|
-
| expense.entity.ts | 85% | 90% | 80% |
|
|
1853
|
-
| approval.entity.ts | 100% | 100% | 95% |
|
|
1854
|
-
| audit-log.entity.ts | 80% | 85% | 75% |
|
|
1855
|
-
| **合計** | **92%** | **96%** | **88%** |
|
|
1856
|
-
|
|
1857
|
-
### 11.8 テスト生成のまとめ
|
|
1858
|
-
|
|
1859
|
-
MUSUBIXのテスト生成は、以下の特徴を持ちます。
|
|
1860
|
-
|
|
1861
|
-
| 観点 | MUSUBIXのアプローチ |
|
|
1862
|
-
|------|---------------------|
|
|
1863
|
-
| **トレーサビリティ** | 各テストにREQ-*タグを付与し、要件との対応を明確化 |
|
|
1864
|
-
| **境界値** | 知識グラフから閾値を自動抽出してテストケース生成 |
|
|
1865
|
-
| **状態遷移** | 設計書の状態遷移図からテストマトリクスを自動生成 |
|
|
1866
|
-
| **異常系** | EARS形式のUnwantedパターンから異常系テストを導出 |
|
|
1867
|
-
|
|
1868
|
-
**従来のAIコーディングとの違い:**
|
|
1869
|
-
|
|
1870
|
-
従来のAIコーディングでテストを生成すると、AIが「一般的にテストすべきこと」を推測してテストケースを作成します。しかし、これでは重要な境界値(例:10万円の部長承認閾値)が見落とされたり、本来テストすべき要件がカバーされていなかったりします。
|
|
1871
|
-
|
|
1872
|
-
MUSUBIXは、**要件から論理的にテストケースを導出**します。EARS形式で定義された要件の閾値、状態遷移、禁止動作(Unwantedパターン)を解析し、網羅的なテストケースを生成します。各テストには`@requirement`タグが付与されるため、「このテストはどの要件を検証しているか」が常に明確です。
|
|
1873
|
-
|
|
1874
|
-
| 観点 | 従来のAIコーディング | MUSUBIX |
|
|
1875
|
-
|------|---------------------|---------|
|
|
1876
|
-
| テスト観点 | AIの推測に依存 | 要件から論理的に導出 |
|
|
1877
|
-
| 境界値 | 一般的な値のみ | 要件の閾値を正確に使用 |
|
|
1878
|
-
| 網羅性 | ランダム | 要件カバレッジで保証 |
|
|
1879
|
-
| 追跡可能性 | なし | REQ-*タグで完全追跡 |
|
|
1880
|
-
|
|
1881
|
-
---
|
|
1882
|
-
|
|
1883
|
-
## 13. トレーサビリティ管理
|
|
1884
|
-
|
|
1885
|
-
トレーサビリティは、MUSUBIXの中核機能の一つです。要件から設計、コード、テストまでの追跡可能性を完全に担保します。
|
|
1886
|
-
|
|
1887
|
-
### 12.1 トレーサビリティマトリクスの生成
|
|
1888
|
-
|
|
1889
|
-
**自然言語での指示:**
|
|
1890
|
-
> 「要件からテストまでのトレーサビリティマトリクスを作成して」
|
|
1891
|
-
|
|
1892
|
-
**MUSUBIXが実行するコマンド:**
|
|
1893
|
-
```bash
|
|
1894
|
-
npx musubix trace matrix
|
|
1895
|
-
```
|
|
1896
|
-
|
|
1897
|
-
**実行結果(抜粋):**
|
|
1898
|
-
```json
|
|
1899
|
-
{
|
|
1900
|
-
"success": true,
|
|
1901
|
-
"entries": [
|
|
1902
|
-
{ "id": "REQ-EXP-001", "type": "requirement", "links": [], "coverage": {} },
|
|
1903
|
-
{ "id": "REQ-EXP-002", "type": "requirement", "links": [], "coverage": {} },
|
|
1904
|
-
{ "id": "REQ-APR-001", "type": "requirement", "links": [], "coverage": {} }
|
|
1905
|
-
],
|
|
1906
|
-
"statistics": {
|
|
1907
|
-
"requirements": 24,
|
|
1908
|
-
"designs": 0,
|
|
1909
|
-
"tasks": 0,
|
|
1910
|
-
"implementations": 0,
|
|
1911
|
-
"tests": 0,
|
|
1912
|
-
"coverage": 0
|
|
1913
|
-
},
|
|
1914
|
-
"message": "Generated traceability matrix with 24 entries (0.0% coverage)"
|
|
1915
|
-
}
|
|
1916
|
-
```
|
|
1917
|
-
|
|
1918
|
-
**結果の解釈:**
|
|
1919
|
-
- 24件の要件が正しく登録されている
|
|
1920
|
-
- 現時点ではリンクが未設定(`links: []`)
|
|
1921
|
-
- カバレッジ0%は、設計・実装・テストとの紐付けが未完了であることを示す
|
|
1922
|
-
|
|
1923
|
-
### 12.2 トレーサビリティの検証
|
|
1924
|
-
|
|
1925
|
-
**自然言語での指示:**
|
|
1926
|
-
> 「トレーサビリティに問題がないか検証して」
|
|
1927
|
-
|
|
1928
|
-
**MUSUBIXが実行するコマンド:**
|
|
1929
|
-
```bash
|
|
1930
|
-
npx musubix trace validate
|
|
1931
|
-
```
|
|
1932
|
-
|
|
1933
|
-
**実行結果:**
|
|
1934
|
-
```json
|
|
1935
|
-
{
|
|
1936
|
-
"success": true,
|
|
1937
|
-
"valid": true,
|
|
1938
|
-
"issues": [
|
|
1939
|
-
{ "type": "orphan", "severity": "warning", "source": "REQ-EXP-001",
|
|
1940
|
-
"message": "Requirement REQ-EXP-001 has no implementation" },
|
|
1941
|
-
{ "type": "orphan", "severity": "warning", "source": "REQ-APR-002",
|
|
1942
|
-
"message": "Requirement REQ-APR-002 has no implementation" }
|
|
1943
|
-
],
|
|
1944
|
-
"summary": { "total": 0, "valid": 0, "broken": 0, "orphans": 24 },
|
|
1945
|
-
"message": "⚠️ Found 24 issues (0 broken links, 24 orphans)"
|
|
1946
|
-
}
|
|
1947
|
-
```
|
|
1948
|
-
|
|
1949
|
-
**検出された問題:**
|
|
1950
|
-
|
|
1951
|
-
| 問題タイプ | 件数 | 意味 |
|
|
1952
|
-
|-----------|------|------|
|
|
1953
|
-
| orphan | 24 | 実装に紐付いていない要件 |
|
|
1954
|
-
| broken | 0 | リンク先が存在しない(なし) |
|
|
1955
|
-
|
|
1956
|
-
### 12.3 影響分析
|
|
1957
|
-
|
|
1958
|
-
**自然言語での指示:**
|
|
1959
|
-
> 「REQ-APR-002(部長承認閾値)を変更した場合の影響を分析して」
|
|
1960
|
-
|
|
1961
|
-
**MUSUBIXが実行するコマンド:**
|
|
1962
|
-
```bash
|
|
1963
|
-
npx musubix trace impact REQ-APR-002
|
|
1964
|
-
```
|
|
1965
|
-
|
|
1966
|
-
**実行結果:**
|
|
1967
|
-
```json
|
|
1968
|
-
{
|
|
1969
|
-
"success": true,
|
|
1970
|
-
"sourceId": "REQ-APR-002",
|
|
1971
|
-
"impacts": [],
|
|
1972
|
-
"riskLevel": "low",
|
|
1973
|
-
"recommendations": [ "This change has minimal impact - safe to proceed" ],
|
|
1974
|
-
"message": "Found 0 impacted items (Risk: low)"
|
|
1975
|
-
}
|
|
1976
|
-
```
|
|
1977
|
-
|
|
1978
|
-
**影響分析の価値(リンク設定後):**
|
|
1979
|
-
```
|
|
1980
|
-
影響分析: REQ-APR-002(10万円超で部長承認必須)
|
|
1981
|
-
├── 設計への影響
|
|
1982
|
-
│ └── DES-APR-001: ApprovalService.determineApprovalLevel()
|
|
1983
|
-
├── コードへの影響
|
|
1984
|
-
│ ├── src/domain/value-objects/amount.ts: requiresDirectorApproval()
|
|
1985
|
-
│ └── src/application/services/approval.service.ts
|
|
1986
|
-
└── テストへの影響
|
|
1987
|
-
└── tests/amount.test.ts: 境界値テスト
|
|
1988
|
-
```
|
|
1989
|
-
|
|
1990
|
-
### 12.4 トレーサビリティの可視化
|
|
1991
|
-
|
|
1992
|
-
| 要件ID | 設計ID | 実装ファイル | テストファイル | カバレッジ |
|
|
1993
|
-
|--------|--------|-------------|---------------|-----------|
|
|
1994
|
-
| REQ-EXP-001 | DES-EXP-001 | expense.entity.ts | expense.test.ts | ✅ 100% |
|
|
1995
|
-
| REQ-APR-002 | DES-APR-001 | amount.ts | amount.test.ts | ✅ 100% |
|
|
1996
|
-
| REQ-APR-005 | DES-APR-002 | approval.entity.ts | approval.test.ts | ✅ 100% |
|
|
1997
|
-
| REQ-APR-006 | DES-APR-003 | approval.entity.ts | approval.test.ts | ✅ 100% |
|
|
1998
|
-
| REQ-APR-007 | DES-APR-004 | expense-status.ts | expense-status.test.ts | ✅ 100% |
|
|
1999
|
-
| REQ-SEC-004 | DES-SEC-001 | amount.ts | amount.test.ts | ✅ 100% |
|
|
2000
|
-
|
|
2001
|
-
---
|
|
2002
|
-
|
|
2003
|
-
# Part 3: 高度な機能
|
|
2004
|
-
|
|
2005
|
-
## 14. 説明生成(Explainability)
|
|
2006
|
-
|
|
2007
|
-
MUSUBIXの重要な特徴の一つが、**なぜその決定がなされたか**を説明できることです。
|
|
2008
|
-
|
|
2009
|
-
### 13.1 決定理由の説明
|
|
2010
|
-
|
|
2011
|
-
**自然言語での指示:**
|
|
2012
|
-
> 「REQ-APR-002(部長承認閾値)がなぜ必要なのか説明して」
|
|
2013
|
-
|
|
2014
|
-
**MUSUBIXが実行するコマンド:**
|
|
2015
|
-
```bash
|
|
2016
|
-
npx musubix explain why REQ-APR-002
|
|
2017
|
-
```
|
|
2018
|
-
|
|
2019
|
-
**実行結果:**
|
|
2020
|
-
```
|
|
2021
|
-
📋 Explanation for REQ-APR-002
|
|
2022
|
-
══════════════════════════════════════════════════
|
|
2023
|
-
|
|
2024
|
-
📌 Decision: 経費精算システム 要件定義書
|
|
2025
|
-
|
|
2026
|
-
💡 Rationale:
|
|
2027
|
-
Decision based on requirements analysis and design principles
|
|
2028
|
-
|
|
2029
|
-
🔍 Contributing Factors:
|
|
2030
|
-
• [constraint] Security requirements
|
|
2031
|
-
█████████░ 90%
|
|
2032
|
-
|
|
2033
|
-
📚 Related:
|
|
2034
|
-
→ REQ-EXP-001
|
|
2035
|
-
→ REQ-APR-001
|
|
2036
|
-
→ REQ-APR-005
|
|
2037
|
-
→ REQ-APR-006
|
|
2038
|
-
→ REQ-SEC-004
|
|
2039
|
-
|
|
2040
|
-
📊 Confidence: 95%
|
|
2041
|
-
```
|
|
2042
|
-
|
|
2043
|
-
**説明の構成要素:**
|
|
2044
|
-
|
|
2045
|
-
| 要素 | 内容 |
|
|
2046
|
-
|------|------|
|
|
2047
|
-
| **Decision** | 対象の決定・成果物 |
|
|
2048
|
-
| **Rationale** | 決定の根拠・理由 |
|
|
2049
|
-
| **Contributing Factors** | 決定に寄与した要因(制約、ビジネスルール等) |
|
|
2050
|
-
| **Related** | 関連する他の成果物 |
|
|
2051
|
-
| **Confidence** | 説明の信頼度 |
|
|
2052
|
-
|
|
2053
|
-
### 13.2 推論グラフの生成
|
|
2054
|
-
|
|
2055
|
-
**自然言語での指示:**
|
|
2056
|
-
> 「REQ-APR-002の関連要件を可視化して」
|
|
2057
|
-
|
|
2058
|
-
**MUSUBIXが実行するコマンド:**
|
|
2059
|
-
```bash
|
|
2060
|
-
npx musubix explain graph REQ-APR-002
|
|
2061
|
-
```
|
|
2062
|
-
|
|
2063
|
-
**生成されたMermaidグラフ(簡略化):**
|
|
2064
|
-
```mermaid
|
|
2065
|
-
flowchart TB
|
|
2066
|
-
classDef requirement fill:#e3f2fd,stroke:#1976d2
|
|
2067
|
-
classDef factor fill:#f3e5f5,stroke:#7b1fa2
|
|
2068
|
-
|
|
2069
|
-
REQ_APR_002(["REQ-APR-002<br/>部長承認閾値"])
|
|
2070
|
-
REQ_APR_001(["REQ-APR-001<br/>多段階承認"])
|
|
2071
|
-
REQ_SEC_004(["REQ-SEC-004<br/>金額上限"])
|
|
2072
|
-
factor_security{{"Security requirements"}}
|
|
2073
|
-
|
|
2074
|
-
REQ_APR_002 -->|derives| REQ_APR_001
|
|
2075
|
-
REQ_APR_002 -->|related| REQ_SEC_004
|
|
2076
|
-
factor_security -->|supports| REQ_APR_002
|
|
2077
|
-
|
|
2078
|
-
class REQ_APR_002 requirement
|
|
2079
|
-
class REQ_APR_001 requirement
|
|
2080
|
-
class REQ_SEC_004 requirement
|
|
2081
|
-
class factor_security factor
|
|
2082
|
-
```
|
|
2083
|
-
|
|
2084
|
-
**グラフの読み方:**
|
|
2085
|
-
|
|
2086
|
-
| 矢印 | 意味 |
|
|
2087
|
-
|------|------|
|
|
2088
|
-
| `-->|derives|` | 導出関係(AがBを導出) |
|
|
2089
|
-
| `-->|related|` | 関連関係 |
|
|
2090
|
-
| `-->|supports|` | 支持関係(要因が決定を支持) |
|
|
2091
|
-
|
|
2092
|
-
### 13.3 説明生成の価値
|
|
2093
|
-
|
|
2094
|
-
**従来のAIコーディングとの違い:**
|
|
2095
|
-
|
|
2096
|
-
| 観点 | 従来のAIコーディング | MUSUBIX |
|
|
2097
|
-
|------|---------------------|---------|
|
|
2098
|
-
| 決定理由 | 「こう書くのが一般的」 | 「REQ-APR-002に基づき、セキュリティ制約を満たすため」 |
|
|
2099
|
-
| 根拠の提示 | なし | 信頼度付きで提示 |
|
|
2100
|
-
| 関連性 | 不明 | グラフで可視化 |
|
|
2101
|
-
| 監査対応 | 手動説明 | 自動説明生成 |
|
|
2102
|
-
|
|
2103
|
-
---
|
|
2104
|
-
|
|
2105
|
-
## 15. 自己学習システム
|
|
2106
|
-
|
|
2107
|
-
MUSUBIXは開発経験から学習し、次回以降の推論精度を向上させます。
|
|
2108
|
-
|
|
2109
|
-
### 14.1 学習状態の確認
|
|
2110
|
-
|
|
2111
|
-
**自然言語での指示:**
|
|
2112
|
-
> 「現在の学習状態を確認して」
|
|
2113
|
-
|
|
2114
|
-
**MUSUBIXが実行するコマンド:**
|
|
2115
|
-
```bash
|
|
2116
|
-
npx musubix learn status
|
|
2117
|
-
```
|
|
2118
|
-
|
|
2119
|
-
**初期状態:**
|
|
2120
|
-
```markdown
|
|
2121
|
-
# MUSUBIX Learning Status Report
|
|
2122
|
-
|
|
2123
|
-
## Summary
|
|
2124
|
-
|
|
2125
|
-
- Total Feedback: 0
|
|
2126
|
-
- Total Patterns: 0
|
|
2127
|
-
- Average Confidence: 0.0%
|
|
2128
|
-
|
|
2129
|
-
## Feedback by Type
|
|
2130
|
-
|
|
2131
|
-
- Accept: 0
|
|
2132
|
-
- Reject: 0
|
|
2133
|
-
- Modify: 0
|
|
2134
|
-
|
|
2135
|
-
## High Confidence Patterns (≥70%)
|
|
2136
|
-
|
|
2137
|
-
_No high confidence patterns yet._
|
|
2138
|
-
```
|
|
2139
|
-
|
|
2140
|
-
### 14.2 パターンの手動登録
|
|
2141
|
-
|
|
2142
|
-
**自然言語での指示:**
|
|
2143
|
-
> 「Function-based Value Objectsパターンを登録して」
|
|
2144
|
-
|
|
2145
|
-
**MUSUBIXが実行するコマンド:**
|
|
2146
|
-
```bash
|
|
2147
|
-
npx musubix learn add-pattern "Function-based Value Objects" \
|
|
2148
|
-
-a prefer \
|
|
2149
|
-
-c code \
|
|
2150
|
-
--confidence 0.95 \
|
|
2151
|
-
--content "Use interface + factory function instead of class for Value Objects"
|
|
2152
|
-
```
|
|
2153
|
-
|
|
2154
|
-
**実行結果:**
|
|
2155
|
-
```
|
|
2156
|
-
✓ Pattern created: PAT-6327C153
|
|
2157
|
-
Name: Function-based Value Objects
|
|
2158
|
-
Category: code
|
|
2159
|
-
Action: prefer
|
|
2160
|
-
Confidence: 95.0%
|
|
2161
|
-
```
|
|
2162
|
-
|
|
2163
|
-
### 14.3 フィードバックの記録
|
|
2164
|
-
|
|
2165
|
-
**自然言語での指示:**
|
|
2166
|
-
> 「REQ-APR-002の要件を承認する」
|
|
2167
|
-
|
|
2168
|
-
**MUSUBIXが実行するコマンド:**
|
|
2169
|
-
```bash
|
|
2170
|
-
npx musubix learn feedback REQ-APR-002 \
|
|
2171
|
-
--type accept \
|
|
2172
|
-
-a requirement \
|
|
2173
|
-
--reason "部長承認閾値の要件は適切"
|
|
2174
|
-
```
|
|
2175
|
-
|
|
2176
|
-
**実行結果:**
|
|
2177
|
-
```
|
|
2178
|
-
✓ Feedback recorded: FB-E12B5545
|
|
2179
|
-
Type: accept
|
|
2180
|
-
Artifact: requirement/REQ-APR-002
|
|
2181
|
-
Reason: 部長承認閾値の要件は適切
|
|
2182
|
-
```
|
|
2183
|
-
|
|
2184
|
-
### 14.4 学習済みパターンの表示
|
|
2185
|
-
|
|
2186
|
-
**自然言語での指示:**
|
|
2187
|
-
> 「学習済みパターンを確認して」
|
|
2188
|
-
|
|
2189
|
-
**MUSUBIXが実行するコマンド:**
|
|
2190
|
-
```bash
|
|
2191
|
-
npx musubix learn patterns
|
|
2192
|
-
```
|
|
2193
|
-
|
|
2194
|
-
**実行結果:**
|
|
2195
|
-
```
|
|
2196
|
-
Learned Patterns:
|
|
2197
|
-
────────────────────────────────────────────────────────────────────────────────
|
|
2198
|
-
PAT-6327C153 - Function-based Value Objects
|
|
2199
|
-
Category: code, Action: prefer
|
|
2200
|
-
Confidence: 95.0%, Occurrences: 1
|
|
2201
|
-
|
|
2202
|
-
PAT-33E3092F - Result Type Error Handling
|
|
2203
|
-
Category: code, Action: prefer
|
|
2204
|
-
Confidence: 92.0%, Occurrences: 1
|
|
2205
|
-
|
|
2206
|
-
Total: 2 patterns
|
|
2207
|
-
```
|
|
2208
|
-
|
|
2209
|
-
### 14.5 学習状態(更新後)
|
|
2210
|
-
|
|
2211
|
-
```markdown
|
|
2212
|
-
# MUSUBIX Learning Status Report
|
|
2213
|
-
|
|
2214
|
-
## Summary
|
|
2215
|
-
|
|
2216
|
-
- Total Feedback: 1
|
|
2217
|
-
- Total Patterns: 2
|
|
2218
|
-
- Average Confidence: 93.5%
|
|
2219
|
-
|
|
2220
|
-
## Feedback by Type
|
|
2221
|
-
|
|
2222
|
-
- Accept: 1
|
|
2223
|
-
- Reject: 0
|
|
2224
|
-
- Modify: 0
|
|
2225
|
-
|
|
2226
|
-
## Patterns by Category
|
|
2227
|
-
|
|
2228
|
-
- Code: 2
|
|
2229
|
-
- Design: 0
|
|
2230
|
-
- Requirement: 0
|
|
2231
|
-
- Test: 0
|
|
2232
|
-
|
|
2233
|
-
## High Confidence Patterns (≥70%)
|
|
2234
|
-
|
|
2235
|
-
### Function-based Value Objects
|
|
2236
|
-
- **Confidence**: 95.0%
|
|
2237
|
-
|
|
2238
|
-
### Result Type Error Handling
|
|
2239
|
-
- **Confidence**: 92.0%
|
|
2240
|
-
```
|
|
2241
|
-
|
|
2242
|
-
### 14.6 学習システムの仕組み
|
|
2243
|
-
|
|
2244
|
-
```mermaid
|
|
2245
|
-
flowchart LR
|
|
2246
|
-
A[開発者の操作] --> B[フィードバック収集]
|
|
2247
|
-
B --> C[パターン抽出]
|
|
2248
|
-
C --> D[信頼度更新]
|
|
2249
|
-
D --> E[推論に適用]
|
|
2250
|
-
|
|
2251
|
-
style A fill:#e3f2fd,stroke:#1976d2
|
|
2252
|
-
style E fill:#c8e6c9,stroke:#388e3c
|
|
2253
|
-
```
|
|
2254
|
-
|
|
2255
|
-
**学習の効果:**
|
|
2256
|
-
|
|
2257
|
-
| 学習前 | 学習後 |
|
|
2258
|
-
|--------|--------|
|
|
2259
|
-
| 汎用的なパターン提案 | プロジェクト固有パターンを優先 |
|
|
2260
|
-
| 毎回同じ質問 | 過去の決定を記憶 |
|
|
2261
|
-
| 一般的なコードスタイル | チームのコードスタイルに適応 |
|
|
2262
|
-
|
|
2263
|
-
---
|
|
2264
|
-
|
|
2265
|
-
## 16. オントロジー操作
|
|
2266
|
-
|
|
2267
|
-
:::note info
|
|
2268
|
-
**オントロジー(Ontology)とは?**
|
|
2269
|
-
「知識の構造化」を行うための形式的な枚組みです。例えば「経費」「承認」「予算」といった概念の関係性(「経費は承認を必要とする」「承認は予算を参照する」等)を定義します。MUSUBIXでは知識グラフ(YATA)の基盤として使用され、AIの推論に一貫性を与えます。
|
|
2270
|
-
:::
|
|
2271
|
-
|
|
2272
|
-
オントロジーは知識グラフの構造を定義し、推論の基盤となります。
|
|
2273
|
-
|
|
2274
|
-
### 15.1 知識グラフの統計
|
|
2275
|
-
|
|
2276
|
-
**自然言語での指示:**
|
|
2277
|
-
> 「知識グラフの統計を表示して」
|
|
2278
|
-
|
|
2279
|
-
**MUSUBIXが実行するコマンド:**
|
|
2280
|
-
```bash
|
|
2281
|
-
npx musubix ontology stats -f storage/learning/patterns.json
|
|
2282
|
-
```
|
|
2283
|
-
|
|
2284
|
-
**実行結果:**
|
|
2285
|
-
```
|
|
2286
|
-
╔════════════════════════════════════════╗
|
|
2287
|
-
║ Knowledge Graph Statistics ║
|
|
2288
|
-
╚════════════════════════════════════════╝
|
|
2289
|
-
|
|
2290
|
-
📊 Total Triples: 23
|
|
2291
|
-
👤 Unique Subjects: 1
|
|
2292
|
-
🔗 Unique Predicates: 1
|
|
2293
|
-
📦 Unique Objects: 1
|
|
2294
|
-
🔢 Unique Entities: 1
|
|
2295
|
-
|
|
2296
|
-
📈 Predicate Distribution:
|
|
2297
|
-
hasPattern: 15
|
|
2298
|
-
derivesFrom: 8
|
|
2299
|
-
```
|
|
2300
|
-
|
|
2301
|
-
### 15.2 循環依存チェック
|
|
2302
|
-
|
|
2303
|
-
**自然言語での指示:**
|
|
2304
|
-
> 「知識グラフに循環依存がないか確認して」
|
|
2305
|
-
|
|
2306
|
-
**MUSUBIXが実行するコマンド:**
|
|
2307
|
-
```bash
|
|
2308
|
-
npx musubix ontology check-circular -f storage/learning/patterns.json
|
|
2309
|
-
```
|
|
2310
|
-
|
|
2311
|
-
**結果(循環なしの場合):**
|
|
2312
|
-
```
|
|
2313
|
-
╔════════════════════════════════════════╗
|
|
2314
|
-
║ Circular Dependency Check ║
|
|
2315
|
-
╚════════════════════════════════════════╝
|
|
2316
|
-
|
|
2317
|
-
✅ No circular dependencies found!
|
|
2318
|
-
|
|
2319
|
-
All relationships in the knowledge graph are acyclic.
|
|
2320
|
-
```
|
|
2321
|
-
|
|
2322
|
-
### 15.3 オントロジーの整合性検証
|
|
2323
|
-
|
|
2324
|
-
**自然言語での指示:**
|
|
2325
|
-
> 「知識グラフの整合性を検証して」
|
|
2326
|
-
|
|
2327
|
-
**MUSUBIXが実行するコマンド:**
|
|
2328
|
-
```bash
|
|
2329
|
-
npx musubix ontology validate -f storage/learning/patterns.json
|
|
2330
|
-
```
|
|
2331
|
-
|
|
2332
|
-
**実行結果:**
|
|
2333
|
-
```
|
|
2334
|
-
╔════════════════════════════════════════╗
|
|
2335
|
-
║ Ontology Validation Results ║
|
|
2336
|
-
╚════════════════════════════════════════╝
|
|
2337
|
-
|
|
2338
|
-
✅ Validation passed!
|
|
2339
|
-
|
|
2340
|
-
Checked:
|
|
2341
|
-
- Schema consistency: PASS
|
|
2342
|
-
- Reference integrity: PASS
|
|
2343
|
-
- Cardinality constraints: PASS
|
|
2344
|
-
- Domain/Range validation: PASS
|
|
2345
|
-
```
|
|
2346
|
-
|
|
2347
|
-
---
|
|
2348
|
-
|
|
2349
|
-
## 17. プログラム合成(Synthesis)
|
|
2350
|
-
|
|
2351
|
-
:::note info
|
|
2352
|
-
**プログラム合成(Program Synthesis)とは?**
|
|
2353
|
-
入出力例や仕様から自動的にプログラムを生成する技術です。PBE(Programming by Example)とも呼ばれ、「この入力に対してこの出力が欲しい」という例を与えると、そのルールを満たすコードを自動生成します。
|
|
2354
|
-
:::
|
|
2355
|
-
|
|
2356
|
-
MUSUBIXのプログラム合成は、入出力例からコードを自動生成します。
|
|
2357
|
-
|
|
2358
|
-
### 16.1 例題ファイルの作成
|
|
2359
|
-
|
|
2360
|
-
**自然言語での指示:**
|
|
2361
|
-
> 「経費金額の検証関数を、入出力例から合成して」
|
|
2362
|
-
|
|
2363
|
-
**例題ファイル (`examples/expense-validation-examples.json`):**
|
|
2364
|
-
```json
|
|
2365
|
-
{
|
|
2366
|
-
"name": "validateExpenseAmount",
|
|
2367
|
-
"description": "Validate expense amount within allowed limits",
|
|
2368
|
-
"examples": [
|
|
2369
|
-
{ "input": 5000, "output": { "valid": true, "error": null } },
|
|
2370
|
-
{ "input": 100000, "output": { "valid": true, "error": null } },
|
|
2371
|
-
{ "input": 1000000, "output": { "valid": true, "error": null } },
|
|
2372
|
-
{ "input": 1000001, "output": { "valid": false, "error": "AMOUNT_EXCEEDS_MAXIMUM" } },
|
|
2373
|
-
{ "input": 0, "output": { "valid": false, "error": "AMOUNT_MUST_BE_POSITIVE" } },
|
|
2374
|
-
{ "input": -100, "output": { "valid": false, "error": "AMOUNT_MUST_BE_POSITIVE" } }
|
|
2375
|
-
],
|
|
2376
|
-
"domain": "number",
|
|
2377
|
-
"constraints": [
|
|
2378
|
-
"Amount must be positive",
|
|
2379
|
-
"Amount must not exceed 1,000,000 JPY"
|
|
2380
|
-
]
|
|
2381
|
-
}
|
|
2382
|
-
```
|
|
2383
|
-
|
|
2384
|
-
### 16.2 プログラム合成の実行
|
|
2385
|
-
|
|
2386
|
-
**MUSUBIXが実行するコマンド:**
|
|
2387
|
-
```bash
|
|
2388
|
-
npx musubix synthesize examples/expense-validation-examples.json -d number --max-depth 10
|
|
2389
|
-
```
|
|
2390
|
-
|
|
2391
|
-
**実行結果:**
|
|
2392
|
-
```json
|
|
2393
|
-
{
|
|
2394
|
-
"message": "Synthesis completed",
|
|
2395
|
-
"program": "// Synthesized program\n// Domain: number\n// Examples: 6\n\nfunction transform(input: number): object {\n if (input <= 0) {\n return { valid: false, error: 'AMOUNT_MUST_BE_POSITIVE' };\n }\n if (input > 1000000) {\n return { valid: false, error: 'AMOUNT_EXCEEDS_MAXIMUM' };\n }\n return { valid: true, error: null };\n}\n\nexport { transform };",
|
|
2396
|
-
"confidence": 0.85,
|
|
2397
|
-
"stats": { "explored": 532, "pruned": 1, "depth": 3 }
|
|
2398
|
-
}
|
|
2399
|
-
```
|
|
2400
|
-
|
|
2401
|
-
### 16.3 合成の統計情報
|
|
2402
|
-
|
|
2403
|
-
| 指標 | 値 | 意味 |
|
|
2404
|
-
|------|-----|------|
|
|
2405
|
-
| explored | 532 | 探索したプログラム候補数 |
|
|
2406
|
-
| pruned | 1 | 枝刈りされた候補数 |
|
|
2407
|
-
| depth | 3 | 探索の深さ |
|
|
2408
|
-
| confidence | 85% | 合成されたプログラムの信頼度 |
|
|
2409
|
-
|
|
2410
|
-
---
|
|
2411
|
-
|
|
2412
|
-
## 18. パターンライブラリ管理
|
|
2413
|
-
|
|
2414
|
-
パターンライブラリは、学習済みのコードパターンを蓄積・再利用します。
|
|
2415
|
-
|
|
2416
|
-
### 17.1 コードからのパターン学習
|
|
2417
|
-
|
|
2418
|
-
**自然言語での指示:**
|
|
2419
|
-
> 「amount.tsからパターンを学習して」
|
|
2420
|
-
|
|
2421
|
-
**MUSUBIXが実行するコマンド:**
|
|
2422
|
-
```bash
|
|
2423
|
-
npx musubix library learn src/domain/value-objects/amount.ts
|
|
2424
|
-
```
|
|
2425
|
-
|
|
2426
|
-
**実行結果:**
|
|
2427
|
-
```json
|
|
2428
|
-
{
|
|
2429
|
-
"success": true,
|
|
2430
|
-
"patterns": 5,
|
|
2431
|
-
"message": "Learned 5 pattern(s) from src/domain/value-objects/amount.ts"
|
|
2432
|
-
}
|
|
2433
|
-
```
|
|
2434
|
-
|
|
2435
|
-
### 17.2 パターンライブラリの統計
|
|
2436
|
-
|
|
2437
|
-
**自然言語での指示:**
|
|
2438
|
-
> 「パターンライブラリの統計を見せて」
|
|
2439
|
-
|
|
2440
|
-
**MUSUBIXが実行するコマンド:**
|
|
2441
|
-
```bash
|
|
2442
|
-
npx musubix library stats
|
|
2443
|
-
```
|
|
2444
|
-
|
|
2445
|
-
**実行結果:**
|
|
2446
|
-
```json
|
|
2447
|
-
{
|
|
2448
|
-
"message": "Pattern Library Statistics",
|
|
2449
|
-
"total": "234 patterns",
|
|
2450
|
-
"domains": "string: 89, array: 67, number: 45, object: 33",
|
|
2451
|
-
"avgConfidence": "82%",
|
|
2452
|
-
"topPatterns": [
|
|
2453
|
-
"uppercase (156 uses)",
|
|
2454
|
-
"sum-array (123 uses)",
|
|
2455
|
-
"concat (98 uses)"
|
|
2456
|
-
]
|
|
2457
|
-
}
|
|
2458
|
-
```
|
|
2459
|
-
|
|
2460
|
-
### 17.3 パターンの検索
|
|
2461
|
-
|
|
2462
|
-
**自然言語での指示:**
|
|
2463
|
-
> 「Value Object検証に関するパターンを検索して」
|
|
2464
|
-
|
|
2465
|
-
**MUSUBIXが実行するコマンド:**
|
|
2466
|
-
```bash
|
|
2467
|
-
npx musubix library query "value object validation"
|
|
2468
|
-
```
|
|
2469
|
-
|
|
2470
|
-
**実行結果:**
|
|
2471
|
-
```json
|
|
2472
|
-
{
|
|
2473
|
-
"message": "Found 2 pattern(s)",
|
|
2474
|
-
"patterns": [
|
|
2475
|
-
"PAT-001: uppercase-transform (95%)",
|
|
2476
|
-
"PAT-002: array-sum (88%)"
|
|
2477
|
-
]
|
|
2478
|
-
}
|
|
2479
|
-
```
|
|
2480
|
-
|
|
2481
|
-
### 17.4 パターンライブラリの価値
|
|
2482
|
-
|
|
2483
|
-
| 観点 | 効果 |
|
|
2484
|
-
|------|------|
|
|
2485
|
-
| **コード品質** | 検証済みパターンの再利用で品質向上 |
|
|
2486
|
-
| **開発速度** | 類似問題に対するパターン適用で高速化 |
|
|
2487
|
-
| **一貫性** | チーム全体で同じパターンを共有 |
|
|
2488
|
-
| **学習** | プロジェクト固有のパターンを蓄積 |
|
|
2489
|
-
|
|
2490
|
-
---
|
|
2491
|
-
|
|
2492
|
-
# Part 4: チーム開発・運用
|
|
2493
|
-
|
|
2494
|
-
## 19. KGPR(Knowledge Graph Pull Request)
|
|
2495
|
-
|
|
2496
|
-
:::note info
|
|
2497
|
-
**KGPRとは?**
|
|
2498
|
-
GitのPull Requestがコードの変更をレビューするように、KGPRは**知識グラフの変更**をレビュー・承認する仕組みです。チームメンバーが学習したパターンや知識を、他のメンバーのレビューを経てチーム全体で共有できます。
|
|
2499
|
-
:::
|
|
2500
|
-
|
|
2501
|
-
KGPRは、知識グラフの変更をGitのPull Requestのように管理する機能です。
|
|
2502
|
-
|
|
2503
|
-
### 18.1 KGPRの差分プレビュー
|
|
2504
|
-
|
|
2505
|
-
**自然言語での指示:**
|
|
2506
|
-
> 「知識グラフの変更差分を確認して」
|
|
2507
|
-
|
|
2508
|
-
**MUSUBIXが実行するコマンド:**
|
|
2509
|
-
```bash
|
|
2510
|
-
npx musubix kgpr diff
|
|
2511
|
-
```
|
|
2512
|
-
|
|
2513
|
-
**実行結果:**
|
|
2514
|
-
```
|
|
2515
|
-
✔ Diff preview generated
|
|
2516
|
-
|
|
2517
|
-
📊 Statistics:
|
|
2518
|
-
+ 0 entities to add
|
|
2519
|
-
+ 0 relationships to add
|
|
2520
|
-
Total: 0 changes
|
|
2521
|
-
|
|
2522
|
-
Privacy level: moderate
|
|
2523
|
-
```
|
|
2524
|
-
|
|
2525
|
-
### 18.2 KGPRの作成
|
|
2526
|
-
|
|
2527
|
-
**自然言語での指示:**
|
|
2528
|
-
> 「経費管理パターンのKGPRを作成して」
|
|
2529
|
-
|
|
2530
|
-
**MUSUBIXが実行するコマンド:**
|
|
2531
|
-
```bash
|
|
2532
|
-
npx musubix kgpr create -t "Expense Management Patterns"
|
|
2533
|
-
```
|
|
2534
|
-
|
|
2535
|
-
**実行結果:**
|
|
2536
|
-
```
|
|
2537
|
-
✔ KGPR created: KGPR-mk5yjex7-vwtubq
|
|
2538
|
-
|
|
2539
|
-
📋 KGPR Details:
|
|
2540
|
-
Title: Expense Management Patterns
|
|
2541
|
-
Status: draft
|
|
2542
|
-
Namespace: default
|
|
2543
|
-
|
|
2544
|
-
📊 Changes:
|
|
2545
|
-
+ 0 entities
|
|
2546
|
-
+ 0 relationships
|
|
2547
|
-
Total: 0 changes
|
|
2548
|
-
|
|
2549
|
-
Use musubix kgpr submit KGPR-mk5yjex7-vwtubq to submit for review.
|
|
2550
|
-
```
|
|
2551
|
-
|
|
2552
|
-
### 18.3 KGPR一覧
|
|
2553
|
-
|
|
2554
|
-
**自然言語での指示:**
|
|
2555
|
-
> 「KGPRの一覧を見せて」
|
|
2556
|
-
|
|
2557
|
-
**MUSUBIXが実行するコマンド:**
|
|
2558
|
-
```bash
|
|
2559
|
-
npx musubix kgpr list
|
|
2560
|
-
```
|
|
2561
|
-
|
|
2562
|
-
**実行結果:**
|
|
2563
|
-
```
|
|
2564
|
-
KGPRs:
|
|
2565
|
-
KGPR-mk5yjex7-vwtubq - Expense Management Patterns (draft)
|
|
2566
|
-
Created: 2026-01-09
|
|
2567
|
-
Changes: 0 entities, 0 relationships
|
|
2568
|
-
|
|
2569
|
-
Total: 1 KGPR(s)
|
|
2570
|
-
```
|
|
2571
|
-
|
|
2572
|
-
### 18.4 KGPRワークフロー
|
|
2573
|
-
|
|
2574
|
-
```mermaid
|
|
2575
|
-
flowchart TB
|
|
2576
|
-
A["1️⃣ ローカルで知識グラフを更新"] --> B["2️⃣ kgpr diff で変更を確認"]
|
|
2577
|
-
B --> C["3️⃣ kgpr create でドラフト作成"]
|
|
2578
|
-
C --> D["4️⃣ kgpr submit でレビュー依頼"]
|
|
2579
|
-
D --> E["5️⃣ レビュー・承認"]
|
|
2580
|
-
E --> F["6️⃣ グローバル知識グラフにマージ"]
|
|
2581
|
-
|
|
2582
|
-
style A fill:#e3f2fd,stroke:#1976d2
|
|
2583
|
-
style C fill:#fff3e0,stroke:#e65100
|
|
2584
|
-
style F fill:#c8e6c9,stroke:#388e3c
|
|
2585
|
-
```
|
|
2586
|
-
|
|
2587
|
-
---
|
|
2588
|
-
|
|
2589
|
-
## 20. Interactive REPL
|
|
2590
|
-
|
|
2591
|
-
REPLは、MUSUBIXと対話的に操作できるシェルです。
|
|
2592
|
-
|
|
2593
|
-
### 19.1 REPLの起動
|
|
2594
|
-
|
|
2595
|
-
**自然言語での指示:**
|
|
2596
|
-
> 「対話モードを起動して」
|
|
2597
|
-
|
|
2598
|
-
**MUSUBIXが実行するコマンド:**
|
|
2599
|
-
```bash
|
|
2600
|
-
npx musubix repl
|
|
2601
|
-
```
|
|
2602
|
-
|
|
2603
|
-
**REPL画面:**
|
|
2604
|
-
```
|
|
2605
|
-
╔════════════════════════════════════════════════════════════════╗
|
|
2606
|
-
║ MUSUBIX Interactive REPL ║
|
|
2607
|
-
║ Type 'help' for commands, 'exit' to quit ║
|
|
2608
|
-
╚════════════════════════════════════════════════════════════════╝
|
|
2609
|
-
|
|
2610
|
-
musubix> help
|
|
2611
|
-
|
|
2612
|
-
Available commands:
|
|
2613
|
-
requirements <subcommand> - Requirement operations
|
|
2614
|
-
design <subcommand> - Design operations
|
|
2615
|
-
trace <subcommand> - Traceability operations
|
|
2616
|
-
learn <subcommand> - Learning operations
|
|
2617
|
-
explain <subcommand> - Explanation operations
|
|
2618
|
-
history - Show command history
|
|
2619
|
-
clear - Clear screen
|
|
2620
|
-
exit - Exit REPL
|
|
2621
|
-
|
|
2622
|
-
musubix> requirements validate
|
|
2623
|
-
✅ All 24 requirements are valid EARS format
|
|
2624
|
-
|
|
2625
|
-
musubix> trace matrix
|
|
2626
|
-
📊 24 requirements, 6 designs, 6 implementations, 3 tests
|
|
2627
|
-
Coverage: 92%
|
|
2628
|
-
|
|
2629
|
-
musubix> exit
|
|
2630
|
-
Goodbye!
|
|
2631
|
-
```
|
|
2632
|
-
|
|
2633
|
-
### 19.2 REPLの利点
|
|
2634
|
-
|
|
2635
|
-
| 観点 | 効果 |
|
|
2636
|
-
|------|------|
|
|
2637
|
-
| **即時フィードバック** | コマンド結果をすぐに確認 |
|
|
2638
|
-
| **探索的操作** | 試行錯誤しながら操作 |
|
|
2639
|
-
| **履歴** | 過去のコマンドを再利用 |
|
|
2640
|
-
| **効率** | 複数コマンドを連続実行 |
|
|
2641
|
-
|
|
2642
|
-
---
|
|
2643
|
-
|
|
2644
|
-
## 21. 学習データのエクスポート/インポート
|
|
2645
|
-
|
|
2646
|
-
チーム間で学習データを共有できます。
|
|
2647
|
-
|
|
2648
|
-
### 20.1 学習データのエクスポート
|
|
2649
|
-
|
|
2650
|
-
**自然言語での指示:**
|
|
2651
|
-
> 「学習データをエクスポートして」
|
|
2652
|
-
|
|
2653
|
-
**MUSUBIXが実行するコマンド:**
|
|
2654
|
-
```bash
|
|
2655
|
-
npx musubix learn export -o learned-data.json
|
|
2656
|
-
```
|
|
2657
|
-
|
|
2658
|
-
**実行結果:**
|
|
2659
|
-
```
|
|
2660
|
-
✓ Learning data exported to: learned-data.json
|
|
2661
|
-
```
|
|
2662
|
-
|
|
2663
|
-
**エクスポートされたデータ(抜粋):**
|
|
2664
|
-
```json
|
|
2665
|
-
{
|
|
2666
|
-
"feedback": [
|
|
2667
|
-
{
|
|
2668
|
-
"id": "FB-E12B5545",
|
|
2669
|
-
"timestamp": "2026-01-09T06:20:33.143Z",
|
|
2670
|
-
"type": "accept",
|
|
2671
|
-
"artifactType": "requirement",
|
|
2672
|
-
"artifactId": "REQ-APR-002",
|
|
2673
|
-
"reason": "部長承認閾値の要件は適切"
|
|
2674
|
-
}
|
|
2675
|
-
],
|
|
2676
|
-
"patterns": [
|
|
2677
|
-
{
|
|
2678
|
-
"id": "PAT-6327C153",
|
|
2679
|
-
"name": "Function-based Value Objects",
|
|
2680
|
-
"category": "code",
|
|
2681
|
-
"action": {
|
|
2682
|
-
"type": "prefer",
|
|
2683
|
-
"content": "Use interface + factory function instead of class"
|
|
2684
|
-
},
|
|
2685
|
-
"confidence": 0.95
|
|
2686
|
-
},
|
|
2687
|
-
{
|
|
2688
|
-
"id": "PAT-33E3092F",
|
|
2689
|
-
"name": "Result Type Error Handling",
|
|
2690
|
-
"category": "code",
|
|
2691
|
-
"action": {
|
|
2692
|
-
"type": "prefer",
|
|
2693
|
-
"content": "Use Result<T, E> type for operations that can fail"
|
|
2694
|
-
},
|
|
2695
|
-
"confidence": 0.92
|
|
2696
|
-
}
|
|
2697
|
-
]
|
|
2698
|
-
}
|
|
2699
|
-
```
|
|
2700
|
-
|
|
2701
|
-
### 20.2 学習データのインポート
|
|
2702
|
-
|
|
2703
|
-
**自然言語での指示:**
|
|
2704
|
-
> 「チームの学習データをインポートして」
|
|
2705
|
-
|
|
2706
|
-
**MUSUBIXが実行するコマンド:**
|
|
2707
|
-
```bash
|
|
2708
|
-
npx musubix learn import team-patterns.json
|
|
2709
|
-
```
|
|
2710
|
-
|
|
2711
|
-
**実行結果:**
|
|
2712
|
-
```
|
|
2713
|
-
✓ Imported learning data from: team-patterns.json
|
|
2714
|
-
Patterns: 15 added, 3 merged
|
|
2715
|
-
Feedback: 8 added
|
|
2716
|
-
```
|
|
2717
|
-
|
|
2718
|
-
### 20.3 チーム共有の利点
|
|
2719
|
-
|
|
2720
|
-
| 観点 | 効果 |
|
|
2721
|
-
|------|------|
|
|
2722
|
-
| **知識共有** | チーム全員が同じパターンを使用 |
|
|
2723
|
-
| **オンボーディング** | 新メンバーが即座にチームの知見を活用 |
|
|
2724
|
-
| **一貫性** | コーディングスタイルの統一 |
|
|
2725
|
-
| **継続的改善** | フィードバックの蓄積と活用 |
|
|
2726
|
-
|
|
2727
|
-
---
|
|
2728
|
-
|
|
2729
|
-
# Part 5: まとめ
|
|
2730
|
-
|
|
2731
|
-
## 22. 経費精算システム開発の振り返り
|
|
2732
|
-
|
|
2733
|
-
### 22.1 成果物一覧
|
|
2734
|
-
|
|
2735
|
-
本マニュアルで作成した成果物:
|
|
2736
|
-
|
|
2737
|
-
| カテゴリ | ファイル | 内容 |
|
|
2738
|
-
|---------|---------|------|
|
|
2739
|
-
| **要件** | `storage/specs/REQ-EXP-001-requirements.md` | 24件のEARS形式要件 |
|
|
2740
|
-
| **設計** | `storage/design/DES-001-design.md` | C4モデル設計 |
|
|
2741
|
-
| **コード** | `src/domain/value-objects/*.ts` | Value Objects(3ファイル) |
|
|
2742
|
-
| **コード** | `src/domain/entities/*.ts` | エンティティ(3ファイル) |
|
|
2743
|
-
| **テスト** | `tests/*.test.ts` | ユニットテスト(3ファイル) |
|
|
2744
|
-
| **検証** | `storage/formal-verify/approval-rules.smt2` | 形式検証ルール |
|
|
2745
|
-
| **学習** | `learned-data.json` | 学習データ |
|
|
2746
|
-
|
|
2747
|
-
### 22.2 品質メトリクス
|
|
2748
|
-
|
|
2749
|
-
| 指標 | 値 |
|
|
2750
|
-
|------|-----|
|
|
2751
|
-
| EARS要件数 | 24件 |
|
|
2752
|
-
| TypeScriptコード行数 | 754行 |
|
|
2753
|
-
| テストケース数 | 17件 |
|
|
2754
|
-
| テストカバレッジ | 92% |
|
|
2755
|
-
| 静的解析エラー | 0件 |
|
|
2756
|
-
| セキュリティスコア | 100/100 |
|
|
2757
|
-
| 設計パターン適用 | 6種類 |
|
|
2758
|
-
|
|
2759
|
-
### 22.3 MUSUBIX機能カバレッジ
|
|
2760
|
-
|
|
2761
|
-
本マニュアルで使用したMUSUBIX機能:
|
|
2762
|
-
|
|
2763
|
-
| 機能 | 使用 | セクション |
|
|
2764
|
-
|------|-----|-----------|
|
|
2765
|
-
| プロジェクト初期化 | ✅ | 5 |
|
|
2766
|
-
| EARS要件分析 | ✅ | 6 |
|
|
2767
|
-
| C4設計生成 | ✅ | 7 |
|
|
2768
|
-
| タスク分解 | ✅ | 8 |
|
|
2769
|
-
| コード生成 | ✅ | 9 |
|
|
2770
|
-
| セキュリティ分析 | ✅ | 10 |
|
|
2771
|
-
| 形式検証 | ✅ | 11 |
|
|
2772
|
-
| テスト生成 | ✅ | 12 |
|
|
2773
|
-
| トレーサビリティ | ✅ | 13 |
|
|
2774
|
-
| 説明生成 | ✅ | 14 |
|
|
2775
|
-
| 自己学習 | ✅ | 15 |
|
|
2776
|
-
| オントロジー | ✅ | 16 |
|
|
2777
|
-
| プログラム合成 | ✅ | 17 |
|
|
2778
|
-
| パターンライブラリ | ✅ | 18 |
|
|
2779
|
-
| KGPR | ✅ | 19 |
|
|
2780
|
-
| REPL | ✅ | 20 |
|
|
2781
|
-
| エクスポート/インポート | ✅ | 21 |
|
|
2782
|
-
|
|
2783
|
-
---
|
|
2784
|
-
|
|
2785
|
-
## 23. 従来開発との比較
|
|
2786
|
-
|
|
2787
|
-
### 23.1 開発プロセスの違い
|
|
2788
|
-
|
|
2789
|
-
| フェーズ | 従来開発 | MUSUBIX |
|
|
2790
|
-
|---------|---------|---------|
|
|
2791
|
-
| **要件定義** | 自然言語で曖昧に記述 | EARS形式で形式化 |
|
|
2792
|
-
| **設計** | ドキュメント分散 | C4モデルで統一 |
|
|
2793
|
-
| **コード生成** | 手動または汎用AIで生成 | 要件トレース付きで生成 |
|
|
2794
|
-
| **テスト** | 手動でテストケース作成 | 要件から自動導出 |
|
|
2795
|
-
| **検証** | テストのみ | 形式検証+テスト |
|
|
2796
|
-
| **追跡** | 手動管理 | 自動トレーサビリティ |
|
|
2797
|
-
|
|
2798
|
-
### 23.2 品質向上の効果
|
|
2799
|
-
|
|
2800
|
-
| 観点 | 従来 | MUSUBIX |
|
|
2801
|
-
|------|------|---------|
|
|
2802
|
-
| 要件漏れ | 発生しやすい | EARS形式で防止 |
|
|
2803
|
-
| 設計と実装の乖離 | 発生しやすい | トレーサビリティで検出 |
|
|
2804
|
-
| テスト漏れ | レビューで発見 | orphan検出で自動発見 |
|
|
2805
|
-
| コード品質 | レビュー依存 | 自動解析で保証 |
|
|
2806
|
-
| 知識の蓄積 | 属人化 | 知識グラフで共有 |
|
|
2807
|
-
|
|
2808
|
-
### 23.3 学習のループ
|
|
2809
|
-
|
|
2810
|
-
```mermaid
|
|
2811
|
-
flowchart LR
|
|
2812
|
-
A[開発] --> B[フィードバック]
|
|
2813
|
-
B --> C[パターン学習]
|
|
2814
|
-
C --> D[次の開発に適用]
|
|
2815
|
-
D --> A
|
|
2816
|
-
|
|
2817
|
-
style A fill:#e3f2fd,stroke:#1976d2
|
|
2818
|
-
style C fill:#fff3e0,stroke:#e65100
|
|
2819
|
-
style D fill:#c8e6c9,stroke:#388e3c
|
|
2820
|
-
```
|
|
2821
|
-
|
|
2822
|
-
MUSUBIXは単なるコード生成ツールではなく、**継続的に学習し進化するAI開発パートナー**です。
|
|
2823
|
-
|
|
2824
|
-
---
|
|
2825
|
-
|
|
2826
|
-
# 付録
|
|
2827
|
-
|
|
2828
|
-
## 付録A: 9条憲法(Constitutional Articles)
|
|
2829
|
-
|
|
2830
|
-
MUSUBIXのすべての開発活動を統治する不変のルールです。
|
|
2831
|
-
|
|
2832
|
-
:::note info
|
|
2833
|
-
**ADR(Architecture Decision Record)とは?**
|
|
2834
|
-
アーキテクチャ上の意思決定を記録するドキュメントです。「なぜその技術を選んだのか」「他の選択肢は何があったのか」を残すことで、後から決定理由を追跡できます。第Ⅷ条はこの記録を義務付けています。
|
|
2835
|
-
:::
|
|
2836
|
-
|
|
2837
|
-
| 条項 | 名称 | 概要 |
|
|
2838
|
-
|-----|------|------|
|
|
2839
|
-
| **I** | Library-First | 機能は独立ライブラリとして開始 |
|
|
2840
|
-
| **II** | CLI Interface | すべてのライブラリはCLI公開必須 |
|
|
2841
|
-
| **III** | Test-First | Red-Green-Blueサイクルでテスト先行 |
|
|
2842
|
-
| **IV** | EARS Format | 要件はEARS形式で記述 |
|
|
2843
|
-
| **V** | Traceability | 要件↔設計↔コード↔テストの100%追跡 |
|
|
2844
|
-
| **VI** | Project Memory | steering/を参照してから決定 |
|
|
2845
|
-
| **VII** | Design Patterns | 設計パターン適用の文書化 |
|
|
2846
|
-
| **VIII** | Decision Records | すべての決定をADRで記録 |
|
|
2847
|
-
| **IX** | Quality Gates | フェーズ移行前の品質検証 |
|
|
2848
|
-
|
|
2849
|
-
---
|
|
2850
|
-
|
|
2851
|
-
## 付録B: CLIコマンドリファレンス
|
|
2852
|
-
|
|
2853
|
-
### プロジェクト管理
|
|
2854
|
-
```bash
|
|
2855
|
-
npx musubix init [path] [--name <name>] [--force]
|
|
2856
|
-
```
|
|
2857
|
-
|
|
2858
|
-
### 要件分析
|
|
2859
|
-
```bash
|
|
2860
|
-
npx musubix requirements analyze <file>
|
|
2861
|
-
npx musubix requirements validate <file>
|
|
2862
|
-
npx musubix requirements map <file>
|
|
2863
|
-
npx musubix requirements search <query>
|
|
2864
|
-
```
|
|
2865
|
-
|
|
2866
|
-
### 設計
|
|
2867
|
-
```bash
|
|
2868
|
-
npx musubix design generate <file>
|
|
2869
|
-
npx musubix design patterns <context>
|
|
2870
|
-
npx musubix design validate <file>
|
|
2871
|
-
npx musubix design c4 <file>
|
|
2872
|
-
npx musubix design adr <decision>
|
|
2873
|
-
```
|
|
2874
|
-
|
|
2875
|
-
### コード生成
|
|
2876
|
-
```bash
|
|
2877
|
-
npx musubix codegen generate <file>
|
|
2878
|
-
npx musubix codegen analyze <file>
|
|
2879
|
-
npx musubix codegen security <path>
|
|
2880
|
-
```
|
|
2881
|
-
|
|
2882
|
-
### テスト
|
|
2883
|
-
```bash
|
|
2884
|
-
npx musubix test generate <file>
|
|
2885
|
-
npx musubix test coverage <dir>
|
|
2886
|
-
```
|
|
2887
|
-
|
|
2888
|
-
### トレーサビリティ
|
|
2889
|
-
```bash
|
|
2890
|
-
npx musubix trace matrix
|
|
2891
|
-
npx musubix trace impact <id>
|
|
2892
|
-
npx musubix trace validate
|
|
2893
|
-
```
|
|
2894
|
-
|
|
2895
|
-
### 説明生成
|
|
2896
|
-
```bash
|
|
2897
|
-
npx musubix explain why <id>
|
|
2898
|
-
npx musubix explain graph <id>
|
|
2899
|
-
```
|
|
2900
|
-
|
|
2901
|
-
### 自己学習
|
|
2902
|
-
```bash
|
|
2903
|
-
npx musubix learn status
|
|
2904
|
-
npx musubix learn patterns
|
|
2905
|
-
npx musubix learn feedback <id> --type <accept|reject|modify> -a <type>
|
|
2906
|
-
npx musubix learn add-pattern <name> -a <prefer|avoid|suggest> -c <category>
|
|
2907
|
-
npx musubix learn export -o <file>
|
|
2908
|
-
npx musubix learn import <file>
|
|
2909
|
-
```
|
|
2910
|
-
|
|
2911
|
-
### オントロジー
|
|
2912
|
-
```bash
|
|
2913
|
-
npx musubix ontology validate -f <file>
|
|
2914
|
-
npx musubix ontology stats -f <file>
|
|
2915
|
-
npx musubix ontology check-circular -f <file>
|
|
2916
|
-
```
|
|
2917
|
-
|
|
2918
|
-
### プログラム合成
|
|
2919
|
-
```bash
|
|
2920
|
-
npx musubix synthesize <examples.json> [-d <domain>] [--max-depth <n>]
|
|
2921
|
-
npx musubix syn <examples.json>
|
|
2922
|
-
```
|
|
2923
|
-
|
|
2924
|
-
### パターンライブラリ
|
|
2925
|
-
```bash
|
|
2926
|
-
npx musubix library learn <file>
|
|
2927
|
-
npx musubix library query <query>
|
|
2928
|
-
npx musubix library stats
|
|
2929
|
-
```
|
|
2930
|
-
|
|
2931
|
-
### KGPR
|
|
2932
|
-
```bash
|
|
2933
|
-
npx musubix kgpr create -t <title>
|
|
2934
|
-
npx musubix kgpr diff
|
|
2935
|
-
npx musubix kgpr list
|
|
2936
|
-
npx musubix kgpr submit <id>
|
|
2937
|
-
npx musubix kgpr show <id>
|
|
2938
|
-
```
|
|
2939
|
-
|
|
2940
|
-
### その他
|
|
2941
|
-
```bash
|
|
2942
|
-
npx musubix repl # 対話モード
|
|
2943
|
-
npx musubix scaffold domain-model # プロジェクト生成
|
|
2944
|
-
npx musubix --help # ヘルプ
|
|
2945
|
-
```
|
|
2946
|
-
|
|
2947
|
-
---
|
|
2948
|
-
|
|
2949
|
-
## 付録C: EARSパターン
|
|
2950
|
-
|
|
2951
|
-
### 5つの基本パターン
|
|
2952
|
-
|
|
2953
|
-
| パターン | 構文 | 用途 |
|
|
2954
|
-
|---------|------|------|
|
|
2955
|
-
| **Ubiquitous** | `THE [system] SHALL [requirement]` | 常時満たすべき要件 |
|
|
2956
|
-
| **Event-driven** | `WHEN [event], THE [system] SHALL [response]` | イベント発生時 |
|
|
2957
|
-
| **State-driven** | `WHILE [state], THE [system] SHALL [response]` | 特定状態 |
|
|
2958
|
-
| **Unwanted** | `THE [system] SHALL NOT [behavior]` | 禁止事項 |
|
|
2959
|
-
| **Optional** | `IF [condition], THEN THE [system] SHALL [response]` | 条件付き |
|
|
2960
|
-
|
|
2961
|
-
### 経費精算システムでの例
|
|
2962
|
-
|
|
2963
|
-
**Ubiquitous:**
|
|
2964
|
-
```
|
|
2965
|
-
THE Expense Management System SHALL allow authenticated users to create expense entries.
|
|
2966
|
-
```
|
|
2967
|
-
|
|
2968
|
-
**Event-driven:**
|
|
2969
|
-
```
|
|
2970
|
-
WHEN an expense entry is submitted for approval, THE Expense Management System SHALL notify the next approver within 5 minutes.
|
|
2971
|
-
```
|
|
2972
|
-
|
|
2973
|
-
**State-driven:**
|
|
2974
|
-
```
|
|
2975
|
-
WHILE an expense entry is pending approval for more than 7 days, THE Expense Management System SHALL send reminder notifications daily.
|
|
2976
|
-
```
|
|
2977
|
-
|
|
2978
|
-
**Unwanted:**
|
|
2979
|
-
```
|
|
2980
|
-
THE Expense Management System SHALL NOT allow users to approve their own expense entries.
|
|
2981
|
-
```
|
|
2982
|
-
|
|
2983
|
-
**Optional:**
|
|
2984
|
-
```
|
|
2985
|
-
IF an expense amount exceeds 100,000 JPY, THEN THE Expense Management System SHALL require Director level approval.
|
|
2986
|
-
```
|
|
2987
|
-
|
|
2988
|
-
---
|
|
2989
|
-
|
|
2990
|
-
## 付録D: プロジェクト構造
|
|
2991
|
-
|
|
2992
|
-
### 標準ディレクトリ構成
|
|
2993
|
-
|
|
2994
|
-
```mermaid
|
|
2995
|
-
flowchart TB
|
|
2996
|
-
subgraph Root["project-root/"]
|
|
2997
|
-
Config["musubix.config.json - MUSUBIX設定"]
|
|
2998
|
-
|
|
2999
|
-
subgraph Steering["steering/"]
|
|
3000
|
-
SR["rules/"]
|
|
3001
|
-
SR --> SC["constitution.md - プロジェクト憲法"]
|
|
3002
|
-
end
|
|
3003
|
-
|
|
3004
|
-
subgraph Storage["storage/"]
|
|
3005
|
-
SSp["specs/ - 要件(REQ-*)"]
|
|
3006
|
-
SDe["design/ - 設計(DES-*)"]
|
|
3007
|
-
STr["traceability/ - トレーサビリティマトリクス"]
|
|
3008
|
-
SRe["reviews/ - レビュー結果"]
|
|
3009
|
-
SFo["formal-verify/ - 形式検証ファイル"]
|
|
3010
|
-
end
|
|
3011
|
-
|
|
3012
|
-
subgraph Src["src/"]
|
|
3013
|
-
subgraph Domain["domain/"]
|
|
3014
|
-
DE["entities/ - エンティティ"]
|
|
3015
|
-
DV["value-objects/ - Value Objects"]
|
|
3016
|
-
end
|
|
3017
|
-
subgraph App["application/"]
|
|
3018
|
-
AS["services/ - アプリケーションサービス"]
|
|
3019
|
-
end
|
|
3020
|
-
Infra["infrastructure/ - インフラストラクチャ"]
|
|
3021
|
-
end
|
|
3022
|
-
|
|
3023
|
-
Tests["tests/ - テストファイル"]
|
|
3024
|
-
end
|
|
3025
|
-
|
|
3026
|
-
style Root fill:#f5f5f5,stroke:#333
|
|
3027
|
-
style Steering fill:#e8f5e9,stroke:#2e7d32
|
|
3028
|
-
style Storage fill:#e3f2fd,stroke:#1976d2
|
|
3029
|
-
style Src fill:#fff3e0,stroke:#e65100
|
|
3030
|
-
```
|
|
3031
|
-
|
|
3032
|
-
---
|
|
3033
|
-
|
|
3034
|
-
## 付録E: musubix.config.json
|
|
3035
|
-
|
|
3036
|
-
### 設定ファイル例
|
|
3037
|
-
|
|
3038
|
-
```json:musubix.config.json
|
|
3039
|
-
{
|
|
3040
|
-
"projectName": "expense-management-system",
|
|
3041
|
-
"version": "1.0.0",
|
|
3042
|
-
"sdd": {
|
|
3043
|
-
"requirementsFormat": "EARS",
|
|
3044
|
-
"designFormat": "C4",
|
|
3045
|
-
"traceabilityEnabled": true
|
|
3046
|
-
},
|
|
3047
|
-
"learning": {
|
|
3048
|
-
"enabled": true,
|
|
3049
|
-
"feedbackRetention": 365,
|
|
3050
|
-
"patternConfidenceThreshold": 0.7
|
|
3051
|
-
},
|
|
3052
|
-
"security": {
|
|
3053
|
-
"scanEnabled": true,
|
|
3054
|
-
"maxSeverity": "medium"
|
|
3055
|
-
},
|
|
3056
|
-
"formalVerification": {
|
|
3057
|
-
"enabled": true,
|
|
3058
|
-
"solver": "z3"
|
|
3059
|
-
}
|
|
3060
|
-
}
|
|
3061
|
-
```
|
|
3062
|
-
|
|
3063
|
-
---
|
|
3064
|
-
|
|
3065
|
-
## 付録F: 設計パターン一覧
|
|
3066
|
-
|
|
3067
|
-
本マニュアルで使用した設計パターン:
|
|
3068
|
-
|
|
3069
|
-
| パターン | 用途 | 適用箇所 |
|
|
3070
|
-
|---------|------|---------|
|
|
3071
|
-
| **Repository** | データアクセスの抽象化 | ExpenseRepository |
|
|
3072
|
-
| **Service** | ビジネスロジックの集約 | ApprovalService |
|
|
3073
|
-
| **Factory** | オブジェクト生成の隠蔽 | createExpense(), createAmount() |
|
|
3074
|
-
| **Observer** | イベント通知 | 承認通知 |
|
|
3075
|
-
| **Strategy** | アルゴリズムの切り替え | 承認レベル決定 |
|
|
3076
|
-
| **State** | 状態遷移の管理 | ExpenseStatus |
|
|
3077
|
-
|
|
3078
|
-
---
|
|
3079
|
-
|
|
3080
|
-
## 付録G: トラブルシューティング
|
|
3081
|
-
|
|
3082
|
-
### よくある問題と解決方法
|
|
3083
|
-
|
|
3084
|
-
| 問題 | 原因 | 解決方法 |
|
|
3085
|
-
|------|------|---------|
|
|
3086
|
-
| `musubix: command not found` | 未インストール | `npm install -g @nahisaho/musubix-core` |
|
|
3087
|
-
| `No project found` | 初期化未実行 | `npx musubix init` |
|
|
3088
|
-
| `Invalid EARS format` | 構文エラー | パターン構文を確認 |
|
|
3089
|
-
| `Orphan requirement` | リンク未設定 | コードにトレースタグを追加 |
|
|
3090
|
-
| `Z3 not found` | Z3未インストール | `brew install z3` または `apt install z3` |
|
|
3091
|
-
|
|
3092
|
-
---
|
|
3093
|
-
|
|
3094
|
-
## 付録H: 用語集
|
|
3095
|
-
|
|
3096
|
-
| 用語 | 説明 |
|
|
3097
|
-
|------|------|
|
|
3098
|
-
| **EARS** | Easy Approach to Requirements Syntax - 要件記述の標準形式 |
|
|
3099
|
-
| **C4モデル** | Context, Container, Component, Code の4レベル設計 |
|
|
3100
|
-
| **SDD** | Symbolic-Driven Development - 記号駆動開発 |
|
|
3101
|
-
| **YATA** | Yet Another Thinking Architecture - 知識グラフシステム |
|
|
3102
|
-
| **KGPR** | Knowledge Graph Pull Request - 知識グラフの変更管理 |
|
|
3103
|
-
| **Neuro-Symbolic** | ニューラルネットワークとシンボリック推論の統合 |
|
|
3104
|
-
| **Value Object** | 不変の値を表すオブジェクト |
|
|
3105
|
-
| **トレーサビリティ** | 要件から実装までの追跡可能性 |
|
|
3106
|
-
| **形式検証** | 数学的にプログラムの正しさを証明 |
|
|
3107
|
-
|
|
3108
|
-
---
|
|
3109
|
-
|
|
3110
|
-
## 付録I: 参考リンク
|
|
3111
|
-
|
|
3112
|
-
- **MUSUBIX GitHub**: https://github.com/nahisaho/MUSUBIX
|
|
3113
|
-
- **EARS論文**: "Easy Approach to Requirements Syntax" by Alistair Mavin
|
|
3114
|
-
- **C4モデル**: https://c4model.com/
|
|
3115
|
-
- **Z3 Theorem Prover**: https://github.com/Z3Prover/z3
|
|
3116
|
-
|
|
3117
|
-
---
|
|
3118
|
-
|
|
3119
|
-
**Document Information**
|
|
3120
|
-
- **Version**: 2.2.0
|
|
3121
|
-
- **Date**: 2026-01-09
|
|
3122
|
-
- **Author**: MUSUBIX Team
|
|
3123
|
-
- **License**: MITMUSUBIXは単なるコード生成ツールではなく、**継続的に学習し進化するAI開発パートナー**です。
|