Javaのフレームワークとは、Javaを利用して開発をする際に必要な機能を、ある法則に則ってつかえるよう標準化したものです。
例えばJavaを1から書く場合には200行必要な機能が、Javaのフレームワークを利用すると20行だけで済むことがあります。
フレームワークと似た言葉としてライブラリがありますが、両者の違いは「制御の反転があるかどうか」によります。
ライブラリの場合、プログラムを動かす主導権はプログラマーが書いたコードにあります。一方でフレームワークの場合、プログラマーが書いたコードはフレームワークによって制御されるのです。
つまり、ライブラリは主導権がエンジニア側にあり、フレームワークは主導権がフレームワーク側にあると言えます。
Java案件について相談する
MVP開発やリーンスタートアップという言葉が注目されているように、IT/Web業界では特にサービスを高速で市場に投下することが重要です。Javaのフレームワークを利用するのとしないのでは、開発スピードにかなりの差が生じます。
例えばJavaのフレームワークには、データベースアクセスの機能やログイン機能などが備わっているのですが、それらをフレームワークなしでエラー無く完成させるには、かなりの時間を要してしまうのです。
プログラミングに限らず全ての仕事にいえますが、コードの書き方にはその人の個性やクセがでます。
経験、スキル、年齢、性格、キャリアなど様々な要因によって差が生じるのですが、人が書いたコードを修正するのは、かなり大変な作業です。
フレームワークを利用すれば、コードの統一性を保持させることができます。
統一性を保持することにより、多人数開発にも対応しやすくなります。
Javaのフレームワークは基本的に大人数のエンジニアに利用されています。そのため、バグはすでに解決されていることが多いです。
それらのバグが少ないフレームワークを利用して開発を進めると、開発をしたプログラムもバグが少なくなる可能性が高まるといえます。
Javaの中規模、大規模以上案件では、フレームワークが利用されていることがほとんどです。特にLaravelは年々ニーズが上昇しているため、Javaエンジニアのフリーランスとして仕事を安定的に獲得するにはキャッチアップは必須といえるでしょう。
Javaのフリーランス案件一覧をチェックする
フレームワークを使いこなすにはJavaの理解がある前提で、最低でも数週間は学習をする必要があります。概要を抑えることができても、細かい要望を実現しようとすると調査に更に時間がかかることはよくあります。
また、ドキュメントは基本的に英語で書かれていることが多いです。
フレームワークはいわゆる「よくある機能」を開発する際には有用です。
しかし、前例が少ない機能を開発したい場合、対応できないことが多々あります。
フレームワークは決められたルールに則ってサービスを開発していかなければならないため、イレギュラーが多発するようなサービスではフレームワークを利用しないほうが作りやすいことがあるのです。
Springは2003年に開発されたJavaのフレームワークで、東芝やNTTデータなどの大手企業が利用しています。
Pivotalが開発しており、最新技術をいち早く導入するので、最大のシェアを伸ばしています。
1つ目の特徴は依存性の注入(DI)です。
これは、オブジェクトの情報を外部に分けることで、コンポーネントの集合としてアプリケーションを組み立てるデザインパターンのことです。
具体的にはクラスやライブラリという動作に必要なクラスをそのクラス内で生成するのではなく、Springに生成を任せます。
もう1つの特徴はAOP(Aspect Oriented Programming)です。
Javaは属性(データ)と操作(メソッド)の集合であるクラスを単位としています。
しかし、クラスには分解できない要素も存在します。分解できないものは複数のクラスにまたがるため、変更の際にすべてのコードから変更箇所を探す必要が生まれるなど管理が難しくなってしまいます。
この分解できない要素をアスペクトとしてモジュール化し、管理変更追加を簡単にします。すると、もとのソースコードを変更せずに、新たな処理を追加できるようになります。
日本語の情報は少なく、使いこなすにはJavaの高レベルな知識が必要です。
Play FrameworkはJavaとScalaを利用してつくられたフレームワークです。
RubyのRuby on RailsやPythonのDjangoとよく似ています。
Java EEには準拠していないのですが、コンパイルが不要で開発スピードが早いのが特徴です。MVCモデルを採用しており、Eclipseを利用できます。
CPUリソースやメモリ使用量が少ないのもPlay Frameworkの良さです。
小規模向けで学習コストは低いのですが、日本語の情報は少ないので注意です。
Apache Strutsは2001年ごろから利用されているJavaのフレームワークです。
Javaでは最も有名なフレームワークとして知られており、MVCモデルを採用しています。
歴史はあるものの、情報処理推進機構(IPA)の注意喚起脆弱性の発見によって、人気は落ちてきています。
https://www.ipa.go.jp/security/announce/struts2_list.html
設定が煩雑なのがデメリットに挙げられます。
Apache WicketはApacheソフトウェア財団が提供している2005年に開発されたフレームワークです。
他のフレームワークはなるべくソースコードの記述を抑えようと、設定ファイルなどにアプリケーション設定を書くことで作業負担を減らそうとしますが、Apache WicketはほとんどをJavaで記述するという特徴があります。
実際にシステムをつくるにはJavaだけでなく、Servlet、JSP、設定ファイルなど多くの設定が必要で煩雑になるケースが多いのですが、Apache Wicketでは基本的にJavaさえ知っていればシステム構築ができます。
設定ファイルもweb.xmlだけで済むので、シンプルにJavaで開発をしたい場合にオススメです。
SAStrutsはSeaserプロジェクトがStrutsをベースとして開発した国産のオープンソースフレームワークです。
設定ファイルが自動生成できるのと、ホットデプロイ機能を採用しているのでスピーディーに開発ができるのが特徴といわれています。
JSFは2004年に開発されました。
Java EEの仕様に採用されており、表示にXML方式のHTMLを採用します。
HTMLの場合はブラウザにそのまま表示されるためデザインの確認がしやすいです。
Webアプリケーションを作るためのフレームワークです。
Java EEは1999年に登場しました。
大規模システム向けに、複数の機能をセットにして提供しているフレームワークです。
Javaの開発元だったサン・マイクロシステムズの時代から提供されているため信頼性が担保されています。
かつてはJ2EEと呼ばれていました。
Oracle社による研修や認定資格があります。
大きなフレームワークなので更新頻度は遅いです。
Spark FrameworkはRubyのフレームワークである、Sinatraに影響を受けています。
シンプルで軽量なのが特徴です。
Java 8のラムダ式を採用して、なるべくプログラムを完結に書くことを目指していますが、機能性は高くないのが弱点です。
※Apache Sparkとは別物です。
Dropwizardは米国のSNSであるyammerのWebサービス提供のために作られた、新しいJavaフレームワークです。
サーブレットコンテナ「jetty」が組み込まれているため、tomcatなどのアプリケーションを準備する必要がありません。
また、多くのWebシステムでは動作時に複数のJARファイルというコンパイルされたJavaの圧縮ファイルが必要になりますが、Dropwizardでは1つのJARファイルだけで動作することができるのが特徴です。
ZKはブラウザとWebサーバの非同期通信を行うAjaxを取り入れた、Javaフレームワークです。
MVCモデルのViewの部分である「プレゼンテーション層」の開発効率を高めるフレームワークと言われています。
ユーザーインターフェースが豊富で、画面で発生したボタンクリックなどのイベントはAjaxで管理されています。
ZKを使った開発の際にはJavaScriptの知識は必要になりますが、Ajaxを多用するシステムを構築するならZKは選択肢の一つになるかもしれません。
Javaフレームワーク案件の単価や案件数はどのくらいなのでしょうか。
テクフリに掲載されている案件を参考に以下にまとめました。
弊社調べによるとJavaフレームワークの平均単価は69万円です。単価の幅は下限で63万円、上限が76万円となっています。
Javaフレームワークの案件数、記事数などを下記のように比較をしてみました。
Javaのフリーランスエンジニアとして案件を受注したいのであれば、2022年12月時点では、選ぶべきJavaフレームワークはSpring FrameworkもしくはSpring Bootといえます。
フレームワーク | テクフリ案件数 | Qiitaの記事数 | stackoverflowでの質問数 | 学習コスト |
Spring | 263 | 5909 | 159 | 高 |
Spring Boot | 263 | 4272 | 145 | 中 |
Play Framework | 36 | 899 | 22 | 低 |
Apache Struts | 25 | 166 | 6 | 中 |
JSF | 4 | 262 | 39 | 中 |
Java EE | 10 | 1595 | 29 | 中 |
SAStruts | 23 | 64 | 8 | 中 |
Spark Framework | 11 | 206 | 0 | 中 |
Dropwizard | 0 | 98 | 0 | 中 |
ZK | 0 | 378 | 1 | 低 |
フレームワーク | Spring |
案件名 | Java/Spring/RPAツール管理Webアプリケーションの開発 |
月額単価 | 〜830,000円/月 |
最寄駅 | 東京23区東部/リモート |
業務内容 | ・RPAツール管理Webアプリケーション(WinDirector)の開発を要件定義から行っていただきます。 |
基本スキル | ・Java(Spring、Spring Boot)経験2年以上 ・SQL知見 ・JavaScript開発経験 |
フレームワーク | Spring Boot |
案件名 | Java/SpringBoot/証券会社向けフルスクラッチ開発/リモート可 |
月額単価 | 〜880,000円/月 |
最寄駅 | 虎ノ門駅 |
業務内容 | ・証券会社向けシステムのフルスクラッチ開発案件となります。 ・業務的には債券のPTS(私設取引所)の再構築案件。 ・AWS上に構築する環境(サーバレス)上で稼働するWebアプリケーションとなります。 ・チーム構成は、機能ごとにチーム分けし、Scrumの形式で開発しています。 ・その中で担当機能の設計・開発・単体テストまでをご対応いただくものとなります。 |
基本スキル | パターン1(クライアント開発者) ・TypeScript、VueでWebアプリ開発経験があり、自力で画面開発が進められるレベルであること ・Gitの利用経験があり、mergeやrebaseなどを理解して正しく使いこなせること ・上記バリバリできるレベル |
フレームワーク | JavaEE、Spring Boot |
案件名 | Java/Linux/製造業向けプロジェクト開発支援/リモート可 |
月額単価 | 〜720,000円/月 |
最寄駅 | 市ヶ谷駅 |
業務内容 | ・認証認可、代理認証、スクレイピングによる既存システムのWeb画面の一部のREST API化を実装していただきます。 ・デプロイしていく上でIT部門との調整等を行っていただきます。 |
基本スキル | ・Javaの開発経験(Mavenによるビルド、SpringBoot,JavaEE or MicroprofileによるRESTエンドポイント開発) ・Linuxの基本操作、シェルスクリプト(bash)の作成・実行 ・データベースの基本操作(テーブル作成、SQL操作) |