APIデザインの極意 Java/NetBeansアーキテクチャ探求ノートを読んだ

[twitter:@yoshiki_shibata]さんがtwitter上でレビューしてブログに書く人を募集していたのでそちらに応募してみました。

本を頂きましたので、お約束通りレビューをさせていただきたいと思います。

この本の概要

この本自体はNetBeansの初期のアーキテクトとして参画した方が書いた本を邦訳したものです。
NetBeansは現在ではOracle社が中心となりOSSとして開発されています。
多数の言語に対応し、多数のプラグインをもち、iReportやSQLDeveloper等の他のIDEのベースとなっていたりと高い汎用性を持ったIDEとして有名です。

この本は、NetBeansが高い汎用性をもつためにどういう工夫をしてAPI設計をしてきたかと、NetBeansは複数のバージョンのJVMで動くようにどのような工夫をしてきたのかを元に、良いAPI設計の行い方についての考えを書き留めたものです。

そのためこの本を読み解くためには2つの力が必要になります。

この本を読み解くために必要な2つの力

この本を読み解くためには以下の2つのことについてきちんと理解できていることが前提となります。

Java言語のバージョン間の変遷とコンパイラの挙動

NetBeans自体は1996年から名前を変えつつ開発されつづけている歴史の長いIDEです。
この本は回顧録を兼ねているので昔のJavaに関する記述が出てきます。*1
大多数のJava開発者はIDEで開発をしていると思います。Eclipseではjava.util.*等のimportを行おうとするとリファクタリングの機能によって*が展開されます。
なぜそうなるのかについて考えたことがあるでしょうか。
この本ではどうしてそうしなければいけないのかについての理由について示してくれますが、どちらかといえば、これについてはJavaバッドノウハウであり、昨今ではプログラマーが意識しなくてもIDEが勝手に直してくれるものになっています。*2
そういった意味で、昔からJavaを開発していないと結構厳しいかなという感じがしています。
また、Javaコンパイラについての挙動もきちんと判っていない場合は、Java言語仕様を参照しながら読むことになると思います。
とりあえず、4.1と4.2を読んでみてください。こちらについて脚注を参照しながらでもきちんと理解することが出来るのならば、こちらの前提はクリア出来ているのではないかと思います。*3

JavaGUI(swing、awt)に対する知識

NetBeans自体がGUIアプリケーションですので、当然ながらGUIアプリケーションの開発に対する知識は必要となります。GUIアプリケーションの作り方自体は知らなくとも、NetBeansが何かであるかはきちんと知っている必要があります。
知るためには使ってみることが一番でしょう。
ということで、NetBeans使え。

内容について

内容としては非常に考えさせられる内容となっております。アプリケーションは一度作ったら終わりではありません。
よくあるデザインパターン本では、再利用性を考えるならこういう作りにする必要があるという記述はあるものの、実際にどうしてそうする必要があるのかについては記載がありませんでした。
この本は、どうしてそうする必要があるのか、どのようにして使っていくのかについて実例を元に書いていった本となります。
デザインパターンの本を読んだ上で、物足りないという方はぜひご覧ください。
ただ、JavaアプリケーションのAPIのお話であり、Web APIとかには適用ができないのでそこら辺を期待すると肩透かしを食らうことになります。
静的言語を静的である制限のまま、より良く拡張していくにはどうすればよいかというお話でした。

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

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

*1:例えば、Java1.1でjava.util.Listが導入された時の話など

*2:そもそも最近の人は*でパッケージ内のクラスを全部importできるとか知っているのかしら

*3:脚注ながければ他の人には全く薦められない本になっていたと思います