目次
Javaのフレームワークとは
フレームワーク(framework)は、簡単に説明するとソフトウェア開発でよく使う機能などを、1つにまとめて提供してくれるソフトウェアです。
システムを開発する上で重要な、ひな形用のテンプレートや機能追加の規約についても含まれています。
開発の中でも規模の大きなシステム・Webアプリケーションを開発する場合、膨大な量のプログラムを書く必要性が出てきますよね。
そんな時、フレームワークを活用すればプログラムの記述量を大幅に削減したり、工数を減らせたりすることが可能です!
また、フレームワークを活用することで、ソフトウェア開発の経験が浅いエンジニアであっても正しいプログラムを作成できるといったメリットがあります。
代表的なフレームワークには「Webアプリケーションフレームワーク」と「ユーティリティ系フレームワーク」の2つがある
フレームワークと一言でいっても、様々な種類のフレームワークがあります。
そんな中でも代表的と言えるフレームワークが、「Webアプリケーションフレームワーク」と「ユーティリティ系フレームワーク」の2つです。
それぞれについて簡単に説明します。
Webアプリケーションフレームワーク
フレームワークの中でも、Webアプリケーションに特化したものをWebアプリケーションフレームワークといいます。
Webアプリケーションは、Webの仕組みを利用した上で動作するアプリケーションのことです。
一般的に、「フレームワーク」というと、このWebアプリケーションフレームワークを意味することが多いです。
Webアプリケーションフレームワークには、機能が豊富に搭載されている上に汎用性が高いフレームワークや、機能が絞り込まれていることで軽量になっているフレームワークなど、様々なタイプが存在します。
ちなみに、Webアプリケーションについては下記の記事で詳しく説明していますので、参考までに。
【関連記事】
▶︎【Java】Webアプリケーションとは?開発環境の設定からサンプルコードまで紹介!
ユーティリティ系フレームワーク
フレームワークの中でも、データのソートや文字列の操作、数学関数、テストなどの機能を持ったものをユーティリティ系フレームワークといいます。
ユーティリティ系フレームワークを利用することで、アプリケーションの機能や性能、操作性を向上させることができます。
具体的には、「Java Collections Framework」や「Google Guava」といったフレームワークが、ユーティリティ系フレームワークです。
フレームワークとライブラリの違いについて
フレームワークとライブラリの違いについて、ここでは簡単に説明します。
フレームワーク
フレームワークは、ソフトウェア開発でよく使う機能をまとめたソフトウェアです。
機能の中にはクラスやライブラリが含まれています。
ライブラリ
ライブラリは、汎用性の高い複数のプログラムをひとまとまりにしたものです。
特に、JRE(ava Runtime Environment)が提供している「java.lang」や他の基本的なクラスを含むライブラリを指すこともあります。
つまり、クラスや関数といったパーツのまとまりで、ソースコードの部品と考えてOKです。
Java Webフレームワークを利用するメリット・デメリット
Webフレームワークを利用することに、どんなメリット・デメリットがあるかご存知ですか?
Webフレームワークを利用するメリット
JavaでWebフレームワークを利用するメリットには、下記が挙げられます。
- 作業効率の改善が図れる
- 統一性のあるコード作成ができる
- 不用意なバグを減らせる
1つずつ説明します。
作業効率の改善が図れる
フレームワークを利用すれば、開発の作業効率の改善になります。
すでに用意されている骨組みに沿ってコーディングするからですね。
さらに、Webフレームワークは機能・デザインのカスタマイズも容易に行えるので、短時間で品質の高いアプリケーションが作成できます。
必要な機能、テンプレート 、クラス、API等を簡単に使えるのがメリットです。
統一性のあるコード作成ができる
ソースコードの統一性を図れるのも、Webフレームワークを使用する利点です。
特に、チームでアプリケーション開発に取り組む場合は、ソースコードが統一されていないと判読するのが難しくなりますよね。
余計な解読に時間がかかってしまい、作業効率やスピードが落ちる可能性が高いです。
その点、フレームワークを活用することで共通ルールができ、作業者ごとのコーディングの違いを軽減できます。
不用意なバグを減らせる
Webフレームワークを使わず、独自のやり方でコーディングをすると様々な場所でバグが生まれる可能性が高くなります。
バグを解決するのに時間がかかったり、最悪の場合はバグを解決できなかったり……。
バグを完全になくせるわけではありませんが、フレームワークを使うことで余計なバグを増やさないといったメリットもあります。
Webフレームワークを利用するデメリット
JavaでWebフレームワークを利用するデメリットには、下記が挙げられます。
- 学習コストがかかる
- 特定のフレームワークは費用がかかる
- 脆弱性が報告されるものもある
それぞれ簡単に説明します。
学習コストがかかる
Webフレームワークを使いこなすには、それなりにフレームワーク自体の学習を進める必要があります。
そのため、学習コストがかかってしまう点がデメリットと言えるでしょう。
さらに、Webフレームワークのドキュメントや英語で記述されていたり、市場規模が小さい場合はそもそもの情報が少ない可能性もあります。
Javaの知識はもちろん、Webフレームワークの知識の習得、それに付随して英語や調査スキルが必要です。
特定のフレームワークは費用がかかる
Webフレームワークの中には、無料では使えずに費用がかかるものがあります。
そのため、フレームワークを利用する際は、開発予算内に収まるかどうか検討した上で利用しましょう。
とはいえ、オープンソースのWebフレームワークが多くあるため、そこまでシビアに検討する必要はないでしょう。
脆弱性が報告されるものもある
Webフレームワークには、脆弱性が報告されるものも存在します。
「脆弱性が報告されるとどんな問題があるの?」と思うかもしれません。
脆弱性が見つかると、開発に利用したアプリケーションにセキュリティ問題が生まれることになります。
個人情報が抜き取られたり、悪質なウイルスを送り込まれたりする可能性があるwプリケーションを使いたいと思う利用者はまずいないでしょう……。
そのため、脆弱性が報告されているWebフレームワークを使うと、制作したアプリケーションにも少なからず影響が及ぶのです。
JavaのおすすめWebフレームワーク
ここでは、具体的にJavaの開発でおすすめのWebフレームワークを紹介します。
- Apache Struts
- Apache Wicket
- DropWizard
- Grails
- GWT(Google Web Toolkit)
- Hibernate
- Java EE(Java Platform, Enterprise Edition)
- JSF(JavaServer Faces)
- Play Framework
- SAStruts (Super Agile Struts)
- Spark Framework
- Spring Framework
1つずつ説明していきます。
Apache Struts
Apache Strutsは、オープンソースのJava Webアプリケーションフレームワークです。
Apacheソフトウェア財団のApache Strutsプロジェクトによって開発されました。
無償で提供されていますので、誰でも自由に利用・再開発・再配布を行えます。
また、フレームワークにはMVCモデルが採用されています。
アプリケーションデザインの手法の1つとしてもApache Strutsは有名で、後継にあたるStruts2では色々と改良もされたフレームワークです。
ライブラリとして、例えば下記のものが用意されています。
- html:HTMLタグと同様の役割を担う
- logic:値の比較や条件分岐などを行う
- tiles:画面部品の再利用を行う
- bean:JavaBeansのプロパティやHTMLのリクエストパラメーターを取得した上で新しい変数として定義する
- nested:同一オブジェクトへのアクセスに関するコーディング量を減らすタグライブラリを用意している
Apache Wicket
Apache Wicketは、Apache Wicketプロジェクトにて開発された、Java Webアプリケーションフレームワークです。
Apache Struts同じく、Apacheソフトウェア財団で提供されているオープンソースのフレームワークとなっています。
主にUI層に特化しており、Javaですべてを記述できることでも有名です。
そのため、Javaだけを使って開発をシンプルに行いたい方におすすめのJava Webアプリケーションフレームワークと言えます。
DropWizard
Dropwizardは、もともとYammerのバックエンドWebサービスを提供するために作られたフレームワークです。
高パフォーマンスな点が特徴で、RESTfulなWebサービスの開発に適しているJavaフレームワークとなっています。
サーブレットコンテナ「jetty」が搭載されているので、Dropwizardではアプリケーションサーバーが必要ありません。
しかし、公開されているWebアプリケーションサービスの中で、Dropwizardが使われているものは少ないのが現状です。
利用実績が少ないという点は、Dropwizardのデメリットと言えるでしょう。
Grails
Grailsは、プログラミング言語「Groovy」を使うオープンソースのWebアプリケーションフレームワークで、Javaプラットフォーム上で動作します。
Grailsの特徴は、次の通りです。
- 開発生産性が高い
- 既存のJava技術と一貫して統合・相互運用ができる
- 多種多様なプラグインが用意されている
Webフレームワークの多くが複雑な上に、DRY原則(繰り返しを避けること)を受け入れていないのが現状と言えます。
しかし、Grailsは「Rails」や「Django」といったWeb アプリケーションに関連する現代的な考え方を用いた動的フレームワークのコンセプトを基にしています。
また、「Spring」や「Hibernate」のような、既存のJavaテクノロジーをベースに構築されている点も特徴です。
GWT(Google Web Toolkit)
GWT(Google Web Toolkit)は、Googleが開発したJavaソフトウェア開発フレームワークで、Ajaxを駆使したアプリケーションを簡単に開発できるとして提供されています。
Googleアプリケーションの多くは、このGWTを使った開発されているのです。
GWTを利用すると、フロントエンドをJavaで記述してコードをコンパイルし、最適化されブラウザに沿ったJavaScriptとHTMLを生成可能です。
Webアプリケーションを最適化する方法としては、コードの最小化や画像のストライピングなどの手間のかかる作業がつきまといます。
一方、GWTではJavaコードからスタティックファイルに落とし込む際に自動的に行うので、とても気の利くフレームワークです。
Hibernate
Hibernateは、Java専用のオブジェクト関係マッピング (ORM) ライブラリです。
オブジェクト指向のドメインモデルを、関係データベースにマッピングするためのフレームワークとなっています。
Hibernateの特徴は下記の通りです。
- Javaオブジェクトをベースにした言語でシンプルな設計
- HQL(Hibernate Query Language)というクエリ言語を提供
- 多様なデータベースに対応
Hibernateは、小規模プロジェクトから大規模プロジェクトまで対応できるフレームワークとなっているため、さまざまな場面で活躍します。
Java EE(Java Platform, Enterprise Edition)
Java EEは、企業向けのWebアプリケーション開発用の機能をセットにしたWebアプリケーションフレームワークです。
Java SEの中に、Webアプリケーションの開発に必要なサーバー関係のライブラリなどを追加したものとなっています。
Java EEは高級API群として分類されており、他にもJava MEが高級API群の代表例です。
Java EE、Java MEともに、企業向けのWebアプリケーション開発や家電、スマホ開発などを行う際に、プラグインして使います。
JSF(JavaServer Faces)
JSF(JavaServer Faces)は、JavaベースのWebアプリケーションフレームワークで、Oracle社が開発・提供しており、仕様はJava EEの一部としても取り込まれています。
また、Apache Strutsと同じく、MVCを採用しています。
しかし、表示の仕方にXML方式のHTMLを採用している点や、コンポーネントベースフレームワークであることなど、Apache Strutsとは違いがあるのが特徴です。
GUIと親和性があり、Webアプリケーションで必要になるログイン画面の制作や、ページ遷移の開発が簡単に行えます。
Play Framework
Play Frameworkは、ScalaとJavaで記述されたオープンソースのWebアプリケーションフレームワークです。
MVCを採用しており、規約やホットリローディング、エラーのブラウザ上への表示といった方針から、開発者の生産性を上げることを目的として作られました。
CPUリソースやメモリ使用量が少なく、軽量さ・生産性の高さが特徴です。
メモリ使用量が少ないため、利用者が多くなると想定できるWebアプリケーション開発で有効でしょう。
SAStruts (Super Agile Struts)
SAStruts (Super Agile Struts)は、Apache Strutsを拡張して、設定ファイルの作成や更新の自動化などを可能にした、Webアプリケーションフレームワークです。
そのため、Strutsよりも開発時間を短縮できることが特徴となっています。
SAStruts は、アプリケーション構成になっており、アノテーションが活用できることも特徴です。
さらに、開発にEclipseを使用すればコードの自動補完も可能なので、コードの記述がスムーズに進み、作業効率のアップも図れるでしょう。
Spark Framework
Spark Frameworkは、Javaで記述された無料のオープンソースソフトウェアのWebアプリケーションフレームワークで、構成がシンプルで軽量なJavaマイクロフレームワークとなっています。
膨大なアノテーション記述や設定ファイルが必要ないため、エンジニアの負担が少なくなる点が特徴です。
ただし、Spark Frameworkに用意されている機能は限られているため、大規模なプロジェクト開発には適していません。
Spring Framework
Spring Frameworkは、Javaプラットフォーム向けのオープンソースWebアプリケーションフレームワークで、Webアプリケーション従来の多くの問題を解決しています。
そのため、JavaのWebフレームワークの中でも有力なフレームワークとして、長い間非常に注目されてます。
AOP(Aspect Orientation Programming)とDI(Dependency Injection)と言われる概念で構築されていることや、専用のテストプログラムがあることが特徴です。
AOPによりメンテナンスがしやすく、DIにより変更がしやすくなっています。
Webフレームワークを選択するポイント
前章で、JavaのWebフレームワークを紹介しました。
フレームワークにはさまざまな特徴を持ったものが多いため、どれを選べば良いのかわからない方もいるでしょう。
ここでは、Webフレームワークを選択するポイントを解説します。
選択するポイントは下記の通りです。
- 開発に必要な機能を備えているか
- フレームワークに利用実績はあるか
- 利用目的に適しているか
- 他に利用している人がいるか
- トレンドや将来性があるか
- 開発メンバーの環境で利用できるか
それぞれについて順番に説明します。
開発に必要な機能を備えているか
開発にあたってフレームワークを選ぶ際は、必要な機能が備わっているのかは最重要です。
例えば、Play Frameworkは使える機能が絞り込まれているので、もし開発が大規模になる場合には適していない可能性が高くなります。
「あの機能も必要になったけど、Play Frameworkにはない……!」といった状況が生まれてしまうからですね。
フレームワークを選ぶときは、どんな機能がマストで必要なのか、必要になる可能性のある機能には何があるか、プロジェクトの規模などを考慮しましょう。
フレームワークに利用実績はあるか
フレームワークの利用実績も、選ぶ時のポイントになります。
フレームワークは年々新しいものが生まれていますが、まだ利用者が少なくマイナーなWebフレームワークを選んでしまうと、下記のようなデメリットがあります。
- 対応できる開発メンバーがいない
- 学習コストが余計にかかる
- 開発コスト、メンテナンスコストも余計にかかる
よって、開発時にフレームワークを選ぶ際は、ある程度実績のあるフレームワークの選択がおすすめです。
有名なWebフレームワークを利用すると、開発コミュニティ・日本語ドキュメントが豊富に揃っているので、情報の入手や学習が効率的に進みます。
利用目的に適しているか
フレームワークが利用目的に適しているのかも確認しておきましょう。
なぜなら、フレームワークにはそれぞれ得意なこと、不得意なことがあるからです。
目的に合わせた得意な機能が備わっていることで、開発がスムーズに進むでしょう。
基本的なことではありますが、目的に適しているかどうかは重要なポイントです。
他に利用している人がいるか
実績同様に、他の開発者が利用しているのかどうかも大切です。
もし、どのフレームワークを使えばいいかわからない場合は、他開発者がおすすめしているフレームワークを選んでみるのも良いでしょう。
Webフレームワークを1つ利用してみることで、他のフレームワークを学習する際の足がかりになることもあります。
そういった意味で、フレームワークの学習を始めるのであれば、有名どころを押さえておくと良いでしょう。
トレンドや将来性があるか
開発で使うというよりも、今後に備えてフレームワークを知りたい場合は、トレンドや将来性があるかどうかで選んでも良いですね。
トレンドとして有名なフレームワークは、コード自体が書きやすい、テストが行いやすいなど、有名になるだけの利点があります。
実際の開発でも活きてくる機会も多いため、これから学習するのであれば、トレンドや将来性も加味して選んでみてください。
トレンドや将来性のあるフレームワークについては、後述します。
開発メンバーの環境で利用できるか
フレームワークをあなたが使えることはもちろん大切ですが、複数人で開発する場合、他の開発メンバーが該当フレームワークを利用できるのかも、選ぶポイントになります。
- 開発環境で利用できるのか
- 他のメンバーはそのフレームワークを習得しているのか
- 習得していない場合どれだけの学習コストがかかるのか
上記の点も考慮して、Webフレームワークを選ぶと良いでしょう。
JavaのWebフレームワークのトレンドを知る
ここでは、JavaのWebフレームワークのトレンドを確認してみます。
トレンドの調べ方として「Google トレンド」を使用しました。
あくまで、検索ワードレベルですが、世界中でフレームワークがどれだけ検索されているのかがわかります。
2004年から2021年3月現在のトレンドは下記の通りです。
傾向を見てみると、近年ではあまり検索されておらず、2000年代前半がピークになっている印象です。
フレームワークをピックアップして期間を狭めてみます。
- Java EE
- Spring Framework
- JavaServer Faces
- Play Framework
- Apache Struts
の5つをピックアップして、期間を5年にした結果が下記の通りです。
この中であれば、「Spring Framework」が一番検索されていました。
続いて「Java EE」、「Play Framework」と「Apache Struts」が同立です。
2021年3月の現状であれば、Spring Frameworkがトレンドという認識で良さそうですね。
JavaのWebフレームワークの市場動向は?
Javaの技術はプログラミング言語の中でも安定しており、開発エンジニアは増加傾向にあります。
IPA 独立行政法人が行った「IT技術者動向調査結果」を見ると、2000年以前にJavaを使用していた人は11.7%に対し、2001年以降は33.5%まで増加しています。
また、レバテックの調査結果を見てもJavaを習得している人は増加傾向にありますね。
同じくレバテックの調査を見ると、求人数もJavaは多くの割合を占めています。
Javaエンジニア・求人数ともに増加傾向にあることから、Webフレームワークの需要も相対的に増加傾向にあると予想できます。
Javaフレームワークでも、Spring FrameworkやPlay Frameworkは圧倒的にエンジニアやクライアント企業から支持されています。
Spring Frameworkはトレンドでもあることから、習得を目指しても良いと言えるでしょう。
JavaのWebフレームワークの求人・案件について
Java言語の求人数は豊富にありますが、フレームワークを絞ってしまうと求人数はあまり多くありません。
クラウドソーシングサイト「クラウドワークス 」「ランサーズ」で、フレームワークで求人を検索したところ、下記のような結果になりました。
- Spring Framework:151件
- Java EE: 16件
- JavaServer Faces:85件
- Play Framework: 3件
- Apache Struts:10件
「Java」で検索した場合の求人数が6,092件ですので、フレームワークを絞った場合の求人率は4.3%ほどです。
開発スキルとしてフレームワークを習得しておく分には良いですが、フレームワークの知識だけで求人を探すのは厳しいと言えます。
JavaのWebフレームワークを使わない利点はある?
ここまで、JavaのWebフレームワークについて解説してきましたが、一方でフレームワークを使わない利点はあるのでしょうか?
確かに、学習や開発コストがかかるというデメリットはありましたが、使わない利点とは少し違いますよね。
結論をいうと、使わない利点というのはないと思って良いでしょう。
1つ使わないことで感じられるのが「フレームワークの重要性」です。
フレームワークを使わずに1からプログラムを作成することで、フレームワークがどれだけ便利なものか肌身で感じられるでしょう。
また、フレームワークを使わないことで、プログラムの仕組みや原理の理解につながることもあります。
車輪の再発明に似ていますが、車輪を1から作って見ることでどのような動きになっているのか、自分で手で確認して知識となるでしょう。
汎用的に必要なものがまとめられたひな形・枠組みと考えてOKです。