TechReach エントリー

Java言語のフレームワークはこの5つを押さえよう【2022年版】

Java言語を使いこなすうえで、フレームワークの習得は重要な課題になってきます。この記事では、よく知られているJavaのフレームワークを中心に、全14種類のフレームワークを説明しています。また、フレームワークの選び方についても言及していますので、参考にしていただければ幸いです。

出典:Java

フレームワークとライブラリの違いをおさらい

フレームワークの紹介をする前に、混同しやすいライブラリとの違いについておさらいをしておきましょう。

  • ライブラリとは

Webアプリケーション開発時によく使う、作業の簡略化ができるコードの集まりです。例えばJavaの場合だと、アップロードした画像の解析やリサイズをおこなうOpenCV、グラフ描画に使うJFreeChartなどがあります。本来であれば必要になるコードの組み込みを省き、ライブラリを利用することによって簡単に処理ができるようになります。目的に沿った一部の機能を簡略化するものがライブラリです。

  • フレームワークとは

Webアプリケーションを開発するための機能を枠組みにしたものです。例えばJSF(JavaServer Faces)は、WebアプリケーションのUI(ユーザーインターフェース)を作るための枠組みです。フレームワークの並びを保てば、細部の変更でUIシステムの開発ができるようになります。一からプログラミングをせず、フレームワークに沿っての作業になるので工数の削減につながります。フレームワークは機能作成についての骨組み自体をパッケージ化し、一連の作業工程を簡略化しています。

知っておきたいJavaフレームワーク5選

数多くあるJavaのフレームワークの中から有名な5つを選出しています。確認しておきましょう。

JSF(Jakarta Server Faces)

Jakarta EE(2018年にJava EEから名称変更)という企業向けのWebアプリケーション開発、大規模サーバー構築に適したフレームワークの仕様の一つで、オープンソースになっています。 2019年にJava Server FacesからJakarta Server Facesに名称が変更されました。利用するためにはJava の基本的なAPIが搭載されているJava SEとNetBeans IDEをインストールする必要があります。

出典:Jakarta Faces | The Eclipse Foundation

JSFはUI作成に特化したフレームワークになっており、チェックボックスやテキストフィールド(文字入力欄)などのフォーム入力欄を作成するUIコンポーネント、名前やメールアドレスなどの必須項目の記入漏れがないかチェックするバリテーション、エラー発生時にユーザーの再入力を省略するステート管理などがあります。

また、JSFはMVC(Model、View、Controller)モデルという構造を用いているため、機能ごとに役割を分担することができます。それぞれが独立性を持って開発できるようになっているので、チームごとに分担して業務に取り組むことが可能です。

Spark Framework

オープンソースのフレームワークで、マイクロフレームワークという種類に属します。シンプルな構造のため、必要最低限のプログラミングで素早い作業ができるようになっています。小・中規模の開発に特化し、大規模で複雑なWebアプリケーション開発にはあまり向いていません。

出典:Spark Framework: An expressive web framework for Kotlin and Java

Spark Frameworkを用いるとアノテーション記述や設定ファイルが不要になるため、開発者の負担を減らしてくれます。また、複数コンピューターで並列処理ができるため、分析対象が多い、高速処理をするデータが多い、といった大量のデータ処理の効率化に役立ちます。

名前が似ているApache Sparkというフレームワークは別物になります。混同しないように注意しましょう。

Spring Framework

WebアプリケーションやWebシステム、クラウドアプリケーションなどの多様な開発に適したオープンソースのフレームワークです。

出典:Spring | Home

セキュリティ機能の開発に用いるSpring Security、クラウドアプリケーションの開発に用いるSpring Cloudなど、さまざまな機能を持ったSpring 〜といったフレームワークの総称をSpring Frameworkといいます。多くの企業が利用しており、Javaではトレンドのフレームワークです。また、エージェントの案件ではSpringと省略されることが多くなっています。

Spring FrameworkはAOP(Aspect Oriented Programming)、DI(Dependency Injection)によって開発がしやすく、Spring MVC Testによってテストが簡単にできるといった特徴があります。

  • AOP(Aspect Oriented Programming)

日本語ではアスペクト指向プログラミングといい、プログラミング手法の一種です。オブジェクトごとに存在する共通処理をアスペクトとして抜き出し、共通のプログラムを一括管理することができるようになります。アスペクトとしてまとめた部分とそれ以外の部分で記述をするので作業の効率化につながり、バグや不具合の原因特定、修正を容易におこなうことができます。

  • DI(Dependency Injection)

日本語では依存性の注入といい、設定ファイルを用いることでクラスAの利用のためにクラスBを呼び出す、といった依存関係の解消をすることができます。オブジェクト成立のために必要な記述を設定ファイルで呼び出し、管理することで記述の省略につながり、修正時の変更も最小限で済むようになります。

  • Spring MVC Test

Spring Frameworkで開発したシステムの専用テストプログラムです。一つ一つの処理を確認する単体テストではなく、一連の処理を確認する結合テストをおこなうことができます。Spring MVC Testを利用するとシステム結合時のバグを発見できるので、デバックの効率化につながります。

Spring Frameworkは多くの種類があり、幅広く開発に用いられています。しかし、その汎用性の高さのため環境設定が複雑になりがちです。そのため、環境設定の複雑化を解消するフレームワークである、Spring Bootをあわせて習得することをおすすめします。

Spring FrameworkやSpring Bootは学習コストや難易度が高いといえるかもしれません。しかし、フリーランスの案件で求められる機会も多くなっていますので、覚えておきたいフレームワークにあげることができます。

Play Framework

JavaとScalaで利用ができるオープンソースのフレームワークで、Webアプリケーションとバックエンドの開発で利用されています。既存のJavaフレームワークの複雑さや生産性を改善するため、RubyのRuby on RailsやPythonのDjangoといったフレームワークから影響を受けて作成されました。

出典:Play Framework – build Web applications with Java & Scala.

Ruby on RailsやDjangoと同じくMVCモデルを採用しているので、独立性を持って開発ができ、メンテナンスもしやすいといった特徴があります。また、メモリ使用量やCPUリソースが少なく、軽量で生産性が高い点も見逃せません。コンパイル作業も不要なので、スピード感のある開発が可能です。

Play Frameworkは現在でも開発されているフレームワークです。そのため、最新技術にも対応しています。今後も需要が高まるであろうビッグデータにも用いることができるので、将来性は高いといえるでしょう。学習コストもそれほど高くありませんので、検討するべきフレームワークの一つです。

Apache Struts

Webアプリケーション開発に使う、MVCモデルのオープンソースフレームワークです。

出典:Welcome to the Apache Struts project

2001年にStruts 1.xがリリースされ、当時複雑化していたJ2EE(以降Java EE、Jakarta EEと名称遷移)での開発を容易にし、2005年頃にはWebアプリケーションフレームワークの業界標準といえるほどのシェアを持っていました。

その後、Spring Frameworkの登場により技術的な欠点も指摘され、Struts 1.xとはまったく別のフレームワークとしてStruts 2.xが2007年にリリースされます。しかし、Struts 1.xでは2014年に、Struts 2.xでは2017年に、第三者がシステムを動かすことができる、個人情報を盗み取ることができるなどの脆弱性が発見されてしまいました。

現在でもStruts 2.xで開発したシステムを利用している企業は多数あります。そのため、脆弱性問題が発覚した際はパッチファイルという修正プログラムをダウンロードしなくてはなりません。そのような点から、Apache Strutsは新規Webアプリケーション開発にほとんど使われておらず、新しいフレームワークへ移行をする企業も増えてきています。

その他のJavaフレームワーク

Javaには他にもさまざまなフレームワークがあります。確認しておきましょう。

  • Apache Wicket

出典:Apache Wicket

2005年にリリースされたオープンソースのWebアプリケーションフレームワークで、UIシステムの開発に特化しています。一般的なフレームワークと違い、Apache Wicketを使えば設定ファイルやアプリケーション設定でのソースコードの記述をする必要がなくなります。そのため 、HTMLとJavaのコードのみで Webアプリケーションのほとんどが記述できるようになり、シンプルな開発が可能です。

  • Dropwizard

出典:Home — Dropwizard

企業向けソーシャルネットワークサービスのYammer(2019年からTeamsに名称変更)のバックエンド開発のために2011年にリリースされた、オープンソースのWebアプリケーションフレームワークです。サーブレットコンテナのjettyが標準装備されているためtomcatなどを準備する必要がありません。

また、通常であれば用途ごとに必要になる複数のJARファイルが不要で、1つのJARファイルだけで作動できることも大きな特徴です。利用実績は少なくなっていますが、今後シェアを拡げる可能性があるフレームワークと言われています。

  • Grails

オープンソースのWebアプリケーションフレームワークで2005年にリリースされました。Javaから派生したGroovyというスクリプト言語をベースにし、SpringBoot上に構築されています。そのため、Java系技術への統合や相互運用が可能になっており、SpringBootの作業効率化に役立ちます。プラグインの種類も多く、拡張性が高くなっています。

  • GWT(Google Web Toolkit)

Googleが開発したオープンソースのWebアプリケーションフレームワークで2006年にリリースされました。Ajax(Asynchronous JavaScript + HTML/XML)を利用したWebアプリケーションを表示する際に、GWTのコンパイラがブラウザに適したJavaScriptやHTMLのコードに変換してくれます。そのため、通常であればAjax利用時に必要なJavaScriptやHTMLの細かいブラウザ設定を省略し、フロントエンドの部分をJavaだけで記述することができるようになります。

  • Hibernate

オープンソースのフレームワークで、Javaのオブジェクトとリレーショナルデータベースをマッピング(関連付け)するO/Rマッピングライブラリです。Hibernateを用いるとオブジェクトとリレーショナルデータベースごとに必要なコード記述が不要になります。そのため、記述ミスによるバグの防止や工数の削減が可能です。プロジェクトの規模に関わらず利用できるため、マッピングライブラリとして広く利用されています。

  • JUnit

1997年に開発された、Javaプログラムの単体テストをおこなうオープンソースのフレームワークです。テストコードだけを作成し管理することができるので、単体テストを簡単にし、工数の削減につながります。Javaを用いるシステム開発では頻繁に用いられるフレームワークです。

  • Ninja framework

2012年にリリースされた、WebアプリケーションやWebサービスの開発に用いるマイクロフレームワークです。シンプルな構造で使いやすく、フルスタックなのでNinja frameworkだけで開発することが可能になっています。しかし、マイクロフレームワークの特性上、開発可能なシステムは限定的なものになります。

  • SAStruts (Super Agile Struts)

Seasarプロジェクトが提供する、Apache Strutsをベースに開発された日本国産のオープンソースフレームワークです。設定ファイルを自動作成してくれるのでは、Apache Strutsを使った開発で頻出する設定ファイルの複雑化を防ぎ、工数の削減につながります。また、ホットデプロイ機能があるので、WebアプリケーションやWebサービスのプログラミング書き換え時に、システムの一時停止や再起動をせずにリリースすることができます。

  • ZK

UI開発時にJavaScriptを使わずにAjaxを実現することができる、オープンソースのWebアプリケーションフレームワークです。JavaScriptを用いず、Javaの記述だけでUIを動的ページにすることができます。UI開発のためのコンポーネントが多数用意されているため、組み合わせを変えるだけで独自性を持ったWebアプリケーション制作が可能です。

学習するフレームワークの選び方

フリーランスとして働くのであれば、案件数の多さで学習するフレームワークを選ぶと仕事につながりやすいでしょう。弊社TechReachの案件数は、Spring Framework、Spring Boot、Apache Struts、JUnit、JSF、Play Frameworkの順になっています。なかでもSpring FrameworkとSpring Bootは他のフレームワークに比べて案件数が多く、Udemyなどのオンライン講座もあり学びやすい環境が整っています。

その他には、Play FrameworkだとJavaの他にScalaでもプログラミングができるので、両言語を習得している方は覚えるべきフレームワークと言えるでしょう。加えて、Play Frameworkはビックデータにも対応しているので、将来的に需要は増えていくと予想できます。現在の案件数をもとに考えると、Apache Strutsも選択肢の一つに入ってきます。

案件数や将来性、学習環境の有無などがフレームワーク選びのわかりやすい基準になるかと思います。しかし、自身がどのようなシステム開発の仕事をしたいかという点も大切にしたいところです。フレームワークを取り巻く環境や、自身の気持ちを鑑みたうえで、学習するものを選んでいきましょう。

開発の際のフレームワークの選び方

Javaで開発をする際に、どのフレームワークを用いるかは重要なポイントになります。ここまで説明してきたように、Javaのフレームワークには多くの種類があり、開発規模の大小や将来性、利用目的や実績など、複合的に判断する必要が出てくるからです。

開発目的により異なってきますが、大規模案件ではSpring FrameworkおよびSpring Boot、小規模ならSpark Frameworkがフレームワークの特性とマッチしてくるかと思います。また、将来性から見ればPlay Frameworkを用いるべきで、Apache Strutsでの新規開発はおすすめしづらくなります。加えて、Ninja frameworkは日本での開発実績がほとんど見受けられません。

システム開発をすれば、よほどのことがない限りシステム移行はされません。現状だけではなく、先々を見越した上でフレームワークを選んでいく必要があります。

まとめ

Javaは1995年に開発され、現在でも世界中で利用されているプログラミング言語です。たくさんの企業で採用されているため求人数も膨大にあり、それに比例するようにJavaエンジニアの人数も多くなっています。

そのため、Javaエンジニアとしてフレームワークを習得することは、差別化を図るうえでも重要になります。作業の効率化にもなりますので、何かしらのフレームワークを身につけ、キャリアアップにつながるよう行動してみてください。

関連記事

サービスにご興味のある方は「エントリー」へお進みください。