with-me深掘り:情報理論で要件定義を自動化するClaude Codeプラグイン
はじめに
ソフトウェア開発において、要件定義は最も難しいフェーズの 1 つです。
- 「何を作りたいかはわかるけど、うまく言語化できない」
- 「聞くべきことがわからない」
- 「暗黙の前提条件を見落としてしまう」
こうした課題に対し、with-me プラグインは情報理論とベイズ統計を応用した独自のアプローチで解決を試みます。本記事では、with-me の技術的詳細と実用性を深掘りします。
TL;DR
環境
インストール方法は公式リポジトリを参照してください。
問題設定:要件定義の課題
要件定義における典型的な課題です。
- 質問の質と順序が成果を左右する - 何をどの順序で聞くかで得られる情報の質が変わる
- 抽象的な要望の具体化 - ユーザの頭の中にある「イメージ」を引き出す必要がある
- 暗黙の前提条件 - 当事者にとっては「当たり前」の情報が抜け落ちる
with-me はこれらを数学的な枠組みで解決します。
5次元フレームワーク:要件を体系的に探索
with-me は要件を 5 つの次元で分解し、それぞれの不確実性を追跡します。
1. Purpose(なぜ)
解決する問題、ユーザ、ビジネスゴールを明確化します。
例:
- 解決する問題: 何を解決したいか?
- ユーザ: 誰が使うか?
- ビジネスゴール: 成功とは何か?
2. Data(何を)
入力データ、出力要件、変換ルールを定義します。
例:
- 入力: どのようなデータを受け取るか?
- 出力: どのような形式で出力するか?
- 変換: データをどう加工するか?
3. Behavior(どう)
ワークフロー、ユーザインタラクション、システム応答を記述します。
例:
- ワークフロー: 処理の流れは?
- インタラクション: ユーザはどう操作するか?
- エッジケース: 異常時の動作は?
4. Constraints(制約)
性能要件、技術的制限、リソース制約を定義します。
例:
- 性能: 処理時間、スループットの要件は?
- 技術制約: 使用可能な技術は?
- リソース: メモリ、ディスク容量の制限は?
5. Quality(成功)
テストシナリオ、受入基準、成功指標を明確化します。
例:
- テストシナリオ: どのような状況をテストするか?
- 受入基準: 何が達成されれば成功か?
- 成功指標: どの指標で測定するか?
これらの次元は依存関係を持ちます。例えば、「Purpose」が不明確な状態で「Performance」の詳細を問うことは無意味です。with-me はこの依存関係を考慮して質問順序を決定します。
情報理論の適用:数学的基盤
with-me の核心は 3 つの概念です。
シャノンエントロピー:不確実性の定量化
エントロピーは「どれだけ不確実か」をビット単位で測定します。
直感的な説明:
- 完全に確定している → エントロピー 0
- 完全に不確実 → エントロピー最大
例:4 つの仮説がある場合。
- エントロピー 2.0 ビット → 完全に不確実(25%、25%、25%、25%)
- エントロピー 0.3 ビット → ほぼ確定(85%、5%、5%、5%)
ベイズ更新:回答に基づく信念更新
回答を「証拠」として、各仮説の確率を更新します。
with-me の実装:
- Claude が回答内容から各仮説の尤度を推定
- Python がベイズの定理を用いて事後確率を計算
- 更新された事後確率が次の質問の事前確率になる
期待情報利得(EIG):質問の価値を事前評価
「この質問をすると、平均してどれだけ不確実性が減るか?」を予測します。
直感的な説明:
- 現在のエントロピーを計算
- 質問に対する可能な回答それぞれについて、回答後のエントロピーを予測
- 回答の確率で重み付けして期待値を計算
- EIG = 現在のエントロピー - 期待エントロピー
品質評価:
with-me は質問の品質を次の要素で評価します。
- EIG: 情報獲得の期待値(支配的な要素)
- clarity: 質問の明確さ(曖昧な表現がないか)
- importance: 次元の重要度(基礎的な次元ほど高い)
一定の閾値を満たす質問のみが採用されます。
詳細な数式については、記事末尾の「付録:数学的詳細」を参照してください。
実践例:with-meを使った要件定義
実際のコマンド実行の流れを見てみましょう。
コマンド実行
/with-me:good-question
対話フロー
Claude: 要件を明確にしていきます。いくつか質問をさせてください。
質問1: 何を作りたいですか?
- タスク自動化ツール
- データ分析・可視化ツール
- ユーザ向けアプリケーション
- その他
あなた: ユーザ向けアプリケーション。
(内部処理:Purpose 次元の「application_type」仮説の確率が更新される)
質問2: 主なユーザは誰ですか?
- 社内チームメンバー
- 外部顧客
- 両方
あなた: 外部顧客。
(内部処理:Purpose 次元の「target_user」仮説が絞り込まれる)
質問3: ユーザの主な目的は?
あなた: すばやくチェックアウトを完了したい。
(内部処理:Behavior 次元の不確実性が減少)
このように、各質問は前の回答を踏まえて生成されます。
収束判定
各次元のエントロピーが閾値(デフォルト: 0.3 ビット)を下回ると、その次元は「収束」とみなされます。全次元が収束すると、要件定義フェーズが完了します。
要件仕様書の生成
収束後、/with-me:requirement-analysis スキルが自動的に呼ばれ、構造化された要件仕様書が生成されます。
## 要件仕様書
### Purpose
- 問題: 顧客がオンラインでスムーズに購入を完了できない
- ユーザ: 外部顧客(エンドユーザ)
- ゴール: チェックアウト時間を30秒以内に短縮
### Data
- 入力: カート情報、顧客情報、支払い情報
- 出力: 注文確認、領収書PDF
...
アーキテクチャ:ハイブリッド計算モデル
with-me の特徴的な設計はClaudeを計算エンジンとして活用する点にあります。
役割分担
Python (CLI/ライブラリ):
- セッション状態の永続化
- ベイズ更新の実行
- エントロピー計算
- ファイルI/O
Claude (LLM):
- 尤度の推定 p(answer | hypothesis)
- 質問文の生成
- 要件仕様書の作成
- 自然言語理解
なぜこの設計か?
ステートフル設計の利点:
- 段階的な情報蓄積 - 各質問が前の質問を踏まえる
- セッション再開 - 途中で中断しても続きから再開可能
- トークン効率 - 毎回全状態を送信する必要がない
- 監査証跡 - 全質問履歴が保存される
Claudeを計算に使う利点:
- 分散可能なインテリジェンス - スキルは Markdown ファイルなので配布が容易
- 透明な計算過程 - Claude の推論過程が可視化される
- 外部依存ゼロ - NumPy、SciPy 等の数値計算ライブラリ不要
- スキル合成 - スキル同士が連携可能
セッション状態の構造
{
"session_id": "2026-01-31T12:34:56.789012",
"question_count": 5,
"dimensions": {
"purpose": {
"entropy": 0.25,
"confidence": 0.87,
"beliefs": {
"web_app": 0.85,
"cli_tool": 0.10,
"library": 0.05
}
},
"data": {
"entropy": 1.42,
"confidence": 0.32,
"beliefs": { ... }
}
},
"question_history": [
{
"question": "何を作りたいですか?",
"answer": "ユーザ向けアプリケーション",
"dimension": "purpose",
"information_gain": 0.68
}
]
}
with-meの技術的特徴
設計アプローチの違い
テンプレートベースのアプローチ:
- 事前に定義された質問の順序で進行
- シンプルで予測可能なフロー
- セッション間で状態を保持しない設計
with-meのアプローチ:
- 回答に基づいて次の質問を動的に選択
- 情報理論(EIG)で質問の価値を定量化
- セッション全体の履歴を保持する設計
採用した数学的手法
- シャノンエントロピーで不確実性を定量化
- ベイズの定理で確率を更新
- 期待情報利得で質問の価値を事前評価
これらは情報理論の標準的な手法をベースにしています。
実装の透明性
- 尤度推定: Claude が自然言語で推論
- ベイズ更新: Python で数値計算
- 質問生成: Claude がコンテキストを考慮
各ステップが可視化され、デバッグ可能です。
まとめ
with-me プラグインは、情報理論とベイズ統計を実装に持ち込むことで、要件定義という曖昧なプロセスに数学的な基盤を与えています。
本記事のポイント:
- 5 次元フレームワークで要件を体系的に分解
- シャノンエントロピーで不確実性を定量化
- ベイズ更新で回答から学習
- EIG で次の質問を最適化
- ハイブリッド計算アーキテクチャで Claude と Python が協調
- ローカルファーストで外部依存なし
with-me を使えば、「何を作りたいか言語化できない」状態から、構造化された要件仕様書を数学的に導き出すことができます。
次記事へ
with-me で要件を明確化した後、開発中に得た知見をどう蓄積するか?
次回は as-you プラグインで、Claude に開発パターンを学習させる方法を解説します。
参考文献
情報理論
- Shannon, C. E. (1948).「A Mathematical Theory of Communication」. Bell System Technical Journal.
- Cover, T. M., & Thomas, J. A. (2006). Elements of Information Theory. Wiley.
ベイズ統計
- Gelman, A., et al. (2013). Bayesian Data Analysis (3rd ed.). CRC Press.
- MacKay, D. J. C. (2003). Information Theory, Inference, and Learning Algorithms. Cambridge University Press.
アクティブラーニング
- Settles, B. (2012).「Active Learning」. Synthesis Lectures on Artificial Intelligence and Machine Learning.
with-me プラグイン
付録:数学的詳細
シャノンエントロピーの数式。
解釈:
-
: 完全に確定(1 つの仮説の確率が 1)H = 0 -
: 最大の不確実性(N 個の仮説が均等分布)H = \log_2 N
ベイズの定理。
パラメータ:
-
: 証拠 e を得た後の仮説 h の確率(事後確率)p(h | e) -
: 仮説 h が真の場合に e が観測される確率(尤度)p(e | h) -
: 証拠を得る前の仮説 h の確率(事前確率)p(h)
期待情報利得(EIG)。
品質評価式:
報酬
Discussion