Javaのフレームワークというものをご存じでしょうか?
工数が削減でき、一定の品質も保てるので現在ではjavaの開発ではフレームワークを使うことが多くなってきています。
しかしjavaのフレームワークは実に沢山の種類が出ており、どれが良いのか分からないことも多いものです。
そこで、今回はjavaのフレームワークを一覧でご紹介しつつ、どれを選ぶべきか、またフレームワークを使用することのメリット、デメリットについて述べていきたいと思います。
- Javaフレームワークとは
- Javaフレームワークを利用するメリット
- Javaフレームワークを利用するデメリット
- Javaフレームワークの一覧
- おすすめのJavaフレームワークと選ぶポイント
- Javaフレームワークの動向とトレンド
- まとめ
Javaフレームワークとは
フレームワークとは
画面、帳票、バッチといったプログラムを作っている時に「これは、前のと似た仕様だから、前のプログラムをコピーして作ろう」と思ったことはありませんか?
画面、帳票のプログラムは案外に同じような動作仕様であることが多い物です。
そうなると「同じようなプログラムを何回も作る」ことになり、1つ1つのプログラムを全て1からコーディングするのは手間と時間がかかるだけ、という結果にもなります。
そこで「良くあるパターン」の画面、帳票のプログラムを汎用的に使える骨格として提供してくれるのがフレームワークです。
フレームワークを使うとプログラムの枠組み、骨格は既に出来上がった状態から、作業を開始しますのでコーデイング量を大幅に減らすことが可能になります。
また「プログラムの骨格」だけでなく、必要とされることが多い機能は別途にライブラリとして提供されますので、それを使えば、更にコーデイング量を減らすことが可能となるのです。
-
フレームワークを使うことでコーディング量を減らせる
javaフレームワークとは
javaフレームワークは、java言語に特化したフレームワークです。
Javaで開発を行う場合、javaフレームワークを土台にして開発すれば大幅な工数削減と品質確保が見込めます。
ライブラリとは
ライブラリとは、いわば「部品が沢山、入った箱」です。
フレームワークではプログラムを作る時に必要とされる様々な機能を備えた部品が用意されており、それらをライブラリという箱から呼び出して使うことができるようになっています。
たとえば「日付の妥当性チェック」などはコーデイングすると案外に厄介なものですが、フレームワークではライブラリの中に「日付妥当性チェック関数」がありますので、それを呼び出して使えば済むのです。
ライブラリは用途別(画面入出力系、通信系など)に名前が付けられ、分けられていますので、作ろうとするプログラムで必要とする機能部品が入っているライブラリ名をプログラムの冒頭で宣言しておけば使用可能となります。
Javaフレームワークを利用するメリット
作業効率が改善される
フレームワークでは最初からプログラムの骨格となるコードや必要になる機能が提供されていますので1から作る必要がありません。
その分、早く完成しますので作業効率が非常に良くなります。これが最大のメリットと言えるでしょう。
コードを統一化でき多人数での開発も可能となる
Javaは多機能言語であるので同じ仕様のプログラムであっても、色々な作り方が可能なのでプログラマーによりコーデイング結果には随分と違いが出るものです。
保守という観点から見た場合、コーデイングがばらばらであると、何等かの修正、改変を入れたい場合、プログラムを1本づつ解析せねばならず、これは非常に大変な作業となります。
その点、フレームワークを使えば同じコーデイング形式ですので理解しやすく修正、改変がしやすくなります。
つまり保守性に優れているのです。
また、誰が参加してもフレームワークをベースにしている以上、同じ形式のプログラムが出来上がるのでプログラマー、個々のスキル差が出にくくなります。
従って多人数での開発も可能となります。
バグが減少する
フレームワークでは既に全体の機能構成と動作順番は、ほぼ決まっています。
また「ありがちな機能」についてはライブラリに用意されているものを使えば良いのでプログラマーが作らなくても済みます。
フレームワークから提供されている部分についてはバグが発生する可能性が極端に低くなりますので、必然的にシステム全体のバグ発生率が減少するのです。
Javaフレームワークを利用するデメリット
フレームワークの学習をしなければならない
フレームワークを使うには、まず、その使い方を覚える必要があります。
最初だけの作業ですがフレームワークのメリットを最大限に生かすには、この学習作業が非常に重要ですのでしっかりとやらねばなりませんが、これも工数に入れざるをえないのでデメリットとなります。
プログラマーのスキルが向上しにくい
フレームワークは早くて便利である分、プログラマーに学ぶ機会を与えない結果にもなります。
プログラミングにも色々なテクニックがありますが、それらを経験する機会が少なくなる結果、プログラマーのプログラミングテクニックのスキル向上をしにくくさせてしまいます。
またJavaという言語は多機能である分、色々な事が可能ですが、その学習機会を得にくくさせてしまう、ということにもなります。
Javaを1から勉強した人なら、知っていることでもフレームワークから入ると、それを知ることがなく「何故、これでうまく動くのか」と言う本質的な理解をしていないプログラマーを育ててしまう危険性があるのです。
フレームワークが持っている脆弱性を回避できない
一部のフレームワークには脆弱性が報告されているものもあります。
最初から分かっていれば別のフレームワークを採用すれば良いのですが、採用したフレームワークに後から脆弱性が見つかった、というケースでは避けようがありません。
つまり脆弱性を抱えているかもしれない、というリスクを抱えざるを得ないというデメリットがあるのです。
Javaフレームワークの一覧
Javaフレームワークは沢山のものが出ていますので、1つ1つご紹介致します。
SpringBoot
Javaフレームワークとしては代表的なものです。
SpringBootは複数のフレームワークを持っているので、広範囲のアプリ開発に適用できるのが特徴です。
特にWebアプリに向いています。またSpringBootはアスペクト指向のフレームワークも用意されています。共通的な処理をオブジェクト指向でうまく作れないという場合に、とても便利な方法です。
またSpringBootには以下のメリットもあります。
- XML設定が簡略化できる。XML設定は自動化されています。
- アノテーションを記述できる
アノテーションとは注釈のことで、アノテーションを記述すると、そのコンポーネントの持つ特殊性をコンパイラや実行環境に伝える事ができます。
- jarファイル単体での開発が可能
サーバー側にWebコンテナをセットアップする必要がなく、jarファイルのみでWebアプリケーション開発が可能です。
intra-mart
intra-martはフレームワークの一種ですが、ローコード開発という専門のプログラマーでなくても、ちょっとした知識さえあれば誰でも改変可能なシステムにしているのが特徴です。
社内の各種業務がバラバラにシステム化されているような場合にシステムを全社的に集約することを目指しています、そのために、ちょっと勉強すれば誰でも修正が可能なのです。
そのため現場への導入が素早くでき、変化にも対応しやすい、という特性を持つフレームワークです。
JUnit
JUnitはJavaの単体テストに特化したツールです。
Javaのようなオブジェクト指向で作成されているプログラムは他のプログラムと連携して動作するのが普通です。
従って、1つのプログラムにバグがあると連携しているプログラムも全てエラーになってしまうこととなり、どのプログラムの問題で起きたエラーなのかを特定するのが難しいことがあります。JUnitはそういった場合に役立ちます。
JUnitでテストするにはテスト用のプログラムを作らねばなりませんが、一度、作れば何回でも使うことができます。
Spring Framework
Spring FrameworkはオープンソースのJavaフレームワークです。
-
無償であり誰でもダウンロードでき、ソースも公開されているもの
やはり無償で使えるフリーウェアとは「ソースが公開されている」という点が違います。
Javaの開発環境としてエクリプスがよく使用されますがSpring FrameworkはエクリプスをベースとしたSpring Tool Suite(通称STS)という、やはりオープンソースの専用総合開発環境も用意されていますので、一緒にダウンロードすれば非常に経済的にフレームワークによる開発環境を構築することができます。
Spring FrameworkはSpringBootでも用意されているアスペクト指向プログラミングが可能なのでオブジェクト指向では作りにくい共通機能も簡単にシンプルに共通化することができ、またjarファイル単体での開発が可能、という点でもSpringBootと同じ機能を持っています。
またSpring Frameworkでは単体テスト専用のプログラムも用意されていますので開発が非常にスムースに進められます。
Spring Frameworkは公開されて以来、何度かのバージョンアップも行われており信頼に足るフレームワークです。
しかも機能の拡張性に優れており、小さい仕様変更にも柔軟に対応できる一方、大規模プロ+ジェクトにも対応できる能力も持っています。
ですのでWebシステム、Webサービス、クラウドアプリケーション、モバイルシステムと幅広い開発に用いられています。このように優れたフレームワークであるSpring Frameworkですが幅広い機能を持つがゆえに、規模が非常に大きく全体を把握することが難しく、難易度が高いという欠点、また米国製のオープンソースなので日本語の情報が少ないという欠点もあり習得するのが難しい、というのが最大の問題です。
つまりSpring Frameworkを使いこなすには高度な知識が要求されるのです。
Play Framework
Play FrameworkはWEBアプリケーション用のフレームワークです。
最初にご紹介したSpringBootと並びJavaのフレームワークとして良く使われています。
Play FrameworkはSpringBootに比べると非常に軽量でありメモリ使用量も少なくコンパイルも早いので、安価に早く仕上げることを求められる開発に向いています。
Play FrameworkはMVC(「Model」「View」「Controller」)設計という方式で作られており、以下3つは独立しています。
- Model
- View
- Controller
この方式では設計者と開発者の仕事が完全に分けられており、それぞれが独立しているので分業しやすくなっており、使い勝手が非常に良いのが特徴です。また設計と開発が分けられていることで保守性もよくなっています。
更に、特に意識しなくてもセキュリティー対策をしてくれる仕組みになっているので安全でもあります。
その一方、現状では拡張性に乏しいのが欠点です。Play FrameworkはJavaの他にScalaというJavaと互換性の高い言語もサポートしていますが、ScalaはJavaに比べコードを簡潔に記述できるので分かりやすく、近い将来、Javaに取って変わるのではないかと言われている言語です。
ですので、現在、Javaで仕事をされている方は覚えて置いた方が良い言語と言えます。
互換性が高いのでJavaのプログラマーには理解しやすい言語です。Play FrameworkはJava、Scalaの両方に対応しているので、これから更に伸びていく可能性が高いフレームワークと言えます。
JSF(Java Server Faces)
JSFはWebアプリケーション用のフレームワークですが、ユーザーインターフェース(文字入力、セレクトボックス等)に特化したフレームワークです。
従って、文字入力のためのテキストフィールド、送信ボタン、キャンセルボタン、複数の選択肢の中から選べるセレクトボックスが用意されています。
JSfはツール化されているので非常に使いやすく「タグを使うだけで良い」お手軽さが最大の長所です。
入力だけでなく、以下の機能も用意されているので、入力後の処理も簡単に行うことが出来ます。
- イベント制御、
- ステート情報保持
- 入力値チェック
- データモデル変形など
ユーザーインターフェースだけに特化しているので導入も簡単で非常に使い勝手の良いフレームワークです。
SAStruts(Super Agile Struts)
Super Agile StrutsとはSAStrutsという有名な定番のJavaフレームワークを更に進化させたものでSpring Frameworkと同じくオープンソースとして公開されています。
先代であるSAStrutsは設定ファイルが多く、かつ書くのも面倒な内容でした。
そして最大の難点はJavaプログラムを修正するたびにサーバーを再起動させねばならず、非常に時間を要する、という点でした。
Super Agile Strutsではアプリケーション上の様々な識別名を特定の命名規約に従って付ければ良く、その分、設定ファイルに書き込む内容が大幅に簡素化されました。
また、ホットデプロイと言う機能が搭載されサーバーを再起動しなくても、ちゃんと変更内容が反映されるようになりました。
SAStrutsはThe Seasar Projectという日本のプロジェクトが開発したフレームワークですので解説も日本語で書かれているので「とっつきやすい」というのが長所です。
もちろんオープンソースですので無償で使えるというのも大きなメリットです。
Struts、Apache Wicket
Apache WicketはApache Software Foundationから出されているフレームワークです。
Apache Wicketの特徴の1つは「軽いこと」です。Play Frameworkも軽量であることがメリットでしたが、このApache Wicketも軽量さが売りの1つです。
-
SAStrutsなどの重量級のフレームワークより軽快に使えるフレームワークが良い、と言う方には、お勧めのフレームワーク
Apache Wicketは他のフレームワークとは一線を画すポリシーで作られている、というのも特徴です。フレームワークの目的は「コーデイング量を減らすこと」です。
しかしApache Wicketは「すべてをJavaで記述するフレームワーク」なのです。Webアプリケーション開発ではJavaコーデイングの他にXMLファイルの記述、JSPの作成、サーブレットの用意、フレームワーク用の設定ファイルの作成、プロパティファイルの作成など、実に色々なことをせねばなりません。
ところがApache WicketはHTMLを用意したら、後はJavaでクラス定義をするだけで良いのです。
Webページが必要とする全ての要素はApache Wicketが用意してくれているので、それを呼び出すだけなのです。
さすがにサーブレットを登録するweb.xmlは修正が必要ですが、逆に言うと、それだけで良いのです。
HTMLもJSPのように特殊なタグや処理を入れる必要はなく、ごく普通のHTMLに専用の属性を追記するだけです。
簡単にWebアプリを作りたい、と言う場合には最適なフレームワークと言えるでしょう。
Dropwizard、ZK
Dropwizardは比較的新しいフレームワークで米国のSNSであるyammerがWebサービス提供のために出したものです。
ライブラリをシンプルで軽量なパッケージにまとめ、効率的な開発ができるようになっています。
また「jetty」というサーブレットコンテナが用意されているのでアプリケーションサーバーが無くても開発が出来ます。また、通常、Webシステムでは複数のJARファイルが必要になりますが、Dropwizardでは1つのJARファイルだけで良い、等の特徴を持っています。
まだ新しいフレームワークなので普及度は高くありませんが注目を集めているフレームワークです。ZKはユーザーインターフェースをJavaScriptではなくAjaxのみで行うフレームワークです。
従ってブラウザとWebサーバの間は非同期通信でのやりとりとなりますのでJavaで制御でき、高品質な画面にすることができるのが特徴です。
この2つを組み合わせれば高品質の画面制御を軽量な環境で行うことができるようになります。
Ninja web framework
Ninja webはフレームワークというよりWeb用パーツ提供サービスと言った方が適切です。
「忍者ツールズ」と呼ばれており、以下のようにWeb運営に必要なコンテンツ、サービス群を提供しています。
- クセスログ解析
- ホームページスペース
- アクセスカウンター
- ブログサービスなど
サービスには無料の物、月額500円程度のもの、と内容により色々とありますが、アクセス解析を簡単に分析できるのが人気の高い理由です。
このサービスを行っているのは株式会社サムライファクトリーという会社ですが、既に登録会員数は270万を越え、Web業界では中堅と言えるレベルになっています。コ
ンテンツとなる記事を代行してくれるライターが10,000人以上いるので大量の記事を短期間、低コストで作成できるというポテンシャルを持っており、今やSEQ専門業者からの依頼も多くなっているそうです。
Spark Framework
Spark Frameworkはオープンソースで非常にシンプルなWebアプリケーション用のフレームワークです。
非常に軽量なのでマイクロフレームワークとも呼ばれています。
小規模開発に向いておりLambda式とstaticメソッドを活用するだけで良い、と言う特徴を持っています。
おすすめのJavaフレームワークと選ぶポイント
Javaのフレームワークは実に色々なものがあることが、お分かり頂けたかと思います。
では、この中から、どれを選べば良いのかを考えてみましょう。
目的で選ぶ
それぞれのフレームワークには、必ず何等かの特徴があります。
「多機能だけれど重量級」のものもあれば「ある機能に特化したコンパクトで軽量なもの」もあります。
当然ながら学習にかかる時間は重量級の方が遥かに多くなり、知識も沢山、要求されることになります。
一方、限られた機能だけなら覚えやすく必要な知識も少なく済みます。
開発するシステムの目的と開発担当者のレベル、学習時間のコストなどを考慮し、最もちょうど良いフレームワークを選ぶのが正解というケースは案外に多いものです。
トレンドや将来性で選ぶ
特に理由が無い限りは、検索数が伸びており有名で、トレンドとなっているフレームワークを選べば間違いありません。
トレンドになるフレームワークには、必ず、そうなるだけの理由があるものです。
またトレンドのフレームワークは情報量も多いので困ったときに調べやすいという長所もあります。
学習環境で選ぶ
フレームワークを選ぶ際、開発メンバーが使いこなせるだけの知識を身に付けられるかどうか、は重要な選択要素です。使えなければ無意味だからです。
最初は分からないのが当然ですので、研修やスクールに行かせる時間と予算はあるか、或いは先生となってくれる経験者がいるか、そもそも開発担当者は能力的に覚えられそうか、というのはフレームワークを選ぶうえで重要な基準となります。
Javaフレームワークの動向とトレンド
動向
Javaは技術的に安定しており、Javaの開発エンジニアは年々、増加傾向にあります。
それに伴いJavaフレームワークの必要性も確実に高まっていくものと予想されます。
開発コストを抑え一定の品質を確保するにはフレームワークを使うのが最も効果的だからです。
Javaのフレームワークの需要は増えることはあっても減ることはないでしょう。
トレンド
現在のJavaフレームワークのトレンドを順位付けでご紹介します。(2022年2月時点)
- SpringBoot
- intra-mart
- Struts
- JUnit
- Spring(Spring Framework)
まとめ
一昔前のCobol、C言語の時代にもプログラム開発をより確実に効率よくする方法は色々と提案されてきました。
しかし、それらが普及することはありませんでした。
そしてJavaの時代になって始めてフレームワークという「確実に効率よく作る方法」が確立され普及し始めたのです。
システムの開発は難しい仕事である、ということを再認識しましょう。
その難しい仕事をスケジュール通りに仕上げ、一定以上の品質を確保する、というのは至難の技なのです。
フレームワークの使い方を覚えるのは最初は面倒でコストもかかりますが、それを嫌ってはいけません。
初期投資に見合うだけの見返りは十分にあるのです。
そうでなければフレームワークが、これほど普及する、ということは有り得ないのです。