コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Architecture Decision Recordsという用語と事例についてざっくりまとめる

ADRの始まりや各社事例を整理しておきたいのでまとめる

Architecture Decision Records(ADR)とは

ADRについて記述されているadr.github.ioでは下記のように書かれている。

アーキテクチャ上の決定(Architectural Decision:AD)アーキテクチャ上重要な機能的または非機能的要件に対応する、正当な設計上の選択である。アーキテクチャ上の重要な要件(Architecturally Significant Requirements:ASR)はソフトウェアおよびハードウェアシステムのアーキテクチャと品質に測定可能な影響を与える要件である。ADR(Architectural Decision Record)は、1つのADとその根拠を記録するもので、プロジェクトで作成・維持されるADRの集合は、その決定ログを構成する。これらはすべてアーキテクチャナレッジマネジメント(Architectural Knowledge Management:AKM)のトピックに含まれるが、ADRの使用は設計やその他の決定(「あらゆる決定記録」)に拡張できる。

上記のように「アーキテクチャ上の決定に関して根拠を記録するもの」として紹介されている。また呼び方にはブレがあるが上記サイトでは Architectural Decision に連動して Architectural Decision Record と呼ばれているが意味合いとしては同じ様子。

提唱されたブログ

書籍「ソフトウェアアーキテクチャの基礎」によるとMichael Nygard氏が「Documenting Architecture Decisions」にて提唱した方法論がはじまりとされています。

このPostそのものがADRのフォーマットを体現した状態での内容になっている。提唱されているフォーマットは以下の5つの要素を持つ.

  • Title(タイトル)
  • Context(コンテキスト)
  • Decision(決定)
  • Status(ステータス)
  • Consequences(結果/影響)

各要素と記述内容は以下

要素名 意味
Title(タイトル) 決定に対してのタイトル、例では「ADR:Ruby on Rails3.0.10へのデプロイ」など通し番号とドキュメントの端的な説明の文となっている
Context(コンテキスト) この決定に関しての前提となる事実など、決定に作用している予備情報を記述する
Decision(決定) 具体的に決定した内容を記述する。能動態の文章とするべきで「私達は◯◯します」と記述する。
Status(ステータス) このADR文章自体の取り扱い状況について記述する。例では「提案」「承認」「非推奨」「置換」の4つを持つ。「提案」がされ、合意形成がなされて同意を得られた場合は「承認」となり、その後別のADRに取ってかわわれた場合は廃止を意味する「非推奨」や他のADRに置き換えられた旨の「置換」のいずれかになる。
Consequences(結果/影響) この決定を適用したあとに対する結果や影響を記述する。例ではポジティブなものもネガティブなものも含めて結果を記述することが望まれている。

参考リンク

各社原典の内容を基軸にアレンジが加えられて運用がされている。事例なども含めてリンクをまとめる。

ADRそのものについて

ADRを運用してみての体験談