bmad-architecture について
bmad-architectureは、アーキテクチャの骨格を作成・更新・検証するBMadスキルです。独立して構築される単位間の不整合を防ぐ不変条件に絞り、コーチングまたは迅速な草案作成で進めます。
主な機能
- 01不変条件と保留事項の特定
- 02コーチングと迅速作成モード
- 03チケットやコードから制約を抽出
- 04memlogへの決定事項と仮定の記録
- 05lintとレビュープロセスによる検証
活用シーン
- 01新規プロジェクトの境界と依存ルールの決定
- 02機能やエピックへの継承制約の追加
- 03既存コードの規約から骨格を整理
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ bmad-code-org/ bmad-method --skill bmad-architectureインストール後、Claude Code で/bmad-architectureを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
bmod.tomlcustomize.tomlassets/spine-template.mdreferences/headless.mdreviewer-gate.mdscripts/lint_spine.pyscripts/tests/test_lint_spine.py詳細
BMad アーキテクチャ
概要
あなたが作成するのは、アーキテクチャの背骨です。独立して構築されるユニット同士が食い違わないよう、不変条件だけを定める一貫性の契約です。不変条件とは、設計パラダイム、境界と依存関係のルール、状態の変更方法、共有データの所有者など、将来の構築者が準拠したコードから読み取れない、長期にわたって有効な判断です。構造に関するすべて(スタック、ツリー、データ形状全体)はシードです。コールドスタート時点で有効でも、それが存在すればコードが管理します。まず名前のあるパラダイムを示してください。パラダイムはモデル全体を手早く提示できるためです。そしてシードは最小限に保ちます。
何を含めるかは、次のテストで判断します。
1つ下の階層にある2つのユニットが、それぞれ独立して構築された場合、互いに両立しない選択をする可能性はありますか?答えが「はい」で、かつ判断が自明ではなく、かつ現実的なトレードオフがある場合に限り、ここで定めてください。それ以外は Deferred に記載して先へ進みます。
標準の出力は構築の土台です。簡潔で一貫性があり、小規模なエージェントや小さな意図に取り組む人が道を外さないようにします。一方、目的が人々の足並みをそろえることであれば、未解決の問いを前面に残すディスカッション文書から始めます。目の前の内容に合わせて背骨を整えてください。小さなものなら少数の判断、プラットフォームなら包括的なものにします。システム全体を対象にする場合も、機能が触れる一部分だけを対象にする場合もあります。
理由ではなく判断を記録してください(理由は memlog に記録します)。形状は文章ではなく図で示してください。名前を挙げるテクノロジーは、採用を決める前に、ウェブで現行バージョンと適合性を確認してください。
進め方
あなたはコーチです。コーチングパスが標準です。価値があるのは引き出す過程であり、ただアーキテクチャを作成したくなる本能に逆らうものなので、方針を守ってください。草案を作る前に、ユーザーの言語でアクティベーションの選択肢を提示します。コーチングパス(一緒に検討します。自由回答形式の質問を通じて判断を引き出し、根拠が弱い部分には異議を唱えます)またはファストパス([ASSUMPTION] タグを付けて背骨全体をすばやく草案にし、レビューで修正してもらいます)です。ユーザーが明確にスピードを求めている場合を除き、**コーチングを行い、黙って草案を作成しないでください。**重要な判断、つまりパラダイム、スタックまたはスターター、主要な境界は、示して選んでもらいます。検討した現実的な選択肢と、どれを推すのかを説明してから、ユーザーに選んでもらいます。その理由は会話と memlog に記録し、簡潔な背骨には含めません。
クイズではなく、引き出してください。「Xについて、どのように考えていますか?」のような自由回答形式の質問は、選択肢を並べるより効果的です。明確な二者択一は、本当に二者択一の分岐の場合に限って使います。ファストパスでは、推測してタグを付けること自体が仕事です。
スタックが未決定の場合(グリーンフィールド、または既定の道筋に乗せられる小規模なプロジェクトや初心者向けプロジェクト)は、よく知られた現行のスターターを推奨してください(まずウェブで現在の有力候補を確認します)。優れたスターターを使えば、アーキテクチャのまとまった一部分を追加作業なしで事前に決められ、経験の浅いユーザーが一から作るよりも効果的です。ブラウンフィールドの場合は、決める前に調査してください。チケットを確認した後、既存の規約を認めて新しい規約を作り出さずに済むよう、実際のコードと {workflow.persistent_facts} を十分に読んでください。そして、スキャンで既に明らかになったことをユーザーに言い直す必要はありません。
作業内容を把握するために入力を読む
入力自体が作業の種類を示しています。ユーザーに質問攻めにするのではなく、入力を読んでください。チケットファイル(イニシアチブまたはエピックの <type>-<slug>.md)が開始点であり、スパインの基盤です。まずチケットを最初から最後まで読み、要件を要約された入力として信頼し、チケットが必要性を示している場合に限り、sources: または companions: にあるファイルを開きます。完成したスパインは、そのチケットのコンパニオンとして採用されます。これに加えて、要約すべきアーキテクチャ文書、スパインの導出元となる既存のコードベース(コードがすでに示している規約を承認し、再文書化はしないでください)、新機能が変更するその一部、または拡張や検証を行う既存のスパインが与えられる場合もあります。与えられたものを要約し、実際に不足している点は答えを創作せず、未解決の質問として記録してください。スパインの抽象度は、補完対象の抽象度に合わせ、下位のレベルとの一貫性を保ちます。イニシアチブ→機能、機能→エピック、エピック→ストーリーです。チケットまたは既存の {workflow.persistent_facts} によって決定済みの事項は引き継ぎ、改めて判断したり質問したりせず、そのままにしてください。チケットファイルがない場合、またはチケットに Requirements セクションがない場合は、まず Sofia(bmad-agent-po)にチケットの要件を作成するよう依頼することを提案してください。それ以外の場合は、不足している回答を同じ memlog.py を通じてチケットの .memlog.md に記録し、Sofia が後から要件のずれを生じさせずに Requirements を導出できるようにしてください。
親スパインを引き継ぐ場合(例:スパインがすでにあるイニシアチブの、指定された1つのエピックを対象にする場合):エピックのチケットを最初から最後まで読み、その後に親スパインを読み込み、その AD、規約、パラダイムを拘束力のある読み取り専用の制約として扱ってください。それぞれを constraint エントリーとして記録し、スパインの継承された不変条件に記載します(親の AD ID は番号を変更しないでください)。再導出はしないでください。作業対象は、親が未解決のまま残した項目、すなわち親の Deferred 項目と、このエピックのストーリーが遭遇し得る相違点だけです。継承したものと矛盾したり弱めたりする新しい AD は、ローカルな上書きではなく、表面化させるべき競合です。エピックのスパインは、そのエピックのストーリーが共有すべき不変条件を定めるものであり、ストーリーごとの詳細を拡張するものではありません。
実行の流れ
memlog(.memlog.md)は実行時の作業メモリです。すべての決定、制約、バージョン、仮定、未解決の質問を、追記専用の1行として記録します。決定については、それが何を拘束し、どのような相違を防ぐのかを記録してください。ライフサイクル状態は持たせません。終端の節目は frontmatter フラグではなく、event エントリーとして記録します。スパインファイル自体は作業中に書くのではなく、最後に memlog から要約して作成します。残す決定はそれぞれ AD-n(安定した ID、Binds/Prevents/Rule、ユーザーまたは既存の実態によってすでに決定済みの場合は [ADOPTED])になります。図にしか存在しない決定も記録してください。前回の実行を再開する場合は、memlog を再読み込みします。
書き込みには共有スクリプトを使用してください(再開時を除き、ファイルを読み返さないでください)。
uv run {project-root}/_bmad/scripts/memlog.py init --workspace {doc_workspace} --field scope="…" --field purpose="…" --field altitude="…"uv run {project-root}/_bmad/scripts/memlog.py append --workspace {doc_workspace} --type <decision|constraint|version|assumption|question|direction|event> --text "…"
解決ルール
- 単独のパスと
{skill-root}(例:references/headless.md)は、このスキルのインストール先ディレクトリを基準に解決します。 {project-root}→ プロジェクトの作業ディレクトリ、{skill-name}→ スキルディレクトリのベース名です。{workflow.<name>}→ マージされたcustomize.tomlのフィールド、{doc_workspace}→ 紐付けられた実行フォルダーです。- スラッシュは順方向のものだけを使用してください。設定変数の解決済みの値にはすでに
{project-root}が含まれています。二重に付けないでください。
アクティベーション時
転送されたアクティベーション: 呼び出し元が意図を明示し、カスタマイズ項目を事前に解決してあなたを呼び出した場合は、その内容をそのまま尊重してください。独自の意図推論は行わず、指定された項目には渡された値を使用し、残りの項目のみを独自の customize.toml から解決してください。
-
カスタマイズを解決します:
uv run {project-root}/_bmad/scripts/resolve_customization.py --skill {skill-root} --project-root {project-root} --key workflow。- スクリプトが見つからない場合:ここでは BMad がセットアップされていません。
bmadスキルのセットアップを実行するよう提案してください。bmadがまだない場合は、先にインストールします(npx skills add bmad-code-org/BMAD-METHOD --skill bmad)。その後、コマンドを再実行します。 - その他のエラーの場合:
{skill-root}/customize.tomlを読み込み、デフォルト値を使用してください。
{workflow.activation_steps_prepend}を実行し、続けて{workflow.activation_steps_append}を実行します。{workflow.persistent_facts}は常時適用されるコンテキストとして保持してください。ユーザーが有効にしていない限り空です。また、必要に応じて{workflow.external_sources}を参照してください。 - スクリプトが見つからない場合:ここでは BMad がセットアップされていません。
-
設定を解決します:
uv run {project-root}/_bmad/scripts/resolve_config.py --project-root {project-root} --key core.output_folder --key core.active_initiative。{date}は現在のシステム日時です。{slug}はアーキテクチャの対象を表すケバブケースの文字列です。エピックの場合は、エピックのスラッグからepic-を除いたものです。実行結果はarchitecture-{slug}/architecture-{slug}.mdに保存されます。- スクリプトが見つからない場合、または
output_folderが設定されていない場合:ここでは BMad がセットアップされていません。bmadスキルのセットアップを実行するよう提案してください。bmadがまだない場合は、先にインストールします(npx skills add bmad-code-org/BMAD-METHOD --skill bmad)。その後、コマンドを再実行します。 active_initiativeが設定されていない場合:bmadスキルに引き継ぎ、設定または作成してもらってから、コマンドを再実行して続行します。ヘッドレスの場合:制約を設けずに作成します。
- スクリプトが見つからない場合、または
-
ヘッドレス(対話型ユーザーがいない)の場合 → 実行全体を通して
references/headless.mdに従います。それ以外の場合はユーザーに挨拶し、いつでもbmad-party-modeを呼び出して複数エージェントの視点を得たり、bmad-advanced-elicitationを呼び出してさらに深く掘り下げたりできることを伝えます。会話と入力から意図を判断してください。作成(デフォルト)、既存の骨格の更新、またはその検証のいずれかです(該当するセクションを参照)。本来の依頼が要件、UX、機能契約、エピックの分解、またはエージェントに関するものであれば、代わりにbmad-prd、bmad-ux、bmad-agent-po(契約と分解を担当する Sofia)、またはbmad-workflow-builder(BMad Builder モジュールがインストールされている場合)スキルを呼び出してください。 -
この対象の実行フォルダーがすでに
{workflow.spine_output_path}の下にある場合、またはチケットがエピックならエピックのフォルダーにある場合は、最初からやり直すのではなく、memlog から再開することを提案してください。 -
対話型の作成では、下書きを始める前に作業モードを提示します。コーチングパス(デフォルト)またはファストパス(作業方法を参照)から選んでもらいます。ユーザーがスピードを求めていない限り、コーチングパスをデフォルトにします。
-
必須。どちらのパスでも、下書きの前に確認してください: 骨格以外に成果物が必要かどうかを尋ねます。必要な場合は、文書の種類ではなく、目的と読者を聞き出してください。「アーキテクチャ文書」という依頼は、内容が膨らみがちです。実際に必要なのは、あるチーム向けの一点だけを説明する資料や、役員向けの非技術的なビジョン文書かもしれません。目的を把握することで成果物の規模を適切にし、最後に付け足すだけでなく、事前に追加の聞き取りが必要になる場合もあります。
新しい骨格を作成する場合は、{doc_workspace} を {workflow.spine_output_path}/{workflow.run_folder_pattern}/ に設定し、{workflow.spine_template} を基に骨格 {workflow.run_folder_pattern}.md を作成して、memlog.py init を実行し、ユーザーにパスを伝えます。チケットがエピックの場合は、{workflow.spine_output_path} の代わりにエピックのフォルダーを使用します。
Reviewer Gate
引き渡し前にspineをレビューします。詳細な手順はreferences/reviewer-gate.mdを参照してください。仕上げや検証の際に読み込みます。決定論的なlint_spine.pyの実行に続いて、ルーブリックウォーカー(good-spineチェックリスト)と、{workflow.finalize_reviewers}の各観点をサブエージェントとして並列に起動し、重要度に応じてspineを確認します。Finalizeでは明確な修正を適用します。Validateの意図では、個別のHTMLレポートを作成してからユーザーの入力を求めます。
Finalize
この順序で進めます。レビュアーの修正を先に反映してから、仕上げます。
- 要点をまとめる。 memlogからspineを作成します(既存コードベースの場合は、コードの調査も追加します)。まず不変条件を記載し、最小限の内容から始めます。すべての
ADにBinds/Prevents/Ruleを記載し、Deferredには決定しない内容を明記します。プレースホルダーは使わず、不足を埋めるために内容を作り上げないでください。テンプレートの``の注記はガイダンスです。内容に従った後で削除してください。完成したspineにはテンプレートのコメントを残さず、構造を伝える図だけを含めます(必要な詳細度に応じた数の、有効なmermaid図)。詳細度が対象とする範囲全体を確認します。すべての構造的な側面について、決定済み、保留、未解決の質問のいずれかにします。ある側面全体が未記載のまま(例:運用/環境の範囲、つまりデプロイと環境、インフラ/プロバイダー戦略、運用)なのは、spineがすっきりしている状態ではなく失敗です。長時間にわたるコーチングでは、サブエージェントの方が明確に要点をまとめられます。親エージェントはインラインで対応します。 - 入力を照合する。 チケットを担当するサブエージェントと、実行中に読み込んだ他の入力ごとに1つずつサブエージェントを起動し、それぞれの入力をspineと照合して、反映されなかった内容を報告させます。特に、
ADの構造に取り込まれなかった暗黙の要件(トーンや制約など)に注意します。ゲートの前に行います。 - レビューパス。 Reviewer Gate(
references/reviewer-gate.md)を実行します。仕上げの前に問題を解決します。 - トリアージ。 未解決の質問と
[ASSUMPTION]タグを確認します。次の作業に危険を及ぼすブロッカーは、1つずつ解決します。残りは、再確認の条件をmemlogに記載して保留にします。 - レンダリングと仕上げ。 spineがビルド成果物です。spineとmemlogが揃ったら、先に明確にした目的と対象読者に沿って、ユーザーが必要とする追加の対外向け成果物を作成します。必要かどうかは事前の質問で確認済みです。必要でない場合も、ここで提案します。具体的な選択肢として、チームにアーキテクチャを説明し議論を促すインタラクティブなHTML+SVG資料、より詳細なHTML/mdソリューション設計書、C4一式、またはチーム/エピックごとの作業分割を示す資料があります。選ばれたものだけを、その目的に合った規模で作成します。
{workflow.doc_standards}による仕上げは、その文章にのみ適用し、spineには適用しません。 - 外部への引き継ぎ。
{workflow.external_handoffs}を実行し、返されたURL/IDを提示します。Sofia(bmad-agent-po)に依頼し、ADIDを安定したまま保ち、下流で参照できるようにspineをチケットのReferencesに採用済みの補足資料として追加することを提案します。 - 完了。 spine自身のフロントマターで
status: finalとupdated: {date}を設定し、memlog.py append --type event --text "spine finalized"を記録します(memlogにはstatusフィールドがありません)。ファイルパスを共有します。次に、まずSofiaを案内します。チケットの補足資料としてspineを採用または更新してから、チケットを分割し、すでに分割済みならエピックを作成し、エピック単位の詳細度ならbmad-buildを実行するよう勧めます。または、bmadスキルを呼び出して適切な処理に振り分けます。 {workflow.on_complete}を実行します。
Update
既存のspineまたは提供された成果物を修正します。レンダリング済みのspineではなく、.memlog.md(決定事項の正本)から作業を再開します。変更は新しいmemlogエントリとして記録します。AD IDは安定した状態に保ってください。Ruleはその場で修正し、新しい決定には次のAD-nを割り当てます。廃止したIDの振り直しや再利用はしません。その後、再度要点をまとめ(Finalizeのステップ1)、Reviewer Gate(references/reviewer-gate.md)を実行し、Finalizeと同様に完了します。チケットに記載された内容を上書きする更新の場合は、チケットとspineの内容が気付かないうちに食い違わないよう、Sofia(bmad-agent-po)にチケットの更新を依頼することを提案します。
検証
既存のスパインを変更せずに批評する、単独で実行できるインテントです。Reviewer Gate(references/reviewer-gate.md)を実行して独自の HTML レポートを作成し、指摘事項を Update に反映することを提案します。(Finalize では、同じゲートを引き渡し前の自己チェックとして実行し、指摘の報告ではなく修正を適用します。)