この記事を書こうと思った経緯
私が今いるプロジェクトでは使用されているフレームワークとして
Struts(正確にはStrutsベースのオリジナルフレームワーク)が使われているのですが、
後々にシステムをマイグレーションすることになりました。
そこで選ばれたフレームワークがSpring Frameworkでしたので、
いい機会だと思い、それぞれの特徴を調べることにしてみました。
各フレームワークの特徴
・2001年に初版リリースされており、歴史が長い
・短期間での開発や初心者にも取り組みやすい
・Javaのコードの代わりに利用できる専用のタグライブラリを設けており、
JSPの記述を統一し可読性を上げることができる
・過去に脆弱性を指摘されている。(Struts2ではパッチで対策済み)
・Struts2とは互換性はない。
・AOP(Aspect Orientation Programming)によりメンテナンスがしやすい
・DI(Dependency Injection)により変更がしやすい
・ORM(Object-Relational Mapping)機能がある
・テストを容易に実施可能
・学習コストが高い
・アプリケーションのメモリ使用量が増加する可能性がある
ここに記載したものは一部にはなりますが、
StrutsはMVCモデルを採用しアクションベースのアプローチを取るのに対して、
Spring FrameworkはDIでアノテーションベースのアプローチを取ることが大きな特徴にも思えます。
シェアについて
公開されている情報の中での状況になりますが、
※2021年7月時点の案件数ではSpringが4577件、Strutsが1073件となっておりました。
しかしながら、
この2つは他のJavaフレームワークよりもかなり案件数が多いことから、
Javaを学習する際は両方を並行して学習するのがよいと思われます。
(私が前いたプロジェクトではSpring Frameworkでした)
Struts→Spring Frameworkに移行するとどうなるのか?
個人的な観点では以下が気になっております。
- 学習コストがかかる
⇒全員がSpring経験者でない場合、各個人がフレームワークについて学習コストがかかります。 - AOPやDIのおかげで生産性が上がる。
⇒開発チーム・運用保守チームとも助かります。 - 運用保守としては調査や障害対応に関しては最初に時間がかかる可能性がある
⇒しかし、ある程度知識が習得できればSpringの特徴上、運用保守作業がしやすくなります。 - 移行後、安定するまでは思わぬバグや障害が出る可能性がある。
⇒移行直後は稼働が高くなりそうですが、良い経験を積むこともできそうです。
所感
私は運用保守チームに所属しているため、
移行に関係する作業は直接行わない可能性がありますが
事前の調査や移行後の作業ではよい経験を積めるのではと感じております。
また、今いるプロジェクトから変わって別のプロジェクトに参画することになった時、
Spring Frameworkの経験と知識があることで選べる案件が増えそうだなと思いました。
Spring Frameworkの学習をこれからも進めていこうと思います。