- 更新日: 2017年02月28日
- 公開日: 2016年03月11日
これで開発を爆速化!覚えておきたいJavaフレームワーク7選
ScalaやRubyなど、現代的なプログラミング言語が次々と生まれ普及していっていますが、企業向けシステム開発の現場ではまだJavaが現役バリバリで使われています。そしてそのJavaも、Java8では言語仕様を大幅に追加し、時代に合わせた変化を見せています。
新人プログラマ、特にSEとしてプログラムを学ぶ時には、Javaの知識は必須と言えるでしょう。 さて本エントリではJava言語で使えるフレームワークをご紹介します。フレームワークと言っても範囲が広いので、今回はユーティリティ系とWebアプリケーションフレームワークに絞ってご紹介しましょう。
ユーティリティ系
ユーティリティ系のフレームワークは、プログラムの一般的な問題を楽に解くためのものです。代表的な例は文字列操作ライブラリでしょう。
Java Collections Framework
Java Collections Frameworkはコレクション、つまり多数のデータを扱うためのフレームワークです。標準ライブラリに含まれており、java.utilパッケージとしてよく使うデータ構造やデータ操作が提供されています。例えば配列の操作やソートなどが含まれます。
Java Collections Frameworkの特徴は、インターフェイスと実装が分かれていることです。例えばListというインターフェイスは連続する値のリストを表現しますが、その実装としては
- ArrayList:配列を使った実装(読み込みは早く書き込みが遅い)
- LinkedList:連結リストを使った実装(書き込みが早く読み込みが遅い)
どのようなインターフェイスと実装クラスがあるかは、こちらのページによくまとまっていますのでご覧ください。
commons-lang
前項で紹介したJava Collections Frameworkはコレクションに関するユーティリティであり、それ以外の問題は解決してくれません。そしてJavaには「それ以外の問題」が多くあるのです。例えば文字列操作がその代表格で、Javaが標準で提供する文字列操作機能はごく基本的なものに留まります。
というわけで、commons-langは痒いところに手が届く・・・と言うよりは痒いところを専門で扱うライブラリです。
APIドキュメントを眺めると
- 並行制御
- 例外処理
- 数学関数
- 値のペアを扱うためのクラス
Guava: Google Core Libraries for Java
GuavaはGoogleが提供しているユーティリティです。提供している機能の多くはcommon-langと重複していますが、コレクションに関する操作が充実しているなど、より品揃えが豊富です。
JUnit
ユーティリティ系の最後は、今やJava開発で欠かせない単体テストツールであるJUnitです。
JUnitが登場する以前の単体テストと言えば、テスト仕様書を作り手動でテストを実施するのが当たり前でしたが、JUnitは「プログラムのテストをプログラムで書く」というスタイルを定着させた偉大なフレームワークです。
他の言語でも似たようなコンセプトのフレームワークが提供されていることが多く、それらを総称してxUnitと呼ぶことがあります。JUnitに触れておけば、他の言語でも似た感覚で使うことができるため、一度はJUnitによる単体テストのスタイルを体験しておくことをおすすめします。
Webアプリケーションフレームワーク
Javaのフレームワークと言えば、Webアプリケーションを作るためのフレームワークを思い浮かべる方が多いかもしれません。JavaはWebアプリケーションの普及にうまく歩調を合わせて進化してきたため、Webアプリケーション領域のフレームワークは非常に多くの種類があります。
ここでは特に重要と思われるものに絞ってご紹介します。
JavaEE
Webアプリケーションを作るための機能をフルスタックで備えるフレームワークです。JCP(Java Community Process)によって仕様が策定されていて、「Java標準のWebアプリケーションフレームワーク」と言えます。
提供する機能は多岐に渡りますが、特に重要な機能としては以下のようなものが提供されています。
- Webプログラミングに関する基本的なインターフェイスを定義するServlet API
- DBアクセスに関するAPIセット(JTA/EJB/JPAなど)
- 依存性注入を実現するCDI(Contexts and Dependency Injection )
JavaEE最大の利点は、「JavaEEさえあれば良い」という点です。JavaEEにはWebアプリケーション開発に必要な機能が一通り揃っているため、すぐに開発を始めることができるのです。
一方、弱点は仕様が大きすぎて変化に時間がかかることです。現在の最新仕様であるJavaEE7は2013年5月にリリースされたものであり、既に3年以上が経過。次のバージョンが待たれます。
Spring Framework
Spring Frameworkは現場でとても頻繁に目にする超有名フレームワークです。もともとはDI機能のみを提供するライブラリだったのですが、長い年月で進化と拡大を続け、今やWebアプリケーションだけでなくあらゆる領域をカバーする巨大フレームワークになっています。
JavaEEと違い、進化が早く、新しい機能がいち早く提供されるのが大きな利点です。
一方、機能が多すぎて、機能の取捨選択やライブラリをかき集めるのが大変という辛さがあります。
しかし近年はブラウザ側のフレームワークがリッチになる傾向があり、Wicketはこの流れに反しています。良いフレームワークなのですが、近年の流れにどう追従するのか、注目されるところです。
Play Framework
最後に紹介するのは変わり種でありながら高い人気のあるPlayです。あの偉大なプロダクトRuby on Railsをお手本に作れられていて、高生産性と動作に必要なリソースが少ないことがウリです。
これまでに紹介した中で最も新しいWebアプリケーションフレームワークであり、JavaだけでなくScalaでも使えるのも大きな特徴です。と言いますか、Playの高生産性を発揮するにはScalaを採用するのが望ましいです。
Javaはまだ現役ですが、ポストJavaとしてScalaは有力です。何せJavaの資産を捨てずに済みますから。ScalaのWebアプリケーションフレームワークに触れておいても損はないと思います。
\エンジニア最強言語のJavaスキルが身に付く/
まとめ
Javaのフレームワークで特に重要なものをピックアップしてご紹介しました。
ユーティリティ系は普遍的な問題を扱っており、どれも歴史あるプロダクトです。まだしばらくは陳腐化しないため、今からもで勉強する価値が充分にあります。
Webアプリケーションフレームワークはたくさんのプロダクトがありどれを勉強するか迷いますが、現状ではJavaEEとSpringを押さえておけばまちがいないでしょう。しかし将来の主流は変わる可能性がありますので、様々なフレームワークと業界の動向を注視しておくのが重要です。
フレームワークの動向を見ることは、プログラミングのトレンドをつかむことにつながります。ぜひ様々なフレームワークに触れるように習慣づけてください。
- この記事を書いた人
- tomo