Upgrade to Pro — share decks privately, control downloads, hide ads and more …

日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード / Architect...

日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード / Architectural Decision Records

2023年7月27日「Developers Summit 2023 Summer」にて
「日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード」というタイトルで「ADR」について発表した資料です

Takahiro Uchiyama

July 27, 2023
Tweet

More Decks by Takahiro Uchiyama

Other Decks in Programming

Transcript

  1. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード Agenda | 00 01 02 03 04 About Me

    & Us アーキテクチャ・デシジョン・レコードとは スタディサプリとADRの出会い それからのスタディサプリとADR 運用を通して見えてきたもの 2
  2. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード こんにちは! • 内山 高広 / @highwide • スタディサプリでプロダクト基盤のWeb開発を行っている •

    前職でRails開発やエンジニアリングマネージャーを経験した後、現職では何 度かの異動を通してRails、React、node.js、GraphQL、Goなどの技術要素 を触っている • 休日はもっぱら3歳の子供と遊んでいる 4
  3. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード example ## タイトル 新規システムのアーキテクチャには CQRSを採用する ## コンテキスト 新規システムの性能要件を鑑みて Bobからの提案によってチームで議論した。

    ## 内容 新規システムのアーキテクチャには CQRSを採用する。Command側のデータストアはEvent Sourcingパ ターンを利用し、個々の Eventのスナップショットを形成する Viewを別途用意して、Query側のシステム はそれを参照する。 ## ステータス 承認済み ## 影響 現在のプロトタイプの実装はほぼ利用できないことが確定する。 10
  4. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード 当時の課題 • Ruby on Railsで書かれたモノリスなシステムから1つの機能をGoによるマイ クロサービスに移行させていた • 「自分たちで決めたはずの設計判断が、開発中十分に振り返れるほどは記 録できていない」ことに気づく

    • 「結果的にどうしたか」を記録していたとしても、「なぜそうしたのか」は失われ がち ◦ ex: 「なんで物理削除でもなく、削除フラグでもなく、Archivedテーブル による削除」を実装したんだっけ? 18
  5. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード • 開発者がサービスをプロダクションにリリースするにあたっては以下の運用 がされている ◦ コードを書く前にDesign Docを書く ◦ リリースする前にProduction Readiness

    Checklistを埋める • Production Readiness Checkにあたっては、当然「個々の意思決定の記 録」ではなく、体系的に網羅された情報のチェックが必要 • SREからすると、運用にあたってあとからサービス特性を確認する際は、 ADRよりもこれらのドキュメントの方が有用であることも多い 43 ADR以外の定着しているドキュメント例: Design Doc / Production Readiness Checklist
  6. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード ADRとはある種の"イベントソーシング" 56 意思決定 Event TABLE Create 意思決定#1 Update 意思決定#1

    Create 意思決定#2 Delete 意思決定#1 意思決定 TABLE 意思決定 #1 意思決定 #2 ステートソーシングなデータ 「データの現在の状態だけを格納する代わりに、追加専用ストアを使用して、そのデータに対し て実行された一連のすべてのアクションを記録 」するパターン https://learn.microsoft.com/ja-jp/azure/architecture/patterns/event-sourcing イベントソーシングなデータ Create Update Delete
  7. 日々の意思決定の積み重ねを記録するアーキテクチャ・デシジョン・レコード • ADR プロセス - AWS • アーキテクチャ決定レコードの概要 - Google

    Cloud • 実践ADR - kawasima • イベントソーシングパターン - Microsoft • npryce/adr-tools - GitHub • joelparkerhenderson/architecture-decision-record - GitHub • 「Design It!」(O'Reilly) • 「ソフトウェアアーキテクチャの基礎」 (O'Reilly) 62 参考資料