巨大なビルディングブロックになったシステム

2014年9月12日(金)
Jaroslav Tulach(ヤロスラフ・ツゥラッハ)柴田 芳樹(しばた よしき)

巨大なビルディングブロック

21世紀の最初の10年間に構築される平均的なシステムは、その裏側には何も優雅さがない、あってもわずかしかない巨大なゴミの山のようなものです。そのようなシステムを構築する主な動機は、常に最小限の努力で成し遂げることです。そのために、エンジニアリングチームは、既存のソフトウェアフレームワークが必要以上に重量級であっても再利用しようとします。

無知への合理的な取り組み

最近、私はサーバに動的なウェブページを追加する必要がありました。私には2つの選択肢がありました。1つは、どれかのポートでソケットをオープンし、接続してきたコネクションからデータを読み、何らかのデータを返すということです。もう1つは、既存の技術からシステムを組み立てるということです。私は、両方を行ってみました。

「一から書いてみる」やり方は、うまくいきました。HTTPの仕様書を読み、送られてくるヘッダーを解析し、出力を書き出したのです。それは、比較的少ない量のコードでしたし、多少デバッグした後にうまく動作しました。しかし、その後に、ページをセキュアにしたりPOSTリクエストを処理したりなどの新たな機能を追加する必要がありました。RFCドキュメントを読んで同じように実装することもできました。しかし、それは、費やしたい時間を越えた作業量だと分かりました。

それが、私が「組み立てる」方法をやってみた理由です。Tomcatウェブサーバを利用して、1つのサーブレットを書き、設定ファイルのプロパティを少し調整したら、出来上がりました。すべてが機能しましたが、1つだけ難点がありました。50KBのコードではなく、突然、1MBを越えたのです。

今日のシステムは、巨大なビルディングブロックで構成されています。技術を全部1人で作成する人はいません。代わりに、信頼できる安価なオペレーティングシステムをインストールするでしょう。それから、その上に、広く使用されているウェブサーバをインストールして、データベースを追加します。これら数メガバイトのインストールでもって、HTMLページを生成するなどの基本的な問題を解決する準備が整います。この時点で、HTMLページを生成するのは簡単です。しかし、誰もシステム全体が単純であると主張することはできません。実際、かなり複雑であり、すべてを理解できる人は地球上に誰もいません。これは、無知の完璧な例です。プログラマは、システム全体の最低限の理解だけで、HTMLページの作成を行うのです。

私には、この取り組み方法全体が、ブルドーザでのコーディングをイメージさせます。すなわち、データベースが必要であれば、力を使ってシステムにデータベースサーバを入れているようなものです。あるいは、もっと信頼できる実行環境が必要ならJavaとアプリケーションサーバをインストールするようです。これらのフレームワークがどれだけ重量級であるのかに関係なく、ゴミの山、すなわち、アプリケーションにそれらを積み上げることができる十分に大きなブルドーザを常に見つけることができます。アプリケーションがあまりに多くのメモリを消費し始めたら、合理的な視点からアプリケーションを最適化することを検討するかもしれません。しかし、ブルドーザがあるのであれば、すべての問題は同じように見えて、単にあと数ギガバイトのメモリを購入するだけです。システムがそれでも遅いのであれば、クラスタや何らかの仮想化に投資するかもしれません。そして、アプリケーションの山は単に大きくなって、決して小さくなることはありません。

問題は、ブルドーザによるコーディングのやり方が悪いか否かです。実際、効率的ですが見つけるのに時間を要してしまうヴィルトの「単純で、優雅な解法」を探すよりは、より生産的でしょう。ウェブを見渡せば、ブルドーザのような方法を使用して書かれたかなり優れたアプリケーションやサーバを見つけることができます。Amazon、Yahoo!などは巨大なサイトであり、うまく機能しており、致命的な問題は抱えていません。そのため、ブルドーザ方式は、今日のソフトウェアシステムを設計してコーディングするための実行可能な方法であることを示しているように思えます。私達全員が持てる驚くべきコンピュータの性能により、ソフトウェアシステムは力ずくでの計算へかなり傾いています。

この記事のもとになった書籍
APIデザインの極意 Java/NetBeansアーキテクト探究ノート

Jaroslav Tulach 著/柴田 芳樹 訳
価格:3,200円+税
発売日:2014年05月23日発売
ISBN:978-4-8443-3591-7
発行:インプレスジャパン

APIデザインの極意 Java/NetBeansアーキテクト探究ノート

なぜ、設計の良くないAPIを持つソフトウェアが量産されるのでしょう。エンジニアが良いAPI・悪いAPIについて分かっていない、あるいは、適切なレビューを受けていないからかもしれません。本書では、NetBeansアーキテクトの著者が遭遇してきた様々な誤りを解説し、APIの発展を考慮した設計について詳しく説明。あまり語られることがなかったAPI設計について、貴重な10年間の経験をベースに幅広くノウハウを披露。API設計の技術や知見の水平線を押し広げることができる稀有な一冊です。

Amazon詳細ページへImpress詳細ページへ

著者
Jaroslav Tulach(ヤロスラフ・ツゥラッハ)
NetBeansの生みの親で、初期のアーキテクト。NetBeansは当初、Java統合開発環境として開発され、現在はJavaScript・Ruby・PHP・C/C++などにも対応。今も、オープンソースプロジェクトで開発が続けられている。著者は、NetBeansを支える技術の生みの親として、このオープンソースプロジェクトの成功に貢献。現在も、プログラマーの設計スキルを向上させる新たな方法を探求しつつ、このプロジェクトに参加している。
著者
柴田 芳樹(しばた よしき)
1959年生まれ。九州工業大学情報工学科で情報工学を学び、1984年同大学大学院で情報工学修士課程を修了。以来、様々なソフトウェア開発に従事。ゼロックス社のパロアルト研究所を含め、5年間米国に駐在してソフトウェア開発に携わる。現在はソフトウェア開発、教育、コンサルテーションなどを業務としている。 本書の翻訳を担当。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています