Googleによって設計され、開発され、オープンソース化されたJ2CLとは、JavaをJavaScriptに変換するソース・トゥ・ソースのコンパイラである。J2CL開発者は、このコンパイラが”JavaScriptアプリケーションにおけるJavaのシームレスな利用を可能にする”と述べている。J2CLは、GWTといった同様のJava-JavaScriptのフレームワークとは異なる問題の解決を試みるもので、同じく既存のJavaScriptフレームワークとの競合、置換を意味するものではない。J2CLは相互運用とクロスプラットフォームのコード再利用を目的としている。開発者によると、”J2CLを使えば、単にJavaScriptからJavaコードをアクセス可能にしたり、またはアプリケーション全体を作り通せます;なんでもぴったりニーズに合います。”とのことだ。
ツールはフレキシビリティを念頭に置いて開発され、様々な方法で利用できる。例えば、異なるテクノロジーで実装され、複数のプラットフォームで稼働する、複雑なロジックを保証するため、プラットフォーム間で共有できるようにするなど。J2CLプロジェクトのコントリビュータであったThomas Deegan氏は、”Google Docsのフロントエンドを作動させるコードはweb用に書かれるべきです … J2CLは全てのドキュメント操作およびJavaからJSへのレンダリングロジックをトランスパイルします”と述べている。他には、Node.jsアプリケーションにおいてJavaで書かれたライブラリの再利用などがあるだろう。
J2CLはほとんどの既存のJavaコードをソースから変換できるが、JavaリフレクションAPIなど、全てのJava APIがサポートされているわけではない。デフォルトでは、変換されたコードは公開されず、JsInteropの多くのJavaアノテーションがクラス、メソッド、インスタンス変数の特定に利用されるか、または他のコードが公開される。利用方法を紹介するため、プロジェクトには非常にシンプルな”hello world”のサンプルが内包されている。ごくわずかに変更されたこのサンプルの抜粋は以下の通りである。アノテーション付きのJavaクラスと、JavaScriptで利用される方法を示している。
以下のJavaクラスはJ2CLで稼働した:
package com.acme
import jsinterop.annotations.JsType;
@JsType
public class HelloWorld {
public static String getHelloWorld() {
return "Hello from Java!";
}
}
JavaScriptでは以下のように利用される。
const HelloWorld = goog.require('com.acme');
console.log(HelloWorld.getHelloWorld());
開発者は、今はプロダクション・レディの状態で、”GMail、Inbox、Docs、Slides、Calendarなど、Googleによって開発された最先端のGSuiteアプリの基本的なテクノロジー”として役目を果たすと主張している。
プロジェクトは昨年末にオープンソース化されたが、プロジェクトの議論は2014年にまで遡る。元々、J2CLはGWTプロジェクトと関連付けられていた。しかしながら、2015年のはじめ、開発者はプロジェクトのゴールがGWTプロジェクトの一部として達成できないと判断し、独自のプロジェクトとして分割することを決定した。既存のツールとの統合は未だ可能になっておらず、Windowsのサポートも現在は限定されている。
さらなる情報はプロジェクトのGithubページまたはgetting startedガイドを参照のこと。