Strutsとは?Apatch Strutsの概要やシステム保守での注意点

Xのアイコン

Strutsのイメージ図

「Strutsって何?」「Strutsって今も使われているの?」「Strutsって勉強する必要あるの?」という疑問をお持ちではありませんか?
名前を聞いたことはあるけど、詳しく知らないという方に、Strutsについて紐解き、Apache Strutsの概要を解説。フレームワークとしての特色、ほかのフレームワークとの違い、脆弱性のポイントに加えて、保守業務が発生した際の勉強方法についても紹介します。

 

目次

 

システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案

即戦力のシステム開発会社を探すなら「発注ナビ」

・ベストマッチな発注先が見つかる
・たった1日のスピード紹介
・ITに詳しいコンシェルジュがサポート
・ご相談~ご紹介まで完全無料

 

Struts(ストラッツ)とは

正式名称はApache Struts(アパッチ・ストラッツ)といい、JavaでWebアプリケーションを開発するために使用されるオープンソースのフレームワーク(MVCモデル)の1つです。ちなみに、MVCモデルとはプログラムを、Model、View、Controllerの役割に分ける設計手法です。

2005年にはApache Strutsを利用する企業や技術者が多くなり事実上の標準(デファクトスタンダード)といえるほど普及しました。これは当時では画期的なMVCモデルを採用したフレームワークであったため、大規模になりがちなJava開発において効率よくプログラムを組むことができたことで広まりました。しかしながら、現在では下火となっています。

Apache StrutsにはStruts1(以下「1系」)とStruts2(以下「2系」)があります。1系はJakarta Projectベースでしたが、2007年にリリースされたStruts2はWebWork2ベースに置き換えられました。残念ながら、1系と2系には互換性がありません。Apache Strutsは脆弱性の報告があるため、新規のWebアプリケーション開発に用いられることはありませんが、過去にApache Strutsで開発されたシステムが現在も現役で動いていることはありえます。総務省で通達が出ているように、新しいフレームワークへの移行が推進されています。

 

●Struts2の特徴

ここでは2系の特徴についての紹介と1系からどんな変更があったのか、改善点を紹介します。

 

アノテーション機能

アノテーションは直訳で「注釈、注記」という意味の言葉です。アノテーション機能は、クラスやメソッドなどを記述する際にアノテーションを活用することでコードだけでは表現できない情報を記述することができます。チームでコーディングする際のルールを決めることができ、効率が上がります。加えて、アノテーションのおかげでXMLファイルへの設定を減らすことが可能です。

アノテーションを利用すると設定に従ったクラスの命名などで設定ファイルの記述を大幅に削減できます。規定に従ったクラスの命名などを行うことで、設定ファイルの記述を大幅に削減する、ゼロコンフィギュレーションとすることも可能です。

 

DIコンテナ機能を導入

DIコンテナ機能は、DI(Dependency Injection:依存性の注入)を利用したコンポーネントの集まりを一箇所で管理するための機能です。
例えば、プログラムAとBがある場合、プログラムBを別のクラスにするとプログラムAが強く反応してしまうため、プログラムBを変更するにはプログラムAも変えなければなりません。このような関係性を依存性といいます。

依存関係となってしまうと後の編集が大変となるため、AとBの依存関係を一度切り離し、記録することで、プログラムが実行されるまでAとBが依存関係を持たない状態にしておきます。同様の依存関係を無数に記述した設定ファイルを元にDIコンテナが、適切な順番にDI(依存性の注入)することによって動作の正常化と管理を行います。つまり、今まで依存関係で1つを動かすと、別のものまで変なくてはならないという状態からDIコンテナを利用することで、簡潔なプログラムにすることができます。

 

ActionクラスがPOJOである

ActionクラスをPOJOとして作成が可能です。POJOとは「Plain Old Java Objects」の略で依存性を排除した何も継承しないクラスのことを指しています。POJOの意味合いとしては昔からある平凡なJavaオブジェクトのことで、フレームワークを用いた開発が盛んになったため、ごく普通のJavaオブジェクトをPOJOと呼ぶようになりました。

 

OGNLのセキュリティホールが発見されている

Struts2は脆弱性が多数報告されており、その多くはOGNL(Object Graph Navigation Library)ライブラリを利用していることから発生しています。OGNLにはJavaとHTTPを結びつける役割がありますが、Javaに似たコードをコンパイルなしで実行するために、悪意のあるリモートコード実行が報告されています。

現在使用しているシステムがStrutsを使用している場合、新しいシステムへの入れ替えが必要になります。しかしながら、自社で開発できない、技術者が不足していてシステム開発に人員を割けないなどの理由がある企業は多いかもしれません。もし、外部に開発を依頼するなら、プロ(システム開発会社向けマッチングサイト)に聞くのがおすすめです。発注ナビではシステム開発に詳しいスタッフが、要望を叶えられる会社をご提案します。

 

Struts2とほかのフレームワークの違い

すでにサポートが終了しているApache Struts。脆弱性の報告が多いため、まだシステムで使っている場合は早急に移行が必要です。ここでは移行のために、ほかのフレームワークとの違いを紹介します。

 

●Spring Framework

Struts2にあるDIコンテナの機能のほかにAOP(アスペクト指向プログラミング)コンテナという機能も持ち合わせているフレームワークです。 このAOPによってオブジェクトごとに存在する共通処理をアスペクトとして抜き出し、共通のプログラムを一括管理することができるようになります。そのため、WebアプリケーションのためのSpring MVC、バッチアプリケーションのためのSpring Batchなど様々な機能を持っています。

 

●JSF(JavaServer Faces)

JSF(JavaServer Faces)はJavaの基本仕様Java SEの基本機能を拡張したJava Platform, Enterprise Edition(Java EE)の機能として提供されているWebフレームワークでUI作成に特化しています。簡単に高性能なWebアプリのインターフェースが作成可能です。

 

●Play Framework

Play FrameworkはJavaとScala向けのWebアプリケーションフレームワークで軽量で動作が速く、Javaの堅牢性を活かしてバックエンドに採用することもあります。

 

●Spark Framework

Spark Frameworkは小・中規模の開発を迅速に行うことに特化したマイクロフレームワークです。軽量化したフレームワークの場合、軽量化の代償としてJVM(Java Virtual Machine:Javaのプログラムを動かすソフトウェア)を活かしきれないという特徴がありましたが、Spark FrameworkはJVMを効率よく利用できるように設計されています。

 

Struts2の勉強方法

Struts2は脆弱性報告やサポート切れのため、早急に刷新する必要があります。しかし、刷新するにしてもStruts2をある程度は理解しておかないと刷新の際に必要となる仕様が理解できない可能性があります。Struts2で過去に開発したシステムでできたことが新しいシステムでできないとなってしまうと不便が発生してしまいます。

勉強するといっても教本を1から進めていく必要はありません。どちらかといえば実際のコードを見ながら動作を見ていくほうが効率よく学習ができます。また、Struts2の処理は複雑ではないため、写経をしながら仕様を理解していくほうが良いでしょう。

しかし、無心で写経するだけでは、あまり意味はありません。ある程度写経した後は、一度立ち止まってどのような構造になっているか、どのような役割をもっているプログラムなのかを俯瞰して確認する意識があるとより効率よく勉強が進むでしょう。

 

Apache Strutsの脆弱性

Apache Strutsに脆弱性があるため、新しいシステムの移行が求められています。 具体的にはセキュリティホールが報告されており、情報の窃取、ファイルの不正操作、Webアプリケーションを使用不可にされる、サーバーに対して不正なリモートコードを実行されるなどがあります。

総務省で公開されているように脆弱性に該当するバージョンを使用しているシステムの場合には早急に対策が必要となります。特にStruts2.0から導入されたOGNL(Object Graph Navigation Language)に関する脆弱性が多く、根本的な対策がなかなかできていないのが現状です。

 

●脆弱性への対策

自社のシステムでApache Strutsを利用している場合はどのように対策をすれば良いのでしょうか?対策は1系、2系に分けて公開されているため、まずは利用しているバージョンを確認する必要があります。

バージョンは対象のフォルダやディレクトリを開いてjarファイルを確認します。対象の階層は環境によって異なるためご使用の環境をご確認ください。

 

●Struts1系

Struts1系は2013年にすでにサポートが終了しているため、今後対策プログラムの提供などは行われません。修正パッチや修正版バージョンは提供されていないため、そのまま使い続けるのはリスクが高くなります。

ビジネス上どうしても使わなければならないシステムなどの理由はあるかもしれませんが、もし使用しているならば停止を含めた判断が必要になります。根本的な対策としては新しいシステムの移行となります。

 

●Struts2系

Struts2系もバージョンによってはすでにサポートが終了しています。脆弱性が報告されている2.0から2.3系まではサポートが終了しており、2023年現在は2.6系が最新バージョンです。

Struts2系の対策としては脆弱性への対策が含まれたバージョンへの移行となります。バージョンアップにともなう仕様などを確認の上、システムの更新を行うと良いでしょう。

この記事ではApache Strutsの特徴や脆弱性などについて解説しました。効率よくJava開発ができる一方で、脆弱性の危険をはらんでいる側面があります。

現在も利用している古いシステムでApache Strutsが使用されている場合、刷新が必要になることがあるかもしれません。

しかしながら、自社で開発できない、技術者が不足していてシステム開発に人員を割けないなどの理由がある企業は多いかもしれません。もし、外部に開発を依頼するなら、プロ(システム開発会社向けマッチングサイト)に聞くのがおすすめです。発注ナビではシステム開発に詳しいスタッフが、要望を叶えられる会社をご提案します。

 

システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案

即戦力のシステム開発会社を探すなら「発注ナビ」

・ベストマッチな発注先が見つかる
・たった1日のスピード紹介
・ITに詳しいコンシェルジュがサポート
・ご相談~ご紹介まで完全無料

 

■システム開発に関連した記事

Webアプリケーション開発でおすすめのシステム開発会社

Webアプリケーション開発でおすすめのシステム開発会社10社【最新版】

Spring Frameworkを使ったシステム開発でおすすめの開発会社

Spring Frameworkを使ったシステム開発でおすすめの開発会社7社【最新版】

即戦力のシステム開発会社を探すなら「発注ナビ」

希望ぴったりの外注先がラクして見つかる
soudan_banner

人気記事

関連記事

関連特集

offer_banner
即戦力のシステム開発会社を探すなら発注ナビロゴ
発注ナビは、システム開発に特化した
発注先選定支援サービスです。
紹介実績
19000
対応社数
5000
対応
テクノロジー
319
紹介達成数
92%
システム開発の発注先探しで
こんなお悩みありませんか?
checkbox
なかなかいい外注業者
見つからない。
checkbox
ITの知識がなくて
発注内容をまとめられない。
checkbox
忙しくて外注業者を探す
時間がない
悩んでいる人物
発注ナビの主な特徴
IT案件に特化
IT案件に特化
日本最大級5000社以上のシステム開発・WEB制作会社が登録。IT専門だから細かい要望が伝わり、理想的なパートナーが見つかる。
ITへの不安を徹底サポート
ITへの不安を徹底サポート
専門コンシェルジュがしっかりヒアリングするので、IT知識に不安があっても、まだ要件が固まっていなくても大丈夫。
完全無料・最短翌日紹介
完全無料・最短翌日紹介
コンシェルジュに発注内容を話すだけで最短翌日に開発会社をご紹介。しかも完全無料・成約手数料も無し。
さらに
東証プライム上場
「アイティメディア株式会社」
グループが運営
ご相談内容は一般公開しないため、クローズド案件でも安心。
ご紹介企業は第三者調査機関にて信用情報・事業継続性を確認済です。

発注先探しの
ご相談フォーム

発注ナビは貴社の発注先探しを
徹底的にサポートします。
お気軽にご相談下さい。
必須
必須
必須
■必要な機能・課題■ご予算■スケジュールなど
■企画書やRFPの添付が可能です(10MBまで)

会員登録には、
発注ナビ 利用規約  及び 個人情報の取扱い 
「当社からのメール受信」への同意が必要です。