【フレームワークとは】Javaフレームワークの種類と定番なフレームワーク4選

【フレームワークとは】Javaフレームワークの種類と定番なフレームワーク4選 プログラミング
  • Javaにはどんなフレームワークがあるの?
  • Javaのフレームワークについて知りたい

Javaのフレームワークの種類が多く、学習や開発にどれを使うべきか悩んでしまいます。
「今後使用できなくなるフレームワークを学習してしまった」など、トレンドを知っておかないと学習時間も無駄になりかねません

プログラミング入門者から中級者の方を対象として、Javaのフレームワークについて紹介していきます。

本記事の内容

  • Javaフレームワークとは
  • Javaフレームワークの定番
以下での記事では、Javaについて解説しています。参考にどうぞ。
【Javaとは】Javaの基本とオブジェクト指向について理解する

【Javaとは】Javaの基本とオブジェクト指向について理解する

Javaフレームワークとは

Javaフレームワークの基本概念と役割

Javaフレームワークとは、Java言語でアプリケーションを開発する際の共通機能や基本的な構造を提供するツールです。
様々なシステムを作るにしても毎回必ず実装するオーソドックスな処理も存在し、そのような処理を集結させたものがフレームワークになります。

現在のシステム開発では、フレームワークに従ってコーディングを行い、エンジニアが必要な処理などを肉付けを行っていく開発方法が通常です。
フレームワークは優秀なエンジニアによって改善が繰り返されているため、効率的に開発ができる環境が整っています。

フレームワークを使わない開発はどうなのか?

フレームワークを使用しない開発の場合、開発者にとって自由度が高く、全てを一から作成できる利点があります。

ただし、同時に課題もあり、何もない状態から一から設計するため、多くのコーディングが必要になり、学習コストやプロジェクトの管理が煩雑になる場合があります。
また、アプリケーションに必要な機能を逐一作成する必要があるため、開発ボリュームが多くなり、優秀なエンジニアでも生産性は低下することが懸念されます。

Javaフレームワークの導入効果とは

Javaフレームワークを利用することで得られる導入効果は大きいです。

開発のスピードが向上し、プロジェクトの立ち上げが迅速にできる

フレームワークには標準化されたライブラリや機能が整備されており、開発者はそれを利用することで開発や課題・改善への対応が容易になります。

チームメンバー間のコードの一貫性が保たれる

フレームワークを使うことでコードの一貫性を保持することができます。
開発者が同じプロジェクトに参加しても、チームメンバー間で統一されたコーディングスタイルでコードを書くことが可能になります。

Javaフレームワークの定番

JavaのWebフレームワークとは

JavaのWebフレームワークの種類について見ていきます。

Webフレームワークとは、WebサイトやWebアプリケーションを開発で使用する頻度が高い機能や処理などをパッケージ化したものを言います。
汎用度が高く、定番として利用されているフレームワークには次のようなものがあります。

  • Spring Framework
  • JSF
  • Struts

Spring Framework

Spring Framework

引用:Special Features of Spring Framework

Spring Framework(別称:Spring)は、JavaのWEBフレームワークで、WEBアプリケーションの開発に利用されています。

DI(依存性注入)機能を備えたフレームワーク

Spring Frameworkは、DI(Dependency Injection:依存性注入)機能を備えたフレームワークとして定評があります。
依存性注入とは、オブジェクトの成立に必要なコードを分離し、プログラム実行時に注入する手法です。1つ1つのプログラムを独立させやすくなり、修正・変更に強い特徴があります。

依存性とは?
例として、以下のように該当する場合は依存していると言うことができます。
・他のクラスをローカル変数として持っている
・他のクラスがメソッドの引数、戻り値になっている

例えば、依存関係にある2つのクラスのうち、他のクラスが完成していない場合に、通常では完成済みクラスをテスト(単体テスト)することはできません。
依存性の注入により、完成済みクラスを独立させてテスト可能になります。

このため、システムの改修が必要な場合にも最低限の変更で済ませることができ、開発が楽になることが期待されています。

Spring Bootとの違いは?

Spring Boot

引用:[SpringBoot] bootJarで作成したFat jarにて複数起動クラスを扱う方法

Spring bootは、Spring Frameworkに含まれるフレームワークの一つで、Spring Frameworkの機能を使いやすくするためのフレームワークを言います。

Spring Frameworkでは、各フレームワークを使用するにあたってXMLファイル等の用意が必要であり、様々なフレームワークの提供で幅広い開発が可能です。
その反面、機能に合わせた環境設定が複雑になってしまうというデメリットがありました。

Spring Bootは、このようなデメリットを解消するために作られ、使いたい機能を選ぶだけで自動で初期設定を行ってくれます。


出典:Spring Bootの基本のキ

JSF

JSF

引用:Some thoughts on JSF…

JSF(JavaServer Faces)とは、Java EEに搭載されたJava言語におけるフレームワークの一種です。
Java EEを利用している場合には、有力なフレームワークの一つになります。

JSFは、WebアプリケーションのUI(ユーザーインターフェース)作成が簡単にできるよう設計されていて、Strutsと同じくWebアプリケーションのアーキテクチャとしてMVC(Model-View-Controller)モデルが採用されています。

メリットとして、MVCそれぞれが独立しているため、エンジニアごとに分業して開発を進められる特徴があります。

MVCとは
・ビジネスロジックを受け持つ「Model」
・画面表示や入出力を受け持つ「View」
・ModelとViewを制御する「Controller」
3つの要素に分けて設計する手法であり、機能別の分業や保守性を高めることを可能にします。

Struts

Struts

引用いまさらながらStruts

Struts(Apache Struts)は、古くから使われているWebアプリケーションの開発でも有名なフレームワークです。

Strutsは、MVC(Model-View-Controller)モデルを採用しています。
JSFと同じMVCモデルですが、厳密にはベースが異なる模様です。

Struts1とStruts2の2種類があります。

・Struts1:初期バージョン(2001年リリース)
・Struts2:シンプルなコードになり、生産性の向上が可能に(2007年リリース)
Struts1とStruts2は、仕様が大きく異なる別のフレームワークのため、互換性がありません。Struts2は現在もアップデートが進められています。

JavaのORMフレームワークとは

ORM(オブジェクト・リレーショナル・マッピング)フレームワークとは、データベースとオブジェクト指向プログラミング言語(Javaなど)の情報を「翻訳」する機能の仕組みを言います。

OracleのJava開発者への調査では、半数以上が「Hibernate」を使用しています。
また、4分の1近くの開発者が「従来のJDBC」、Spring開発者は「Spring JdbcTemplate」を選択しています。

Hibernateとは

Hibernate

引用:What is ORM

Hibernateは、データベースとの連携に優れ、開発プログラムからデータベースへの読み書き実行など、データアクセスに何度も同じことを書く必要がなくなるメリットがあります。
コード全体の記述量を減らすことができ、作業工程を削減することが可能になります。

特徴
・O/Rマッピング
・HQL
・導入負担が少ない

O/Rマッピング

O/Rマッピングとは、オブジェクト指向プログラミング言語においてリレーショナルデータベースのレコードを通常のオブジェクトとして操作する方法です。

Javaプログラムのデータアクセスの際に、次のような手間と時間がかかる対応が必要でした。
・検索クエリによって取得したデータを分解してオブジェクトに組み立て直す
・データのアップデートやインサートの際にSQL文を構築する

O/Rマッピングでは、リレーショナルデータベースのレコードをオブジェクトとして直接的に扱えるようになり、定型的な記述が不要で、より意図が明確に表現されているコードが表現されます。

リレーショナルデータベースとは、正規化を基本として登録処理や検索処理などを最適化するためにデータモデルが設計される考え方です。

O/Rマッピングについて詳しく知りたい場合は「段階的に理解する O/Rマッピング」の記事がおすすめです。

HQL

HQLというSQLライクなクエリを発行することで、検索条件を指定する方法があります。
Hibernateでは、HQL言語を備えており、柔軟な検索にも対応することが可能です。

HQLとSQLは非常に似たクエリ言語のため、HQLのために新しく言語を覚え直す手間は必要ありません。

SQLの柔軟性や機能をそのままに、オブジェクト指向風に少しラップしただけの言語と言うことができます。

導入負担が少ない

Hibernateの設計や用途はシンプルなものであるため、導入にそこまで負担がかかりません。
Javaを触ったことがあるエンジニアなら、習得にそれほど時間をかけずに使い始めることができます。

まとめ

Javaのフレームワークを活用することで、開発作業の効率化・生産性の向上が期待できます。
多くの実務現場でもフレームワークは使われており、中にはフレームワークのベースを基にした独自のフレームワークで開発する現場もあります。

Javaのプログラミング知識だけでなく、フレームワークの学習もエンジニアには必要だと思います。
トレンドを把握し、フレームワークの学習に役立てていただけたら嬉しいです。