PROMARI JOURNAL

ADRに残すのは結論より、捨てた案と制約

作成: / 公開: / 内容更新:

執筆:tamito0201 / 掲載・運営:プロマリ

丸い共有ボタンの裏側を掘る連載の第3回。設計の決定記録(ADR)に何を書けば後から役に立つのかを、このプラグインで実際に書いた2件の記録と図12点で読み解きます。厚く書くべきなのは結論ではなく、捨てた案と、判断を縛った制約です。

PASS IT ON

ひとつの発見を、次の会話へ。

ADRは、5つの欄を持つ短い文書

ADRの形を広めたのは、Michael Nygard が2011年に書いた短い記事です。そこでは、1つの判断を5つの欄で書くことを勧めています。ADRという言葉を、このページで改めて押さえておきましょう。

図2-1 ADRは、5つの欄を持つ短い文書
図2-1 ADRは、5つの欄を持つ短い文書。説明(Nygard の形式)。1つの文書に、1つの重要な判断だけを書きます。図2-1 ADRは、5つの欄を持つ短い文書。説明(Nygard の形式)。1つの文書に、1つの重要な判断だけを書きます。

題名は、判断を短い名詞句で書きます。背景には、そのとき働いていた力(要求、制約、事情)を、意見ではなく事実として書きます。決定は「〜にする」という能動の文で言い切ります。状態は、提案・採用・廃止・置き換え済みのどれか。結果には、決めたあとに起きることを書きます。Nygard は、ここに良いことだけでなく悪いことも書くよう念を押しています。

このプラグインでは、この5つの欄に、MADRというひな形の「判断の決め手」と「検討した選択肢」を足し、さらに「見直す条件」の欄を置きました。実際にリポジトリへ置いているひな形はこれです。

Markdowndocs/adr/README.md(ひな形の部分)
# ADR-NNNN: <判断を短い名詞句で>

- 状態: 提案 / 採用 / 廃止 / 置き換え済み(→ ADR-NNNN)
- 記録日: YYYY-MM-DD

## 背景
いま何に困っていて、どんな力(要求・制約・事情)が働いているか。事実だけを書く。

## 判断の決め手
- 目的:
- 制約:

## 検討した選択肢
1. <案>:利点/欠点(捨てた理由)

## 決定
「〜にする」と能動の文で書く。

## 結果
良いことも悪いことも、決定のあとに生じる状況をすべて書く。

## 見直す条件
どの前提が変わったら、この判断を見直すか。

1ファイルに書くのは、1つの重要な判断だけです。いくつもの判断を1つの文書にまとめると、どれか1つを覆したとき、文書全体の扱いに困るからです。短く、1件ずつ。これがADRのいちばん大事な約束です。

結論より、捨てた案と制約を厚く書く

では、この欄のうち、どこに力を入れて書けばよいのでしょうか。1件目の記録(ADR-0001)の欄ごとに、書いた量の目安を横棒で並べてみました。

図2.1-1 結論より、捨てた案と制約を厚く書く
図2.1-1 結論より、捨てた案と制約を厚く書く。考え方(MADR の欄を足した形)。結論は1行で足ります。厚く書くのは、捨てた案と、判断を縛った制約です。図2.1-1 結論より、捨てた案と制約を厚く書く。考え方(MADR の欄を足した形)。結論は1行で足ります。厚く書くのは、捨てた案と、判断を縛った制約です。

決定の欄は、たった1〜2行です。共有欄を独自の要素として作る。それだけです。結論は、実はコードを読めば分かります。一方で、何を比べ、何を捨て、どんな制約に縛られていたかは、コードのどこにも残りません。残るのは、選ばれた案だけだからです。結論は1行で足り、厚く書くのは捨てた案と制約です。設計の判断はいつもトレードオフの上にあるので、何を手放したかを書かないと、判断の半分しか残らないことになります。

捨てた案の記録が、同じ議論のやり直しを止める

捨てた案を残すと、どんな場面で役に立つのでしょうか。たとえば、新しく加わった人が「共有ボタンはReactの部品で作り直したほうが書きやすいのでは?」と提案したとします。もっともな提案です。

図2.2-1 捨てた案の記録が、同じ議論のやり直しを止める
図2.2-1 捨てた案の記録が、同じ議論のやり直しを止める。説明例。捨てた理由が残っていれば、「前提は変わったか」から話を始められます。図2.2-1 捨てた案の記録が、同じ議論のやり直しを止める。説明例。捨てた理由が残っていれば、「前提は変わったか」から話を始められます。

記録が無ければ、Reactの利点と欠点を、一から話し合うことになります。記録があれば、ADR-0001 の「検討した選択肢」を開くだけで、Reactの部品がすでに比べられ、「設置する側にReactの読み込みを求め、静的なHTMLへそのまま置けない」という理由で捨てられたことが分かります。あとは「その前提は、今も同じか」を確かめるだけです。同じなら、議論はそこで閉じられます。変わっていたら、見直す条件にあたるので、記録を開き直す番です。

ここで大事なのは、記録が提案を門前払いするための道具ではないことです。捨てた理由が残っていれば、議論を「前提は変わったか」から始められる。ゼロからではなく、前回の続きから話せるのです。

考えてみる:捨てた案まで書くと、ADRが長くなりすぎない?

長くなるのは、1件ずつの案に理由を添える部分だけです。このプラグインのADRでは、捨てた案1つにつき2〜3行で、「利点」「欠点」「なぜ捨てたか」を書いています。長い説明は要りません。「目的を満たさないので捨てた」「制約に反するので捨てた」と、判断の決め手のどれにあたるかを指せれば十分です。決め手と選択肢を並べて書くと、理由の多くは「決め手の何番に反する」と短く言えるようになります。

COMMENTS
コメント…

このページ(2ページ目)の感想・質問・設計へのコメント

PASS IT ON

この気づきを、誰かにも。

この記事を書いた人

Takaomi Murasaki

Promari SNS Shareの開発を通して、Webの仕組みや設計の選び方を紹介しています。動く実装と、その判断に至るまでを記事に残しています。

公開記事 4 件

プロフィールを見る
THANK YOU FOR READING.すべての記事へ ↗

FROM INSIGHT TO IMPACT

「できたらいいな」を、
動く仕組みに。

記事で見つけたヒントを、あなたの事業へ。
新しいサービスも、手間のかかる業務も。
いまの課題から、つくるべきものを一緒に考えます。

開発・AI・研修の実績を見る

まだ、仕様書はいりません。

「何から始める?」から、ご一緒に。

課題がまとまっていなくても大丈夫。テーマを選ぶと相談文をご用意します。
連絡先の必須入力は、お名前とメールアドレスだけ。

まずは課題の整理から相談する

ご相談後の流れ

  1. 01 内容を確認
  2. 02 メールでご連絡
  3. 03 課題・進め方をご相談
送信だけで契約やお申込みが確定することはありません。