shine-Notes

ゆるふわ思考ダンプ

おそらくソフトウェアアーキテクトではない人間が「ソフトウェアアーキテクチャの基礎」を読んだ感想

という訳で、読書ノートである。書籍の紹介と自分のチラ裏ポエムを兼用する形でポストしていく。

www.oreilly.co.jp

サマリ

書籍の感想

3部24章。読んでいる途中で「これは本当に基礎なのか?」と思いつつ、読み終わってから「いや、確かに基礎だ」と思い直した。この場合の基礎というのは「簡単」「入門」からは少し遠い単語ベクトルであって、「実務を抽象化して理解し実践するための前提知識全部」という感じ。

「ソフトウェアアーキテクチャ」自体の定義が難しいことは本書でも語られている。その上で本書はⅢ部構成をとって、第Ⅰ部でソフトウェアアーキテクチャを考える上でのメタ的な基礎、第Ⅱ部では実際に存在するソフトウェアアーキテクチャのスタイル、第Ⅲ部ではソフトウェアアーキテクチャをソフトウェアアーキテクトとして決めていくためのテクニックが紹介されている。

当たり前だが「ソフトウェアアーキテクト」というロールは「ソフトウェアアーキテクチャの基礎」とは切っても切り離せない。本書は勿論ソフトウェアアーキテクトに対するガイドとしても書かれている。

面白かったポイント

いったん個人的な感想ポエムは後半に追いやり、読書ノート的に面白かったポイントを書き記していく。だいぶ絞ったが多くなってしまった。ここに書かれている内容に少しでも「お?」となるなら本書を読む価値はあるだろう。

  • (22.1)ソフトウェアアーキテクトの役割は、開発者のためのちょうどいい箱(制約の境界)を作ることである。
  • (1.2.1)アーキテクトに期待されている役割において重要なのは「ガイドする」ことだ。チームの技術的な選択を「指定」するのではなく「ガイド」しなければならない。

本当にそう。指定するだけでなくガイドする役割がないと形にならない。

  • (1.4)ソフトウェアアーキテクチャトレードオフが全てだ。そして「どうやって」よりも「なぜ」のほうが重要だ。
  • (19.3)ADR(Architechture Decision Records)を使ってアーキテクチャ決定の経緯(「なぜ」)を記録する。
  • (21.2.2)プレゼンテーションにおけるアンチパターン、蜂の巣にされた死体
  • (21.2.3)インフォデッキとプレゼンテーションは異なる。

ドキュメント系。最近「なぜ」を示すためのインフォデッキを意識的に作る事が増えたのだが、実際に効果を感じている。

  • (4.0)ドメインの機能に直接関連しないが満たさなければいけないアーキテクチャ特性(-ity)を見つけるのもソフトウェアアーキテクトの仕事。非機能要件とも呼ばれる。
  • (5.1)アーキテクチャ特性はドメインの関心ごとから導き出し、何が最も重要なのかを見極める必要がある。
  • (4.1.3)アーキテクチャ特性とはチームでユニークなものになりうる。「イタリアでつながる?」という問いかけの繰り返しからイタリア性(Italiality)というアーキテクチャ特性が筆者のチームには生まれたことが有る。

いわゆる非機能要件は暗黙的かつ優先度を付けるしか無いもの。わかる。

  • (3.2.5.3)動的なコナーセンスを静的なコナーセンスへリファクタしよう。静的なコナーセンスは解析ツールで改善できる。
  • (8.2.1)レイヤードアーキテクチャは、アーキテクチャの技術による最上位分割の例。ドメインによる分割が最上位になる場合もある。
  • (9.2.4)分散アーキテクチャを採用した時に忘れてはいけないこと。ネットワークは安全…ではない。

ノウハウ系。わかる。PaaSを組み合わせたようなアーキテクチャを組むようになってからネットワークを意識することが増えた。

  • (23.2.3)アーキテクトと開発者の会話。「〜すべきです」ではなく「〜はどうでした?」で主導権を渡す。
  • (2.5)アーキテクトが現場感を持ち続けるためのテクニック。プロダクションレベルのPoCコードを書く、技術的負債やアーキテクチャに関わるユーザーストーリーを引き受ける、バグ修正を引き受ける
  • (23.3)開発チームを軌道に乗せるためのテクニックの1つは、開発者が招集されたMTGに変わりに出席すること。

ソフトスキル系。わかる。それ故にソフトウェアアーキテクトは実装する機会が減っていく…

これは本当にそう。個人的には哲学とかの人文系と一緒で、コンテキストが無いと何故そうなったのかが理解しづらかったりする。

より個人的な感想

近年の自分はざっくり、小さなB2BプロダクトのPdMっぽい仕事をやっている。といいつつ何でもやるのでMVPを作ることも有るし「今回の構成ならDBはPaaSに任せるか、いやそもそもRDB要らないかな?」みたいな判断はやることがある。

そんな感じなのだが、実は自覚的にソフトウェアアーキテクチャを選択してきたことは少ない気がする。ある程度チーム内で実績のあるカタ(型)を基本にして「次はこれやってみるか」で時折新しいものに手を伸ばすことが多かった。なんならパッケージ製品をやっていた頃は、最初からある程度パッケージ側でアーキテクチャが決まっていて、表面化している非機能要件だけを拾ってすり合わせするような仕事も多かった。実はそういう現場も世の中には結構あるのではないかと思っている。

ソフトウェアアーキテクチャの選択に大して常に自覚的でいられるか

最近は幸い「顧客にこの機能を使ってもらうために、ここをこうして非同期にしたい」みたいな議論をすることが増えたので、本書の内容は自分が何を意識すべきなのか、を再認識できた。いっぽうで思い返してみればアーキテクチャの選択そのものは今までのキャリアでも何度も有った訳で、今までその選択に自覚的でなかったのかもしれない、というのも本書を読んだ気付きだった。