この本について

大工仕事には高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし大工仕事は建築 (architecture) ではありません。誰かがピッチボードとマイタージョイントから目を離し、建物全体を設計しなければなりません。建物の設計に必要なのは手先の器用さと知識だけではなく、職人技が必要になります。

プログラミングにも高い技術が必要であり、その技術の向上に生涯をかけることもできます。しかし、プログラミングはソフトウェアアーキテクチャ (software architecture) ではありません。多くのプログラマはプログラム全体に関する問題を何年もかけて考え、取り組みます。「このアプリケーションは拡張可能であるべきだろうか? もしそうだとしたら、プラグインのようなメカニズムを使ったスクリプトによるインターフェースがいいだろうか、それとも全く違った方法がいいだろうか?」 「クライアントですべきことは何で、何をサーバーにやらせるべきだろうか、いやそもそもこのアプリケーションに“クライアント・サーバー”モデルを使うべきなのだろうか?」 階段をどこに設置するかという問題が大工仕事とは関係ないように、こういった質問はプログラミングとは関係ありません。

建物の建築とソフトウェアのアーキテクチャには共通点が多くありますが、決定的な違いが一つあります。建築家は見習いの期間、およびキャリアを通じて何千という建築を勉強するのに対して、ほとんどのソフトウェア開発者が細部まで理解する大きなプログラムというのはごく少数なのです。さらに言えば、“理解している”にカウントされているのが自分で書いたソフトウェアであるということも少なくありません。彼らは歴史的に価値のある偉大なプログラムを目にすることもなければ、経験豊かな専門家によって書かれた、プログラムの設計に関する批評を読むこともありません。結果として、そのようなソフトウェア開発者は過去の成功から学ぶことができず、過去に人々が陥った誤りを繰り返してしまうのです。

この本で、私たちはこの状況を変えることを試みました。各章はオープンソースのアプリケーションのアーキテクチャを一つずつ説明します。つまり、各部分がどう対話するか、なぜそのようにしたのか、そして他の大きなプログラムの設計にも適用できそうな教訓は何か、です。説明を書いたのは、複雑なアプリケーションを数年、数十年に渡って (再) 設計してきた、そのソフトウェアを一番良く知っている人物です。説明されるアプリケーションは単純な描画ソフトウェアから、ウェブベースのスプレッドシート、コンパイラツールキット、数百万行の可視化パッケージまであります。またリリースから数年しかたっていないものもありますし、リリース三十周年が近づいているものもあります。これらの様々なソフトウェアの共通点は、開発者が熟考に熟考を重ねてそのソフトウェアを設計していること、そしてそのときに考えたことを快くあなたと共有してくれることです。彼らの文章を、あなたが楽しめることを願います。

寄稿者

謝辞

次のレビュアーに感謝します:

Eric Aderhold, Muhammad Ali, Lillian Angel, Robert Beghian, Taavi Burns, Luis Pedro Coelho, David Cooper, Mauricio de Simone, Jonathan Deber, Patrick Dubroy, Igor Foox, Alecia Fowler, Marcus Hanwell, Johan Harjono, Vivek Lakshmanan, Greg Lapouchnian, Laurie MacDougall Sookraj, Josh McCarthy, Jason Montojo, Colin Morris, Christian Muise, Victor Ng, Nikita Pchelin, Andrew Petersen, Andrey Petrov, Tom Plaskon, Pascal Rapicault, Todd Ritchie, Samar Sabie, Misa Sakamoto, David Scannell, Clara Severino, Tim Smith, Kyle Spaans, Sana Tapal, Tony Targonski, Miles Thibault, David Wright, Tina Yee

編集の最初の作業を手伝ってくれた Jackie Carter にも感謝します。

献辞

Dedicated to Brian Kernighan,

who has taught us all so much;

and to prisoners of conscience everywhere.