「StrutsはSpringと何が違うのか具体的に知りたい」というJavaエンジニアの方も少なくないでしょう。
特にレガシーシステムからの移行を検討している場合は、StrutsとSpringの違いを正確に知っておく必要があります。その上で、移行や連携の方法を選択することが大事です。
そこで本記事は、StrutsとSpringの違いや移行方法などについて解説します。
目次
閉じる
1.Strutsとは
Strutsは、Javaで使えるフレームワークのことです。正式名称は「Apache Struts」(読み:アパッチ ストラッツ)を指します。
主にWEBアプリケーションを開発するために作られているオープンソフトウェアです。
開発に使われる機会が減った理由
Strutsは当時「デファクトスタンダード」とまで呼ばれた人気のフレームワークです。しかし、Springの登場により性能差で劣ったことやセキュリティの技術的問題が発覚したことなどが影響し、新規開発での需要は下火となります。
そのため、企業の開発したアプリケーションの中には、現在も稼働中のシステムでレガシーコードが残るケースが多々あります。
Struts1とStruts2ではベースが異なる
実は、StrutsにはStruts1とStruts2があります。まず、Struts1は2013年にサポートが終了しています。一方、Struts2は2007年に開発が進められた新たなバージョンのApache Strutsフレームワークです。アノテーション仕様や規約重視の設計、依存性注入など開発効率を高めるほうに力を入れて作られています。
そして、Struts1とStruts2はベース部分に大きな違いがあります。それがJakarta ProjectとWebWork2のベースの差です。具体的には、Struts2はWebWork2を再設計して作られた経緯があるため、Struts1と互換性がなく、Struts1のシステムを容易にStruts2に切り替えることはできません。
2.Strutsと他のフレームワークとの違い
Strutsと他のフレームワークでは設計思想が異なるため、具体的な機能やベースに違いがあります。特によく使われるフレームワークとして比較されるのがSpringやJSFです。
StrutsとSpringの違い
StrutsとSpringの違いは、使用する際の自由度や機能です。まず、Strutsは初心者向けのWEBアプリケーション開発を得意としています。決まった構成でコードを書けるため、初心者にも難しくないのが特徴です。
一方で、Springは拡張性が高く大規模向けの機能が豊富といえるでしょう。そのため、一定の知識やツールへの慣れが必要です。実際に、Strutsがいま企業の大規模開発に使われることはまずありません。
また、StrutsがWEB特化であるのに対し、Springはさまざまなアプリケーション開発に対応した多彩なフレームワークという点でも違いがあるのです。StrutsはJava初心者でも扱えますが、Springの利用には新たな学習が必要となります。
StrutsとJSFの違い
StrutsとJSFには、プログラム作成時の手軽さやコントロールのしやすさに違いがあります。MVCシステムがベースの点は同じですが、開発時の仕様の差で違いが出るのです。
まずStrutsは、Springほどではないにしても、開発時に一定のスキルが要求されます。例えば、自動的な設定がない部分は自身で設定してそれにあわせたコードを実装する必要があるのです。
しかし、Strutsに比べてJSFは自動化部分が多くあります。例えば、以下の機能などです。
作成を楽にするフォームのUIコンポーネント
ミスのチェック機能を提供するバリデーション
言語切替のナビゲーション機能
Javaコードの型をキャストするデータコンバージョン
そのため、Strutsでは細かく制御部分を決めて実装する必要があるのに対し、JSFは自動化や簡易な機能実装を前提に低労力で開発することができます。
StrutsとPlay Frameworkの違い
StrutsとPlay Frameworkは、小中規模の開発に向いている点やMVCのアーキテクチャを基本とすることが共通しています。
MVCとは、モデル・ビュー・コントローラーを基本とした3つの分割管理によって、処理の作業を分担するものです。
しかし、Play Frameworkのほうが軽量な設計となっており、コードの補助機能などが充実しています。そのため、Play Frameworkのほうが時短で効率的な開発をするときに優れたフレームワークです。
覚えることが最低限で済むため学習負担が少なく、すぐ使い始めることもできます。そのため、市場ではSpringほどではありませんが、おすすめのフレームワークとして人気があります。
関連記事
Strutsとは?脆弱性は大丈夫?struts6とは?Javaフレームワークとの違いをわかりやすく解説!
3.StrutsからSpringへの移行手順
Strutsはバージョン1の時代からレガシー化したコードを切り替えるために、バージョン2へ移行するのではなく、Springへの移行が積極的に行われています。そこで、今回はStrutsからSpringへの移行について解説します。
Springに移行する準備を始める
まずは、Springに移行するために、Strutsの構造を把握して、具体的に書き出します。その上で、新規アーキテクチャを設計し、移行する準備を整える段階です。
移行する作業
移行する作業では、例えば、Spring MVCへの移行を想定して、Struts側のActionクラスに対し、Spring側で使うControllerに変えることが作業の1つです。
その際、XMLを基本としたコード部分は、Javaクラスのアノテーションを使用して記述します。XMLというのは、具体的には「struts-config.xml」の設定ファイルのことです。アノテーションを使わない場合、かなりのコード量となるため、移行作業を省力化するためにも必要となります。
手動での作業も可能ですが、IntelliJやEclipseなどIDEにある自動でコード変換する方法や移行サービスを利用する方法も作業の省力化に効果的です。
動作確認テスト・検証
移行作業は上記の段階で完了ですが、実際には確認テストやコードチェックなどで実際の挙動を検証する必要があります。検証作業が甘いと、移行後に問題が発生するためです。
具体的な動作確認の方法としては、Spring MVCの処理パターンを解析・抽出して、そのパターンにそった最低限の実行をテストします。
よくあるパターンとしては、外部入力操作やデータベース使用、ファイルのアップロード・ダウンロード、外部とのシステム連携などです。
もちろん統合テストや新旧比較テストなども計画して、移行の開発作業は完了します。移行はすべてを一度にせず、段階的に移行することが負担もリスクも少ないでしょう。
バグは、1箇所に発生すると全体に派生することもあるため、大きな移行作業は一度に全部をしないほうがむしろ効率的です。
4.Strutsの自動移行ツールの導入方法
Struts1はサポート終了から時間が経っており、レガシーコード化しています。そのため、古いフレームワークのもとで過去に開発されたコードは移行を必要とします。
手作業は大変なため、自動移行ツールの導入が期待されます。しかし、Strutsから容易に切り替えられる共通したフレームワークはなく、一部の置き換えですぐにできる簡単な方法はありません。
ただし、自動変換ツールの作成やサービスの利用はできます。例えば、自動移行ツールを使ってレガシーコードを置き換え、Spring MVCなどのフレームワークで新環境に移行する「マイグレーション」をし直すなどです。2016年には、活発にSpring MVCへのマイグレーションサービスが各社から提供開始されています。
実は、Strutsの自動移行ツール作成の場合は、その前の十分な検討が不可欠です。これは、広い変換範囲とテストが必要で、コード全体を手早く一括変換だけして移行することができないためです。
自動移行ツール導入までの流れ
大まかな流れとしては、コードを確認してツールを作り、テストします。そこでまずは、システム改修やコード移行の提案を行い、検証を行った後、テストや要件定義の方向性を決めます。
該当箇所やレガシーコード部分の調査を実施して、動作を確認、その基盤を作成します。特にStrutsでしか動かない部品は新たな作成が必要です。そして、自動移行ツールの基礎となる変換ツールを作り、デバッグを開始します。
最終的に、新旧テストも実施することで出力の結果を比べて、単体テストや結合テストの完了となります。結果が一致しない場合に備えたテストの検証なども予定しておくのがおすすめです。
自社開発の場合でも他社ベンダーの開発製品を使う場合でも、大まかな流れは同じです。もちろん、コードを解析する部分をツールで自動的に解析する・手動で行うなどの違いはあります。
5.StrutsとSpringを同時に活用する方法
先ほどはStrutsからSpringへの完全な移行手順を解説しましたが、StrutsとSpringは移行するだけがすべてではありません。その証拠に、SpringからはStrutsと連携する機能が提供されています。
「連携」には全部で4つのパターンが用意されており、その中でもプラグインを用いた連携方法が主流です。
具体的には、Struts1の場合は完全移行を前提とし、Struts2の場合にSpringを連携させます。先にも述べた通り、Struts1は開発ベースが別物のため、Springとの連携のためだけにStruts2に移行させるのはおすすめできません。連携は基本、Struts2の場合に使う方法です。
Strutsの連携については、Springの公式見解が公式サイトでも示されています。それが「Struts 2.x」か「それ以降」に対して、組み込みに必要なSpring統合用のプラグインを使うというものです。
具体的な方法の指定では、Struts側にあるObjectFactoryをオーバーライドすることとしています。これが、コアフレームのオブジェクトをSpring側に作成させる機能を追加する仕組みです。
この機能の基本は、DI(依存性注入)を行い、クラス属性とidを対応させオートワイヤリング(自動譲渡機能)を利用することにあります。StrutsとSpringが連携して動作します。
ただし、同時活用での連携であっても、正しく動作するかなどのテストや検証作業は必要です。
6.StrutsとSpringの違いに関してよくある質問
ここでは、StrutsとSpringの違いや、StrutsからSpringへの移行についてよくある質問に回答します。
初心者はStrutsがおすすめ?
Strutsは、他のフレームワークと比べて学習時の負担が少なく、Java学習を終えた後にすぐ開始できる上、最低限の知識があればよいため、初心者向けといえます。
ただし、Strutsのフレームワークは過去に人気はありましたが、現状の企業開発の案件では、利用頻度は高くありません。そのため、企業業務を前提としている場合は軽く触れる程度でも問題ありません。
もちろん、移行についての知識・スキルはStrutsをある程度知っていて使えることが前提となる部分もあります。その場合は連携元のStruts2や完全移行するStruts1を前提にそれぞれ個別の学習を進めましょう。
Strutsからの移行先には何がある?
Strutsからの移行先は、Spring(Spring MVC)が有力ですが、それ以外にもいくつかあります。
Spring以外で特におすすめされるのがPlay FrameworkとJava EE(Jakarta EE)です。これらはJavaとの関連性が強く、厳選理由としては移行先の選択肢として扱いやすいことにあります。
移行時のStrutsの脆弱性に注意は必要?
Strutsは脆弱性が指摘されており、パッチを当てない限り脆弱性が残ります。そのため、Struts1の場合は完全移行して、Struts2の場合は脆弱性を解消する更新をするか、Springに移行することです。
自動変換や連携による脆弱性の解消は、変更に割く労力が少なく、効率の高い方法となります。方法によっては、使用する画面や操作、仕様のロジックを変えずに済むケースもあるでしょう。
Struts1からStruts2に移行すべきでない?
保守でStruts1からの移行を考えたときに、後継のStruts2を検討するのはエンジニアの方にとっては自然なことです。しかし、この移行はおすすめできません。
なぜなら、Struts1がSeasar2によるサポートの終了でセキュリティ脅威にさらされている状況は、サポートの終了も大きいからです。Struts2でも一部バージョンのサポートが終了しており、将来的に完全なサポートの終了が想定されます。
そのため、Struts1と同じレガシコードからの移行を繰り返すリスクを避けて、機能に優れたSpringなどに移行することがおすすめです。
関連記事
MVC とは?車業界でも活用?基本概念やフレームワーク、メリット・デメリットなど詳しく解説
7.まとめ
今回は、StrutsとSpringの違いや移行方法などについて解説しました。Strutsは過去にスタンダードなフレームワークとして定着し、その後、脆弱性が確認されています。
機能に優れた他のフレームワークへの移行も進んでおり、レガシーコードからの移行が推奨されています。
移行方法には、完全移行(手動・自動ツール)や一部連携などがあり、開発者が状況に応じて選択するのがおすすめです。
本記事が皆様にとって少しでもお役に立てますと幸いです。
「フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。
開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。
単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。
自身に最適なフリーランスエージェントを探したい方はこちらよりご確認いただけます。