Magnolia Tech

いつもコードのことばかり考えている人のために。

「Design It!」を読んだ

副題にある通り「プログラマのためのアーキテクティング入門」ということで、どうやってシステムのアーキテクチャを設計していくか?という課題に対して向き合うための方法を示してくれる本です。

とはいえ、所謂アーキテクチャカタログ集ではないので、即効性の有る内容ではなく、ゼロベースでアーキテクチャを決めていくための思考のステップを示してくれる内容なので、具体的なアーキテクチャにつながる技術要素は、ここに示された内容を元に情報収集し、判断し、決めていくしかないですね。

第Ⅰ部 ソフトウェアアーキテクチャ入門
 1章 ソフトウェアアーキテクトになる
 2章 デザイン思考の基礎
第Ⅱ部 アーキテクチャ設計の基礎
 3章 デザイン戦略を立てる
 4章 ステークホルダーに共感する
 5章 アーキテクチャ上重要な要求を掘り下げる
 6章 アーキテクチャを選ぶ(君がアーキテクチャに選ばれる前に)
 7章 パターンで土台を作る
 8章 意味のあるモデルで複雑さを扱う
 9章 アーキテクチャデザインスタジオを開く
 10章 設計判断を可視化する
 11章 アーキテクチャを記述する
 12章 アーキテクチャに通知表をつける
 13章 チームのアーキテクト力を強める
第Ⅲ部 アーキテクトの道具箱
 14章 問題理解のアクティビティ
 15章 潜在的な解決策を探るアクティビティ
 16章 設計をタンジブルにするアクティビティ
 17章 設計の選択肢を評価するアクティビティ

特に1章から4章まではマインドセット的な内容も多く、アーキテクチャ設計のステップを知りたい人はまずは5章の「アーキテクチャ上重要な要求を掘り下げる」から読むと良いでしょう。「制約」や「品質特性」など、必須の重要キーワードが出てきます。更に6章〜7章がまさに具体的なアーキテクチャを決めていくステップになっているので、最初は5章〜7章までをじっくり読むことをお勧めします。

8章から13章は、それをより良くするための手順や、視点ですし、14章以降はより具体的な手法になっています。このあたりは必要に応じて拾い読みすると良いですね。

アーキテクチャをタンジブルにする

この本を通じて「アーキテクチャをタンジブルにする」という印象的なキーワードが出てきます。「タンジブル(tangible)」は”触れられるようにする”という意味ですが、必ずしもアーキテクチャを図示することを意味していません。

「2.1.4 アーキテクチャをタンジブルにする」には以下のように書かれています。

アーキテクチャを図に描く、アーキテクチャをコードの中で生き生きと表現する、構造や品質特性を体験できるようなプロトタイプを構築する、アーキテクチャの一部がどう機能するかを示す簡単なモデルを作成する、関連するメタファーを作成する、システムの制御フローの一部を身振りで伝える、などだ。

必ずしもドキュメンテーションだけが方法ではなく、色々な手段が有ることを示しているのが良いですね。16章にはそのための具体的な手法が紹介されています。

おわりに

繰り返しますが、この本はアーキテクチャカタログではないので、これを読めばすぐにアーキテクチャデザインができるわけではないですし、特定のアーキテクチャを想定したものでもないので、技術的な情報収集はゼロからやっていく必要が有ります。

しかし、いにしえの”LAMP”とか、”まずはRails”、という時代ではなくなり、色々な選択肢が無限に有る中、ゼロベースで考える場面が多くなってきた現代ではこのような”思考のガイドライン”がますます重要になってきたと思います。

すべてのアーキテクチャ上の決定を細部までこの本に合わせてやっていると、今度は時間が足りなくなるような気もしますが、アーキテクチャ上の重要な意思決定を行う際には、このような原理原則に立ち返る瞬間はきっと必要だと思いました。とりあえずアーキテクトを目指す人は、一度流し読みをしておいて、いざという時に立ち返れるようにしておくと強力な武器になるのではないでしょうか。

Design It! ―プログラマーのためのアーキテクティング入門

Design It! ―プログラマーのためのアーキテクティング入門

Design It!: From Programmer to Software Architect (The Pragmatic Programmers)

Design It!: From Programmer to Software Architect (The Pragmatic Programmers)