ObjectSquare [2006 年 12 月号]

[技術書籍紹介]



ソースコードリーディングから学ぶ Javaの設計と実装の表紙

ソースコードリーディングから学ぶ
Javaの設計と実装

佐藤匡剛   著  山田祥寛 監修
WINGSプロジェクト 2,604 円(税抜き 2480 円)
B5変形判 288 ページ
ISBN4-7741-2950-X

 目次 目次
 内容紹介(「はじめに」より) 内容紹介(「はじめに」より)
 著者より 著者より
 著者紹介 著者紹介

目次

第1章 ソースコードを読む
第2章 汎用ライブラリ Jakarta Commons Logging/Pool
第3章 テスティングフレームワーク JUnit
第4章 Webアプリケーションフレームワーク Struts
第5章 統合開発環境 Eclipse
第6章 Webアプリケーションサーバ Apache Tomcat
第7章 テンプレートエンジン Jakarta Velocity
第8章 DIコンテナ Spring Framework
第9章 データベースエンジン HSQLDB
第10章 ソースコード読解の手法
付録A Mavenによるビルド
付録B ソースコードのライセンス

top ページのトップへ戻る

内容紹介(「はじめに」より)

 本書はJava言語で書かれたオープンソースプロダクトを対象とし、そのソースコードを読解します。単にソースコードの断片を題材にプログラミングのテクニックを解説するのではなく、一歩踏み込んで、プロダクト全体がどのように設計されており、どういった仕組みで実装されているかをソースコードを読んで包括的に理解します。

 なかでも本書の特徴は、ソースコードをオブジェクト指向プログラムとして捉え、UMLやパターンなど、設計レベルの視点をもちつつ読解することです。オープンソースプロダクトの内部構造を理解しつつ、広く実用されている活きたソースコードの中から以下を学びます。

 本書を、プロダクトアーキテクチャのテンプレートをまとめた、デザインブックとして読むこともできるでしょう。たとえば、Webアプリケーションフレームワークのアーキテクチャを設計したいと思ったら、第4章で読解するStrutsのアーキテクチャを参考にすることができます。

 また最後に、本書で実践したソースコード読解のアプローチを、1つの手法としてまとめます。

top ページのトップへ戻る

著者より

 ここでは、私が本書を書こうとした狙いについて、説明しようと思います。

これから必要なのは設計ノウハウの共有財産(コモンズ)化

 Linuxをはじめとするオープンソース運動の成功によって、私たちは膨大な量のソースコードを手にしています。この共有財産を土台として、革新的なソフトウェアをさらに生み出していくことができます。しかし、ソースコードレベルでの再利用には限界があります。1つには、ソースコードは少しでも間違えば全く動作しなくなるという、非常に具体的でセンシティブな表現形式であること、また1つには、ソースコードから設計などのより抽象度の高いノウハウを引き出すのは容易ではないこと、などからです。

 ソースコードをオープンにすることと同じか、またはそれ以上に重要なのは、設計などのより抽象度の高いノウハウをオープンにし、共有財産化することではないかと思います。たとえば、WebアプリケーションフレームワークStrutsの設計が完全に公開されていれば、Strutsと同等の生産性と信頼性をもつフレームワークを.NETやPHP上で簡単に構築することができます。また、まったく別のソフトウェアを作るのに、Strutsの設計の一部分だけを拝借することも可能でしょう。

 しかし、現在のところ、オープンソースソフトウェアの中でその設計まで完全に公開されているものは、ほとんどありません。本書では、オープンソースソフトウェアの設計を公開することをひとまず「オープンデザイン」と呼び、その実践を試みました。

ソースコードリーディングから学ぶ Javaの設計と実装
(第4章Strutsより)

 デザインパターンやアーキテクチャパターンも共有財産化された設計ノウハウですが、私は少し汎用的すぎると感じています。パターン1つでは具体的なプロダクトの設計は完成しませんし、一方で複数のパターンを組み合わせて具体的なプロダクトの設計を完成させられる程には、現在のパターンランゲージは成熟していません。

 オープンデザインによって公開される設計図は、実際に1つのプロダクトを実現する設計図です。パターンを実際の問題に適用する中で行なわれた試行錯誤の結果が、そこに反映されています。また、まだパターンとして記述されていない問題を解決する方法が含まれていることもあります。そうした意味で、オープンデザインの設計図は、パターンのインキュベータと見ることもできるでしょう。

ソフトウェアプロダクトのアイデンティティはなにか

 ソフトウェアプロダクトの設計をオープンにする作業は、そのプロダクトのアイデンティティを明らかにする作業でもあります。

 大きな成功を収めたオープンソースソフトウェアは、プラットフォームを超えて複製されていく現象がよく見られます。有名なのは、xUnitテスティングフレームワークでしょう。元々Smalltalk上で動くSUnitとして開発されたものが、Javaや.NETなどあらゆるプラットフォーム上で複製されています。こうした例は数多くあります。たとえば、JavaのプロダクトであるAnt、Hibernate、Spring Framework、Seasarなどは、みな.NETのクローンをもっています。

 このようにプラットフォームを超えてプロダクトが複製されるという現象があることは、プロダクトのアイデンティティがソースコードより抽象度の高いどこかにあることを示しています。オープンデザインの試みは、まさにこのアイデンティティを描き出す作業といえます。xUnitが、どんな設計上の特徴をもってxUnitと呼ばれうるのかを明らかにする作業です。

ソースコードリーディングから学ぶ Javaの設計と実装
(第3章JUnitより)

 ソースコードの場合、もし今から100年後にその言語処理系が使われなくなってしまったら、そのときソースコードの価値は(考古学的な価値をのぞいて)無くなってしまいます。一方で、どんな言語へも移植可能なプラットフォーム独立な設計図ならば、どんなに時が経っても失われない価値をもつでしょう。抽象的なプロダクトアイデンティティならば、文学作品がそうであるように時を超えて生き残る可能性があります。

本書に込めたもう1つの意図

 本書では触れていませんが、本書の執筆にはもう1つの意図を込めています。折角の機会なので、簡単に触れたいと思います。

 ソフトウェアというものは、他にはない面白い性質をもっています。ソフトウェアは人や社会に直接作用する実用的な道具や機械でありながら、同時にソースコードという人間の創造的活動の産物としての1つのテクストでもあります。この二面性が、ソフトウェアならではの特徴です。

 ところで、文学・音楽・映画・漫画・演劇・建築など、どんな創作活動にも批評という活動が伴っています。創作活動が良質な批評を伴っている場合、創作が批評を刺激し、そして批評が新たな創作を促す、という好循環があります。ソフトウェアにも創作の側面があるので、そこには批評活動の生まれる余地があるはずです。

 ソフトウェア批評が成立するとすれば、どんなものになるでしょうか? 私は、ソースコード(プログラミング)のレベルだけでソフトウェアの良し悪しを云々していても、あまり発展性がないと考えます。プログラミングのレベルだけでは、単なるプログラミング作法の議論を超えられないと思うからです。

 批評行為が成立するとすれば、より抽象度の高いところでの意匠に関するものになるでしょう。ソフトウェアの設計レベルであれば、パターンやアーキテクチャのように様々な工夫に関する議論が可能だからです。したがって、ソフトウェア批評の可能性を拓くためには、より抽象度の高い視点でのソースコードリーディングが必要になると私は考えています。

 設計を意識したソースコードリーディングを紹介することで、今後オープンソースに関する設計レベルでの議論がより活発になる一助となれば、というのが著者のささやかな願いです。

top ページのトップへ戻る

著者紹介

佐藤匡剛(さとうただよし)

 株式会社オージス総研 アドバンストモデリングソリューション部 システム基盤チーム

大学院でソフトウェア工学を学んだ後、システムエンジニアとして活動。UMLを使ったオブジェクト指向設計、およびJava/PHP/PerlなどによるWebアプリケーションの開発に従事する。2006年より、オージス総研に入社。
共著で書いた著書に『Java基本API+Jakarta逆引きリファレンス』(技術評論社)がある。雑誌では、JAVA PRESS、日経ソフトウェア、@ITなどに寄稿している。そのほか、Webアプリケーション開発をテーマとした講演活動なども行っている。
社会に直接働きかける実用的な道具であるとともに、人間精神の創造的な活動の産物でもあるという二面性をもつ、ソフトウェアの可能性の追究をライフワークと考えている。

山田祥寛(やまだよしひろ)

 静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」の代表でもある。

主な著書に『XMLデータベース入門』『PEAR入門』『Smarty入門』『独習PHP』『独習ASP.NET』『XML辞典』『10日でおぼえる入門教室シリーズ(ASP.NET・Jakarta・JSP/サーブレット・PHP5・XML)』(以上、翔泳社)、『改訂新版 基礎PHP』『基礎XML』(以上、インプレス)、『Pocket詳解シリーズ(ASP.NET・PHP・Perl/CGI)』『スーパーリファレンスシリーズ(JSP&サーブレット・Java)』『今日からつかえるサンプル集シリーズ(JSP&サーブレット・PHP5・ASP・XML)』(以上、秀和システム)、『JSP/PHP/ASPサーバサイドプログラミング徹底比較』(技術評論社)、『書き込み式 SQLのドリル』(ソシム)など。また、@ITの各フォーラムにて連載、『DB Magazine』(翔泳社)、『日経ソフトウェア』(日経BP社)、『Web+DB PRESS』(技術評論社)などでも記事を執筆/監修中。最近では、IT関連技術の取材、講演まで広くを手がける毎日である。最近の活動内容は、著者サイト( https://www.wings.msn.to/)にて。

top ページのトップへ戻る

© 2006 OGIS-RI Co., Ltd.
HOME HOME TOP オブジェクトの広場 TOP