- 更新日: 2017年05月31日
- 公開日: 2017年05月30日
Javaのフレームワークとは何か?おすすめ5つを徹底解説!
Javaを学習中のみなさん、「フレームワーク」という言葉は既に目にされましたか? フレームワークとは、一言で表すと「開発を簡単にするための、ソフトウェアの土台」です。字面を見ると少し難しい印象があるかもしれません。しかしフレームワークを用いた開発はJavaのみならず様々なプログラミング言語で使われる、効率化に有効な手法です。Javaの場合は多くのフレームワークがあり、適切なフレームワークを選ぶことによって開発効率が変わってくることもあるかもしれません。
この記事では「フレームワークってなに?」「Javaの有名なフレームワークにはどんな特徴があるの?」と疑問をお持ちの方に向けて、フレームワークの概要と用語、5つのJavaフレームワークを簡単に解説します。
ソフトウェアにおけるフレームワークとは
フレームワーク(framework:枠組み)は、特定のプログラミング用語で書かれた、半完成品のソフトウェアです。フレームワークのなかには、
- 様々な開発で使える、再利用可能な機能(クラス、ライブラリ、モジュール、APIなど)
- そのまま利用できる主要部分のひな形(テンプレート)
- 開発者が機能を追加するための仕様や規約
が含まれています。これら既存の機能に加えて、開発者がさらに機能を追加することにより、目的のソフトウェアをより早く完成させることができます。
機能の集まりといえばライブラリやモジュールを連想するかもしれませんが、違いは
- ライブラリ:全体を制御するコードは開発者が記述、開発者側がライブラリの機能を呼び出す
- フレームワーク:全体を制御するのはフレームワーク側のコード、個別に追加された機能を呼び出す
というように、制御のためのコードがフレームワーク内にある点です。
フレームワークを使うメリット・デメリット
メリット
開発期間を短縮化
開発を1から行うと、多大なコストと時間を要します。フレームワークを使う場合は、既に出来上がっているものを改良することになるので、フレームワークをある程度理解していれば開発期間の短縮が見込めます。
チーム内で共有、品質向上
技術力やコーディング手法がバラバラなメンバーを集めたチームの場合、プログラムの品質を保ち、運用開始後も保守をしやすくするためには、開発初期の段階でコーディングのルールを決めておく必要があります。フレームワークの利用は、各々の考え方を統一することにも一役買います。
デメリット
エンジニアの技術力向上は……
既にある技術を使うので開発の効率化は見込めますが、これはフレームワークの詳細な仕組みを知らなくてもプログラムを書けてしまうということにもなります。そしてそのフレームワークに特化したプログラムの書き方をすることになります。開発を1から行う場合と比べ、エンジニアの技術力の向上は期待できないかもしれません。
ただJavaの場合、求人情報によっては、求められる技術として特定のフレームワークが指定されていることがあります。目指す企業があってフレームワークの知識を求められるのであれば、深く学んでおくのも一つの手となるでしょう。
Javaのフレームワークとは
Javaは歴史が長く利用人口も多いために、機能が豊富なものから軽量化を目指したものまで、様々なフレームワークが作られ改良されてきました。現在も多くのフレームワークが存在します。(単にフレームワークというと、Webアプリケーションのためのフレームワークを指す場合もあります。)
以下、有名なWebアプリケーションフレームワークを5個ご紹介します。
Spring Framework
画像出典:Spring Framework
概要
オープンソースフレームワークで、単にSpringと呼ばれることもあります。データベースへのアクセスやトランザクション処理などをサポートするフレームワークをはじめ、多数のフレームワークの集合体です。
特徴
様々な機能を持っていますが、初期からの主な特徴はDIとAOPです。
DI(Dependency Injection:依存性注入)
オブジェクトが他のオブジェクトを利用するコードを「依存性」のあるコードと呼び、実行時に結合する設計思想のことをDI(Dipendency Injection:依存性注入)といいます。
たとえば、あるプログラムAが、別のプログラムB内に処理を移動させて戻るようなプログラムだったとします。プログラムAが完成し、試験を行いたいと思っても、プログラムBができていないと試験が不可能で、不具合があったとしてもプログラムAにあるのかプログラムBにあるのかがわかりにくくなります。
これがプログラム間の依存性が高い状態。これはシンプルな例ですが、システムの規模が大きければ大きいほど問題は大きくなります。
DIはこの依存性を排除するということです。依存性の排除で結果的にコードの簡素化、テストの簡易化、コード改修・移行の簡易化が見込めます。
AOP(Aspect Oriented Programming:アスペクト指向プログラミング)
Javaでは、属性(データ)と操作(メソッド)の集合であるクラスを単位としていますが、このクラスに分解できない要素も存在します。分解できないものは複数のクラスに跨る操作となるため管理が難しく、変更の際はすべてのコードから変更箇所を探すというコストのかかる作業となります。
この分解できない要素を「アスペクト(Aspect)」としてモジュール化し、管理・変更・追加を容易にするのが、AOPです。元のソースコードに変更を加えずに、新たな処理を追加することができます。
Java EE(Java Platform, Enterprise Edition)
画像出典:Oracle
概要
Java標準仕様のフレームワーク。かつてはJ2EE(Java 2 Platform, Enterprise Edition)と呼ばれていました。大規模システムに採用されています。
特徴
フルスタックフレームワーク
ServletやJSP、EJBやJavaの各種APIなど、大規模システムの構築に必要な機能がまとめて提供されています。
標準=Oracle社のサポートあり
世界中の技術者がチェックしているフレームワークでもあり、参考になる記事や書籍があります。Oracle社による研修や認定資格があるのも他にはない特徴です。
ただ大きなフレームワークだけに更新頻度は遅く、最新技術を反映させるよりも標準仕様としての安定感が重視されている模様です。
Apache Struts
画像出典:Apache Struts
概要
Apache Software Foundation が提供する、2001年ごろから使われているフレームワークです。Struts 1は既にサポート終了、Struts2が別バージョンでリリースされています。
特徴
高い生産性で超有名
MVC(※)に基づいたアーキテクチャと高い生産性で、世界的な人気を博しました。
※MVC(Model View Controller モデル・ビュー・コントローラ):アプリケーション実装のためのデザインパターン。データ・ロジック・関数などを司るModel、図やグラフィックを司るView、制御構造のControllerの3要素で処理の流れが表現される
脆弱性が……
近年脆弱性が指摘されていて、情報処理推進機構(IPA)でも注意喚起が行われています。他のフレームワークへの移行を検討する向きもあり、今から学ぶにはメリットは少ないかもしれませんが、移行に際しStrutsの知識が求められることも考えられます。
Play Framework
画像出典:Play Framework
概要
Javaと、Javaとの連携が容易なプログラミング言語Scalaで書かれたオープンソースのフレームワーク。Rubyのフレームワーク「Ruby on Rails」、pythonのフレームワーク「Django」の思想に大きく影響を受けています。
特徴
軽量さと高い生産性に特徴があります。CPUリソースやメモリ使用量が少ないので、軽快に動作。Java標準のWebアプリケーション仕様であるJava EEに準拠していない代わりに、シンプルに開発を進められるメリットがあります。
軽量さや柔軟性が求められる開発で採用されているようです。
Spark Framework
画像出典:Spark Framework
概要
シンプルな構成・軽量のマイクロフレームワーク。Rubyのフレームワーク「Sinatora」に影響を受けています。
特徴
Java 8のラムダ式を採用し、できるだけプログラムを簡潔に書くことを目指しています。ただ合理的でシンプルさを目指す反面、機能性は低め。プロジェクトの特徴を見極めて検討する必要がありそうです。
※Apache Sparkとは別物ですのでご注意ください
\エンジニア最強言語のJavaスキルが身に付く/
フレームワークを選ぶ前に
フレームワークはそれぞれ特徴があるので、開発に最適なフレームワークを選べるかどうかで、状況は変わってきます。
少なくとも
- 何を作るか
- 開発スケジュール
- 技術者の人数および技術力
- 保守性
等を事前に詳しく考慮しておきましょう。
ご紹介したJavaのフレームワークはほんの一部。Webアプリケーションフレームワーク以外も学んでみたい方は、こちらもご参照ください。
- この記事を書いた人
- murase miho