はじめに
この記事は NRI OpenStandia Advent Calendar 2024 の5日目の記事です。
Windows10のサポート終了日(2025年10月14日)まで、残すところ1年弱となりました。
Windows11への移行を契機に、社内システムをEdgeIEモードからEdgeデフォルトモードへ移行するケースがほとんどかと思いますが、その一方で Windows11でもEdgeIEモードが利用可能なため、引き続きIEモードを利用する選択を取ったシステムもあるかと思います。
Microsoftの発表によれば、IEモードは少なくとも2029年まではサポートされると明言されていますが、気が付けばあと5年もなく、2029年より先にサポートが延長される保証もありません。
ということでそろそろ重い腰を上げてIEモードを脱却するいいタイミングですが、腰を重くしている理由の一つに「ActiveX(ActiveXコントロール)」が…というシステムもあるのではないでしょうか。
今回は、私がこれまで経験したIEモード脱却のケースを振り返り、移行のハードルが高いと感じたActiveXの使われ方と、それに対しどのような移行策が考えられるかを整理したいと思います。
パターン1:リッチなUIの作りこみ
リッチなUIを実現するためにActiveXを使っているケースがあります。
今でこそブラウザ標準のJavaScriptやCSSで様々なUIを表現できるようになりましたが、IEが全盛だった2000年代初頭などはまだブラウザ標準機能で表現できるUIには限界があり、このためにActiveXを利用しているケースが多くありました。
この場合は、素直にJavaScriptやCSSへの置き換えを考えるタイミングかと思います。
画面全体を再構築するのであればReactやVue.jsを使ったSPAに作り替えるのが無難な選択と言えそうです。それぞれのフレームワークで様々なUIコンポーネントライブラリが公開されており、リッチなUIを実現可能です。
部分的なUIコンポーネントとしてActiveXを使っている場合は、その部分だけ別のJavaScriptライブラリで代替するという案も考えられます。
たとえば、Excelの埋め込みなどMicrosoft Office製品との連携を密にやっている場合は、Wijmo のようなJavaScriptの世界でほぼExcelのUIを表現できてしまうライブラリの導入も選択肢として考えられます。
パターン2:クライアントアプリケーションとの連携
社内システムとして使うWindows端末では、ブラウザで操作するWebアプリケーションだけでなく、Windowsにインストールされたクライアントアプリケーションも併用して業務を行うケースがあります。
ActiveXは、クライアントにインストールされたモジュールをブラウザで読み込んで利用するというその特性から、クライアントアプリケーションとの連携が比較的容易に実現可能でした。
このパターンでは、単純にJavaScriptに移行しようと考えたとしても、セキュリティの観点からクライアントアプリケーションとの連携が容易ではないため、他の仕組みを併用して実現方法を考える必要があります。
基本的な方針としては、クライアントアプリケーションをサーバサイドへ移行し、システム間の連携はAPI等を介してサーバサイドで連携を行う、という形式に移行していくのが良いでしょう。
クライアントアプリケーションがなくなれば、端末配布に頭を悩ますこともなくなりますし、シンクライアントといったよりセキュリティ強度の高い端末でもシステムを利用できるようになります。
とはいえ、すぐにクライアントアプリケーションを無くせるかといったらそれも現実的ではないでしょう。当座をしのぐ意味でもクライアントアプリケーションとの連携は必要に可能性があります。
まず、ブラウザから端末内のクライアントアプリケーションへの連携を実現したい場合は、カスタムURIスキームを使ってアプリケーションを起動する方法が考えられます。
カスタムURIスキームはWindowsのレジストリへの登録作業が必要となりますが、これを利用することでブラウザから任意のアプリケーションを起動することが可能となります。
これとは逆に、他システムが連携元となって自システムである起動中のブラウザに連携を行いたい場合は、ブラウザに対しメッセージを送る仕組みを使って連携を行う必要があります。
連携元が同じブラウザであれば、JavaScriptのpostMessageを使うことで比較的容易に連携が可能です。
クロスドメインの考慮は必要ですが、連携相手が互いに社内システムであればiframeで埋め込んでWindow間でメッセージを連携する、といった比較的密な実装を前提とした連携も選択肢としてはありかもしれません。
また、サーバを経由してブラウザへの連携が必要な場合は、その用途に応じてWebSocketやPush APIといった仕組みを利用することで実現が可能です。
たとえばSpringBootでは WebSocket でインタラクティブな Web アプリケーションを作成するガイド が公開されていますので、SpringBootで構築済みのシステムであれば現状のシステム構成を変えることなく機能を追加できるかもしれません。
もちろん、複数の端末がサーバに接続してくるため「どの端末に通知を行うか」といった制御は考慮が必要です。
おわりに
ActiveXは社内システムにとって多くのメリットを生み出してくれた機能ではありましたが、いよいよ卒業しなければならない時がやってきました。
古い技術からの脱却を新しいシステムへの再構築の機会ととらえ、この記事がActiveX脱却のきっかけになれば幸いです。