PROMARI JOURNAL

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

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

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

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

PASS IT ON

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

こんにちは、プロマリの紫です。連載「丸いボタンの裏側」の第3回です。前回は、共有先が増えても触らないコードを先に決め、共有先の違いを名札カード(共有先ごとの TOML ファイル)へ寄せた設計をたどりました。その最後に「実際の決定記録を題材に、記録の残し方を見ていきます」と予告しました。今回はその約束を果たす回です。テーマは設計の記録に残すべきなのは、結論よりも、捨てた案と制約であるということ。このプラグインで実際に書いた2件の決定記録を、1行ずつ読んでいきます。

点線の付いた用語は、その言葉を押すと詳しい説明が開きます。意味、身近なたとえ、この実装での使い方を順に読めます。キーボードではTabで用語へ移動し、EnterまたはSpaceで開き、Escapeで本文へ戻れます。各ページで最初に出る用語から参照できるようにしました。

この記事は連載「丸いボタンの裏側」の第3回(1.3)です。前回の1.2「共有先が増えても触らないコードを決める」で、名札カードへ寄せた設計を先に読むと、今回の2件目の記録がぐっと読みやすくなります。連載全体の地図は、本編5ページ目の連載の目次からどうぞ。

結論だけのメモは、理由を運ばない

少し想像してみてください。あなたはこのプラグインの開発に、途中から加わったとします。コードを読んでいると、共有先ごとにPHPのクラスが1つずつ並んでいます。どうしてPHPなのだろう、と思って資料を探すと、見つかったのは「共有先はPHPのクラスで書く」という1行のメモだけでした。

図1-1 結論だけのメモは、理由を運ばない
図1-1 結論だけのメモは、理由を運ばない。説明例(実際の経緯をもとにした例)。結論だけでは、いつその判断を見直すべきかが分かりません。図1-1 結論だけのメモは、理由を運ばない。説明例(実際の経緯をもとにした例)。結論だけでは、いつその判断を見直すべきかが分かりません。

このメモは、間違ったことは何も言っていません。ただ、なぜそう決めたのかを運んでいないのです。理由が分からないと、その判断をいつ見直してよいのかも分かりません。変えてよいのか、変えると何かが壊れるのか。確かめる手がかりがないので、たいていの人は「触らないでおこう」と判断します。こうして、理由の分からない形が残り続けます。

設計の判断を、理由ごと1件ずつ残しておく文書があります。それがADRです。今回は、この短い文書に何を書けば後から役に立つのかを、実際の記録を使って確かめていきます。

理由は、状況が変わると見えなくなる

先ほどのメモは、たとえ話ではありません。このプラグインで実際に起きたことです。プラグインのCHANGELOGをさかのぼると、流れは次のようになっていました。

図1.1-1 理由は、状況が変わると見えなくなる
図1.1-1 理由は、状況が変わると見えなくなる。実際の経緯。理由が消えても、形は残り続けます。記録が無いと、それが名残だと気づけません。図1.1-1 理由は、状況が変わると見えなくなる。実際の経緯。理由が消えても、形は残り続けます。記録が無いと、それが名残だと気づけません。

はじめのころは、WordPressのPHPがボタンを描き、共有画面のURLも組み立てていました。この時期には、共有先をPHPのクラスで書くことに、はっきりした理由がありました。PHPが実際にそのクラスを使って、URLを作っていたからです。

その後、URLの組み立てをブラウザ側の1か所へ移しました。前回見た ShareDestination がそれです。すると、PHPのクラスは「どこへ何を送るか」を並べるだけの宣言に縮みました。WordPressは実行時にそのクラスを読み込まず、生成器が正規表現で文字を拾うだけになっていたのです。PHPで書く理由は、この時点で消えていました。けれど、理由がどこにも書かれていなかったので、誰もそれに気づきませんでした。

名残に気づいたのは、共有先の定義を見直していたときです。PHPとして正しい書き方(定数や文字列の連結)をしても、生成器だけが止まってしまう。実行されないので、PHPの型の検査も効いていない。そこで初めて「このクラスは、もう何のためにもなっていない」と分かり、共有先を名札カードで宣言する形へ直しました。理由が消えても、形は残り続ける。記録が無いと、それが名残だと気づくまでに時間がかかります。

考えてみる:どうして、理由が消えたときに誰も気づかなかったの?

理由が消えた瞬間には、何も壊れなかったからです。URLの組み立てをブラウザへ移した変更は、それ自体としては正しく動きました。PHPのクラスも、読まれなくなっただけで、エラーは出ません。壊れないものは、目に留まりません。もし当時「PHPで書くのは、PHPがURLを組み立てるから」と1行でも書いてあれば、組み立てを移した人がその行を読み、「この理由はもう無い」と気づけたはずです。記録は、壊れないまま古くなるものを見つけるための手がかりになります。

COMMENTS
コメント…

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

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 課題・進め方をご相談
送信だけで契約やお申込みが確定することはありません。