Java に不可欠なリソース

本、サイト、ブログ、イベントなど、必須リソースの総合リスト

Java™ プラットフォームはまもなく 14 回目の誕生日を迎えます。成功して普遍的に使われるようになった言語の場合、このような節目を迎えるとなると、その副次作用としてライブリーやツール、そしてさまざまな概念が氾濫してくるものです。この思いがけない副次作用によって、Java 言語の多くの新参者たちは行き先もわからずにリソースの海に置き去りにされ兼ねません。そこで、この記事では著者 (その膨大なリソースの海に確実に貢献した一人) がこの大きな潮の流れをかき分けて、新進気鋭の Java 開発者であれば誰もが持っているべき重要なリソースを選び抜いて紹介します。

Ted Neward, Principal, ThoughtWorks, Neward & Associates

Ted Neward photoTed Neward は世界規模でコンサルティングを行う ThoughtWorks のコンサルタントであり、また Neward & Associates の代表として、Java や .NET、XML サービスなどのプラットフォームに関するコンサルティング、助言、指導、講演を行っています。彼はワシントン州シアトルの近郊に在住です。



2009年 1月 23日

1995年にプログラミング・コミュニティー全体に導入されてからというもの、Java プラットフォームは初期の Java の評論家や支持者が Java の将来の姿として描いていた、「どこででも使えるアプレット」という構想を遙かに超えるまでに進化しています。Java の世界は Swing を標準サポートするようになり、サーブレットへと融合され、それを J2EE に発展させ、EJB に巡り合い、Spring と Hibernate に寄り道し、Generics を追加して一層動的になり、それから機能性を向上させました。この記事を書いている時点でも、Java はあらゆる類の興味深い方向で成長を続けています。

これが、Java 言語と一緒に成長してこなかった Java プログラマーを多少まごつかせている理由です。

講演者、ブロガー、コンサルタント、そして指導者である私は、Java の分野で働く初級あるいは中級プログラマーに、この広大で複雑、そして終わりがなさそうな Java をマスターするためのリソースを紹介してくれるよう頼まれることがよくあります。この質問に答えようと数年前に投稿したのが、「Recommended Reading List」です。けれども最近になって、developerWorks の Java 編集者から、本だけに限らずに広範なリソースのリストを作ってくれと頼まれました。この本のリストは、すべての本を読むとなると 10 年かかっても読みきれず、いつまでたってもコンテンツの作成に取り掛かれないほどにまでなっているので、新しいリソースのリストを作るという考えは名案です。

偏見や不当な圧力がかかったリストにならないように、ブロゴスフィアにリソースを問い合わせてみることにしました。問い合わせたのは、Web サイト、カンファレンス、本、ブログ、ツールだけでなく、Java 開発者が成長する過程で興味深く役に立ちそうで、このまさに膨大なリソースの海を航海する際の助けとなる可能性のあるあらゆるリソースです。

ブロゴスフィアから返ってきた回答は膨大なものでした (返答してくださった皆さんに感謝します)。

本題に入る前に簡単に言っておきますが、この記事で紹介するリソースは、Java エコシステムで最もよく使われているリソースや最も説得力があるリソース、あるいは最も影響力の大きいリソースであるとは限りません。そのようなリソースを集めたとしたら、まったく違うリストになっていたでしょう (ただし、「Recommended Reading List」との間jで重複するリソースはたくさんあると思います)。この記事で選んでいるのは、新進気鋭の Java 開発者の誰もがブラウザーでブックマークを付けたり、本棚に置いてあったり、あるいは出席し忘れないようにカレンダーに印を付けておいたりするべきリソースです。この類のリストの例に漏れず、ここに含まれているべきリソースや含めるべきではないリソースについては、もちろん議論の余地があります。

前置きはここまでにして、早速本題に入ることにしましょう。

Web サイトおよび開発者向け Web ポータル

資料や出版物を共有するという Web の本質は明らかに変わってきています (もちろん、皆さんが今まさに、この記事を Web で読んでいることを忘れているわけではありません)。そこで、重要な Java リソースに関する調査を開始するに当たっては、すべての Java 開発者が常に注意を払っていなければならない重要な Web サイトと開発者向けポータルから始めるのが妥当でしょう。

多くの場合、Web サイトや開発者向けポータルの価値は、そこに提供されているリソースや投稿されている記事にだけではなく、それぞれの Web サイトやポータルを取り巻くコミュニティーにも価値があります。静的 Web ページの時代やファイルをダウンロードしていた時代は、より「アクティブ」なモデルの背後に急速に消えつつあります。アクティブなモデルとは、フォーラムやスレッドで構成された記事、そして頻繁にサイトにアクセスしてコミュニティーを形成している開発者同士だけでなく、コミュニティーのメンバーとポータルの所有者との間のインタラクティブなディスカッションです。技術の進化に合わせて開発者も進化していかなければならないのと同じように、ポータルもコミュニティーのニーズの変化に応じて進化していかなければなりません。つまり、コミュニティーとの開かれた関係を持つことが、ポータルの活気を維持するためには欠かせない要素となります。

Web サイトのリストを以下に示します (当該 URL にリンクしています)。

  • java.sun.com
    このサイトは JDK の提供元で、Java 開発者が JDK やドキュメントをダウンロードするときには大抵、最初にこのサイトにアクセスします。しかしそれにも増して、このサイトは Java プラットフォーム全体に関する優れた情報源にもなっていて、例えば、JVM 自体に関する極めて充実したセクション (ホットスポット) では、JVM の内部を驚くほど詳細に説明しています。
  • java.net
    Java.NET は、オープンソースのプロジェクト、ドキュメント、ブログ、ウィキ、ニュース、そしてその他のコミュニティー・リソースをさまざまに取り揃えたサイトです。このサイトは Java 技術の主な情報源となっていて、情報が溢れ過ぎている観もありますが、プロジェクトのリストを辿っていけば、まさに珠玉のプロジェクトが見つかります。その一例が、FEST-Swing プロジェクトです。Swing アプリケーションを構築するための「円滑なインターフェース」の作成を目的としたこのプロジェクトは、ユニット・テスト関連の作成作業を大幅に単純化します。
  • InfoQ
    TheServerSide の発起人兼編集長である Floyd Marinescu によって作成された InfoQ は、明らかに特定の技術にとらわれていないという点で、ここに挙げた他の多くのリソースとは異質です。このサイトでは Java コードだけでなく .NET やRuby のコードも扱っており、極めて広範なアジャイル手法と見識を紹介しています。InfoQ に関して論評するコミュニティーは TheServerSide ほどの規模も多様性もありませんが、ここでのディスカッションは一般に TheServerSide よりも温和で、敵対的でありません。
  • TheServerSide
    「the Slashdot of Java」とも呼ばれる TheServerSide (TSS) は、エンタープライズ Java についての疑問が公にされ、盛んに議論され、そして積極的に追求された最初の場所です。ごく初期の (Spring に代表されるような) 軽量コンテナーにまつわる考え方のなかには、このサイトから生まれたものもあります。そして現在 Java コミュニティーで「思想的指導者」と考えられている多くの人々も、このサイトから誕生しました。最近では TSS での議論がけたたましい叫び合いの様相を呈することもありますが、今後も私たちが関わる Java エコシステムに組み込まれていくものの大半が TSS から生まれることになるでしょう。したがって、他のことはともかくとしても、このサイトは常に歴史的な情報源であり続けるはずです。
  • DZone
    DZone は Java 開発者のためのリソースとして誕生しましたが、最近では Java 以外の技術領域 (.NET、Ruby など) や、話題となっている他の「ゾーン」までカバーするようになってきています。そのため、Java 開発者は Java ゾーンにだけ専念することもできる一方、賢い開発者であれば、このサイトで行われている相互交流を利用するはずです。
  • IBM® developerWorks
    この記事を読んでいる読者は、すでに dW をご存知のはずです。全面開示のために言っておきますが、私はこのサイトのこの記事以外にも記事を寄稿したことがあります。しかし正直に言って、Java コードの作成と JVM に関する記事と資料のリソースとしては dW が抜きん出ていると思います。特に、Brian Goetz の長年続いている連載、「Java の理論と実践」は要チェックです。この連載で 3 回に渡って掲載された JVM ガーベッジ・コレクターの記事では、GC の中心概念を驚くほどわかりやすく説明しています。
  • JavaWorld
    長期にわたる休止の後、JavaWorld は改良された外観、品の高い技術コンテンツ、そして探しているようなタイプの記事を素早く見つけられる重宝なトピック分類によって、その新鮮さと栄光を取り戻しています。このサイトの開設初日にまで遡る豊富なアーカイブは必見です。そこには、Java コミュニティーの最も著名なコントリビューターの方々による記事も含まれています。
  • Artima
    Bill Venners によって作成された Artima は、Java 開発以外の話題も含めた膨大な数の記事、ブログ、インタビューのコレクションへと拡大されました。なかには、Java の世界で指折りの著名人の名前も連ねられています (Bill Joy による、Java 5 リリース後の Java 言語の複雑さについての疑念と、その疑念を正当化するために引用している典型例、Enum<> は要チェックです)。アクセスする価値は十分にあります。

上記の多くでは、サイト/ポータルの利点を最大限に活用するために何らかの形の登録が必要になることに注意してください。この記事を書いている時点では、上記のすべては基本的に無料で、訪問者を一意に識別するためのユーザー名/パスワードによるログイン、そしてトピックを記載したニュース・レターまたは E メールを定期的に送信するための E メール・アドレスが必要です (私の知っている限りでは、いずれのサイトでも E メールの送信を停止することができますが、私はまだ試したことはありません。というのも、ニュース・レターによって、今まで知らなかった興味深い話題を知らされることはしょっちゅうなので、ニュース・レターの受信は実に立つと思っています)。

ウェブログ

ブログは開発者にとって、技術についての見解、受け継がれてきた情報、概念、アイデア、議論、そしてその他の知的ディスカッションなどについて知り、特定の技術分野のなかで影響力を持ちそうな「思想的指導者」の存在に気付くための手軽な手段となります。さらに嬉しいことに、ブログはフィードの読者が記事/エントリーをそれぞれのマシンにダウンロードするという方法でローカルに利用できるため、オフライン中であっても利用することができます。実際、ブログは今では普遍的に利用されており、Amazon Kindle などの特定用途のために開発された機器などでもブログから開発者に必要な情報を取得できるまでになっています。

重要な点は、文字通り何百万もあるブログのなかから、どのブログを読むかを判断することです。どのブログを読むか、どのブログを読まないかについては開発者それぞれに好みがありますが、まず検討してみるべきブログには、以下があります。

ウェブログの (大半の) 意見は個人的なものだということを忘れないでください。時には、ウェブログで支持されている意見が後になってから事実上間違っていると判明することもあるので、本番で使用するための決定は、ブログ・エントリーの情報だけを頼りにしてはなりません。しかし、決まり切った考え方から抜け出すために利用するのであれば、ブログは極めて有効なスキル強化のためのリソースとなり得ます。

パッケージとライブラリー

Java エコシステムに含まれるすべてのライブラリーとパッケージを把握し続けるという作業は面倒で、Java 開発者がないがしろにしがちですが、この作業を怠ることによって、開発者たちがよく見逃してしまうことがあります。それは、コーディングしている最中のものが、実はプラットフォーム内部にすでに存在しているという事実です (つまり、探す努力をすればよかっただけの話です)。

以下は、「すべての Java 開発者が少なくともその存在を (そしてできれば、使用方法も) 知っておくべき Java パッケージのトップ 10」です。

  • java.lang.reflect
    Java のライブラリーとツールの大多数はリフレクション・パッケージに依存しているため、このパッケージを学ぶことがほとんど必須のようになっています (少なくとも、セキュリティー・ポリシーやその他のインフラストラクチャー上の不一致が原因でリフレクション・パッケージを使用できない場合があることを理解してお区必要があります)。リフレクションは、Java 5 の Annotation および java.lang.annotation とも密接に関連します。
  • javax.script
    Java エコシステム全体で広く使われている動的言語に重点を置き、Java コード内からスクリプト言語を使用する方法を理解しておけば、開発者はコンパイル、リンク、実行、テストというコストのかかるサイクルを通さなくても、システムを拡張することができます。
  • javax.management および java.lang.management
    JMX (Java Management Extensions) として知られるこの管理パッケージは、実行中の Java アプリケーションを監視するための強力なツールです。そのため、システム管理者にとって実際に使い物になるソフトウェアを作成するためには、開発者が JMX を十分に理解し、使い慣れていなければなりません。アプリケーションの正常性に関するダッシュボードの一例として、JDK に付属の jconsole ツールを調べることも忘れないでください。このツールは、何を作成できるかを示す例であるだけでなく、それ自体だけでも便利なツールです (jconsole 内でのスクリプトのサポートを可能にする jconsole プラグインを作成するスクリプト・デモは特に細かく見てください。これは、有能なシステム管理者であれば誰もが使用している強力なツールです)。
  • java.util.concurrent.*
    並行性は、開発者が今後 10 年の間に直面する最大の問題です。このパッケージとサブパッケージ (.atomic および .locks) に含まれるクラスは、Java 開発者が並行性の不具合に対処する際の中心となる武器になります。このパッケージを使えるようになることが、少なくともクラスを作成する方法を学ぶことと同じくらいに不可欠です。このパッケージを学び、使いこなしてください。
  • java.util
    java.util のクラスについても同じことが言えます。特に Collections クラスをはじめ、java.util のクラスは頻繁に用いられるため、java.util.*java.lang のように自動的にインポートされるようにすることを検討する余地はあります。
  • java.beans
    JavaBean は間違いなく、Java エコシステム全体で使用されている中核的な要素の 1 つで、「POJO」(Plain Old Java Object) という冴えない名前で通っています。POJO のベースも JavaBean コード、API、および仕様であることに変わりはないため、多少時間をかけて java.beans に含まれるクラスを学べば、より優れた POJO を作成できるようになります。
  • java.util.logging
    デバッグ目的であるか、または管理および監視目的であるかに関わらず、診断および監査ログは瞬く間に、プログラムの実行状況を追跡するための強力なツールになります。私のアドバイスとしては、このパッケージとそのオープンソース版、log4j を使えるようになってください。
  • java.security.*
    Java セキュリティー API、ポリシー・メカニズム、そしてアクセス権のためのクラスは、Java 環境を安全なコンピューティング・プラットフォームにするための中核的要素ですが、それは、開発者がその活用方法を知っていればの話です。暗号化 API は使用しないようにしてください。これは、他に使える手段が尽きた場合の最終手段として使用しなければなりません。暗号化 API を使用するのは難しくありませんが、正しい (つまり、大きな欠陥がない) 暗号化にするには何年もかかり、他の暗号化エキスパートによる十分な評価が必要になります。まずは SSL/TLS や GuardedObject/SignedObject/SecureObject クラスなどの他のメカニズムを使用してください。
  • javax.xml.parsers.*javax.xml.bind、および javax.xml.transform.*
    XML は Java 開発者の考え方において大きな存在を占めています。XML を (直接、およびオブジェクト XML ライブラリーによって) 構文解析し、(XSLT を使用して) 変換できることは、絶対的に必要ではないにしても、開発者にとって強力なスキルとなります。
  • javax.sound.*
    もちろんこれは必須のスキルではありませんが、折にふれてサウンド・エフェクトを使う方法がわかっていると、ありふれたコードにも精彩が出てきます。それに加え、すぐに使える表示がない場合には、サウンドを使ってシグナルを出したり、システムに関するフィードバックを提供したりすることもできます。それにも増して、何か悪い事態が起こったことをユーザーに知らせるために、スタック・トレースをスローして、お気に入りのホラー映画からの甲高い叫び声を再生するというマシンには、病みつきになる面白さがあります。

JDK に含まれるかどうかは抜きとして、学ぶ価値のあるパッケージは当然、他にもあります。しかし、上記に挙げたパッケージをマスターすれば、就職の面接は言うまでもなく、ほとんどのプロジェクトでも有利な立場に立てることになります。

カンファレンス

カンファレンスは常に、Java 開発者の教育において大きな役割を果たします。特に、大手研修会社のトレーニング・リストの項目として載るほどまでに人々の関心が集まっていないトピックについては、カンファレンスの役割が絶大です。また、カンファレンスは開発者がさまざまなスキルと職務を持つ他の開発者たちと出会う絶好の機会でもあり、カンファレンスの参加者に自分の職場についての不満を発散するための極めて充実した (そして不可欠の) 場を提供してくれます。

カンファレンスへの出席には有益な副次作用もあります (そして積極的に利用すれば、さらに大きく効果的なものに発展する可能性がある副次作用です)。それは、出席者と同じ分野の開発者仲間の輪が広がっていくことです。E メールやメーリング・リスト (GoogleGroups、Yahoo Groups など)、そしてその他の軽量のグループウェア通信ツールが普遍的に使用されるようになったおかげで、カンファレンスで出会った人々と連絡を取り合うのはこれまでになく簡単になっています。昼食の席や夜のパーティーで培われた友情が生涯にわたって続き、特に新しい技術を評価する際に功を奏することもあります。

カンファレンスの出席者、講演者、主催者、そして招かれざる客として 30 年の経験を持つベテラン (私ではなく、私の友人です) の言葉を借りると、「カンファレンスの初心者はセッションに参加しますが、ベテランはパーティーに参加し、人々とコミュニケーションをするものです。パーティーは人々と出会う機会を与えてくれ、そこで知り合った人々が自分の出世を助けてくれることになるからです」。

参加するとよいカンファレンスには、以下のものがあります。

  • No Fluff, Just Stuff
    これは私が心底支持しているカンファレンスです。その理由は、私がいつも講演を行っているからだけではなく、JavaOne 2007 の講演者トップ・テンのうちの 7 名は NoFluffJustStuff (NFJS) の (現在または過去の) 講演者だからです。Java 開発者は、これほどまでに技術のトピックに集中し、これ以上手頃な価格で、さらにこれ以上便利な場所、つまり開発者の地元で開催されるカンファレンスを他には見つけられないと思います。カンファレンスは、北米大陸では年に 30 回以上開催されるので (ヨーロッパとアジアにも拡大しています)、遠くの都市まで旅行してホテルに宿泊するために何千ドルもかけることなく、NFJS に車で行ける確率は十分にあります。さらに、記事でお薦めした本の著者の多くが NoFluff の顔ぶれであることも意外なことではありません。NFJS の主催者はどんな苦労も惜しまずに、各種の Java およびアジャイル開発に関するトピックの「主要なソース」を見つけようと努力しているからです。
  • JavaOne
    このカンファレンスは大規模で、形式張っていて、いつもサンフランシスコ (San Francisco) で開催されますが (この場所については、旅費として使える会社の予算によってはメリットになる場合もデメリットになる場合もあります)、この JavaOne ほど、Java に影響力を持つ多くのキーマンが一同に会するカンファレンスは他にはありません。
  • JAOO
    ヨーロッパの Java 同業者を除けものにしたりはしません。そこで紹介するのが、年に一回、デンマークのオーフス (Aarhus) で開催される JAOO です。このカンファレンスは 20 年近く堅調を続けており、その活力が衰える気配はまるでありません。JAOO は一流の講演者と著者を引き付けているだけでなく、特定の技術にこだわらないという点でも比較的珍しいカンファレンスとなっています。つまり、参加者は午前中、Java セッションに参加し、昼はランチを食べながら C++ の開発者とおしゃべりし、午後からは Microsoft® の Silverlight に関する最新の開発情報 (あるいは何らかの新しい開発についての情報) を入手し、そして夜には Smalltalker たちとビールを飲む機会が持てるといった具合です。視野を広げたいと思っているなら、JAOO あるいはその姉妹カンファレンスの QCon (InfoQ 開発者との共催) はその出発点として最適な場所となります。また、「地球の反対側 (オーストラリアやニュージーランド)」に住む Java の同業者たちのために、JAOO は 2008年に初めてブリスベーン (Brisbane) とシドニー (Sydney) でも開催されました。あらゆる点から考えると、今後数年のうちにはオーストラリアで再び開催されるはずです。
  • Devoxx
    以前は JavaPolis と呼ばれていたこのカンファレンスは、驚異的な成長を遂げているベルギーのアントワープ (Antwerp) で開催されるため、ヨーロッパの Java 開発者に会うには (そして、滞在中に素晴しいベルギー・ビールを味わうには) 絶好の場所です。講演者は一流揃いで、トピックは最先端の技術に重点が置かれます。また、程よい規模の会場には、同じ分野の開発者と交流する機会が溢れています。
  • Jazoon
    Jazoon は比較的最近になって開催されるようになったカンファレンスで、初めて開催されたのは 2007年、場所はスイスのチューリッヒ (Zurich) でした。Martin Odersk (Scala の作成者)、Neal Gafter、Simon Phipps (Sun の Chief Open Source Officer) などの名前を連ねた Jazoon には、魅力的な講演者たちが集まっています。Java のトピックだけに終始し、ヨーロッパのちょうど真ん中で開催される Jazoon は、ヨーロッパの Java 開発者たちがカレンダーに印を付けておくべき優れたカンファレンスだと思います。

他にもさまざまな聴衆を対象としたカンファレンスがありますが、上記に挙げたカンファレンスが直接対象としているのは Java 開発者です。世界観を広げようと思っている開発者であれば、世界中で開催されている Perl、Python、Ruby、さらには .NET 関連の各種カンファレンスなど、「他の」技術のカンファレンスに出席することも考えてください。新たな考えに対して心を開いておくことが、まったく新しい問題を検討するときに必要になることもあります。

開発者にとって、簡単に安価で手に入れられる昔ながらの本ほど、素晴らしいリソースはありません。地元の書店までのわずかな距離に (辺境の地に住んでいるのであれば、Web ブラウザーと Amazon に) 技術の知識、そして経験の宝庫が眠っているのです。ただし、無数の「便乗」本や「超初心者向け Java」の本をかき分けなければ、貴重な資料は手に入りません。

これらの貴重な研究書は、読者が Java 言語の実用的知識とツール一式を持っていることを前提とします。一方、初心者向けの Java の本は驚くほど共通していて、いずれもその内容の大半は同じ基本題材を取り上げています。どの本を選ぶかは、手法、著者の文体、さらには (演習が含まれている場合には) 演習の解答が本に付属の CD に載っているかどうかなどが基準となってきます。

基礎を学んだ後は、以下の本を読むことを検討してください。

  • Effective Java』(第 2 版、Joshua Bloch 著)
    すべての Java 開発者の本棚にあるべき、最も重要な本という説明に尽きます。この説明には疑問の余地も、例外もありません。
  • Java並行処理プログラミング ―その「基盤」と「最新API」を究める―』(Brian Goetz 著)
    すべての Java 開発者の本棚にあるべき、2 番目に重要な本です。すべての Java 開発者は、いやが応でもマルチスレッド環境の内部を操作しなければならないからです。
  • 軽快なJava―Better,Faster,Lighter Java』(Justin Gehtland、Bruce Tate 共著)
    このスリムな一冊は、多くの Java 開発者が「軽量コンテナー」環境を利用する際の「入門書」としての役割を果たします。Spring が先駆けとなった軽量コンテナーは、WebSphere などの超大型高速 EJB サーバーや、その他のトランザクション処理ミドルウェアの多くによって取り残された隙間を埋めます。この本の著者は、POJO ベースの開発サイクル全体を案内し、その構想の長所と短所を指摘し、そしてエンタープライズ・アプリケーションを Spring や Hibernate などのツールで作成するという (より) 軽量な手法を取っても、完成したシステムの機能や能力が損なわれることにはならないと説明することで、素晴らしい一冊に仕上げています。
  • Effective Enterprise Java』(Ted Neward 著 (私の著書です))
    エンタープライズ Java アプリケーション (Spring、EJB、Web サービスのどれで作成されているかに関わらず、そしてそのいずれも使用されていないとしても) が失敗に終わらないようにするには、75 の方法があります。『Effective Java』が Java プログラマーの初心者を対象とはしていないように、『Effective Enterprise Java』でも、「エンタープライズ Java」の基本を学習中の開発者を対象とはしていません。
  • Release It! 本番用ソフトウェア製品の設計とデプロイのために』(Michael Nygard 著)
    本番サーバーを対象としたソフトウェアを作成しようとする誰もが読まなければならない一冊です。この本では、本番環境では上手くいかない可能性のあることや、考えられる障害に対処する方法 (障害から復旧する方法、または障害を完全に避ける方法) について、優れた洞察力で検討しています。
  • Inside the Java 2 Virtual Machine』(Bill Venners 著) または『Component Development for the Java Platform』(Stuart Halloway 著) のいずれか
    Java 開発者がいったん Java 言語を学び終えると、そこには大いなる未知の分野が広がっています。それは基礎となるプラットフォーム、つまり Java 仮想マシン自体です。開発者はガーベッジ・コレクションや Reference オブジェクト、そして ClassLoader、スレッド、監視などについて探っていかなければなりません。この未知の分野を探検する際のガイドとしては、上記の 2 冊のいずれか (または両方) が役立ちます。いずれの本を読むにしても、最大の欠点はこれらの本が著された年代です。前者は Java 1.2 の時代に出版され、後者はその少し後になってから出版されました。幸いなことに、Java 仮想マシンのほとんどの部分は当時から変わっていないので、読者が JDK 1.2 との細々とした違いに気付くようになる頃には、この本を卒業して次のトピックに進む準備ができているはずです。
  • エンタープライズ アプリケーションアーキテクチャパターン』(Martin Fowler 著) および『Enterprise Integration Patterns』(Gregor Hohpe、Bobby Woolf 共著)
    2 冊ともデザイン・パターンに関する本で、設計の手法と概念について説明しています。そのため、デザイン・パターンを当初発表した「ギャング・オブ・フォー」として知られる Gamma、Helm、Johnson、Vlissides の著書『オブジェクト指向における再利用のためのデザインパターン』を読んでいることが前提となります。パターンに関する本は通常、基本的な概念上のビルディング・ブロックを提示し、開発者がこれらのビルディング・ブロックに手を加えて適切に編成できるようにすることによって、一層強固なデザインを実現できるようにしますが、ビルディング・ブロックそのものが目的となってしまうと、その有効性は失われがちです。
  • Java Power Tools』(John Smart 著)
    複数の人々が、Java エコシステムで使用できる各種ツールについてのわかりやすい入門書として、この本を薦めてくれました。著者の Smart 氏は、この本に関連したトレーニング・コース (Java Power Tools Bootcamp) も行っていますが、ほとんどの開発者にとっては印刷版が最も手っ取り早く情報を入手する方法となります。
  • The Pragmatic Programmer』(Andy Hunt、Dave Thomas 共著)
    すべてのプログラマーは、実際に使っている言語またはプラットフォームが何であろうと、この本を自分のデスクの上に用意しておくべきです。これは後世のための一冊で、今後何十年もの間、プログラマーたちはこの本を引用することになるでしょう。Fred Brooks の最高傑作、『The Mythical Man-Month』と同じ部類に入る本だと考えてください。
  • The Productive Programmer』(Neal Ford 著)
    最近出版されたこの本は、あらゆる点で『The Pragmatic Programmer』に匹敵するほどの傑作で、プログラマーが IDE の機能の枠を超えてその生産性を向上させるためのさまざまなヒント、コツ、そして手法に焦点を当てています。
  • Pragmatic Starter Kit
    この実用的スターター・キットは、『Pragmatic Unit Testing (with JUnit)』、『Pragmatic Project Automation』、『Pragmatic Source Control (with Subversion)』の 3 冊で構成されています。それぞれの本が、各トピックの中核を簡潔かつ集中的に説明し、寄り道することなく単刀直入に本題に入っています。特に『Project Automation』は、『Ant in Action』を読む前の導入として役立つだけでなく、優れたビルド・プロセスの理由と内容も説明しています。
  • Ant in Action』(第 2 版、Erik Hatcher、Steve Loughran 共著)
    Ant は、Java プラットフォームの主要なビルド・ユーティリティーです (ツールの詳細については、次のセクションを参照)。Ant によって提供される膨大な機能についての入門編としては、この本が抜群に優れています。『Ant in Action』では Ant の使用方法に併せ、ユニット・テスト、継続的インテグレーション、そして本番環境へのデプロイメントのプラクティスといったすべてを Java 開発者の実際の日常的作業からの観点で説明しています。

ツール

家を建てるには「ハンマーを手に取って、板を釘で打ち付ける」だけでは済まないように、Java 開発も「IDE を入手して、コードを作成する」だけの話ではありません。優れた IDE が Java コードを作成するのに大いに役立つことは確かですが、IDE 以外のツールでも、IDE を上回るとまでは行かないまでも同等の価値を提供してくれるツールがあります。

以下に、順不同で記載します。

  • IDE
    ツールとして最初に挙げられるのは、もちろん IDE です。商業的な推薦にならないようにする目的で、Eclipse と NetBeans をお勧めします。どちらも無料で入手できるオープンソースの IDE なので、「手始め」としては魅力的な選択肢です。
  • ユニット・テスト
    この分野で根強い人気を誇っているのはユニット・テスト革命の発端となった JUnit ですが、他にもよく使われるようになってきたツールがあります。その例には TestNG、そして当然のことながら JUnitPerf も入っています。
  • 継続的インテグレーション
    継続的インテグレーション・サーバーは常にソース管理とは別にコードをチェックしてビルドし、そのコードに対してユニット・テストを実行し、そして通常は E メールでビルドの失敗を開発者にレポートします。オープンソースのバージョンもいくつかありますが、注目を集めている継続的インテグレーション・サーバーと言えば、他数のプラグインと優れた拡張性を備えた Hudson です。その前身が CruiseControl であることだけを取っても、一目置かれています。
  • 静的分析
    FindBugs は Java コードに対して実行するオープンソースの静的分析ツールで、深い n 元分析を行って考えられるすべてのコード・パスを解明し、一連の拡張可能なルールに基づいて検出したあらゆる類のエラーと警告をレポートします。William Pugh (Java メモリー・モデルのバグを発見した、あの William Pugh) によって開発された FindBugs の最大の利点は、Java コードの並行性バグを分析できることです。その価値は、すべてのプログラマーが高く評価するはずです。
  • ネットワーク・パケット・トレース
    プログラマーにネットワーク上でやり取りされるパケットについての情報を表示する WireShark (かつては Ethereal と呼ばれていたツール) は、ネットワークを流れている情報がネットワークを流れることになっている情報であるのか、そしてネットワーク上にあるべきではない情報 (機密情報や平文のパスワードなど) がないかを検証する機会をプログラマーに与えます。
  • 仮想化
    VMWare、Xen、VirtualBox、VirtualPC などの仮想化ツール (プラットフォームと呼んだほうが正確かもしれません) によって、プログラマーはホスト PC 環境の生産性を犠牲にせずに、本番マシンが稼働することになる環境と同一の環境を作成することができます。また、生産性を維持しなければならないマシンをリスクにさらすことなく、「実験的」ソフトウェアを試す環境を用意するにも便利な方法です。ツールが完全なオープンソース・プロジェクトでなくても、大抵の場合は、ある種の無料オプションが用意されています。

上記の一部は商用ツールだという事実は恐れるに値しません。ツールによって節約できる時間が週に 1 時間だけだったとしても、ツールの採算が取れるまでの時間を考えてみてください。管理職がこの話に納得しないとしたら、特定のツールで節約できる時間 (開発者の作業時間、または本番環境の診断や実行のための時間) を慎重に計算して提示すると、大抵の場合は、けちけち出し惜しみする考え方が愚かであることを管理職に納得させる上で大いに役立つはずです。

コントリビューター方への感謝の言葉

今回のリストに含めるべきリソースを提案するために、忙しいスケジュールの中、時間を割いてくださった私のブログ (blogs.tedneward.com) の読者の皆さんに感謝いたします。全員ではありませんが、一部の方の名前 (敬称略) をここで挙げさせてもらうと、Greg Ostrovich、Ryan Slobojan、Hamlet D'Arcy (彼が希望する紹介文によると、「IT で金を稼いで部品を買ってハイパー・ブースターを修理して、いつの日か宇宙船が直ったら母星に帰ろうとしている、別の銀河からの亡命者」)、Pierre Marc-Larocque、Prashant Rane、Marc Stock、Eric Kerwin、Morten Anderson、Alex Miller、Yvonne Miller、Rahul Raj、Brian Sletten、Neal Ford が協力してくれました。

今後見守るべき動向

当然のことながら、Java 開発者が今日の技術の研究にすべての時間を費やしていたのでは元も子もありません。その研究が終わったときに、新しい技術が既に使われ始めていたら、学んだことのすべてが時代遅れになってしまいます。「今後の潮流」として話題にされているものに注意を向けておくことも同じく重要です。そうしておけば、エレベーターで偶然隣に乗り合わせた企業の CTO が「関数型言語という言葉をよく耳にするけれども、我々も調査する必要があるだろうか」と質問してきたときに、理路整然とした回答を返すことができます。

以下に、Java プラットフォームを取り巻く「今後」について、いくつかを順不同で挙げておきます。

  • 動的言語
    Groovy や JRuby のような言語から派生している他のプロジェクトにも注目する価値があります。例えば Clojure や Fan は、あまり強い型付けではない環境のほうが生産性を向上させ、より多くの選択肢を提供できるという概念を実験しているプロジェクトです。だからと言って、Java 言語を廃止しようとしているわけではありません。2 つを組み合わせることで、最大の効果がもたらされます。
  • 関数型言語
    Scala によって開拓されている関数型言語では、一般的な傾向として、関数が組み立て可能で共有状態がないようにすることが奨励されているため、暗黙のうちに並行性に適した性質を持つことになるというメリットがあります (ただし、それを作った者だけが満足する構文を持つ関数が出てくることも確実です)。Jaskell は JVM での Haskell 実装で、ここでも Clojure が適合し、本番形式でのソフトウェア・トランザクション・メモリーのあり方が示されます。
  • Java でのクロージャー
    クロージャー・サポート (ラムダ、または匿名メソッドとも呼ばれます) を追加すると、Java コーディング作業の特定の部分が単純化されるため、クロージャー・サポートを Java 7 リリースに組み込むかどうかが盛んに議論されているところです。この議論によってコミュニティーの意見が大きく二分されていることを考えると、多少の調査を行って、この騒ぎが一体何なのかを確かめることが Java プログラマーの義務となります。
  • Da Vinci Machine
    他の言語 (上述した動的言語や関数型言語など) でも扱いやすくなるように設計された、この新しいバージョンの JVM が、最終的に主流の JVM リリースに取り込まれることになるかどうかはまだわかりません。この Da Vinci Machine に注目していれば、動的/スクリプト言語を現在の JVM で実行する上での利点と欠点を理解できるようになるはずです。
  • ユーザー・インターフェースの開発
    Flash/Flex、Silverlight、および JavaFX のあいだでは、Web ブラウザーが驚くほど (そしておそらくは衝撃を受けるほど) 醜いプロポーションに変わろうとしています。こうした環境では、Java における新たなサーバー・サイドの Web フレームワークや、GWT (Google Web Toolkit) のような変わり者を検討することすらしていません。ユーザー・インターフェースはこれまで常に、実に魅力的でした。それは現在も変わらず魅力的であり、さらには近い将来もそうあり続けることでしょう。Swing や SWT などの「リッチ・クライアント」ライブラリーは言うまでもなく、ユーザー・インターフェースの 1 つや 2 つぐらい知っておくことが、HTML ページでは実現できないようなインタラクティブなインターフェースを作成しようとするときに、大いに役立つはずです。

「将来」に関連するあらゆる事柄と同じく、現在議論されていることが間違った方向性であることがわかったり、一瞬盛り上がって終わるだけであったり、一時的に本筋から外れたものであったりする可能性もあれば、業界に影響を及ぼすようであったり、次の目玉になったりする可能性もあることを念頭に置いておかなければなりません。偏見にとらわれないよう心掛けるだけでなく、それと同じくらいに健全な懐疑心も持ち続けてください。

まとめ

このリストには遠慮なく、リソースを追加してください。そうすることで、このリソースのリストの質は上がっても、下がることはありません。時間の経過に伴って、このリストの内容は変わってくると思います。それは、エコシステムは進化し、変化と成長を続けているためですが、それはよいことです。1995年当時の Java 環境をずっと使い続けなければならなかったとしたら、私たちはすでに Java 環境以外の方向に進んでいたことでしょう。

Java エコシステムのなかで積極的にパッチに貢献し、機能強化を提案してください。Java で万策尽きたら、そのときには独自のより優れたプロジェクトを立ち上げてください。今から 5 年後に、あなた独自のプロジェクトがこのリストに載っていないとも限りません。

参考文献

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Java technology
ArticleID=381424
ArticleTitle=Java に不可欠なリソース
publish-date=01232009