「Strutsって何?」「Strutsって今も使われているの?」「Strutsって勉強する必要あるの?」という疑問をお持ちではありませんか?
名前を聞いたことはあるけど、詳しく知らないという方に、Strutsについて紐解き、Apache Strutsの概要を解説。フレームワークとしての特色、ほかのフレームワークとの違い、脆弱性のポイントに加えて、保守業務が発生した際の勉強方法についても紹介します。
目次
システム開発会社選びはプロにお任せ完全無料で全国5000社以上からご提案
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社以上からご提案