• Status: Superseded by ADR-0031 (部分)
  • Mode: Standard
  • Kruchten Type: Property
  • Scope: platform
  • Implementation Status: Done (PR #663、テンプレ/README/body_generation.ts)
  • 起案者: [email protected]
  • 起案日時 (JST): 2026-05-13 18:59
  • 承認日時 (JST): 2026-05-13 19:10
  • Deciders: [email protected] (単独)

2026-05-13 部分 Supersede 通知: ADR-0031 で §決定の「既存 ADR 本文不変」制約のみが上書きされた。Kruchten 3 分類定義・判定ロジック・裁定ルール・撤退条件・観測指標は本 ADR で維持。詳細は ADR-0031 §決定セクションを参照。 Kruchten Type は ADR-0031 (2026-05-13) で遡及追加。分類根拠は ADR-0031 §決定セクションおよび docs/adr/README.md の Kruchten 3 分類ガイドを参照。 Status / Mode / Scope は 2026-06-11 に遡及追加 (ADR-0031 corrigendum パターン)。出典: Status = 旧形式「## ステータス」節の機械転記 / Mode = 旧 README §既存 ADR 一覧の推定値 (git 履歴) / Scope = ADR-0049 4 層分類の遡及付与 (PR レビューで確定)。

決定の早わかり(Y-statement)

本節は ADR-0140 の方針で遡及追加された本文の要約で、新しい意味は加えていない (意思決定内容は不変)。「文脈で問題に直面し、対抗案でなくこの案を選び、目的のため代償を受け入れる」と読む。詳細はコンテキスト以降の本文に展開する。

  • 文脈: ADR が 30 本 (ADR-0000〜0029) まで蓄積し、構造の業界標準化 (ADR-0023) と番号統一 (PR #660) が完了した。次に必要なのは意思決定の主題索引化。
  • 問題: 過去 ADR を主題で検索する手段が本文 grep のみで、検索漏れが起きる。過去 30 本中 4-5 件 (15-17%) が Pipeline 審査で「事前検索すれば回避できた指摘」を受けた。
  • 問題点と課題(直せる原因 → 発生を止めるためにやること):
    • 主題索引がなく、起案前の関連 ADR 検索が記憶ベース (約 10%) → Kruchten 3 分類ラベルをテンプレートに追加し、grep で網羅検索できるようにする。
    • 主題索引なしでは Jr が 30 本全件読み (推定 2.5-5 時間) を強いられる → README に 3 分類ガイドと判定フローチャートを置き、ラベル即視で主題把握できるようにする。
    • Pipeline 3 LLM のラベル分類が不一致になりうる → 優先順位付きの裁定ルール (起案者明示 → 過半数一致 → Slack 通知で手動裁定) で 1 ラベルに決める。
  • 前提(解決を課題に立てない与件):
    • 既存 Mode (Light/Standard/Critical) と直交する別軸として共存させる。
    • Jr の学習コストは 30 分以内 (README ガイドで完結) とする。
    • Decision Pipeline (body_generation.ts) との連携を必須とする。
  • 決定(対応策): 現状維持・Nygard 5 領域・独自タグ・検索ツール導入 (案 B〜E) でなく、Kruchten 3 分類 (Existence / Property / Executive) を ADR テンプレートのメタデータ欄に追加する (案 A)。日常運用では英語 3 用語のみ使う。
  • 目的: 索引化率を 0% → 100% に、起案前の関連 ADR 検索網羅率を 10% → 100% にする。Consistency Gate 後追い差し戻し率 15-17% → 0%、Jr の主題把握時間 < 1 分/本を目指す。
  • 代償: 起案者の判定時間が 1 ADR あたり 2-3 分増える。学術用語のため Jr の初期学習コスト 30 分が発生する。3 分類すべて該当する場合は影響範囲の記述が冗長になる。
  • 詳細は本文の影響・撤退条件セクションを参照のこと

コンテキスト

1.1 背景 (Background)

bizlp-gas-accounting の ADR は 30 本 (ADR-0000〜0029) まで蓄積し、ADR-0023 で構造の業界標準化 (Nygard/MADR 準拠の 4 桁ハイフン形式)、PR #660 で 3 桁→4 桁の番号統一が完了した。次に必要なのは 意思決定の主題索引化。Philippe Kruchten (2004) "An Ontology of Architectural Design Decisions" の 3 分類 (Existence/Property/Executive) は学術文献で 20 年の蓄積があり、Capilla et al. (2016) "10 years of Software Architecture Knowledge Management" で「ADR の knowledge loss 防止策」の代表として位置付けられている。

1.2 現状 (Current State / As-Is)

  • 総 ADR 数: 30 本 (ADR-0000〜0029)
  • 主題索引化率: 0/30 (0%)
  • 各 ADR は Mode (Light/Standard/Critical) フィールドのみ保有 (12/30 本、40%)、残 18/30 本は旧形式で Mode 未記載
  • 「過去 ADR を主題で検索する手段」は本文 grep のみ。例: 技術選定系 ADR を網羅する単一クエリは存在しない
  • 起案前に関連 ADR を本文に明記したケース: 約 3/30 本 (10%)、残 27 本は記憶ベース

1.3 課題 (Problem)

  1. 検索漏れによる Consistency Gate 後追い差し戻し: 過去 30 本中 4-5 件 (15-17%) が Pipeline Parallel Review / Consistency Gate / Policy Alignment で「事前検索すれば回避できた指摘」を受けた (ADR-0024/0029 等で実例あり)
  2. Jr 入社 (2026-10) 後の独学コスト累積: 主題索引なしで 30 本全件読み = 推定 2.5-5 時間
  3. 暗黙知の蒸発リスク: Capilla 2016 が指摘する "ADR-based knowledge get lost over time" が個人開発でも顕在化

1.4 制約・要件 (Constraints & Requirements)

  • ADR-0001〜0029 の本文は不変 (イミュータブル原則、CLAUDE.md L92 準拠)
  • 既存 Mode (Light/Standard/Critical) と直交する別軸として共存
  • Jr の学習コスト ≤ 30 分 (README ガイドで完結)
  • Decision Pipeline (body_generation.ts) との連携必須

1.5 目標 (Goals / To-Be)

Kruchten 3 分類を ADR テンプレートのメタデータ欄に新規追加し、各 ADR に該当する 1-3 個のラベルを付与する。これにより:

  • 索引化率を 0% → 100% (30/30 本) に
  • 起案前関連 ADR 検索の網羅率を 10% (記憶ベース) → 100% (grep ベース) に
  • Consistency Gate 後追い差し戻し率を 15-17% → 0% に
  • Jr の ADR 主題把握時間を 5-10 分/本 → < 1 分/本 に

決定

Philippe Kruchten (2004) ontology の 3 分類を docs/adr/templates/template.md のメタデータブロックに **Kruchten Type**: Existence | Property | Executive (複数可) フィールドとして追加する。各分類の定義:

分類ギリシャ語語源意味bizlp 例
Existence (Ontocrises)onto-(存在) + krisis(判断)新しい要素・コンポーネント・データ構造を導入する決定ADR-0001 SSoT Invoice / ADR-0021 UC Slice
Property (Diacrises)dia-(区別) + krisisシステム全体に適用される横断ルール・規約・制約ADR-0011 DTO Header-based / ADR-0017 Bank Filter
Executive (Pericrises)peri-(周辺) + krisis技術・プラットフォーム・プロセス・組織選定ADR-0007 Gemini OCR / ADR-0019 LangGraph

複数該当 (例: OAuth 採用 = Executive + Existence + Property) の場合は影響範囲セクション (5.1/5.2/5.3) で分解記述する。判定フローチャート (Q1: 新要素導入? → Existence / Q2: 横断ルール? → Property / Q3: 技術選定? → Executive) を README に配置。

学術用語の取り扱い: 日常運用では英語 3 用語 (Existence / Property / Executive) のみ使用。ギリシャ語原語 (Ontocrises / Diacrises / Pericrises) は README 解説セクション内の語源説明と外部資料リンクのみで言及し、メタデータ欄や検索クエリでは使わない (起案者の認知負荷低減)。

Pipeline 3 LLM ラベル不一致時の裁定ルール (単純化): Consistency Gate に新ノードは追加しない。代わりに以下の優先順位で 1 ラベルを自動採用:

  1. 起案者が input に明示した Kruchten Type があればそれを最終採用 (起案者裁量優先)
  2. 起案者明示なしで Pipeline body_generation が生成した場合、3 LLM (Gemini/Claude/GPT-4o) の Parallel Review で過半数 (2/3 以上) が一致したラベルを採用
  3. 過半数不一致 (3 LLM が全て異なるラベルを提案) の場合、起案者に Slack 通知して手動裁定を促す (Pipeline は INFO で通過させる)

既存 Mode との関係 — 直交する分類軸

Mode (Light/Standard/Critical)Kruchten Type (新規)
何を表現規模・重要度・スコア閾値主題・決定の種類
用途Pipeline scoring 判定検索・索引・関連 ADR 発見
検索クエリgrep "Mode.*Critical"grep "Kruchten.*Executive"

組み合わせで立体検索可能 (例: Critical かつ Executive な過去決定の網羅)。

実装スコープ

  • docs/adr/templates/template.md: メタデータブロック更新 (+4 行)
  • docs/adr/README.md: 3 分類ガイド + 判定フローチャート + 既存 30 本一覧表に Kruchten 列追加 (+90 行)
  • drp/src/nodes/body_generation.ts: SYSTEM_PROMPT に Kruchten ラベル必須化追記 (+5 行)
  • 既存 ADR-0001〜0029: 本文不変 (README 一覧表に補助索引として後付け、本文編集なし)

検討した代替案 (Alternatives Considered)

  • 案 A【採用】Kruchten 3 分類 (Existence/Property/Executive) を ADR テンプレに新規メタデータとして追加

    • Good, because 学術業界標準 (Kruchten 2004 / Capilla 2016 / ISO/IEC/IEEE 42010) で 20 年の蓄積あり
    • Good, because 既存 Mode 軸と直交し立体的検索が可能
    • Good, because 既存 ADR 本文不変 (イミュータブル原則準拠、README 補助索引で対応)
    • Bad, because 学術用語のため後任 30 分の学習コストが必要
    • Bad, because Pipeline body_generation.ts 改修 (0.5 時間) が発生
  • 案 B【不採用】現状維持 (ラベルなし)

    • Good, because 起案者の負荷増ゼロ
    • Bad, because 索引化率 0% が固定化、Jr 独学コスト 2.5-5 時間が継続
    • Bad, because Consistency Gate 後追い差し戻しによる年間 LLM API [MASKED:AMOUNT] 浪費が継続
  • 案 C【不採用】Nygard 5 領域 (structure/NFR/dependencies/interfaces/construction) を採用

    • Good, because AWS Prescriptive Guidance / Microsoft Azure WAF も採用の業界デファクト
    • Bad, because 5 領域は対象ドメイン軸で、決定の「種類」(存在/性質/環境) を区別しない
    • Bad, because 検索ユースケース (過去の技術選定網羅等) に直接対応しない
  • 案 D【不採用】独自タグを自由記述で運用

    • Good, because 軽量、bizlp 文脈に即した分類
    • Bad, because 自由記述は時間経過で揺れる (tag 重複・誤記)
    • Bad, because 学術背景なしで Jr が外部知識から類推できない
  • 案 E【不採用】Backstage / adr-manager 等の検索ツール導入で代替

    • Good, because ラベル付与の手作業ゼロ
    • Bad, because 30 ADR 規模・個人開発には過剰投資 (RQ-041 結論)

コスト試算

項目工数金額
template.md / README.md / body_generation.ts 更新1.75 時間$0.5
既存 ADR 30 本を Kruchten 分類して README 補助索引追加2 時間$1.5 (LLM 30 × $0.05)
Decision Pipeline 投入 + Accepted 化 + マージ1 時間$3
動作確認 + 検索ユースケース実走0.5 時間$1
合計5.25 時間$6 (≈ [MASKED:AMOUNT])

機会費用換算: 5.25 時間 × Jr 想定時給 [MASKED:AMOUNT]/h = [MASKED:AMOUNT] + LLM API [MASKED:AMOUNT] = [MASKED:AMOUNT] 投資

年間削減効果 (想定値・未検証: 過去 30 本実績の Pipeline ログから定量検証していない、仮定ベース):

  • Consistency Gate 差し戻し削減: 年 12 件想定 (= 月 1 件、過去 30 本 / 推定 2 年運用 → 月 1.25 件と整合) × 1 件あたり 1 時間機会費用 + LLM API $4 ≈ 数万円規模 + $48 削減
  • Jr 独学時間削減: 1 回のみ 2.25 時間機会費用削減
  • 起案時検索時間削減: 年 24 件想定 (= 月 2 件、過去 30 本 / 推定 2 年運用 → 月 1.25 件 × 2 倍の余裕想定) × 13 分機会費用 ≈ 十万円規模 削減
  • 合計: 年 十万円規模 + LLM API $48 (≒ 数千円) 削減見込み

投資回収期間: 約 3-4 ヶ月 (想定ベース、6 ヶ月後 Review After で実績検証)

想定根拠の弱点 (Policy Alignment 指摘事項 #1 への対応): 上記の「年 12 件 / 24 件想定」は Pipeline 過去ログから定量集計せず、過去 30 本の運用ペース (約 2 年) から推定した値。6 ヶ月後 Review After で「実差し戻し件数」「実起案件数」を実績集計し、本 ADR の前提を上書きする。撤退条件にも投資回収未達閾値を追加 (下記)。

影響 (Consequences)

5.1 正の影響 (Good)

  • ADR 索引化率 0% → 100% で関連 ADR 検索漏れを構造的に防止
  • Consistency Gate 後追い差し戻し率 15-17% → 0% でレビューサイクル短縮
  • Jr 独学コスト 2.5-5 時間 → 1-2 時間 で人材立ち上げ高速化
  • Pipeline の body_generation.ts に Kruchten ラベル必須化を組み込み、新規 ADR で自動付与

5.2 負の影響 (Bad)

  • メタデータ 1 行増加で起案者の負荷がわずかに増 (1 ADR あたり 2-3 分の判定時間)
  • 学術用語のため Jr の初期学習コスト 30 分が発生
  • 1 ADR が 3 分類すべて該当する場合の影響範囲記述が冗長化

5.3 中立・トレードオフ (Neutral / Trade-offs)

  • 運用上の罠:
    • 「とりあえず全部該当」と書かれて形骸化 → Pipeline scoring node で 3 該当時は 5.1/5.2/5.3 全節必須化
    • 起案者が 3 分類を誤分類 → README の判定フローチャートで Q1-Q3 順次判定
    • Pipeline Parallel Review 3 モデル間のラベル分類不一致 → Consistency Gate に整合性チェック追加

完了条件 (定量メトリクス)

  1. テンプレートに Kruchten Type フィールド存在: grep "Kruchten Type" docs/adr/templates/template.md → match
  2. README に 3 分類ガイド存在: grep -cE "Ontocrises|Diacrises|Pericrises" docs/adr/README.md → >= 3
  3. README 一覧表に Kruchten 列追加済 (空欄ゼロ)
  4. Pipeline 新規 ADR で Kruchten ラベル自動付与: 次回 ADR メタデータに Kruchten Type 行存在
  5. 既存 ADR-0001〜0029 本文不変: git diff main..HEAD -- 'docs/adr/00[0-2][0-9]-*' → 0 byte
  6. CI markdown-link-check PASS

撤退条件 (Rollback Plan)

判定指標閾値判定タイミング対応
Kruchten ラベル誤分類率6 ヶ月後 50% 超6 ヶ月後 Review Afterラベル必須化解除、README ガイドのみ残す
Jr 学習コスト評価1on1 で × 評価 2 ヶ月連続Jr 入社後の月次 1on13 分類を Existence / Other の 2 分類に簡略化
Pipeline 自動付与失敗率20% 超月次 Pipeline ログ集計独立 Kruchten ラベリング node 分離
投資回収未達 (Policy Alignment 指摘事項 #2)6 ヶ月後の実回収額 < 投資額 × 0.5 (実差し戻し削減 + 実検索時間削減の合算が ¥10,000 未満)6 ヶ月後 Review After (2026-11-13)本 ADR の必須化を解除、README ガイドのみ残し任意運用へ縮退
3 LLM ラベル不一致頻発Pipeline ログで「過半数不一致 → 起案者裁定」が月 3 件超月次 Pipeline ログ集計起案者が input で必ず明示する運用に切替 (Pipeline 自動付与をオフ)

誤分類率の測定方法 (Claude #4 指摘への対応): サンプリング方式で運用。月次で新規 ADR 3 本を起案者本人 (主観) + Pipeline LLM (客観) の 2 者で独立にラベル付け、不一致を「誤分類疑い」としてカウント。閾値判定は 3 ヶ月累計 9 本のうち不一致が 5 本 (≈ 50%) 超で発火。単独 Decider 体制の限界として「自己採点による過小評価リスク」は受容し、6 ヶ月後 Review After で Jr 入社後の第三者検証 (Jr が独立に分類した結果との一致率) で精度確認。

長期影響

6 ヶ月後の負債化リスク:

  1. Kruchten 用語日本語訳の揺れ → glossary 整備
  2. 既存 30 ADR 索引と本文の 2 重メンテ → back-link 自動生成検討
  3. 業界が他分類軸に移行した場合の移行コスト

観測指標 (月次):

  • ADR 索引化率: 目標 100%
  • 起案前関連 ADR 検索の到達率: 目標 100%
  • Consistency Gate 差し戻し率: 目標 0%
  • Jr ADR 読解時間: 目標 < 1 分/本 (ラベル即視)

Review After:

  • 1 ヶ月後 (2026-06-13): 新規 ADR 1-2 本で運用感確認
  • 3 ヶ月後 (2026-08-13): 過去 ADR 索引の利用率測定 (検索ユースケース実走)
  • 6 ヶ月後 (2026-11-13): Jr 入社後の学習コスト定性ヒアリング

Confirmation (準拠確認 / Fitness Function)

本セクションは ADR-0036 (Accepted 2026-05-14) で遡及追加された。ADR-0031 パターン (業界標準準拠メタデータ後付け = 誤字修正範疇) に準拠する遡及で本文の意思決定内容は不変。

  • 検証手段: scripts/adr-lint.mjs の規約チェック + 手動レビュー
  • 実行頻度: PR ごと
  • 違反時の対応: 自動 fail

参照 (References)

  • 関連 ADR: ADR-0023 (構造業界標準化 Nygard/MADR 準拠), ADR-0024 (§1.1-1.5/§5.1-5.3 サブ見出し正式採用), ADR-0029 (Consistency Gate 実例), ADR-0001 (SSoT Invoice - Existence 例), ADR-0007 (Gemini OCR - Executive 例), ADR-0011 (DTO Header-based - Property 例), ADR-0017 (Bank Filter - Property 例), ADR-0019 (LangGraph - Executive 例), ADR-0021 (UC Slice - Existence 例)
  • 関連 PR/Issue: PR #660 (3 桁→4 桁番号統一), RQ-041 (検索ツール導入評価)
  • 外部資料:
    • Philippe Kruchten (2004) "An Ontology of Architectural Design Decisions"
    • Capilla et al. (2016) "10 years of Software Architecture Knowledge Management: Practice and Future"
    • ISO/IEC/IEEE 42010
    • CLAUDE.md L92 (イミュータブル原則)