Javaフレームワークとは?おすすめの10選と選び方【2020年最新版】

 oinari | 2020/11/15 - 17:00
目次

    Javaフレームワークとは

    Javaのフレームワークとは、Javaを利用して開発をする際に必要な機能を、ある法則に則ってつかえるよう標準化したものです。

     

    例えばJavaを1から書く場合には200行必要な機能が、Javaのフレームワークを利用すると20行だけで済むことがあります。

     

    フレームワークと似た言葉としてライブラリがありますが、両者の違いは「制御の反転があるかどうか」によります。

     

    ライブラリの場合、プログラムを動かす主導権はプログラマーが書いたコードにあります。一方でフレームワークの場合、プログラマーが書いたコードはフレームワークによって制御されるのです。

     

    つまり、ライブラリは主導権がエンジニア側にあり、フレームワークは主導権がフレームワークに側にあると言えます。

     

    Javaフレームワークを利用するメリット

    開発スピードが上がる

    MVP開発やリーンスタートアップという言葉が注目されているように、IT/Web業界では特にサービスを高速で市場に投下することが重要です。Javaのフレームワークを利用するのとしないのでは、開発スピードにかなりの差が生じます。

     

    例えばJavaのフレームワークには、データベースアクセスの機能やログイン機能などが備わっているのですが、それらをフレームワークなしでエラー無く完成させるには、かなりの時間を要してしまうのです。

     

    コードの統一性を保持(多人数開発にも対応しやすくなる)

    プログラミングに限らず全ての仕事にいえますが、コードの書き方にはその人の個性やクセがでます。

     

    経験、スキル、年齢、性格、キャリアなど様々な要因によって差が生じるのですが、人が書いたコードを修正するのは、かなり大変な作業です。

     

    フレームワークを利用すれば、コードの統一性を保持させることができます。

    統一性を保持することにより、多人数開発にも対応しやすくなります。

     

    バグの減少

    Javaのフレームワークは基本的に大人数のエンジニアに利用されています。そのため、バグはすでに解決されていることが多いです。

     

    それらのバグが少ないフレームワークを利用して開発を進めると、開発をしたプログラムもバグが少なくなる可能性が高まるといえます。

     

    フリーランスとして仕事が取りやすくなる

    Javaの中規模、大規模以上案件では、フレームワークが利用されていることがほとんどです。特にLaravelは年々ニーズが上昇しているため、Javaエンジニアのフリーランスとして仕事を安定的に獲得するにはキャッチアップは必須といえるでしょう。

     

    Javaフレームワークを利用するデメリット

    学習期間が必要

    フレームワークを使いこなすにはJavaの理解がある前提で、最低でも数週間は学習をする必要があります。概要を抑えることができても、細かい要望を実現しようとすると調査に更に時間がかかることはよくあります。

     

    また、ドキュメントは基本的に英語で書かれていることが多いです。

     

    イレギュラーに対応できないことがある

    フレームワークはいわゆる「よくある機能」を開発する際には有用です。

    しかし、前例が少ない機能を開発したい場合、対応できないことが多々あります。

     

    フレームワークは決められたルールに則ってサービスを開発していかなければならないため、イレギュラーが多発するようなサービスではフレームワークを利用しないほうが作りやすいことがあるのです。

     

    Javaフレームワークトレンド状況

    画像:Googleトレンド(2004/01/01~2020/11/15)をもとに算出

     

    Javaフレームワークのトレンド状況を見てみましょう。

    グラフから分かる通り、Javaのフレームワークは2009年までが全盛期で、その後は下降傾向であることがわかります。

     

    おすすめのJavaフレームワーク10選

    Spring Framework

    Springは2003年に開発されたJavaのフレームワークで、東芝やNTTデータなどの大手企業が利用しています。

     

    Pivotalが開発しており、最新技術をいち早く導入するので、最大のシェアを伸ばしています。

     

    1つ目の特徴は依存性の注入(DI)です。

    これは、オブジェクトの情報を外部に分けることで、コンポーネントの集合としてアプリケーションを組み立てるデザインパターンのことです。

     

    具体的にはクラスやライブラリという動作に必要なクラスをそのクラス内で生成するのではなく、Springに生成を任せます。

     

    もう1つの特徴はAOP(Aspect Oriented Programming)です。

    Javaは属性(データ)と操作(メソッド)の集合であるクラスを単位としている。

    が、クラスに分解できない要素も存在する。分解できないものは複数のクラスに跨がるので管理がむずい。変更の際はすべてのコードから変更箇所を探さないといかん。

     

    この分解できない要素をアスペクトとしてモジュール化し、管理変更追加を簡単にする。もとのソースコードを変更せずに、新たな処理を追加できる

     

    日本語の情報は少なく、使いこなすにはJavaの高レベルな知識が必要

     

    Play Framework

    Play FrameworkはJavaとScalaを利用つくられたフレームワークです。

    RubyのRuby on RailsやPythonのDjangoとよく似ています。

     

    Java EEには準拠していないのですが、コンパイルが不要で開発スピードが早いのが特徴です。MVCモデルを採用しており、Eclipseを利用できます。

     

    CPUリソースやメモリ使用量が少ないのもPlay Frameworkの良さです。

    小規模向けで学習コストは低いのですが、日本語の情報は少ないので注意です。

     

    Apache Struts

    Apache Strutsは2001年ごろから利用されているJavaのフレームワークです。

    J

    avaでは最も有名なフレームワークとして知られており、MVCモデルを採用しています。

     

    歴史はあるものの、情報処理推進機構(IPA)の注意喚起脆弱性の発見によって、人気は落ちてきています。

    https://www.ipa.go.jp/security/announce/struts2_list.html

     

    設定が煩雑なのはデメリットに挙げられます。

     

    Apache Wicket

    Apache WicketはApacheソフトウェア財団が提供している2005年に開発されたフレームワークです。

     

    他のフレームワークはなるべくソースコードの記述を抑えようと、設定ファイルなどにアプリケーション設定を書くことで作業負担を減らそうとしますが、Apache WicketはほとんどをJavaで記述するという特徴があります。

     

    実際にシステムをつくるにはJavaだけでなく、Servlet、JSP、設定ファイルなど多くの設定が必要で煩雑になるケースが多いのですが、Apache Wicketでは基本的にJavaさえ知っていればシステム構築ができます。

     

    設定ファイルもweb.xmlだけで済むので、シンプルにJavaで開発をしたい場合におすすめです。

     

    SAStruts (Super Agile Struts)

    SAStrutsはSeaserプロジェクトがStrutsをベースとして開発された、国産のオープンソースフレームワークです。

     

    設定ファイルが自動生成できるのと、ホットデプロイ機能を採用しているのでスピーディーに開発ができるのが特徴といわれています。

     

    JSF

    JSFは2004年に開発されました。

    Java EEの仕様に採用されており、表示にXML方式のHTMLを採用します。

     

    HTMLの場合はブラウザにそのまま表示されるためデザインの確認がしやすいです。

    Webアプリケーションを作るためのフレームワークとなります。

     

    Java EE(Java Platform, Enterprise Edition)

    Java EEは1999年に登場しました。

    大規模システム向けに、複数の機能をセットにして提供しているフレームワークです。

     

    Javaの開発元だった、サン・マイクロシステムズの時代から提供されているため信頼性が担保されています。

     

    ServletやJSP、EJBや各種APIなどいろいろ

    大規模向け。かつてはJ2EEと呼ばれていた。

     

    Oracle社による研修や認定資格がある

    大きなフレームワークなので更新頻度は遅い

     

    Spark Framework

    Spark FrameworkはRubyのフレームワークである、Sinatoraに影響を受けています。

    シンプルで軽量なのが特徴です。

     

    Java 8のラムダ式を採用して、なるべくプログラムを完結に書くことを目指していますが、機能性は高くないのが弱点です。

     

    ※Apache Sparkとは別物です。

     

    Dropwizard

    Dropwizardは米国のSNSであるyammerのWebサービス提供のために作られた、新しいJavaフレームワークです。

     

    サーブレットコンテナ「jetty」が組み込まれているため、tomcatなどのアプリケーションを準備する必要がありません。

     

    また、多くのWebシステムでは動作時に複数のJARファイルというコンパイルされたJavaの圧縮ファイルが必要になりますが、Dropwizardでは1つのJARファイルだけで動作することができるのが特徴です。

     

    ZK

    ZKはブラウザとWebサーバの非同期通信を行うAjaxを取り入れた、Javaフレームワークです。

     

    MVCモデルのViewの部分である「プレゼンテーション層」の開発効率を高めるフレームワークと言われています。

     

    ユーザーインターフェースが豊富で、画面で発生したボタンクリックなどのイベントはAjaxで管理されています。

     

    ZKを使った開発の際にはJavaScriptの知識は必要になりますが、Ajaxを多用するシステムを構築するならZKは選択肢の一つになるかもしれません。

     

    Javaフレームワークの選び方

    Javaフレームワークを下記のように比較をしてみました。

     

    Javaのフリーランスエンジニアとして案件を受注したいのであれば、現状、選ぶべきはSpring FrameworkもしくはPlay Frameworkといえそうです。

     

    フレームワーク テクフリ案件数 Qiitaの記事数 stackoverflowでの質問数 学習コスト
    Spring 80 1466 127
    Play Framework 35 143 53
    Apache Struts 17 47 15
    SAStruts 9 13 3
    JSF 0 99 12
    Java EE 4 258 47
    Spark Framework 13 31 0
    Dropwizard 0 38 0
    ZK 0 1 0
    Kohana 0 1 0

     

    Javaを使用する案件紹介

    フレームワーク Spring
    案件名 【Java/Spring】Webアプリ開発・保守
    月額単価 〜770,000円/月
    最寄駅 品川駅
    業務内容 Java Spring Framework による Webアプリ開発・保守をご担当いただきます。

    元請けリーダーと対等なペアとして、要件定義~リリース・保守まで全工程一貫してご対応お願いします。

    基本スキル ・Java Spring Framework 開発経験(JPA経験あれば尚可)

    ・JavaScript基本設計からの開発経験5年以上

    ・顧客折衝のコミュニケーションスキル

     

    フレームワーク Apache Struts
    案件名 ECサイト 追加案件・保守
    月額単価 〜720,000円/月
    最寄駅 新御茶ノ水駅
    業務内容 テーマパークのECサイトの追加案件・保守の業務に携わって頂きます。 ECサイトのリニューアルのタイミングでの参画となります。
    基本スキル ・Javaの使用経験

    ・JavaScriptの使用経験

     

    フレームワーク Play Framework
    案件名 【Scala】教育事業アプリのサーバーサイド開発
    月額単価 〜880,000円/月
    最寄駅 目黒駅
    業務内容 ・既存サービスの機能追加・機能改善のための開発業務

    ・ユーザストーリーを考慮しチームメンバーと協働してシステム全体の設計と開発

    ・ カスタマーサポートや営業への問い合わせにより発覚した不具合などの迅速な対応と、根本的な解決方法の検討・実施

    基本スキル ・Scala を用いた高いレベルでのサーバサイドアプリケーションの開発経験

    ・RDBに関する基本的な知識、利用経験

    今すぐシェアしよう!

    B!
    techcareer freelancetechcareer freelance


    上部へ戻る