見出し画像

『アーキテクトの教科書』のまえがきのようなもの

2024年7月22日に、翔泳社さんから書籍『アーキテクトの教科書 価値を生むソフトウェアのアーキテクチャ構築』を出版します。
ECサイトの書籍情報には文字数の制限もあるため、いったいこれは何の本で、どんなことが書かれているのかといったことをnoteにまとめたいと思います。
そもそもおまえ誰よ?って話については、前の投稿を参照頂ければと思います。

なぜこの本を書いたか

20年以上IT業界で働いて、さまざまな経験を積んで、ようやく一人前のアーキテクト(と自称しても少なくとも怒られはしないだろうというレベル)になることができたのですが、ここに至る道は決して平坦でなかったと思います。
テクノロジーが多様化した現代では、日進月歩で現れては消える新しい技術の習得で、我々エンジニアは日々精一杯です。このような状況において、アーキテクトの主たる任務である「アーキテクティング」について、できるだけ効率的・効果的に体系的に学べることが必要だと感じています。「1万時間の法則」というものがあるように、時間をかけて経験を積むことはもちろん欠かせないのですが、どう学習を進めていけばいいか迷わぬよう、羅針盤となるようなものが必要ではないでしょうか。
さて、アーキテクチャに関する書籍や文献は世の中にたくさんありますが、入門書にあたるものは意外と少ないのものです。『Design It プログラマーのためのアーキテクティング入門』は間違いなく良書ですが、オライリー本らしくどこかアカデミックさもあり、開発者としてのある程度の前提知識が要求されるのも事実です。
昨年(2023年)、とある技術イベントで、アーキテクトの仕事とは何か、アーキテクティングとは何かというテーマで登壇しました。そのイベントをきっかけに、翔泳社さんから書籍化のオファーを頂いたのが本書の執筆のきっかけです。世の中に僕より優れたアーキテクトはごまんといますが、僕が書くことにどんな意義があるだろうかと考えた時に、「最初の一冊」として手元においてもらえるような本を作りたいと思いました。

本の構成

本書は、全6章で構成されています。

第1章 アーキテクトの仕事

ソフトウェアを顧客やユーザーへ素早く価値を届け、企業に競争優位をもたらすために、アーキテクチャがなぜ重要なのか、そしてそれを構築するアーキテクトとはどんな仕事をする職種なのかといった話を書いています。また、アーキテクトが備えるべき資質についても整理しました。

第2章 ソフトウェア設計

本書のメイントピックは、第3章と第4章で述べるアーキテクティングなのですが、その前に一章を割いてソフトウェア設計について語るのには意味があります。
筆者は、アーキテクチャ設計はソフトウェア設計の一部であって、クラス設計やコンポーネント設計のような細粒度、あるいは詳細度の高い設計作業の延長線上にあると考えています。良いクラス設計やコンポーネント設計をできないアーキテクトが、良いアーキテクチャ設計はできないと思いますし、アーキテクトになったからといって詳細レベルの設計をやめるわけではありません。
そういった意味で、ソフトウェア設計の基本的な考え方や原理原則というものはアーキテクティングの必須前提条件と言えます。この章では、設計の抽象レベルを整理した後、重要な設計原則であるSOLID原則を取り上げて解説しています。SOLID原則について学ぶならボブおじさんの『アジャイルソフトウェア開発の奥義 オブジェクト指向開発の真髄と匠の技』を読むのが正攻法でしょうが、初学者にこの分厚い本を読めと渡したら泣いてしまうかもしれないので、本書でわかりやすく説明しました。
ボブおじさん自身も述べているように、SOLID原則はコンポーネント設計やモジュール設計にも適用可能な考え方であり、オブジェクト指向設計にすら限定されません。SOLID原則の本質を理解し、抽象レベルを自由自在に切り替えて設計に向き合うことができれば、状況に応じた適切な設計判断が下せるようになるはずです。
その他、設計を行う際に意識するとよいポイントや、パターンについての話も書いています。

第3章 アーキテクチャの設計

第3章は、アーキテクティングの前半戦です。筆者は、アーキテクチャには四つの側面があると捉え、それぞれについて順番に解説をしています。
アーキテクチャの決定要因となるアーキテクチャドライバとは何なのか、どうやってそれらを収集して定義するのかといった話をした後、システムアーキテクチャ、アプリケーションアーキテクチャの選定方法について解説します。アーキテクチャの選定は毎回一から検討するのではなく、アーキテクチャスタイルを参考にして考えることになりますので、『ソフトウェアアーキテクチャの基礎―エンジニアリングに基づく体系的アプローチ』にカタログ化されているスタイルをいくつか取り上げて説明しています。本書では、ケーススタディを用いて、読者がなるべく具体的なイメージを掴めるように工夫しました。
その他、アーキテクチャの比較評価の実施方法や、文書化などについても取り上げています。

第4章 アーキテクチャの実装

第4章は、アーキテクティングの後半戦です。設計したアーキテクチャを、動作するソースコードへと変換し、ソフトウェアを実現するフェーズにおいてアーキテクトが担う作業を整理し、説明します。
ある程度の規模のシステムとなると、フレームワークやライブラリをそのまま利用するのではなくラップしてより使いやすくしたり、認証やセキュリティなどの共通機能群を取り揃えたりするレイヤー(アプリケーション基盤)が必要となってきます。本書では、ユースケース駆動でこのアプリケーション基盤を構築し、アーキテクチャを実装していくアプローチを説明します。
その他、標準化やドキュメント整備、構成管理やCI/CDなどのトピックを扱っています。

第5章 品質保証とテスト

狭義のアーキテクティングには含まれませんが、品質保証(QA)やテストは、高品質なソフトウェアを作るためにとても重要であり、アーキテクトが深く関与すべきという考えから、一章を割いて説明しました。
シフトレフトのアプローチにより、早い段階からソフトウェアの品質を作り込んでいくことの重要性を提示し、その実行にあたっては適切なテスト戦略を立てることが肝となるといった話を書いています。
そして、ユニットテスト、インテグレーションテスト、E2Eテストそれぞれのポイントを整理しました。
その他、パフォーマンステストの勘所などを書きました。

第6章 アーキテクトとしての学習と成長

アーキテクトには幅広い知識と経験が必要になるため、それらをどうやって身につけ、スキルアップしていくかはアーキテクトを目指すエンジニアに共通する課題です。
第6章では、アーキテクトの人材像を示した後、効果的に学習を進めるにはどうすればよいかをまとめました。また、筆者が自信を持ってお薦めする良書を九冊取り上げて紹介しています。

どのように活用してほしいか

本書は入門書という位置付けですので、なるべく幅広いトピックを取り扱うようにしました。広く扱うということは、一つ一つを詳細に掘り下げていくことは難しくなります。ですので、本書を読めばアーキテクトとしての仕事を全てこなせるようになるというわけではありません。ですが、アーキテクティングという世界を探索するにあたって、地図となるような本を目指して執筆しましたので、これからアーキテクトを目指そう、極めていこうという方にとってはお手元において頂ける一冊になったのではないかと考えています。
また、ソフトウェア開発という、多くの困難を伴いながらも刺激的で楽しい活動において、筆者が大事にしている考え方の一端を、本書の節々から感じ取って頂けたらこの上なく嬉しい限りです。
なお、紙面に限りがある以上、本書に載せられなかったトピックや、書き足りないトピックについては、今後noteでまとめていければと思っております。











この記事が気に入ったらサポートをしてみませんか?