🎯

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):質問の価値を事前評価

「この質問をすると、平均してどれだけ不確実性が減るか?」を予測します。

直感的な説明

  1. 現在のエントロピーを計算
  2. 質問に対する可能な回答それぞれについて、回答後のエントロピーを予測
  3. 回答の確率で重み付けして期待値を計算
  4. 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)
- 質問文の生成
- 要件仕様書の作成
- 自然言語理解

なぜこの設計か?

ステートフル設計の利点

  1. 段階的な情報蓄積 - 各質問が前の質問を踏まえる
  2. セッション再開 - 途中で中断しても続きから再開可能
  3. トークン効率 - 毎回全状態を送信する必要がない
  4. 監査証跡 - 全質問履歴が保存される

Claudeを計算に使う利点

  1. 分散可能なインテリジェンス - スキルは Markdown ファイルなので配布が容易
  2. 透明な計算過程 - Claude の推論過程が可視化される
  3. 外部依存ゼロ - NumPy、SciPy 等の数値計算ライブラリ不要
  4. スキル合成 - スキル同士が連携可能

セッション状態の構造

{
  "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 プラグイン

付録:数学的詳細

シャノンエントロピーの数式。
H(X) = -\sum_{i} p(x_i) \log_2 p(x_i)

解釈

  • H = 0: 完全に確定(1 つの仮説の確率が 1)
  • H = \log_2 N: 最大の不確実性(N 個の仮説が均等分布)
ベイズの定理。
p(h | e) = \frac{p(e | h) \cdot p(h)}{\sum_{h'} p(e | h') \cdot p(h')}

パラメータ

  • p(h | e): 証拠 e を得た後の仮説 h の確率(事後確率)
  • p(e | h): 仮説 h が真の場合に e が観測される確率(尤度)
  • p(h): 証拠を得る前の仮説 h の確率(事前確率)
期待情報利得(EIG)。
\text{EIG}(Q) = H(X) - \mathbb{E}_{a \sim p(a|Q)}[H(X | a)]

品質評価式

r(Q) = \text{EIG}(Q) + 0.1 \cdot \text{clarity}(Q) + 0.05 \cdot \text{importance}(Q)

報酬 r(Q) \geq 0.5 を満たす質問のみが採用されます。

Discussion