先日、「Javaエンジニアのための Nodejs/Nuxt3入門」という資料を公開したのですが、Node.js がすでに業務システムを作るのに十分な環境が整っています。しかし、どう考えても導入を進めるためのネックになっている項目があります。それは LTS (長期サポート)の短さです。
Node.js のランタイムは偶数バージョンが LTS となっており、リリースの半年後に長期サポートが始まり 30 カ月後にはセキュリティ・パッチの提供が受けられなくなります。実はこの 30 カ月という期間は、PHP(3年) や Ruby(3 年 3カ月) といった他の言語ランタイムに比べて特別短いわけではないですし、JavaScript の言語としての安定性を考えれば、気軽にメジャーバージョンアップをすればいいと思うのですが、これがこと業務システムとなると大問題になります。
業務システムの開発に長く携わっていると、多くの日本企業が EOL(製品のライフタイム終了)を非常に気にしていることに気付かされます。システムの情報セキュリティの重要性が叫ばれる中、セキュリティ・パッチが提供されないというのは事業継続のリスクとなるからです。とはいえ、安易なバージョンアップは予期せぬ不具合を引いてしまうといった潜在的なリスクを呼び込むため、そう簡単にバージョンアップというわけにもいきません。そのため、セキュリティ問題が発生した場合には早急にパッチを当てられるようにするものの、通常時はパッチを当てない、という運用になることが一般的だと思います。そして、バージョンを更新した際には動作を保証するために全機能に対して再テストを実施しなければならなくなります。これは大変コストがかかる話です。1
このような事情のため、新機能はいらないからできる限り長い期間セキュリティパッチを提供してほしいというのが企業からの要請となり、そのためには(総テストよりは安いので)有償契約もいとわないという状況があります。
業務システムと言えば Java ですが、さすがというか、あまりにも使われすぎていてセキュリティ・パッチを打ち切れないというべきか、多くの提供元がとても長いサポート期間を打ち出しています。
- Oracle JDK: 有償だが最大 8 年サポート
- Red Hat OpenJDK: 最大 6 年サポート(有償のELSで延長の場合あり)
- Eclipse Temurin OpenJDK: 4~6年程度
Node.js も有償による長期サポートを提供してくれる企業が出てきてくれればよいのですが、エンジンとして使っている V8 の維持が難しいためか、そのような企業は出てきていないのが実情です。では、本当に長期サポートを受けられる方法はないのでしょうか。
ありました。GraalVM です。
GraalVM は Oracle が開発しているポリグリット(多言語)対応の仮想マシンです。主な用途は Java のネイティブコンパイルですが、なんと Node.js 互換機能も提供されているのです。
graaljs と呼ばれるこの機能ですが、JavaScript 実装は V8 を使わず独自開発、Node.js 固有のコードはそのまま利用という構成で構築されており、Node.js v18 相当の機能がほとんどそのまま動きます。 その互換性なんと 94% を超えるとのこと。
私も試しに Nuxt3 のサンプルプログラムをビルドし実行環境として動かしてみましたが、何ら変更もせずに動かすことができました。特殊なものでなければ問題なく動くようです。
この GraalVM ですが、Java SE Universal Subscription の一部としてサポートを受けられます。そのため JavaVM 同様、最大8年間のサポートが受けられます。
Oracle 社に問い合わせたところ Subscription のサポート範囲に graaljs が含まれるとのことなので、Node.js v18環境の延命が可能です。2
厳密には Node.js じゃないじゃん、パフォーマンスが不安、という意見もあろうかと思いますが、ひとつの選択肢として考えて頂ければと。