この広告は、90日以上更新していないブログに表示しています。
2022年3月刊行、ITエンジニア本大賞2023にもノミネートされた良著と名高い一冊。今回も翻訳は島田浩二さんです。
ソフトウェアアーキテクトやテックリードに(たぶん)近い位置にいる身としてもこれはいつか読まねば!と思っていたのですが、オライリーの2023年カレンダーと一緒に物理本で買ってきてじっくり読みました。以下、各章ごとに読書記録や感想など。

序文で「公理を疑え」、過去の時代の前提も疑ってかかるのがアーキテクトの仕事だ、今の時代は「変化」への対応こそが設計上の重要事項だ...と述べつつ、アーキテクチャを巡る旅が始まります。
どどーんと出てくる第一法則にやっぱりこれなのか~!と思いつつ、順に詳細に踏み込んでいきます。他の章もそうですが過去の歴史上の経緯の話なんかもあちこちに出てきて、このへんも参考になりますね。
アーキテクトらしく考え、物事をアーキテクチャの観点で見ていくアーキテクチャ思考の章。
この「知識のピラミッド」の図はよく可視化されていて、なるほど...となりました。アーキテクティングとコーディングのバランスをどう取るかの話で、アーキテクトになってもコードを書くべきだ!という主張には作者さんたちの固い信念を感じます。
重要だけど定義があいまいなモジュールについての章。
なかなか難しい数式が出てくるのですが、学術的にはいろいろ調査されているのが分かります。
(-ility)」と呼ぶアーキテクチャ特性周りや用語は様々な会社で独自の言葉で定義したりして混乱を招いている...というコラムがあります。僕の会社でも探すと確かにこのへんいろいろ資料があるのですが、独自定義けっこうありそうです。
コラムでこのトレードオフ分析が大事、また開発に関わる面々と一緒に協力しあうのも重要とあり、怠ると「象牙の塔のアーキテクトアンチパターン」に繋がるとのこと...確かに実際の開発に関わらないエライ人の小難しい机上の空論ではダメなわけですね。
JUnitから触発されたArchUnitがある。循環的複雑度は「サイクロマティック複雑度」ともいい、むかーしEclipseかなんかで自分も試した記憶があります。VSCodeでC#用の拡張機能で作ったという方もおられますね。
難しい話なのですが本書II部の各アーキテクチャスタイルでもこのアーキテクチャ量子は数字で掲載され、モノリスなら1、マイクロサービスなら1以上~という感じになっています。アーキテクチャ図の大まかな四角の数みたいな感じでしょうか。
最上位の分割が2つあって...
「コンウェイの法則」:システムを設計する組織は、そのコミュニケーション構造をそっくり真似た構造の設計を生み出してしまう。
Naked Objects が昔あった。その後.NET版のNaked Objects、Java版はApache Isisに受け継がれた。Ruby on Railsを始めとするFW群のスキャフォールディング機能もこの系譜。 DBからUIに単純にマッピングするだけならアーキテクチャは不要で、これらのフレームワークで十分である。 調べたところこのNaked Objectsが話題になったのは2000年代後半でした。その後Java版のApache Isisがリリースされたのが2013年、この頃はもうJava全盛期は終わっておりあまり話題にならなかった感じですね。
Railsがスキャフォールディング機能を使って少ないコマンド操作で爆速でアプリが作れる!と話題になったのが20000年代後半から。そのあたりの歴史的背景にも触れているのがありがたいです。

と、本書ではスタイルの中にパターンを含む意味づけですが、スタイル≒パターンで同じ意味で使われることも多い...として、いくつかのアーキテクチャスタイルを星取表のようなアーキテクチャ特性の評価、使いどころなどを述べながら論じていきます。本書の中核ですね。第I部の途中が難しく感じた方でも、この第II部は図を元に読み解いていけば復活できるかと思います。
(Big Ball of Mud):アーキテクチャ構造不在の行き当たりばったりなダメなアンチパターン。8つの誤信の形は具体的で、確かにこのへん信じがちだなあと思います。
コラムではかつてJava言語の設計者はすべてが3層アーキテクチャになることを見込んで、Javaオブジェクトをネットワーク上も移動できるようにしたSerializationの仕組みを組み込んで今日でも残っているが、もう無駄になっている...という話は時代の変遷を感じます。「設計はシンプルに」はいつでも大事ですね。
よく見る、僕も仕事でよく使ってきたレイヤードアーキでした。層をうまく分離していれば、例えばJavaのJSF(ゼロ年代にStrutsの後に流行ると言われて結局流行らなかったWebフレームワーク)で作っていた画面を後からReactに変えたりもできる...と書いてあったりして、さすが2020年代の本だなと時代を感じます。
|で結ぶ例が有名。Apache Kafka がこのアーキの代表例で、データ処理を各フィルタで行っている。Unixコマンドを習い始めた頃におおーと思ったあれでした。コストやシンプルさでは高い評価の一方、弾力性やスケーラビリティが最低評価なあたりが、まだクラウドがなかった20世紀に生まれた考え方だなあと思います。
Eclipseのプラグインが良い例。プラグインとはネットワークをまたいでRESTで通信したり、プラグインごとに別のデータストアを持ったりとバリエーションがいくつかある。「カーネル」と聞くとUnix/LinuxのOSのカーネルなんかをつい連想して難しそうですが、そんなことはありませんでした。Webアプリケーションではあまり見ないアーキテクチャですが、変更容易性を保ったまま機能をうまく制御できそうです。
ここまでがモノリシックアーキテクチャ、ここから先が分散アーキテクチャです。
なおこの分野の書籍としてこちらも日本のエンジニア界でも話題になったUncle Bobの『Clean Architecture』。この本もボブおぢさんの主張が強くて面白いのですが、この本の最後のほうで紹介されている「The Clean Architecture」、その前身となる「オニオンアーキテクチャ」は本書には登場せず。
まあクリーンアーキテクチャは明確なアーキテクチャというよりはコンセプト的なものなので他と抽象度が違ったのかなと思います。このあたりは、こちらも面白い書籍『ちょうぜつソフトウェア設計入門』にも詳しいです。
「The Clean Architecture」自体はモノリシックか分散かでいえばモノリシックアーキテクチャ。レイヤードアーキテクチャを変化させて進化させたような形でしょうか。
『Clean Architecture』という本の中だとアーキテクチャ「パターン」という呼ばれ方をしています。本書『ソフトウェアアーキテクチャの基礎』の分類方法ではアーキテクチャ「パターン」よりはアーキテクチャ「スタイル」の範疇に入るひとつですかね...このへんやっぱり明確な切り分けはないようです。
実例の詳しい解説もあり参考になります。読めば読むほど、やらなくても良いのに無理してマイクロサービスに分割して苦労するより、こちらのサービスベーアーキのほうが使い勝手が良さそうという気がします。
なお書籍『モノリスからマイクロサービスへ』などにも登場する、将来的なマイクロサービス分割に備えたやり方として「モジュラーモノリス」(Moduler Monolith)があります。本書でもアーキテクチャスタイル一覧には出てこないのですが8章で言及されています。似ていて微妙に違うのですが、違うのは以下になるようだと理解しました。
サービスベースアーキテクチャの派生形スタイルとでも考えればよさそうです。
クラウドの例だとAWSのAmazon SQSがまさにこれですね。この14章は図や実例がかなり詳しく書いてあります。
弾力性を活かしてユーザー数が急増する要件に活用する例として、コンサートチケットの販売、オンラインのオークションシステムが載っており、あっこれAWS認定の設問でよく出るシチュエーションだ!と思い当たったりしました。
現実的にはほぼクラウド上で実現するのでしょうが、「スペースベースアーキテクチャ」という名前がちゃんとあったのですね。
章タイトルは「オーケストレーション駆動サービス指向アーキテクチャ」なのですが文中では「サービス指向アーキテクチャ」の言葉が普通に使われており、イコールなのかな? 含まれる形なのかな?というがちょっと分かりませんでした。
ワタクシが2000年代にJavaエンジニアとして活動していた頃に流行ると言われて難しい図が紹介されていて結局廃れてしまったService Oriented Architecture、マイクロサービスの祖先になったともいわれているやつですね。時代が移り変わり新しい要素が出てきて、その結果無用になってしまったこうした過去のアーキテクチャも紹介されているのはありがたいです。
(Bounded Context)」の考え方を物理的にモデル化。「マイクロフロントエンド」はオライリー本でも1つ出ていますね。
分散トランザクションのサーガパターンについては、『マイクロサービスパターン』というかなりがっつりした本で詳しく述べられています。
難しい本で僕も時間をかけて読んだのですが、読めば読むほど、エッここまで複雑にして大変な思いして分散トランザクションてやらなきゃいけないの...?という感想を持ちました。(笑)
本書では分散トランザクションはやめようとはっきり書いてあって、ああやっぱりそうなんだなとチョット安心しました。"マイクロ"のワードに惑わされがちですが、実際にはマイクロサービスの個数は数個程度で収まるシステムもあるのでしょうね。
アーキテクチャスタイル群は一通り説明し終わり、どう選んでいくかの章。
実際に選んでみた例も解説されています。

ソフトウェアアーキテクトとして活動してくための、割とヒューマンスキル寄りの事柄を語った第3部。こちらも名著の『Design It!』と同じようなことも語られており、仕事全般に役立つお話となっています。
(ADR)がある。タイトル、ステータス、コンテキスト、決定、影響、コンプライアンス(決定遵守をどうチェックするかなど)を書いていく。このADRというフォーマットは書籍『Design It!』でも後半で紹介されています。日本ではあまり聞かない気がしますが(表に出てこないだけ?)アメリカでは一般的なのでしょうか。
最後にありそうなシステムを元に実例が載っていて、RDBを分割して片方が止まってももう片方の機能に影響がないように、そしてRESTで通信していたところを一部だけキュー形式に...というリスク軽減がなされています。これは分かりやすいですね。
人に説明する時のことを扱った何気にお役立ちの章です。
ArchiMateというモデリング言語がある。点線が非同期通信というのは、確かに言われてみると書籍に出てくるアーキテクチャ図はそうなっていることが多いような...!ArchiMateというものは日本ですとあまり聞かない気がしますが、どれぐらい使われているのでしょうね。
ここで3つのパーソナリティにいかにもそれっぽいiStockPhotoの写真が添えられていて、なるほどなあと思います。アームチェアは探偵ならいいけどアーキテクトがそれではダメなんですね。
チームを助けリードしていく役割はマネージャーやPdMに任せときゃいいのでは?という意見には本書は強く反対していて、開発チームと共にあれ!という強い想いを感じます。
外向け、内側向けのコミュニケーションの章。
一方的に指図するのではなく、頼むスタンス。アーキテクト自身も人を助ける。特定の手法や技術について話すミーティングも有効。
会議を減らすテクニック。参加を課されたミーティングはなぜ自分が必要なのか尋ねる。アジェンダを事前に確認する。
最後にルーズベルト大統領の名言、成功の方程式の中で最も重要な成分は人とうまくやっていく方法を知ることだ...が身に染みます! このへん突き詰めていくとやはり技術でなく人の問題なんだなあと思います。
書いてあることでは、握手のスキルなんかは欧米特有のもので日本の文化だとまた違うと思いますが、かなり頷ける内容です。
最後にふたたび...アーキテクチャには正解も間違いもなく、ただトレードオフがある。常に学び、練習し、アーキテクティングしよう!
世の中皆さん学習時間の確保には苦労されているかと思いますが、僕も朝活で読書の時間を取ったりしています。本書でも特に朝がオススメされていて、ここは合ってた! と思いました。最後にアーキテクティングの真理が再び示されて、アーキテクティングの基礎を巡る旅は終了です。最後には自分の理解を評価できるチェックリストもついています。
400ページを超える大ボリュームですが体系的に一通り、2020年代のモダンな視点、工学的な視点で記してあり、過去の歴史的経緯やコラムも豊富です。このへんの話をするにあたっての共通認識が持てる教科書的な本としても役立つでしょう。
翻訳の島田浩二さんのブログ記事が非常に的を得ているのですが、結局トレードオフなんですよね。実際の細かなコードよりも広く上位の、このへんの抽象領域の本を読むとだいたい、唯一の正解がない世界であることが書いてあります。本書でも同じで、最善はないかもしれないが最悪を避けた選択をしていくことが大事とあります。正解に振り回されたりかざしたりしないようにしないとなあと思いました。

『Design It!』も同じ島田浩二さん訳、同じくアーキテクティングの領域を広く論じています。重複しているようなところ、微妙に違うところもありますがなにせ正解のない領域です、両方読んで大いに役立つと思います。
なおこの本ではアーキテクチャの「パターン」としてレイヤードやサービスオリエンテッドアーキテクチャ(SOA)などなど...が解説されていて、このへん海外でも明確には定まっていないようですね。本書『ソフトウェアアーキテクチャの基礎』での、アーキの種類が「アーキテクチャスタイル」そしてその中でのより狭い領域を扱うのが「アーキテクチャパターン」という分類方法のほうが分かりやすいような気がします。
『ソフトウェアアーキテクチャ・ハードパーツ』も同じ島田浩二さん訳、2022年10月刊行。こちらは本書『ソフトウェアアーキテクチャの基礎』に収まらなかった分散アーキテクチャの諸々を解説した、続編のような本になっています。こちらもITエンジニア本大賞2023の一覧に載っていますね。
本書の17章 マイクロサービスアーキテクチャで言及されている、フロントエンド側もマイクロサービスと同じように分割していこう...という「マイクロフロントエンド」の考え方を解説したのが同名の『マイクロフロントエンド』。こちらも2022年10月刊行です。
そして世の中的にかなり早い時期にマイクロサービスを解説していた2016年2月の『マイクロサービスアーキテクチャ』も『マイクロサービスアーキテクチャ 第2版』として新しくなりました。2022年12月刊行。表紙の蜂の巣もカラーになってパワーアップ、ページ数も344→664とほとんど倍近くに大幅パワーアップ!
id:iwasiman引退した元TRPGゲーマー。COBOLでもなくPL/Iの金融系レガシー紙駆動開発から脱出→国産メーカー系総合ITベンダーのITエンジニア。所謂SIerのSEだけど仕事はほぼソフトウェアエンジニア/ソフトウェアアーキテクトとして、Web開発でコードを書いたり技術を追ったり時々イベントに行ったり、楽しいエンジニアリングを目指しています。Views are my own.
お気軽にどうぞ~
リンク集:https://lit.link/iwasiman
AIイラスト関連の活動はこちら↓
https://www.chichi-pui.com/users/iwasiman/
https://pixiv.me/iwasiman
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。