これから Java EE を始める方へ

この記事は Java EE Advent Calendar 2017 の 23 日目です。昨日分は @HirofumiIwasaki さんの「Java EE 8で何が変わったのか」です。

さて、今回は 1 日早いクリスマス・プレゼントとして、これから Java EE を始めようと考えている方へのアドバイスをお伝えします。すべて鵜呑みにしない方が良いですが、半分くらい私の失敗を踏まえているため、大きく外したことは言っていないはずです。ご参考までに。

心構え

初日の記事でも触れましたが、Java EE はライブラリとフレームワークの集合体です。全部を使うケースは極めてまれで、ほとんどは構築するシステムの特性に応じて必要なものを組み合わせて使います。現在は Web システムが多いため、Web の関連する仕様を中心に覚えておくと良いでしょう。

かつて私とうらがみさん @backpaper0 が語り合い、「Java EE をすべて理解するには人生は短すぎる」という結論に達しました。すべてを網羅しようと意気込むのではなく、よく使う機能から少しずつ覚えていきましょう。

以降、Java EE を始めるのに必要なもの―実行環境、開発環境、Knowledge―をご紹介します。

実行環境

Java EE アプリケーションは作成しただけでは動かすことができず、ライブラリやフレームワークを含む実行環境が必要です。具体的には、JDK と Java EE サーバーを用意します。

JDK

Java EE サーバーもつまるところ Java のプログラムですので、それを実行するための Java VM が必要です。一部の API で開発用ツールを呼び出すことがあるため、JDK 一式を用意しましょう。できれば JDK 9 を使いたいところですが、本稿執筆時点ではいくつかの Java EE サーバーで動作不具合が報告されているため、さしあたっては JDK 8 の最新版を選択するのが無難です。

Java EE サーバー

Java EE のメリットはマルチベンダーであることですが、それは同時に選択肢に悩まされることでもあります。これといった決め手 (例: 職場で使っている Java EE サーバー) がない場合には、とりあえず Open LibertyWildFlyPayara の 3 種類から最初の 1 つを選びましょう。これらはいずれもオープンソースであり、これらを基にした商用版 (WebSphere LibertyJBoss EAP、Payara) も用意されていることから、個人での学習から実際の業務システム構築まで一貫して使い続けることができます。本稿執筆時点ではいずれも Java EE 7 対応版ですが、そう遠くないうちに Java EE 8 対応版もリリースされるでしょう。

  • Open Liberty -- IBM WebSphere Liberty のコア部分をオープンソース化したものです。商用環境向けの高度な機能は除外されていますが、開発者の自習環境としては十分な機能を備えています。単独の Java EE サーバーとしても動作はしますが、基本的には統合開発環境と組み合わせて、Java EE 7 アプリケーションと一緒にパッケージして実行する使い方を想定しています。
  • WildFly -- Red Hat JBoss Enterprise Application Platform (JBoss EAP) の先行版として開発されているオープンソースの Java EE サーバーです。WildFly で発見された不具合を修正し、商用向けの管理コンソール等の機能を追加したものが次期 JBoss EAP となります。マイクロサービス向けに WildFly とアプリケーションを 1 つの JAR ファイルにまとめる WildFly Swarm という派生版もあります。
  • Payara -- Java EE のリファレンス実装である GlassFish を改良し、定期的に不具合修正や機能拡張を行っているオープンソースの Java EE サーバーです。ベーシックな構成の Payara Server とマイクロサービス向けの Payara Micro があります。日本語化された管理コンソールは好評です。この 3 種類では唯一、オープンソース版と商用版が全く同一のバイナリとなっています。

※Payara については、2018 年第1四半期を目途に Java EE 8 への正式対応が予定されており、既にプレビュー版がダウンロードできるようになっています。

開発環境

統合開発環境

高機能エディタ、デバッガ、開発ツールが一体となった統合開発環境 (IDE) を使うと便利です。IDE は何種類もあるので自分に合わないと感じたら他の IDE に乗り換えた方がいいでしょう。EclipseNetBeansIntellJ IDEA の 3 種類が最も人気のある IDE で、これらのいずれかを選択すれば使い方等の情報には困らないでしょう。IDE は難しく感じたら無理をしてまで使う必要はないツールですが、Java EE のアプリケーションは最小限のサンプルプログラムでもソースファイル 1 つで済むような規模ではないため、直接プログラミングと関係のない部分を自動化してくれる IDE を利用した方が得策でしょう。

  • Eclipse -- Java VM がまだこなれておらず IDE も動作が遅く不便だった時代に、軽快な動作とプラグイン方式の拡張機能を引っ提げて登場し開発の現場を席巻した IDE です。日本国内では日本語化プラグイン Pleiades とセットで広く普及しています。Java VM の完成度が高まった現在では他の IDE に対する速度的・機能的優位性は薄れており、他の IDE (特に IntelliJ IDEA) に乗り換えるユーザーも後を絶ちませんが、いまだに根強い人気があります。
  • NetBeans -- Java とともに発展してきた IDE で、一時期は Java で最も標準的な IDE として位置づけられ、各種サンプルが NetBeans 前提で作られていました。日本人開発者が多く携わり、完全な日本語対応がなされているのも特徴です。VisualVM や Oracle SQL Developer といったツールのベースにもなっています。現在は Apache Foundation に移管され、開発が継続されています。
  • IntelliJ IDEA -- 古株の Java IDE では Eclipse の勢いに押されず独自の地位を保ってきた製品で、最近では Eclipse や NetBeans に先行して Java の新機能をサポートしたり、開発を容易にするツールを多く同梱するなどして、ユーザーを多く獲得しています。チェコの JetBrains 社が開発する有償製品ですが、オープンソース化され基本機能に限定した無償の Community Edition も用意されています (Java EE 開発は有償の Ultimate Edition でのみ可能です)。ライセンスは JetBrains 社から直接購入できる他、日本国内に正規代理店 (サムライズムうぃる) もあり、法人での購入も比較的容易です。

構成管理ツール

現在は Apache MavenGradle 等のビルドツールで必要な外部ライブラリを含めて管理します。統合開発環境にも Maven や Gradle が含まれています。Maven には少々融通が利かない面もありますが、Maven の基本的な使い方を覚えておかないと詰むことが多々あります。現在では主要なライブラリが Maven Central Repository というサイトに集約され、そこから Maven 経由でライブラリをダウンロードする仕組みが普及しているため、IDE よりもむしろ Maven の知識の方が重要かもしれないとさえ個人的には感じています (私はいまだ Maven に苦しめられています)。Maven ではなく Gradle を使用する場合も Maven Central Repository にアクセスすることには変わりありません。

もう 1 つ、ソースコードのバージョン管理ツールも重要なツールといえます (システム開発の現場では必ずと言っていいほど使用していると思います)。これも主要なツールがビルドツール同様、統合開発環境に含まれています。おそらく CVS、Subversion (SVN)、Git、Mercurial (Hg) のうち少なくとも 1 つ (製品によってはすべて) をサポートしているでしょう。ただし、前述のビルドツールと異なり、学習し始めの頃はなくても差し支えないものではあります (せいぜいサンプルコードのダウンロードに Git を使用する程度)。全体的には Git がかなり普及していますが、システム開発の現場では Subversion もよく使われています。個人的には両方を見てそれぞれの長所・短所を理解した上で Git を選択するのがベストだと考えていますが、余裕がなければ最初に Git を選択しても外れではありません。

ネット上で Subversion (あるいは CVS) を使っている等公言すると、この世知辛いご時世では迫害されるケースもないとは言えません。Git より Subversion の方が自分にあっていると感じたのなら、そのことを黙って使い続けましょう。Subversion を愛用すること自体が悪いとは私は思いません。

参考までに、Git と Subversion の参考書を挙げておきます。必要になった時、書店で探してください。

わかばちゃんと学ぶ Git使い方入門

湊川あい (著)

現時点で Git の参考書を 1 冊選ぶのであれば、私個人的にはこちらをお薦めしています。表紙から受けるイメージに反して、比較的深いところまで触れています。

実用 Subversion 第2版

C. Michael Pilato、Ben Collins-Sussman、Ben Collins-Sussman (共著)

Subversion の開発者が自ら執筆した解説書です。以前は Web で日本語訳が公開されていたのですが、今は書籍だけのようです。

Hello, world のためだけに、我々は多数のツールの使い方を覚えなければならなくなっている。寒い時代だと思わんか?

Knowledge

学習書

多少英語が読めるようであれば、Java EE チュートリアルをおすすめします。よく使う機能から他ではあまり触れられていない機能まで、一通りを学ぶことができます。

Java EE チュートリアルの関連である「Java EE SDK」とは、GlassFish に Java EE チュートリアルのサンプルプログラムを同梱したセットです。サンプルプログラムは単体でも配布されていますので、他の Java EE サーバー (Payara 5 のプレビュー版がおすすめ) で試すこともできます。

日本語の場合は、Webで体系的な知識を得るのがほぼ不可能であるため、書籍に頼るところとなります。Java EE 7 対応版によりますがいくつか書籍が出ています。Java EE 8 も Java EE 7 + α 程度の仕様であるため (詳細は昨日の岩崎さんの記事にて)、内容はそのまま活かせます。

パーフェクト Java EE

井上 誠一郎、槙 俊明、上妻 宜人、菊田 洋一 (共著)

内容を Java EE 7 Web Profile (Web アプリケーション向けサブセット) に限定する代わり、中核技術―CDI、JSF、JPA、JAX-RS 等―に的を絞って重点的に解説しています。どの章も良質ですが特に CDI の解説は秀逸です。筆者曰く「初心者向けではない」とのことですが、実際のところそれをどう捉えるかは読者次第でしょう。

Java EE 7徹底入門 標準Javaフレームワークによる高信頼性Webシステムの構築

寺田 佳央、猪瀬 淳、加藤田 益嗣、羽生田 恒永、梶浦 美咲 (共著)、小田圭二 (監修)

Java EE 7 に関する実質的な日本オラクル公式解説書という位置づけです。Web Profile 中心の解説は「パーフェクト Java EE」と似ていますが、品質においてはやや劣ります。ただし JSF の解説は必見。複数章を割き基礎から丁寧に解説しています。

わかりやすいJavaEEウェブシステム入門

川場 隆 (著)

Web アプリケーション開発に特化して Java EE 7 を解説した書籍です。内容はかなり丁寧に書かれていますので (GlassFish の Java DB 関連バグ回避手段をあたかも必須手段であるかのように説明するのはどうかと思いましたが...) 前 2 冊よりも敷居が低いのは確かでしょう。その代わり、取り上げる内容は限定され、JAX-RS が取り上げられていないなどの妥協点は見られます。

アプリケーションアーキテクチャ設計パターン

斉藤 賢哉 (著)

名著「マスタリング Java EE 5」の斉藤さんによる新しい書籍です。本著は表題通り、アプリケーションをどう作るかに焦点を置いた解説がなされていますが、コーディング例に最新の Java EE 8 が取り入れられているのは特筆すべきです (もちろん、他の要素技術も紹介されています)。Java EE + 周辺を学ぶのに適しているかと思います。先の 3 冊よりはやや高難易度かもしれません。

FAQ、Tips

ある程度まとまったものとしては、個人的には IBM が公開している developerWorks がおすすめです。日本語で、丁寧かつ詳細に書かれています。Open Liberty に最も適しますが、WildFly や Payara にも当てはまります (そこが標準規格である Java EE の利点でもあります)。また、内容は上級向けですが、ドイツのJava Champion Adam Bien のブログは興味深い内容が満載です。Tips だけでなく読み物やインタビュー記事もあります。

はじめのうちは「やってみた」系 (How) の記事よりも、「なぜそうなるか」系 (Why) の記事を多く見ておいた方が良いでしょう。「やってみた」系記事だけでは知っておかなければいけない背景知識が身につかないのと、「やってみた」系の記事には筆者が偶然できただけの再現できない方法が載っている場合があるためです (もちろん、有益な情報も多くあります)。日本人の技術ブログ (Qiita 記事含む) で圧倒的に多いのが「やってみた」系なのですが。

FAQとしては Stack Overflow (英語) が定番です。日本語版 Stack Overflow もありますが、内容は薄めであまり期待はできません。他の技術にも共通していますが、英文の読解能力が問われます。

文献一般、特に Web に言えることですが、情報は鮮度も重要です。日付を確認し、古いものについてはもう通用しない内容かもしれないことを考慮しましょう。

Java EE は、思い立ったら今日からでも始められます。では、ともに行きましょう!