コンテンツにスキップ
検索語を入力してください

    rdra-ish とは

    ソースリポジトリ: rdra-ish-dsl

    rdra-ish は、要件モデルを .rdra というDSLで記述し、型チェック・図表生成・状態導出までを一貫して行うCLIとコンパイラ群です。Wordやスプレッドシートに散在しがちな「誰が・何を・どのデータに触るか」を、関係(predicate)で結んだグラフとしてコード化し、レビュー可能にします。

    RDRA(Relationship-Driven Requirements Analysis)は、システムを型付き要素のグラフとして扱う要件モデリング手法です。アクター、ビジネス領域、BUC、ユースケース、画面、エンティティなどを宣言し、performscontainscreates といった 関係述語 で明示的に結びます。左側のレイヤ(ビジネス意図)が右側のレイヤ(設計)の根拠になる、という relationship-first の発想が中核です。

    rdra-ishが実装するのは RDRA-ISH(RDRA-inspired Implementation and System Heuristics)です。RDRAのrelationship-firstな書き方を踏襲しますが、厳密な RDRA の写しではありません。システム境界、API境界、アクセス制約、エンティティライフサイクルなど、実装寄りのレビューに必要な語彙を追加しています。

    同じモデルから check、各種diagram、CSV、statesexport を生成できることが目的です。元のRDRA手法の用語定義そのものを再現するツールではなく、要件議論から設計レビューまで続くモデルを支える実装です。

    BUC・ビジネスフロー・ユースケース(RDRA-ish 解釈)

    Section titled “BUC・ビジネスフロー・ユースケース(RDRA-ish 解釈)”

    RDRA-ishでは3つを 異なるレビュー単位 として読み分けます。

    概念RDRA-ish での役割
    BUCビジネス価値のスライスとレビュー容器。belongs で事業領域に属し、contains で UC を束ねる
    ビジネスフローBUC を UC とイベントで具体化した流れ。flow / stepprecedes 等で順序・分岐を表現
    ユースケース(UC)効果を持つ相互作用の境界。画面・API・CRUD・イベント・権限をここに接続する

    実務的な読み方は次のとおりです。

    1. BUC で「今どの価値スライスをレビューするか」を決める
    2. ビジネスフロー でそのBUCが時間順にどう展開されるかを捉える
    3. UC でアクターが理解できる1つの操作と、そのデータ・画面・API効果を命名する

    BUCは画面名やテーブル名ではなく ビジネス価値 から名付けます。UCは「注文する」「決済を確定する」のように 一つの操作 に留め、複数アクターや無関係な画面/APIが混ざるなら分割を検討します。

    .rdra ファイルは module 宣言、importインスタンス宣言述語呼び出しエンティティ本体 で構成されます。

    • module / import: ファイルパスと対応するモジュール名(例: module buc.orderimport shared.actors
    • インスタンス: actor Customer "Customer" のように種別・ID・表示ラベルを宣言
    • 述語: performs(Customer, BucOrder) のように関係を記述
    • entity: カラム定義と @pk 等のアノテーションを持つデータ構造

    典型的な配置は shared/(共通語彙)と buc/(BUCローカルなフロー)です。

    module buc.order
    import shared.actors
    import shared.biz
    buc BucOrder "Process Order"
    usecase PlaceOrder "Place Order"
    entity Order "Order" {
    id: Int @pk
    status: Enum(pending, paid) @default(pending)
    }
    performs(Customer, BucOrder)
    belongs(BucOrder, Commerce)
    contains(BucOrder, PlaceOrder)
    creates(PlaceOrder, Order)

    述語はBUC固有のものをsharedに置かない、という配置ルールがレビューしやすさの鍵です。

    rdra-ishは一度に全部書くことを求めません。小さな段階で精緻化し、各段階のあと check やdiagramでレビューします。

    Stage関心主な追加内容
    0スコープbusiness、候補 buc
    1BUC 骨格actorusecaseperformscontains
    2データ接点粗い entity、CRUD 述語
    3相互作用境界screenapidisplaysinvokes、権限・媒体制約
    4エンティティ構造カラム詳細、relate、カーディナリティ
    5ライフサイクルstateeventtransitionsraisessets
    6ルールforbiddenexclusiveinvariantrequired、クロスエンティティ制約

    checkerror はモデル信頼性を損なうためブロッカー、warning はレビュー信号として扱います。探索中は意図的に未完成のまま --buc フィルタでスライスレビューするのが定石です。

    uv tool install rdra-ish でインストールします。主要サブコマンドは次のとおりです。

    コマンド用途
    checkパース・型チェック・モデル整合性検証。エラー時は非ゼロ終了
    diagramRDRA レイヤ図、ER、シーケンス、状態遷移、イベントフロー等(Mermaid / PlantUML)
    csvCRUD マトリクス、API 一覧、画面制約、権限監査などレビュー用表
    statesBUC 横断で到達可能なエンティティ状態パターンを導出
    exportOpenAPI、AsyncAPI、DBML、JSON Schema 等の機械可読な成果物
    list / lint / fmt要素一覧、カバレッジ監査、フォーマット

    Rustのcrate分割は責務が明確です。

    crates/
    rdra-ish-syntax/ # 字句解析・構文解析・AST
    rdra-ish-core/ # 意味モデル、型チェック、状態導出
    rdra-ish-emit/ # PlantUML / Mermaid / CSV / export 生成
    rdra-ish-render/ # plantuml.jar ラッパ
    rdra-ish-cli/ # rdra-ish コマンド
    rdra-ish-lsp/ # Language Server

    syntaxcoreemit の一方向依存により、CLIとLSPが同じ意味論を共有します。

    リポジトリの editors/vscode にVS Code拡張があります。rdra-ish-lsp バイナリ(PATHまたは rdra-ish.languageServerPath)と連携し、診断、補完、定義/参照、リネーム、ホバー、シンボル、セマンティックハイライト、インレイヒント、フォーマット(保存時)などを提供します。.rdra を通常のコードと同様に編集しながらモデルを保つ前提のUXです。

    Terminal window
    uv tool install rdra-ish
    rdra-ish check samples/ec-site
    rdra-ish diagram samples/ec-site --kind rdra --format mermaid --buc BucOrder

    samples/ec-site はコンパクトなend-to-end例、samples/clinic-ops はAPI・イベント・アクセス制約を含む大きめの例です。samples/incremental-order ではStage 0から6まで段階的に増やした成果物も参照できます。

    向いているケース

    • BUC単位で要件と設計の整合をレビューしたい
    • CRUDマトリクス、シーケンス、状態到達性を モデルから自動生成 したい
    • API契約やDBスキーマのたたき台をモデルと同期させたい
    • エージェントやCIと組み合わせ、モデルをコードとして差分管理したい

    向いていないケース

    • 完全に自由形式の議事録・ユーザーストーリーだけで足りる初期探索
    • RDRA原典の用語・手順をそのまま再現したい(rdra-ishはinspiredでありequivalentではない)
    • 実行可能なアプリケーションコードや本番DBマイグレーションの代替(exportはレビュー起点の成果物)

    モデルを書いた(または更新した)あと、次の観点で check と生成物を確認すると効果的です。

    • 構造整合性: 未解決参照、型エラー、重複定義がないか(check
    • カバレッジ: UCとentityのCRUDが説明可能か(csv --kind matrix
    • 境界設計: UCが直接CRUDすべきかAPI境界が必要か、トランザクション警告は妥当か(diagram --kind sequence
    • アクセス: requires_permission に対応するactor割当、画面経由の媒体制約(csv --kind actor-permission-audit
    • ライフサイクル: 到達不能状態、作成経路の欠落、イベントの未消費(statesdiagram --kind event-flow
    • ルール: forbidden / invariant 違反が意図通りか(states --format json
    • トレーサビリティ: requirement / ADR / NFRがBUC・UCに接続されているか(listlint

    rdra-ishは「正しいモデル」を自動判定する魔法ではなく、関係を明示したモデルをレビューしやすくする ための道具です。段階を1つ進めるたびに check とdiagramで閉じ、次の問いだけをモデルに足していく運用が最も効きます。