CONCEPT RUNTIME / HANDS-ON

実装する前に、要件を動かす。

このページでは、Concept Runtimeを説明として読むのではなく、自然言語の要求をConcept Modelへ変換し、検証し、成果物へ渡すところまで実際に操作します。

所要時間 20〜30分自然言語はdry-runから開始CLI / ローカルSQLite
自然言語の要求がConcept Modelを通り、検証と複数の成果物へ分岐するビジュアル

DESIGN BEFORE CODE

コードを書く前に、誰が何をし、どこで止まるかを確かめる。

LLMは候補を作りますが、仕様を確定しません。 人が確認したConcept Modelだけが、検証と成果物生成の正本になります。

このハンズオンのゴール

最後に、次の問いへ答えられれば完了です。

要件

自然言語の要求を、誰が何をする設計へ分解できる。

検証

未定義の権限、状態、遷移、Invariantを実装前に見つけられる。

引き渡し

同じModelからレビュー資料と実装の入口を作れる。

最初に理解すること

Concept Runtimeは、自然言語から本番アプリケーションを自動完成させる機能ではありません。 実装を始める前に、要件・データフロー・権限・状態・検証条件をConcept Modelとして動かす開発環境です。

LLMの出力は候補です。 未解決のDecisionや検査findingが残る場合、Concept Runtimeは推測で埋めず、保存・実行・成果物生成の前に止まります。 識別子が重複した候補も、Runtimeが先頭のActor・Flow・Ruleなどを暗黙に選ばないよう保存前に止まります。 同じ要求を再実行しても候補のModel IDやRule数は変わり得るため、毎回表示された内容を確認してください。

Actor

誰が操作するか

Entity

何を扱うか

State

対象がどの状態にあるか

Flow

操作と状態遷移の順番

Rule

権限とInvariant

Decision

人が確定するYes / No

一つの要求が通る流れ

01

Requirement

自然言語で業務要求を書く

02

Concept Model

Actor・Entity・State・Flowへ構造化する

03

Human Decision

曖昧な点を人が1-bitで決める

04

Simulation Trace

状態・権限・Invariantを実行して確認する

05

Views

Excel・PDF・Markdown・コード骨格へ投影する

Concept Runtimeのワークベンチで、要求、Model、Decision、Simulation Traceを確認するビジュアル

0. CLIを準備する

公開Gatewayで試す場合は、管理者から受け取ったトークンでログインします。 すでにCLIを使える場合は、導入ガイドを飛ばして構いません。

curl -fsSL https://murasame.xenophy.com/install | bash murasame login murasame status murasame whoami

statusは接続先のreadinessを確認し、whoamiは認証済みアカウントを確認します。 Concept Runtimeの設計DBはローカルSQLiteに保存され、GatewayのKnowledge Cardへ自動共有されません。

1. ローカルデモで停止とTraceを確認する

最初はLLMを使わない明示的なデモModelで、validate、decide、simulateの流れを確認します。--demoはローカルSQLiteへ明示的に保存する入口であり、自然言語Runの保存前dry-runとは別の操作です。 実験用のDBを明示するため、既存の作業DBと分けたディレクトリを使います。

mkdir -p concept-lab export MURASAME_CONCEPT_DB="$PWD/concept-lab/concept.db" murasame concept new blog-hands-on --demo murasame concept show blog-hands-on murasame concept validate blog-hands-on

ここでは、権限や所有者に関する未決定事項が表示されます。 これは失敗ではなく、Modelを確定する前に人へ返された設計上の問いです。 このvalidateは未解決事項があるため終了コード1になりますが、Tutorialで意図した停止です。 シェルに非ゼロ終了が表示されても、次のDecision適用へ進みます。

Decisionを1つずつ確定する

デモModelでは、表示されたDecision IDを使ってYes / Noを適用します。 IDはModelごとに確認し、表示と異なるIDを推測して入力しないでください。

murasame concept decide blog-hands-on d1 --yes murasame concept decide blog-hands-on d2 --yes murasame concept decide blog-hands-on d3 --yes murasame concept validate blog-hands-on

d1〜d3を適用した後も、デモModelにはarticle.updateの権限とArticle / Commentの所有者が未解決として残ります。 これはseedが、確認質問だけでなく「質問を作れない不足」も見せるための設計だからです。 ここでvalidateが完全に通らず終了コード1になること自体が、実装前に止めるべき設計判断です。simulateはLLMを呼ばず、Flow解決、権限評価、状態遷移、Invariantチェックを決定論的に実行します。 このデモでは未定義のarticle.updateがwarningとしてTraceに残ります。

murasame concept simulate blog-hands-on "reader views article" --json murasame concept simulate blog-hands-on "author creates and publishes article" --json murasame concept history blog-hands-on

2本のsimulateは終了コード0で、Traceのstatus=completedになります。 未定義権限のwarningが残っていても、--fail-on-warningを付けていないため実行自体は完了します。

2. 同じModelを開発Viewへ渡す

Modelが正本です。 Excel、PDF、Markdown、コードはそれぞれレビュー、共有、編集、実装の入口であり、Modelそのものを置き換えません。export、notebook、chartは未解決findingを含むModelの設計Viewも出力できますが、renderは検証ゲートを通過するまでコード骨格を生成しません。

murasame concept export blog-hands-on --out concept-lab/blog-hands-on/design --format html,xlsx,json,markdown murasame concept export blog-hands-on --out concept-lab/blog-hands-on/design --format pdf murasame concept notebook blog-hands-on --out concept-lab/blog-hands-on/notebook.md murasame concept chart blog-hands-on --format all --out concept-lab/blog-hands-on/flowchart murasame concept render blog-hands-on --out concept-lab/blog-hands-on/code

renderはtypes・permissions・MODELのコード骨格を生成します。 本番アプリケーションの業務実装や外部作用を自動で完成させるものではありません。 上のデモでは未解決findingが残るため、renderが停止することを確認してください。exportが生成したレビュー用design.mdを残すため、編集用のnotebookは別ファイルへ出力します。 Notebookを編集してModelへ反映する場合は、編集後にmurasame concept apply ... --yesを明示的に実行します。 コード骨格まで進める場合は、notebookでModel JSONを開き、所有者と権限を自分の業務判断として明示してからapply --yes、validate、renderの順に進めます。 所有者を推測して埋めるのではなく、チームで決めたActorを入力してください。 PDFにはChromeまたはChromiumが必要です。 同じModel・版数・source hashのまま同じ出力先へ形式を分けてexportしても、既存の形式はManifestへ引き継がれます。 PDF生成だけが失敗しても、PDF以外の成果物は保存され、CLIが再開コマンドを案内します。

Excel

Decisionのanswerだけをレビューする表

PDF

設計とSimulation Traceを共有する資料

Markdown

Model JSONとNotesを編集する設計ノート

Code

types・permissions・MODELの実装前骨格

一つのConcept ModelからExcel、PDF、Markdown、コード骨格へ接続するビジュアル

VS Codeで同じModelを観測する

CLIで出力したconcept.jsonは、開発者向けの読み取り専用Visual Frontendでも確認できます。 リポジトリをチェックアウトした環境で拡張開発ホストを起動し、先ほど生成したJSONを選択します。 ViewerはConcept DBやネットワークへ接続せず、Modelに存在するActor、Entity、State Machine、Rule、DecisionとFlowのstep順だけを表示します。これはViewer自身の境界であり、CLIのConcept Runtimeが承認後にModelや指定出力先へ書き込むこととは分離されています。

code --extensionDevelopmentPath=extensions/murasame-vscode . # コマンドパレット: MURASAME: Open Concept Viewer # concept-lab/blog-hands-on/design/concept.json を選択

リポジトリを持たない環境では、公開VSIXを入れてから通常のVS Codeで作業フォルダを開けます。公開VSIXを取得し、次のコマンドを実行してください。

curl -fsSL https://murasame.xenophy.com/releases/murasame-concept-viewer.vsix -o /tmp/murasame-concept-viewer.vsix code --install-extension /tmp/murasame-concept-viewer.vsix --force

codeコマンドを使えない場合は、VS CodeのExtensionsビュー(Ctrl+Shift+X)を開き、... → Install from VSIX...から取得したVSIXを指定してください。

CLIやリポジトリを先に準備せずViewerだけ試す場合は、公開Demo Modelを取得できます。公開Demo JSONを確認し、保存したファイルをVS Codeで開いてください。

curl -fsSL https://murasame.xenophy.com/examples/concept-viewer-demo.json -o concept.json code concept.json # Explorerで concept.json を右クリック → MURASAME: Open Concept Viewer

Flowを切り替えてもActor・Entity・Precondition・transitionのfrom → to・step説明が残ること、 State MachineまたはEntityを選ぶとInspectorでstates / transitions / attributesを確認できることを見ます。 JSONを保存した後にRefreshすると再読込されますが、ViewerからConcept Modelを編集・保存することはありません。

3. 自分の要求を自然言語で試す

ここからがConcept Runtimeの中心です。 次の備品貸出要求を、最初は--dry-runで実行してください。--dry-run中はModel保存、Simulation、Renderer、成果物生成を行いません。

mkdir -p concept-lab/inventory inventory_requirement='社内備品貸出を設計する。従業員は利用可能な備品を借り、返却できる。管理者は備品を登録・廃棄できる。貸出中の備品は別の従業員に貸し出せない。備品の所有者は管理者である。備品は利用可能、貸出中、返却済み、廃棄済みの状態を持つ。' murasame concept run "$inventory_requirement" --new \ --id inventory-hands-on \ --dry-run --json --no-render --no-verify \ > concept-lab/inventory/plan.json \ 2> >(tee concept-lab/inventory/run.log >&2)

以後のコマンドは同じ端末セッションで実行し、直前に設定したinventory_requirementを再利用します。 初回生成でModel IDを固定するため--new --id inventory-hands-onを指定しています。 既存Modelを改訂するときは--newを外します。--jsonではPlan JSONがstdout、進捗と人向けの停止案内がstderrへ分かれます。run.logを確認すると、なぜ止まったかと次の要求修正が読めます。 未回答Decisionなら終了コード2、意味上のfindingなら終了コード1になる場合があります。 どちらもこの段階では保存されていないため、まずJSONとログを読みます。

次の例はBash / Zsh向けです。 stderrを画面へ表示しながらrun.logにも保存するため、生成中の経過秒数を見失いません。

jq '{kind, dryRun, modelId: .model.id, actors: [.model.actors[]?.name], entities: [.model.entities[]?.name], flows: [.model.flows[]?.name], openDecisions: (.openDecisions | length), findings: [.findings[]?.kind]}' concept-lab/inventory/plan.json jq -r '.openDecisions[]? | "\(.id)\t\(.question)\t推奨=\(.recommendation // "なし")"' concept-lab/inventory/plan.json cat concept-lab/inventory/run.log murasame concept list

jqはJSONを見やすくするための任意の補助ツールです。 手元にない場合は、2つのjq行を飛ばしてcat concept-lab/inventory/plan.jsonで確認できます。

murasame concept listにinventory-hands-onが出なければ、保存前ゲートが機能しています。 既存のModel一覧が表示される場合は、今回指定したMURASAME_CONCEPT_DBが別のDBを指していないか確認します。

既存Modelを自然言語で改訂するときは--newを外します。既存のActor・Entity・State Machine・Transition・Flow、属性、開始前提、Flow stepの欠落や主要な意味変更は保存前に止まり、説明文の変更と新規要素の追加だけが候補として許容されます。意図的な既存仕様の変更は、notebook / applyで明示してください。

4. 質問へ答え、もう一度dry-runする

JSONのopenDecisionsには、Yes / NoでModelの意味が変わる確認事項が入ります。 推奨値があるDecisionだけを自動適用するなら、--dry-run --yesを使えます。 この組み合わせの--yesは、保存や外部作用の承認ではなく、このdry-run内で推奨回答を適用する指定です。

murasame concept run "$inventory_requirement" --new \ --id inventory-hands-on \ --dry-run --yes --json --no-render --no-verify \ > concept-lab/inventory/plan-checked.json 2> concept-lab/inventory/checked.log

推奨値のない質問には、表示された最新のDecision IDを使って明示回答します。 LLMは再実行時にModelを作り直すため、Decision IDが変わることがあります。 IDが変わったら、前のIDを使い回さず、最新PlanのIDへ置き換えてください。openDecisionsが0件なら、明示回答のコマンドは飛ばして次へ進みます。

# openDecisions が残る場合だけ実行。<PlanのdecisionId>を実際のIDへ置き換える(そのまま実行しない) murasame concept run "$inventory_requirement" --new \ --id inventory-hands-on \ --answer '<PlanのdecisionId>=yesまたはno' \ --dry-run --json --no-render --no-verify \ > concept-lab/inventory/plan-answered.json 2> concept-lab/inventory/answered.log

invalid-invariant、ambiguous-permission、no-op-decision、参照切れ、状態やFlowの不整合は、--answerだけでは解消しません。 その場合は、ログの指示に沿って要求へ役割・対象・状態・遷移・条件を追記し、元の要求を修正して再実行します。 所有者はentity.ownerActorId、履歴や時間関係は現行の状態式だけでは表現できないため、Concept Runtimeは意味を発明して先へ進みません。

5. 人が確認してから保存・実行する

dry-runのPlan JSONとログを読み、役割、Entity、状態、Flow、Rule、Decisionに納得できた場合だけ、最終承認を付けて再実行します。 非TTYで保存・実行するには--yesが必要です。 この--yesは推奨回答の適用に加えて、Model保存・Simulation・成果物生成へ進む最終承認です。

murasame concept run "$inventory_requirement" --new \ --id inventory-hands-on \ --yes --format all --out concept-lab/inventory/output

直前のdry-runで確認した要求文をそのまま使います。 推奨値のないDecisionへ回答した場合だけ、最終コマンドへ--answer 最新のdecisionId=yes|noを追加します。 未解決findingが残る場合や、推奨のない質問へ回答していない場合は、--yesを付けても保存されません。

6. ExcelからProposal-firstでレビューする

保存済みModelからExcelを出力したら、チームでDecisionsシートのanswer列だけを編集します。 他のシートや読み取り専用列を直接書き換えても、正本のModelは変わりません。

murasame concept export inventory-hands-on --out concept-lab/inventory/design --format xlsx # Excelで concept-lab/inventory/design/design.xlsx の Decisions.answer だけを編集 murasame concept review inventory-hands-on concept-lab/inventory/design/design.xlsx \ --proposal-out concept-lab/inventory/design/review.proposal.json murasame concept review-apply inventory-hands-on concept-lab/inventory/design/review.proposal.json --yes murasame concept validate inventory-hands-on murasame concept simulate inventory-hands-on "従業員が備品を借りて返却する" --json

reviewはExcelの差分をProposalへ変換するだけです。review-apply --yesで明示承認して初めてConcept Modelの新しい版になります。 この境界が、レビュー中の表計算をそのまま業務仕様へ書き込まないための安全弁です。

7. Simulationと形式検証を使い分ける

simulateは、指定したScenarioを一つのFlowとして実行し、どのStepで状態が変わったか、どの権限を評価したか、どこで警告・停止したかをTraceへ残します。verifyは状態機械をQuintへ射影し、Invariantと反例を形式検証します。 どちらも自然言語の意味を推測する機能ではありません。

murasame concept chart inventory-hands-on --format all --out concept-lab/inventory/flowchart murasame concept verify inventory-hands-on murasame concept trace inventory-hands-on

Quintが端末にない場合、verifyはInvariant違反とは別の実行環境エラーとして止まります。 その場合はQuintを導入するかMURASAME_QUINT_BINを指定し、自然言語Runでは必要に応じて--no-verifyを使います。

このページで見つけてほしい限界

Concept Runtimeの価値は、すべての要求を自動で通すことではありません。 現在のschemaで決定論的に検証できるものと、まだ意味を表現できないものを分け、実装前に人へ返すことです。

現在、実行できるもの

  • Actorごとの操作権限
  • Entityの所有者とライフサイクル
  • State Machineの遷移
  • Flowの開始状態とStep順序
  • state_is / state_notで表すInvariant

要求またはschemaの見直しが必要なもの

  • 期間の重複や複数Entity間の集計
  • 「以前に承認を経た」などの履歴条件
  • 状態式だけで表せない本人性や関係性
  • 意味のないYes / No Decision
  • 未定義の役割や、作成前のEntityを読むFlow

ここで停止したfindingを自動で消す、LLM候補を勝手に修正する、未確定Draftを共有DBへ保存する、といった近道は現在の契約に含めていません。 Concept Runtimeは、設計の曖昧さを消すのではなく、どこにあるかを見える形で残します。

次に試す課題

CHALLENGE 01

従業員が借りた備品だけ返却できるように、Actor、Entity、Flow、状態前提を要求へ具体化する。

CHALLENGE 02

管理者が代理返却できるかをDecisionとして残し、Yes / Noで変わる業務結果を確認する。

CHALLENGE 03

ExcelでDecisionをレビューし、Proposalを経由してから再びvalidateとsimulateを実行する。

Concept RuntimeがSimulation Traceと形式検証を通して設計を確かめるビジュアル

止まったときの確認

表示意味次にすること
exit 2未回答Decisionが残っている最新PlanのIDへ--answer id=yes|noを指定する
exit 1semantic findingまたは実行・検証の停止要求を具体化するか、ログの復旧案内を確認する
LLM応答なしdaemon、Gateway、認証、推論資源の問題murasame status、murasame whoamiを確認して再実行する
PDFだけ失敗Chrome / Chromiumが解決できないMURASAME_CHROME_PATHを指定するか、PDF以外を再exportする

LLM生成中は数十秒から数分かかる場合があります。 CLIは経過秒数を表示し、Ctrl-Cで中断できます。 生成中は未保存なので、まず中断して要求を直す判断も安全です。

READY TO TRY

あなたの業務を、まずdry-runしてみる。

最初から完璧なModelを作る必要はありません。 どの役割、状態、権限、条件がまだ決まっていないかを見つけることが、Concept Runtimeの最初の成果です。