Dart のインストールとコンパイル (Windows)
Google が JavaScript に代わる言語として Dart を出して来ました。
今回はこの Dart のインストールと JavaScript への変換(コンパイル) 方法についての記事です。
Dart が目標としている用途は JavaScript のようにブラウザーが直接読み取って実行することです。 ただ、当分の間は JavaScript に変換して使うことなると思うので、コンパイルも必要でしょう。
Dart Editor と SDK
Dart は Dart Editor と SDK の 2 種類のパッケージで公開されています。Dart SDK は Dart のコマンドラインツールのセットです。 コンパイルするだけなら、こちらで十分です。
Dart Editor は Editor という名前ですが、 Visual Studio のような IDE に近いものです。
コンパイルだけなら必要ありませんが、 デバッグに役立ちそうですし、 Dart Editor のパッケージには SDK も含まれるので、 こちらをインストールすることにします。
ちなみに、 Dart を実行できる Chrome(Dartium) も公開されています。
インストール
(0.) DartEditor は Java を使用するため、 入ってない場合は以下のサイトからダウンロードしてインストールしてください。1. Dart のサイトから PC 環境にあった zip ファイル(darteditor-winXX-XX.zip) をダウンロードします。
2. zip ファイルをインストールしたいところに解凍します。
3. 解凍後の dart フォルダー内に DartEditor.exe があるので、 実行してみて下さい。 正常に実行できていれば完了です。
(4.) エディターを使わずにコンパイラーを直接呼び出して使いたい場合は、 解凍した dart/dart-sdk/bin フォルダーのフルパスを環境変数 Path に追加します。
Dart Editor の実行でエラーが発生する場合
環境によっては DartEditor.exe の実行時に次のようなエラーメッセージが出る場合があります。Failed to create java virtual machineこの場合は DartEditor.exe と同じフォルダー内にある DartEditor.ini ファイルの -vmargs の行を削除します。
-data @user.home\DartEditor -vmargs -Dosgi.requiredJavaVersion=1.6 -XX:MaxPermSize=256m -Xms40m -Xmx1024m
コンパイル
JavaScript への変換(コンパイル)には dart2js.bat を使用します。まず、適当な Dart のファイルを作成しておきます。
hello.dart :
import 'dart:html'; main() { var msg = query('#msg'); var btn = new ButtonElement(); btn.text = 'Click me!'; btn.on.click.add((e) => msg.text = 'Dart!'); document.body.nodes.add(btn); }
コンパイルには次のようなコマンドを実行します。
dart2js.bat [オプション] 入力ファイル
> dart2js.bat -ohello.js hello.dart実行するとオプションを指定していない場合は out.js という名前で JavaScript ファイルが生成されます。 出力ファイル名を指定する場合は -o オプションを使用します。
オプション
dart2js のオプションには次のようなものがあります。オプション | 機能 |
---|---|
-o<file>, --out=<file> | 出力ファイルの指定 (-o の後にはスペースを入れません) |
-c, --enable-checked-mode, --checked | チェックモード (実行時型チェックのコードを挿入し、違反時にアサートできるようにします) |
-h, /h, /?, --help | ヘルプの表示 (-v と一緒に指定すると詳細なヘルプになります) |
-v, --verbose | 詳細情報の表示 |
-p<path>, --package-root=<path> | インポート用のパッケージパスの指定 |
--minify | 出力コードを難読化 (空白、コメントなどを取り除いたコードを生成します) |
--suppress-warnings | ワーニングを非表示 |
--enable-diagnostic-colors | エラーメッセージを色付きで表示 |
ソースマップ
コンパイル時に JavaScript のファイルだけでなく、 JavaScript のファイル名の後に .map をつけたファイル(hello.js.map) も一緒に生成されます。これはソースマップと呼ばれるもので、 Chrome や Firefox でのデバッグ時に使用します。 これを使うと JavaScript ファイル上のエラー発生箇所と一緒に Dart ファイルでの対応箇所も表示することができます。
Dart 用 Emacs モード
前に Dart のインストール方法を紹介しました。
Dart には IDE とも言える Dart Editor があリます。
しかし、"コードの編集はやっぱり Emacs "という人は多いはず。
ということで、今回は Dart ファイルを Emacs で編集するためのモード
(dart-mode.el)のインストール方法について説明します。
ダウンロード
以下のサイトに dart-mode.el が公開されています。 ダウンロード方法は以前の記事を参考にして下さい。インストール
取得した dart-mode.el をパス(load-path)の通ったフォルダーに置いておきます。~/emacs.d/init.el に設定を記述します。
最小限必要なのは次の記述です。
(add-to-list 'auto-mode-alist '("\\.dart\\'" . dart-mode)) (autoload 'dart-mode "dart-mode" "Major mode for editing Dart files" t)Dart 用として特に新しくキーが割り当てられているものはありませんが、 C++ や Java と同じ cc-mode を基に作られているので、 だいたい同じ機能が使えます。
コンパイル
エラーメッセージ形式の登録
dart2js のコンパイル時のエラーメッセージは標準的な形式なので、 そのまま M-x compile によるコンパイルができます。デフォルトコマンドの改良
コンパイル時のコマンドをちょっと改良する方法も紹介します。以下の記述を init.el に追加して下さい。
(defun dart-mode-init () (make-local-variable 'compile-command) (let* ((curfile (file-name-nondirectory (buffer-file-name))) (outfile (concat (substring curfile 0 -5) ".js"))) (setq compile-command (format "dart2js -o%s %s" outfile curfile))) ;; (set (make-local-variable 'yel-compile-auto-close) nil) ) (add-hook 'dart-mode-hook 'dart-mode-init)引数にファイルを指定したものがデフォルトになり、値もバッファで独立するようになります。 例えばファイル名が hello.dart の場合、デフォルトは次のコマンドです。
dart2js -ohello.js hello.dartパスやオプションを変えたい場合は format に渡している文字列を変更して下さい。
出力バッファの自動クローズの停止
以前 コンパイル後に出力バッファを自動的に閉じる方法を記述しました。 しかし、 dart2js が jsx と同様に コンパイルに失敗しても正常終了のステータスを返すので、これが使えません。利用されている方は、 先ほどの設定コードの dart-mode-init 内のコメントアウトを外して、 自動クローズの機能を OFF にしてください。
Dart をコマンドラインから使う
Dart は JavaScript の代替として Google が開発した言語です。
しかし、 クライアントサイドだけでなく、
JavaScript における Node.js のように最初からサーバーサイドの言語としても作られています。
サーバーサイドとして動作するということはローカルの PC でも動きます。
今回は Dart をコマンドラインのスクリプトとして使う方法について紹介します。
コマンドラインから実行
コマンドラインで実行する Dart プログラムはmain
関数を持っている必要があります。hello.dart :
void main() { print("Hello world!"); }bin フォルダーにある dart(.exe) にソースファイルを渡すことによって、実行します。
~/dart $ dart hello.dart
Hello world!
コマンドライン引数を使う
コマンドライン引数を使う場合は main 関数にList<String>
を引数として指定します。
void main(List<String> args) { for (var arg in args){ print(arg); } }Dart における
List
は他の言語で配列と呼ばれているものです。
ここに実行時のコマンド引数が格納されます。
~/dart $ dart argtest.dart foo bar baz
foo
bar
baz