章9 ソフトウェア アーキテクチャ
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
アーキテクチャとは重要なものについてのことだ…それが何であれ。
ラルフ・ジョンソン(コンピュータ科学者、『デザインパターン:再利用可能なオブジェクト指向ソフトウェアの要素』共著者)
ソフトウェアアーキテクチャ は非常に広範なテーマだ。著者の一人はミネソタ大学でこのテーマの講義を担当しているが、大学院の1学期では表面をなぞる程度にしか扱えない。誰もが独自の定義を持っているように見えるが、プロジェクトの長期的な成功における重要性という点では一致している。この章を読んだからといってソフトウェアアーキテクトになれるわけではない。しかし、トレードオフの重要性、答えがほぼ常に「状況による」となる理由、そして進化可能なアプリケーション構築において品質属性が鍵となる理由を理解できるようになるだろう。
アーキテクチャとは何か?
20人のAgileエンジニアを一室に集め、それぞれにアーキテクチャの定義を書かせたことがあるか?俺は一度やった。20通りの答えが返ってきた。
マット・パーカー(著者・エンジニアリングリーダー)
第4章で論じたように、ソフトウェア産業は極めて若く、そのため用語は成熟した分野から借用されることが多い。アーキテクチャは完璧な例だ:この用語は建築業界に由来する。新築住宅の基礎を掘る前に、アーキテクトは構造を設計する。完成した家が地域の建築基準に適合し、将来の居住者のニーズも満たすようにするためだ。アーキテクトは全体像、構造、プロジェクトの構想——つまり電気配線、配管、換気システムなど後から変更が難しい部分——に責任を持つ。コンクリートを流し込んだ後では、リファクタリングは本当に難しい!
ソフトウェアにおけるアーキテクチャもほぼ同様だ。ソフトウェアプロジェクトでは、アーキテクトがシステムの全体設計を担当する。その際、規模、性能、セキュリティ、その他の品質(「~性」と呼ばれるもの)に関する、しばしば明示されない要件を全て考慮に入れる。過去の経験がこれらの課題に対処する助けにはなるが、アプリケーションはそれぞれ異なる。データストアからのエラーメッセージに遭遇した場合、インターネット検索で答えを発見できる可能性は高い。1しかし「Fooアプリにはどのデータストアを使うべきか?」という問いに、いくらクエリをしても満足のいく答えは得られない。
アーキテクチャとは、Googleしても出てこないものだ。
ニール・フォードとマーク・リチャーズ(『Fundamentals of Software Architecture, 2nd Edition』著者)
アーキテクチャ は、後から変更が難しい決定事項と定義されることもある。一戸建て住宅とアパートでは要求事項が異なるように、ソフトウェアアーキテクトはアプリケーション全体の全体像を理解しなければならない。ソフトウェアは家屋よりもリファクタリングが容易だが、一部のアーキテクチャ上の決定は後から修正するのが非常に困難になることがある。2例えば、Spring上にJavaで書かれた小さな独立したパーツ(マイクロサービスと呼ばれる)に分割してアプリケーションを構築すると決めたのに、プロジェクト開始から半年後に考えを変えたとしよう。そこには大きな課題が待ち受けている。アーキテクチャには批判的思考が求められるのだ!アーキテクトはプロジェクトの重要な品質属性を特定し、設計がそれらの要件を満たすことを保証する。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access