Googleのコンパイラチームは2026年4月6日、JavaScriptのための高レベル中間表現(IR)である「JSIR」のRFC(Request for Comments)をLLVMおよびMLIRコミュニティに向けて公開した。すでにGoogleのプロダクション環境で稼働しているこの新しい技術は、ソースコードからAST(抽象構文木)、そしてJSIRへの完全な可逆変換をもたらし、難読化解除(Deobfuscation)や極めて高度なデータフロー解析において圧倒的な真価を発揮する基盤技術である。

現代のJavaScript開発を支えるエコシステムは、コンパイラの歴史という視点から見ると特異な進化的偏りを見せている。Babel、ESLint、Webpackといったソースコードの解析および変換ツールの大多数は、内部表現としてASTに強く依存している。ASTはコードの構文的な階層構造を表現するには適しており、開発者が視覚的に理解しやすいという絶対的な利点がある。しかし、変数の状態変化をシステム全体のライフサイクルにわたって追跡するデータフロー解析や、複雑に分岐する実行経路を網羅的に表現する制御フローグラフ(CFG)の構築には根本的に適していない。JSIRの登場は、このエコシステムの根底にある構造的限界を突破し、コンパイラインフラストラクチャにおける業界標準のパラダイムを、Webネイティブな領域に持ち込む野心的な試みだ。

AD

ASTエコシステムの構造的限界と非連続的な進化の必要性

現在のコンパイラ業界全体の大きな潮流として、プログラミング言語特有の高レベルIRを構築するというトレンドがある。LLVMが提供する低レベルなIRはハードウェアへの最適化には優れているが、言語固有のセマンティクスを必要とする解析には粗すぎるためだ。たとえば、RustコンパイラにおけるMIR(Mid-level IR)やSwiftのSIL(Swift Intermediate Language)などがその典型であり、近年ではC++向けのClang IR、AIプログラミング言語であるMojo、あるいはC++の後継を目指すCarbonといったプロジェクトも、フロントエンドレベルでの高度なIRアーキテクチャを指向している。

一方でJavaScriptのエコシステムには、広範に普及し標準化された高レベルIRが存在しなかった。JavaScriptコードを異なるバージョンに変換するトランスパイラやソースコードバンドラは、最終的に実行可能なJavaScriptコードを復元して出力しなければならない。そのため、ESTreeなどに準拠したASTを操作するアプローチが唯一の実用的な選択肢となってきた。ASTを操作・走査するためのツールは極めて豊富に存在するものの、セキュリティ上の脆弱性を機械的に発見するためのテイント解析、複雑な分岐を跨ぐ変数の生存期間の追跡、あるいは精密な定数伝播といった高度な静的解析をAST上だけで完結させることは、実装の複雑さを非現実的なレベルまで押し上げてしまう。ここにおいて、JavaScript特有のセマンティクスを解釈し、強力な解析基盤を提供するIRが強く渇望されていた。

JSIRの最大の特長であり、これまでのIR研究と一線を画すのは、最適化処理のための一方通行の変換ではなく、ソースコード情報への「高忠実度なラウンドトリップ」を完全に保証する点にある。つまり、元のJavaScriptコードからASTを生成し、それをJSIRに変換して解析・編集を加えた後、再びASTを再構築してソースコードへと復元する(Source ↔ AST ↔ JSIR)というサイクルにおいて、一切の情報損失がない。Googleの内部評価では、数十億に及ぶ膨大なJavaScriptのコードサンプルに対して、99.9%以上の成功率でASTとIRの相互変換に成功したという。ソースコードの意図や構造を破壊することなく、強力な中間表現を経由した高度なコード変換(Source-to-Source Transformation)が可能になったことで、ツールチェーンの非連続的な進化が現実のものとなりつつある。

MLIRのポテンシャルを解き放つ:制御フローとデータ構造の再定義

JSIRはゼロから独自のインフラを構築するのではなく、LLVMプロジェクトの最重要サブプロジェクトであるMLIR(Multi-Level Intermediate Representation)の強固で柔軟な基盤の上に構築された。ASTとソースコードとの1対1のマッピングを高い精度で維持するために、JSIRはJavaScriptの複雑な制御フローをMLIRの機構を利用して極めて巧妙にモデリングしている。

典型的なコンパイラの基本ブロックの構造をそのままJavaScriptに持ち込むと、一時変数が無数に生成されてしまい、コードの可逆性が失われる。JSIRはこの問題を回避するため、直列に並んだ式や文といったストレートラインコードの処理においては、ASTノードとJSIRオペレーションの対応関係を事後順(Post-order)トラバーサルによってマッピングする。これにより、ブロック内に「文」が含まれるか、「式のリスト」が含まれるかを判定し、正確に元のASTノード群へと復元する。

また、条件分岐や繰り返し処理といった構造は、それらが持つJavaScript固有の評価タイミングをIRレベルで正確に再現している。たとえば、while文の条件式はループの各イテレーション内で都度再評価される必要があるため、通常の静的単一代入(SSA)の値ではなく、専用の領域として定義される。同様に、論理演算子(たとえば x = a && b)における右辺値はショートサーキット評価の特性をもつため、左辺値の評価結果が真であった場合のみ実行される空間として独立して管理される。

さらに特筆すべきは、JSIRが代入演算などにおける左辺値(l-value)と右辺値(r-value)をシステムレベルで明確に区別して表現している点だ。従来のASTでは双方ともに単なる識別子(Identifier)として一律に扱われるが、JSIRではメモリアドレスや参照先を示すl-valueと、評価された値そのものを示すr-valueを表現し分ける。これにより、より厳密なポインタ解析や副作用のトラッキングが可能となる。

AD

データフロー解析の民主化と開発者体験の向上

JSIRは単なる表現形式に留まらず、MLIRの機能の上に構築された改良版のデータフロー解析APIを提供している点も大きな強みだ。基盤となるMLIRのデータフロー解析フレームワークは強力だが、設定項目が複雑で学習コストが高い。

JSIRのAPIは利用者の使い勝手に焦点を当てて最適化されている。特定の状態更新時に必要な依存タスクを自動的にワークリストにキューイングする設計の導入により、ユーザー自身が状態変更の反映を追跡する煩わしい定型処理を排除した。さらに、スパース解析とデンス解析という複雑に分断された分析モデルを一つのベースクラスに統合することで、高度なコンパイラ設計の知識を持たないエンジニアでも、JavaScriptコードに対する独自のルール検証や静的解析ツールを迅速に実装できる層を提供している。

Google内部のユースケースとGemini AIとの融合アプローチ

すでにGoogleでは自社のプロダクション環境でJSIRを実運用している。その代表的な用途の一つが、「Hermes」バイトコードの強力な逆コンパイルエンジンの基盤である。Hermesは主にReact Nativeプラットフォーム等で利用される高速なJavaScript実行エンジンだが、そのバイトコードから人間が可読な元のソースコードを復元するために、JSIRの持つ可逆変換と高度な推論能力が直接的に効果を発揮している。

そして業界全体が注目すべきは、JSIRを利用したマルウェア対策やコードの難読化解除(Deobfuscation)へのアプローチである。Googleは自社の生成モデルであるGeminiとJSIRを組み合わせた次世代のハイブリッド解析手法「CASCADE」を構築した。この研究成果は、2026年4月に開催されるソフトウェア工学の最高峰の国際会議であるICSEのSEIP(Software Engineering in Practice)トラックにて詳細が発表される。コードを意図的に隠蔽する複雑な難読化技術に対して、JSIRによる精密な静的データフロー解析と、LLMによる高度なパターン認識・セマンティクス推論を融合させることで、従来の静的解析だけでは検知不可能であった複雑な隠蔽手法の突破を実現しているのだ。

AD

LLVMコミュニティに提示される技術的課題と今後のエコシステムへの波及効果

Googleのチームは現在、JSIRを主要なコンパイラインフラであるMLIRのアップストリームとして統合することについて、オープンソースコミュニティへ対話を呼びかけている。これまでのMLIRは、C++のコンパイルやAI向けの計算グラフといった用途でその有用性が証明されてきた。もしJSIRの統合が成功すれば、MLIRが柔軟で表現力豊かな動的言語の抽象構文木をも表現しきるという強力な概念検証となる。

しかし、MLIRの公式プロジェクトへ統合されるにあたってはいくつかの実践的な障壁が顕在化している。最大の課題は、外部プロジェクトへの依存構造だ。JavaScriptは非常に複雑な型推論と暗黙の型変換ルールを持つため、コンパイラ内で式を正確に評価・定数畳み込みするために、軽量なJavaScript実行環境である「QuickJS」に依存せざるを得ない。LLVMやMLIRの巨大なC++リポジトリの中に、実行環境であるJavaScriptエンジンを依存モジュールとして同梱することがコミュニティの思想と適合するかは未知数だ。さらに、ASTのパージング部分においてもBabelに依存しており、開発チームはより高速なSWCへの移行を検討しているものの、C++のエコシステム外のツールチェーンへの依存が深い点も大きな論点となる。

JSIRの発表は、長らくASTの限界の中で足踏みしてきたJavaScriptの解析領域に、コンパイラ理論に基づく真の分析インフラストラクチャをもたらす歴史的なマイルストーンである。今後、ツールの開発者たちがJSIRのリッチな恩恵に触れることで、ブラウザのJavaScript最適化エンジン、次世代のバンドラーツール、そしてエンタープライズのセキュリティ解析システムのアプローチが根本から刷新されることは間違いない。


Sources