はじめに
「Javaの開発経験があればSpringでの開発もできるのでは?」と質問されている方がいたのですが、別物なので…と返答されているのを聞いて疑問に思い調べてみました。
※2つのサイトを参照してまとめたものになります。参照先は最下部にあります。
そもそもフレームワークとは
・プログラミングでアプリ開発をする際に、土台として提供されているもの
・自分でプログラミング言語を全て書くより、アプリ開発に必要なものをまとめて提供してくれているフレームワークを使ったほうがスムーズに開発を行っていくことが可能
Javaフレームワークのメリット
・開発期間を短くできる
・多人数開発にも参加しやすくなる
・フリーランスとしても仕事が取れる
・フレームワークはプログラミング言語とは全く別の知識になる
・特定のフレームワークを使用した経験があれば、そのノウハウを活かして仕事を獲得することも可能
Javaフレームワークのデメリット
・コーディングスキルが比較的向上しづらい
効率よくコーディングを進めることができる分、フレームワーク特有の書き方に合わせて書くことになるので、開発を0から始めた人と比べるとスキルの向上は低め
・Javaの深い理解が得られづらい
理解していなくても「こういうものだ」という一言で片付けてしまい、なぜ動いているか分からないまま開発できてしまうためJavaの本質的な理解が得られづらい
このように「たまたま動いているだけ」という状態が理解を遅くする原因にもなります。
・フレームワークによる脆弱性が避けられない
主なフレームワーク
Struts
・MVC※1(Model-View-Controller)モデルに基づいたフレームワーク
・2001年に初期バージョン「Struts 1」が開発され歴史が古いこともあり、脆弱性が発見さている
・使うならStruts2
※1:ビジネスロジックを受け持つ「Model」、画面表示や入出力を受け持つ「View」、ModelとViewを制御する「Controller」という3つの要素に分けて設計する手法
JSF(JavaServer Faces)
・ユーザーインターフェイス(UI)を簡単に作ることができるフレームワークで、Struts(ストラッツ)と同じMVCモデルを採用したフレームワーク※厳密にはStrutsのMVCモデルとはベースが異なる
・企業向けのJavaプラットフォームJava EE(Java Platform, Enterprise Edition)に含まれているため、Java EEを利用している場合は有力な選択肢の1つ
・開発チームとデザインチームで分業できるため、Strutsに比べて分業が行いやすい
・しっかり学習できれば様々な大規模システムにも対応可能
・美しいデザイン画面を作るには不向きだが実際利用している企業が多いので仕事としては利用することがある
・システム全体のうち見た目に関する部分を提供してくれるので、Javaで見た目を作りながら学ぶことが可能
・簡単に何かフレームワークに触れてみたい!という人向け
Spring Framework
・カバーしている範囲がとても広い万能型
・DI※2(Dependency Injection:依存性注入)機能を備えたフレームワーク
※2:オブジェクトの成立に必要なコードを分離し、プログラム実行時に注入する手法
例:2つのクラスの間に依存関係があり、そのうちの1つのクラスが完成していない場合
完成済みのクラスをテスト(単体テスト)はできない
しかし、依存性注入によってクラスの依存関係が解消され、完成済みクラスをテストすることが可能
このため、システムを改修する場合も最低限の変更で済ませることができ、開発が楽になる
Play Framework
・JavaとScala(関数型言語)のRuby on Rails(Rubyのフレームワーク)ライクなフレームワーク
・自動でコンパイルされるため、手動でコンパイル不要。コードを修正すると変更内容が直ちに反映
・Iteratee IO をベースにしたリアクティブモデルのおかげで、CPU、メモリ、スレッドなどのリソース消費が最小限
・開発しやすいことに主眼が置かれている
・軽量な為利用しやすく学習コストも比較的低め
Apache Struts(アパッチ・ストラッツ)
・オープンソースソフトウェアの開発を支援するApache Software Foundationによって開発されたフレームワーク
・誰でも自由に利用することができ、再開発・再配布を行うことができます。
・便利なタグライブラリが用意されている
・HTMLタグと同様の役割を果たす「html」
・JavaBeansのプロパティやHTMLのリクエストパラメーターを取得して新しい変数として定義する「bean」
・値の比較や条件分岐などを行う「logic」
・画面部品の再利用を支援する「tiles」
・同一オブジェクトにアクセスする際のコーディング量を減らす「nested」
など
Spark Framework
・GitHubの統計で人気が高い
・シンプルな構成で軽量なマイクロフレームワークである事が特徴で、迅速なシステム開発を行う事が可能
・必要最低限の機能しか実装されていない為、大規模なプロジェクトには不向き
※Apache Sparkとは別物なので注意
まとめ
言語とそれを元にして作成されたフレームワークならではのメリット・デメリットとそう変わりないなと感じました。(PHP⇔Laravel、Ruby⇔Ruby on Railsなど)
現場によっては言語でゴリゴリ書いて行くこともあればフレームワークを利用したりと両方の習得度のバランスが難しいところです。
参考サイト
【2022年最新】Javaのおすすめフレームワーク5選を徹底比較
【Java研修】押さえておきたいフレームワークは?比較4選