JSweet: Java から JavaScript へのトランスパイラー
JSweet は TypeScript を利用して、JavaScript ライブラリとフレームワークを使用してリッチで応答性の高い Web アプリケーションを Java で作成します。 JSweet を使用すると、Java プログラムは TypeScript および JavaScript にトランスパイル (ソース間コンパイル) され、ブラウザー、モバイル Web ビュー、または Node.js で実行されます。
- JSweet は安全で信頼できます。 Web アプリケーションに型チェックを提供し、完全に型チェックされた JavaScript プログラムを生成します。 Oracle の Java コンパイラ (javac) および Microsoft の TypeScript (tsc) 上で動作します。
- JSweet を使用すると、お気に入りの JS ライブラリ (JSweet+Angular2、JSweet+threejs、IONIC/Cordova など) を使用できます。
- JSweet を使用すると、サーバー側 Java とクライアント側 JavaScript 間のコード共有が可能になります。 JSweet は、コード共有とレガシー Java の移行を目的として、コア Java ライブラリの実装を提供します。
- JSweet は高速かつ軽量で、JavaScript と完全に相互運用可能です。生成されたコードは通常の JavaScript コードであり、JavaScript に比べてオーバーヘッドが発生せず、既存の JavaScript プログラムおよびライブラリと直接相互運用できます。
どのように機能するのでしょうか? JSweet は、JavaScript API の適切に型指定された記述、いわゆる「キャンディー」に依存しており、そのほとんどは TypeScript 定義ファイルから自動的に生成されます。 Java のこれらの API 記述は、Java から JavaSript ライブラリをブリッジするためのヘッダー (C の *.h ヘッダー ファイルと同様) として見ることができます。既存のライブラリ用のキャンディーのソースがいくつかあり、そこにある任意のライブラリ用のキャンディーを簡単に作成できます (詳細を参照)。
JSweet を使用すると、すべての Java ツール (IDE、Maven など) を利用して、最新の JavaScript ライブラリを使用して実際の JavaScript アプリケーションをプログラムできます。
Java -> TypeScript -> JavaScript
ここでは、JSweet を使用することで得られるものを初めて体験してみます。次の単純な Java プログラムを考えてみましょう。
package org . jsweet ;
import static jsweet . dom . Globals .*;
/**
* This is a very simple example that just shows an alert.
*/
public class HelloWorld {
public static void main ( String [] args ) {
alert ( "Hi there!" );
}
}
JSweet を使用してトランスパイルすると、次の TypeScript プログラムが得られます。
namespace org . jsweet {
/**
* This is a very simple example that just shows an alert.
*/
export class HelloWorld {
public static main ( args : string [ ] ) {
alert ( "Hi there!" ) ;
}
}
}
org . jsweet . HelloWorld . main ( null ) ;
これにより、次の JavaScript 出力が生成されます。
var org ;
( function ( org ) {
var jsweet ;
( function ( jsweet ) {
/**
* This is a very simple example that just shows an alert.
*/
var HelloWorld = ( function ( ) {
function HelloWorld ( ) {
}
HelloWorld . main = function ( args ) {
alert ( "Hi there!" ) ;
} ;
return HelloWorld ;
} ( ) ) ;
jsweet . HelloWorld = HelloWorld ;
} ) ( jsweet = org . jsweet || ( org . jsweet = { } ) ) ;
} ) ( org || ( org = { } ) ) ;
org . jsweet . HelloWorld . main ( null ) ;
ライブサンドボックスでさらに詳しく。
特徴
- クラス、インターフェイス、関数型、共用体型、タプル型、オブジェクト型、文字列型などを含む、Java と TypeScript の間の完全な構文マッピング。
- バージョン 1.1.0 以降に追加された Java 構造とセマンティクスの広範なサポート (内部クラス、匿名クラス、最終フィールド、メソッドのオーバーロード、instanceof 演算子、静的初期化子など)。
- Web およびモバイル HTML5 アプリケーション (JQuery、Underscore、Angular、Backbone、Cordova、Node.js など) を作成するための1000 を超える JavaScript ライブラリ、フレームワーク、プラグイン。
- Maven アーティファクト (別名キャンディー) で使用可能なすべてのライブラリを含む Maven リポジトリ。
- J4TS キャンディ (GWT の JRE エミュレーションからフォーク) としての Java 基本 API のサポート。
- 簡単にインストールして使用できる Eclipse プラグイン。
- 他の IDE またはコマンド ラインから JSweet を使用するための Maven プラグイン。
- JSweet を Gradle ベースのプロジェクトと統合するための Gradle プラグイン。
- お気に入りのブラウザ内で Java コードのデバッグを可能にするデバッグ モード。
- JSweet と最も一般的な JavaScript API を使い始めて慣れるための、一連の優れた WEB/モバイル HTML5 サンプル (サンプル セクションにはさらに多くのサンプルがあります)。
- 生成されたプログラムを最も簡単な方法で実行するためのバンドルのサポート。
- JavaScript モジュール (commonjs、amd、umd) のサポート。 JSweet プログラムはブラウザーまたは Node.js で実行できます。
- さまざまな EcmaScript ターゲット バージョン (ES3 ~ ES6) のサポート。
- async/await イディオムのサポート
- ...
詳細については、言語仕様 (PDF) を参照してください。
はじめる
- ステップ 1: Git、Node.js、Maven をインストールします (またはインストールされていることを確認します) (コマンド
git
、 node
、 npm
およびmvn
パスに含まれている必要があります)。 - ステップ 2: Github から jsweet-quickstart プロジェクトのクローンを作成します。
$ git clone https://github.com/cincheo/jsweet-quickstart.git
- ステップ 3: トランスパイラーを実行して JavaScript コードを生成します。
$ cd jsweet-quickstart
$ mvn generate-sources
$ firefox webapp/index.html
- ステップ 5: プロジェクトを編集してプログラミングを開始します。
- 例をチェックしてさまざまな使用例を確認してください
- 何百ものライブラリ (キャンディー) にアクセスできます
- JSweet を使用したプログラミングの詳細については、言語仕様を参照してください。
- Eclipse ユーザー: Eclipse プラグインをインストールすると、インライン エラー レポート、保存時のビルド、および簡単な構成 UI が利用可能になります。
詳細については、http://www.jsweet.org をご覧ください。
例
- Java でのさまざまなフレームワーク (jQuery、Underscore、Backbone、AngularJS、Knockout) の使用を示す簡単な例: https://github.com/cincheo/jsweet-examples
- Java での Threejs フレームワークの使用を示す簡単な例: https://github.com/cincheo/jsweet-examples-threejs)
- Node.js + Socket.IO + AngularJS: https://github.com/lgrignon/jsweet-node-example
- React.js を始めるための簡単な例: https://github.com/cincheo/jsweet-examples-react
- JSweet JAX-RS サーバーの例 (クライアントとサーバー間で Java モデルを共有する方法): https://github.com/lgrignon/jsweet-jaxrs-server-example
- JSweet Cordova / ポリマーの例: https://github.com/lgrignon/jsweet-cordova-polymer-example
- JSweet Cordova / Ionic の例: https://github.com/lgrignon/jsweet-cordova-ionic-example
- JSweet Angular 2 の例: https://github.com/cincheo/jsweet-angular2-quickstart
- JSweet Angular 2 + PrimeNG: https://github.com/cincheo/jsweet-primeng-quickstart
サブプロジェクト
このリポジトリはサブプロジェクトで構成されています。各サブプロジェクトには独自のビルド プロセスがあります。
- JSweet トランスパイラ: Java から TypeScript/JavaScript へのコンパイラ。
- JSweet コア キャンディ: コア API (JavaScript 言語、JavaScript DOM、および JSweet 言語ユーティリティ)。
- JDK ランタイム: JSweet/TypeScript/JavaScript で主要な JDK API を実装するための GWT の JRE エミュレーションからのフォーク。
- JSweet キャンディ ジェネレーター: TypeScript 定義ファイルから Java API を生成し、JSweet キャンディとしてパッケージ化するツール。
- JSweet ドキュメント: JSweet ドキュメント。
さらに、JSweet の一部のツールは外部リポジトリで利用できます。
- Maven プラグイン
- Gradleプラグイン
- Eclipseプラグイン
構築方法
各サブプロジェクトの README ファイルを確認してください。
貢献する
JSweet は Git Flow を使用します。このリポジトリをフォークすることができます。デフォルトのブランチは開発です。 git flow feature start myAwesomeFeature
を使用して、何か素晴らしい作業を開始してください :) 完了したら、通常の GitHub Pull Request を送信できます。
ライセンス
LICENSEファイルをお読みください。