コンテンツにスキップ

決定を ADR に書く

議論で決まった内容を、あとから「なぜそう決めたか」を読める形で ADR(Architecture Decision Record、設計の決定の記録)に書けます。手順が終わると、ADR が1本、置き場所にある状態になります。ADR には、背景、決定、理由、影響が書かれます。Flutter との差異なら、差異の記録に必要な5項目も書かれます。

決定の理由が議論のコメントにしかないと、あとから「なぜこうなっているか」を追えません。同じ議論も繰り返されます。ADR は、その理由を repo に残すための記録です。ADR の正本は repo に置きます。

手順は5つです。

  1. ADR に書く決定かを確かめる
  2. 番号と置き場所を決める
  3. 背景・決定・理由・影響を書く
  4. Flutter との差異なら、5項目を足す
  5. PR で出す

議論の結論が出ていない場合は、先に 提案を書く へ戻ってください。

次の2つがそろっていれば、手順1から始められます。

手順1: ADR に書く決定かを確かめる

Section titled “手順1: ADR に書く決定かを確かめる”

次のような決定は、ADR に書きます。

  • 設計判断
  • 依存やプロジェクト構成の決定
  • Flutter との差異
  • public API の方針

typo の修正のように、設計判断のない変更は書きません。迷ったら書いてください。Issue が必須な変更(CONTRIBUTING.md の「Issue が必須な変更」)のうち、設計判断を伴うものが目安です。

できた? 「書く」「書かない」のどちらかを、理由とあわせて言えます。書くなら手順2へ進みます。

手順2: 番号と置き場所を決める

Section titled “手順2: 番号と置き場所を決める”

ADR の置き場所と番号の付け方は、まだ決まっていません。決まるまでは、ADR を足す前に、議論の Issue で置き場所をたずねてください。

今ある Flutter との差異は、差異の台帳 known-divergences.md に記録されています。入口は 決定の記録(ADR)の一覧 です。

できた? 置き場所と番号が、Issue で確認できています。

手順3: 背景・決定・理由・影響を書く

Section titled “手順3: 背景・決定・理由・影響を書く”

ADR には、次の4つの欄を書きます。

欄 書くこと
背景 決める前の状況
決定 選んだもの
理由 選ばなかった案と、選んだ理由
影響 決めたことで生じる制約や代償

議論の記録を見ながら、欄ごとに書きます。

できた? 理由の欄に、実際に検討した案と選んだ理由が書かれています。別の案を検討していない場合は、その旨が書かれています。

手順4: Flutter との差異なら、5項目を足す

Section titled “手順4: Flutter との差異なら、5項目を足す”

Flutter と違う設計の決定には、記録必須の5項目を書きます。5項目の内容は、REVIEW.md の「6. Flutter parity」にあります。このページには写しません。5項目を背景・決定・理由・影響のどの欄に書くかは、決めていません。

差異を固定するテストがない差異は、次の移植で戻されます。テストの名前を必ず書いてください。利用者に見える差異は、利用者向けの docs にも書きます。

差異の台帳 known-divergences.md に同じ差異のエントリがあるときは、重複させないでください。どちらを正にするかを、Issue でオーナーに確かめます。台帳を ADR にまとめる移行は、まだ決まっていません。

できた? 5項目がすべて埋まり、テストが実在します。

PR には ADR の追加だけを入れます。関連する Issue は、PR 本文の「Related Issue」欄に #NN の形で結び付けます。この PR だけで Issue の完了条件を満たすときは、Closes #NN と書きます。出したあとの指摘への対応は レビューの指摘を受けて直す に進んでください。

「なぜこう作ったのか」を調べるときは、ADR の4つの欄を上から読みます。背景で当時の状況を、決定で選んだものを、理由で選ばなかった案を確かめます。ADR の置き場所と番号の付け方は、決まっていません。Flutter との差異は、差異の台帳 known-divergences.md で探します。入口は 決定の記録(ADR)の一覧 にあります。

何が決定か分からない、または決定がまだない

提案を書く に戻り、議論の結論を Issue にまとめてください。