🔗 RDRAAgent Phase1にUSDMを適用して精度を上げる
目次

🔗 RDRAAgent Phase1にUSDMを適用して精度を上げる

はじめに

RDRAAgent v0.6 は、初期要望テキストから RDRA2.0 モデルを段階的に自動生成する Coding Agent ツールです。Phase1(基礎要素の特定)は自由記述を入力とするため、要求の分離や根拠の抽出を AI の推測に依存しています。

本記事では、USDM(Universal Specification Describing Manner)の記法を Phase1 の前段に組み込み、入力を構造化して後続フェーズの精度を向上させるアプローチを紹介します。

RDRA2.0 とは

概要

RDRA(Relationship Driven Requirement Analysis)は、2012 年に神崎善司氏(ValueSource Inc.)が提唱した要件定義モデリング手法です。システムとビジネスの関係性を明示的にモデル化し、要件の完全性・一貫性を確保します。

4 レイヤー構造

RDRA2.0 は要件定義を 4 つの階層レイヤーで体系化します。各レイヤーは「なぜ?」という Why 依存関係で結合されます。

Why Why Why Layer 1: システム価値 Layer 2: システム外部環境 Layer 3: システム境界 Layer 4: システム
要素名 説明
システム価値 ビジネス環境と顧客価値を定義するレイヤー。アクター、外部システム、要求を含む
システム外部環境 ビジネスプロセスの全体像を表すレイヤー。BUC、業務フロー、バリエーションを含む
システム境界 システムが提供する機能を定義するレイヤー。ユースケース、画面、イベントを含む
システム システム内部の実装モデル。情報モデル、状態モデルを含む

10 種類のアイコン体系

アイコン レイヤー 説明
アクター L1 ユーザー、組織、外部ユーザー
外部システム L1 連携対象のシステム
業務 L2 業務プロセス、ビジネスコンテキスト
ビジネスユースケース L2 業務を実現する価値単位
バリエーション L2 条件分岐、例外処理
条件 L2/L3 決定ポイント、条件分岐
画面 L3 UI、ユーザーインターフェース
イベント L3 外部システムとの連携イベント
状態 L4 エンティティの状態
情報 L4 データ、情報概念

RDRAAgent v0.6

RDRAAgent は、神崎善司氏が開発した AI アシスタント型の RDRA 自動化ツールです。Claude Code や Cursor で実行できます。

git clone https://github.com/kanzaki/RDRAAgent_v0.6.git
cd RDRAAgent_v0.6
npm install
node menu.js

4 つのフェーズで段階的に要件を詳細化します。

フェーズ 名称 入力 主要出力
Phase1 基礎要素の特定 初期要望.txt アクター、外部システム、ビジネスルール、情報、状態
Phase2 詳細化 Phase1 出力 BUC 定義、業務フロー、関連付け
Phase3 コンテキスト化 Phase2 出力 ユースケース、画面スケッチ、イベント
Phase4 関係モデリング Phase3 出力 情報モデル、状態モデル、ビジネスルール仕様

USDM とは

概要

USDM(Universal Specification Describing Manner)は、清水吉男氏が提唱した要求仕様記述法です。要求を階層的に分解し、各要求に「なぜそれが必要か」を明示する点が特徴です。

https://zenn.dev/suwash/articles/usdm_xddp_20260325

本記事での採用記法

USDM の元来の 4 階層(要求→理由→説明→仕様)から、本記事では 3 階層に絞ります。

要素 役割 記述内容
要求 ビジネス視点で実現したいこと 「〜したい」形式
理由 要求の正当化根拠 現状の課題、定量データ、ビジネス背景
要件 要求を満たす具体的な条件 BUC に展開可能な粒度

「説明」は理由に吸収し、「仕様」は設計側の担当として除外しています。要件定義の範囲では、要求の構造化と根拠の明示で十分です。

USDM の強み

USDM が効果を発揮するのは、要求のブレイクダウンです。

  • 要求の分離: 1 つの要求に 1 つの関心事を対応させる
  • 理由の必須化: 根拠のない要求を排除するフィルタリング機能
  • 要件の検証可能性: 「〜できること」形式で記述し、テスト設計につなげる

RDRAAgent Phase1 の課題

現状の Phase1 は「初期要望.txt」(自由記述)を入力として、AI が基礎要素を抽出します。

【背景】受注業務がFAXベースで月20時間かかっている
【目的】受注業務のデジタル化
【スコープ】受注入力、在庫確認、出荷指示
【制約】既存ERPとの連携必須

この自由記述からの抽出には 3 つの課題があります。

課題 内容 影響
要求の分離粒度が曖昧 複数の要求が 1 文に混在 BUC の粒度が不安定
理由が暗黙的 「なぜ」が背景に埋もれている 要求の優先度判断が困難
要件と要求が混在 実現手段と実現したいことが未分離 Phase2 以降で手戻りが発生

これらは Phase1 の出力品質に直結します。Phase2 の BUC 抽出、Phase3 の UC 定義まで連鎖的に影響します。

提案: Phase1 に USDM 分解を組み込む

全体フロー

Coding Agent 構造化された要件 初期要望.txt Step 1-A: USDM分解 Step 1-B: 基礎要素の特定 Phase2: BUC/業務フロー Phase3: UC/画面/イベント Phase4: 情報モデル/状態モデル 設計
要素名 説明
Step 1-A USDM 分解(要求→理由→要件)。新規追加
Step 1-B 基礎要素の特定。既存改修(入力を構造化データに変更)
Phase2-4 既存の RDRAAgent フロー。変更なし

Phase1 の前段に USDM 分解を挟むだけで、Phase2 以降は変更不要です。

Step 1-A: USDM 分解(新規追加)

初期要望.txt を入力として、Coding Agent が USDM 3 階層に分解します。
USDMはExcelで管理することが多いですが、AIエージェントの扱いやすさ、schema validationなどを活用するため、YAML形式を採用します。

入力(従来の初期要望.txt)

【背景】
受注業務がFAXベースで、営業担当者が手入力している。
月20時間の工数がかかり、入力ミスによる出荷トラブルが月3件発生。

【目的】
受注業務のデジタル化による効率化と品質向上。

【スコープ】
受注入力、在庫確認、出荷指示、顧客管理

出力(USDM 構造化要件 - YAML 形式)

requirements:
  - id: R1
    description: 受注業務を効率化したい
    reason: FAX受注→手入力→確認電話で月20時間かかっている
    conditions:
      - id: K1-1
        description: 受注データをWebフォームから直接取り込めること
      - id: K1-2
        description: 受注入力後の確認を自動メール通知で代替できること

  - id: R2
    description: 受注入力ミスを防止したい
    reason: 手入力ミスによる出荷トラブルが月3件発生している
    conditions:
      - id: K2-1
        description: 受注入力時にマスタデータとの整合性チェックを行うこと
      - id: K2-2
        description: 過去の類似注文をサジェストできること

  - id: R3
    description: 在庫状況をリアルタイムに把握したい
    reason: 受注時に在庫が分からず後から欠品連絡になるケースがある
    conditions:
      - id: K3-1
        description: 受注入力時に在庫数を自動表示すること
      - id: K3-2
        description: 在庫が閾値以下の場合にアラートを表示すること

  - id: R4
    description: 出荷指示を自動化したい
    reason: 受注確定後の出荷指示が手作業で遅延が発生している
    conditions:
      - id: K4-1
        description: 受注確定時に出荷指示を自動生成できること

YAML フォーマットの利点

観点 テキスト形式 YAML 形式
構造の明示性 インデントで暗黙的 キーで明示的
機械処理 正規表現パースが必要 YAML パーサで確実に取得
スキーマ検証 不可 必須フィールドの自動検証が可能
git diff 行単位の差分 キー単位で変更箇所が明確
品質チェック 手作業 reason 空チェック、conditions 件数チェック等を自動化

YAML スキーマ定義

# requirements.schema.yaml
type: object
required: [requirements]
properties:
  requirements:
    type: array
    items:
      type: object
      required: [id, description, reason, conditions]
      properties:
        id:
          type: string
          pattern: "^R\\d+$"
        description:
          type: string
        reason:
          type: string
        conditions:
          type: array
          minItems: 1
          maxItems: 4
          items:
            type: object
            required: [id, description]
            properties:
              id:
                type: string
                pattern: "^K\\d+-\\d+$"
              description:
                type: string

このスキーマにより、USDM 分解の出力を自動検証できます。reason が空、conditions が 0 件または 5 件以上、id のフォーマット不正などを機械的に検出できます。

分解ルール

ルール 判断基準
要求の分離(動詞) 動詞が異なる場合、別の要求に分離
要求の分離(対象) 対象が異なる場合、別の要求に分離
要件の分離 条件が異なる場合、同一要求の別要件に分離
理由の品質 定量データ付きが望ましい。不明な場合は「理由: 要確認」
要件の品質 「〜できること」形式。検証可能な記述
要件の粒度 1 要求あたり 1〜4 件

Step 1-B: 基礎要素の特定(既存 Phase1 の改修)

USDM 出力を入力として、従来の Phase1 処理を実行します。

変更点

従来 Phase1 の出力 USDM 入力による改善
アクター 要求の主語から明示的に特定
外部システム 要件の動詞・対象から特定
ビジネスルール 理由から制約・条件を抽出
情報 要件の対象名詞からエンティティ候補を抽出
状態 要件の状態変化記述から抽出
要求モデル(新規) USDM 出力をそのまま取り込み

最大の改善点は、USDM の要件が Phase2 の BUC 候補として直接機能する点です。従来は AI がゼロから BUC を推測していましたが、構造化された要件が導出の根拠になります。

RDRA の要求モデルとの関係

RDRA の 4 レイヤーのうち、Layer1(システム価値)の要求モデルは他レイヤーと比べて記法が緩い部分です。アイコン関係によるトレーサビリティはレイヤー間で機能します。一方、要求そのものの内部構造(なぜその要求があるのか、どこまでが 1 つの要求か)は RDRA では規定されていません。

USDM 記法を要求モデルに適用すると、この構造の弱さを補えます。

USDM記法 - 要求モデル内部 RDRA - BUC以下 BUC候補として導出 UC候補として導出 要求: 受注業務を効率化したい 理由: 月20時間の工数 要件K1-1: Web受注 要件K1-2: 自動通知 BUC: 受注処理 UC: 注文を入力する UC: 注文確認を送信する 画面: 注文入力フォーム 情報: 注文
要素名 説明
USDM記法 要求の内部構造(Why / What)を担当。要求→理由→要件の 3 階層
RDRA 要素間の関係性(BUC 以下)を担当。アイコン関係 + Why 依存

USDM の適用範囲を Layer1 の要求モデルに限定し、BUC 以下は RDRA のモデリングに委ねます。

従来フローとの比較

カスタマイズ後フロー 従来フロー 自由記述 構造化された要求/要件 要件からBUC候補を導出 自由記述のまま 要求の分離が曖昧 初期要望.txt USDM分解 Phase1 Phase2 初期要望.txt Phase1 Phase2
観点 従来フロー カスタマイズ後
要求の分離 AI が推測で分離 USDM 記法で事前に分離済み
理由の明示 背景から暗黙的に推測 要求ごとに明示的に記述
BUC 導出 Phase2 でゼロから抽出 要件が BUC 候補として機能
要求モデル 構造が弱い USDM 3 階層で精密
トレーサビリティ Phase1 出力から事後的に構築 要求→要件→BUC が入力段階で接続

自動化

Step 1-A の自動化プロンプト

以下は、USDM 分解を Coding Agent に実行させるためのプロンプト例です。

あなたはUSDM要件分析の専門家です。
以下の初期要望テキストを、USDM記法のYAML形式で構造化してください。

## USDM記法ルール
- 要求(description): 「〜したい」形式。ビジネス視点で記述
- 理由(reason): 現状の課題を定量データ付きで記述
- 要件(conditions): 要求を満たす具体的条件。1要求あたり1〜4件

## 分解ルール
- 1つの要求に複数の関心事が混在する場合は分離する
- 理由が不明な要求は reason: "要確認" として残す
- 要件は検証可能な記述にする(「〜できること」形式)
- 仕様(実装方法)は書かない。要件(実現条件)に留める

## 出力フォーマット(YAML)
requirements:
  - id: R{N}
    description: {要求テキスト}
    reason: {理由テキスト}
    conditions:
      - id: K{N}-{M}
        description: {要件テキスト}

## 初期要望テキスト
{初期要望.txtの内容}

RDRA_Knowledge への追加

Phase1 カスタマイズに伴い、RDRA_Knowledge/ にナレッジファイル USDM_Decomposition.md を追加します。記載する内容は以下の 4 項目です。

項目 内容
出力フォーマット YAML 形式。requirements.schema.yaml に準拠
フィールド定義 id、description、reason、conditions の型と記法ルール
分解判断基準 動詞・対象・条件による分離ルール
RDRA 連携 description → 要求モデル、conditions → BUC 候補、reason → ビジネスルール

変更管理への適用

新規開発だけでなく、既存システムの変更管理にもこのフローを適用できます。

従来の USDM 単体での変更管理の課題

従来、USDM で要求仕様を記述した場合、変更の影響範囲を追跡するには XDDP(eXtreme Derivative Development Process)の 3 点セットを別途作成・維持する必要がありました。

成果物 内容 課題
変更要求仕様書 変更内容の記述 USDM と別管理で二重メンテナンス
トレーサビリティマトリクス 要求と実装の対応表 手動更新のため陳腐化しやすい
変更設計書 実装レベルの変更計画 影響範囲の特定が属人的

USDM はテキスト記述であり、要素間の関係性を構造的に保持しません。「この要求を変えたら何に影響するか」を USDM 単体では追跡できず、XDDP のマトリクスが必要でした。

RDRA モデルの変更差分による代替

RDRA の場合、モデル自体がアイコン間の関係性を構造として保持しています。モデルを変更すれば、その差分がそのまま影響範囲を表現します。

変更要望 - 自由記述 USDM分解 変更要求 - YAML RDRAモデル更新 - Phase1-4再実行 BUC/UC/情報モデルの差分 git diff - 影響範囲の自動抽出 変更設計 = Spec Coding Agent 実装

最終ステップの「変更設計」は、Spec 駆動開発における Spec に相当します。RDRA の影響分析で特定された変更範囲と、USDM の理由による正当性を組み合わせた変更設計書が、Coding Agent の実装 Spec として機能します。

RDRA モデルが Markdown / PlantUML / YAML 等のテキスト形式で Git 管理されていれば、git diff で以下を機械的に取得できます。

  • 追加されたアイコン: 新規 BUC、UC、情報エンティティ
  • 変更されたアイコン: 属性の追加・削除、関連の変更
  • 影響を受ける既存アイコン: 変更アイコンから依存関係をたどった先の要素
観点 従来(USDM + XDDP) 本提案(USDM + RDRA)
影響範囲の追跡 手動で TM を作成・更新 RDRA モデルの git diff で自動抽出
トレーサビリティ 別成果物として維持 モデルのアイコン関係に内包
変更の正当性 USDM の理由で担保 USDM の理由で担保(同じ)
維持コスト USDM + TM + 変更設計書の 3 重管理 USDM(YAML)+ RDRA モデルの 2 つ
変更設計書 XDDP で作成 RDRA 影響分析 → Spec として Coding Agent へ

USDM の「理由」が変更の正当性を担保し、RDRA モデルの構造的な差分が影響範囲を自動的に表現します。XDDP の 3 点セットを別途維持する必要がなくなります。変更設計がそのまま Spec 駆動開発の Spec として Coding Agent に渡せるパイプラインが成立します。

まとめ

RDRAAgent の Phase1 に USDM 分解を組み込むと、自由記述に依存していた入力品質が向上し、後続フェーズの精度が上がります。変更管理においては、RDRA の影響分析から導出された変更設計が Spec 駆動開発の Spec となり、要求定義から実装までが一貫したパイプラインでつながります。

この記事が少しでも参考になった、あるいは改善点などがあれば、ぜひリアクションやコメント、SNSでのシェアをいただけると励みになります!

参考リンク