Dart入門してみる。インストール～ブラウザでHelloWorldまで

みんなの関心が今一低いDartですが入門してみました。
念のために書いておきますが、これは2014/05/05現在の状況です。

##環境

Windows 8.1 64bit

##インストール

[Get Started | Dart: Structured web apps](https://www.dartlang.org/docs/tutorials/get-started/)からDart SDKとDart Editorを落としてきます。
あと、Dart Editorは実行にJavaの環境が必要らしいのでDart Editorを使いたい場合はJREをインストールしておく必要があります。大体の人はインストールしてると思うのですけど‥。
(Dart Editorなんていらないよ、っていう人は[Download Dart | Dart: Structured web apps](https://www.dartlang.org/tools/download.html)からSDKのみをインストールするといいのかもしれません)

![dart1.png](https://qiita-image-store.s3.amazonaws.com/0/11219/1ee9399a-b52c-1e69-ea77-6a5f98bf5c5d.png)

お好みのOSのものをダウンロード下さい。ちなみに、インストーラーがあるのかと思ったらzipファイルでした。
また、どうもWindows Vista以降しかサポートしてないみたいです。こんなところにもXPサポート終了の波が！

次に、落してきたzipファイル(僕の場合`darteditor-windows-x64.zip`でした)を、適当な場所に解凍します。多分どこでも問題ないと思いますが、念のために空白とか漢字の入らないディレクトリにした方がいいと思います。(これはどんなソフトウェアにも言えることだけれど)

![dart2.png](https://qiita-image-store.s3.amazonaws.com/0/11219/42045e20-a2ef-6b4b-1266-9b6cc4386c24.png)

解凍するとこんな風になってました。
どうやら、Dart EditorはEclipseベースのようです。それと、`chromium`といディレクトリにあるのはDartに対応したバージョンのChromium(Dartium)なのでしょうか。想像が広がります。
`dart-sdk/bin`には`dart.exe`がありましたので、コマンドラインからDartを開発したい猛者はPathを通すといいかもしれません。

とりあえず、インストールはこんなもんでいいと思います。

##Hello World!してみる(コマンドラインで)

インストールが済んだところで、次はHello Worldしてみることにします。

まずDart Editorを起動します。

JREが入っていれば普通に起動して、次のようなスプラッシュが表示されるはずです。

![dart3.png](https://qiita-image-store.s3.amazonaws.com/0/11219/a0bbf0e3-fcc1-eca4-7bf7-e1643ee538a9.png)

(にしてもDartのロゴかっこいいな)

で、こんなものが起動します。

![dart4.png](https://qiita-image-store.s3.amazonaws.com/0/11219/189b0bd2-62f3-54fa-d9ca-fe2b7f1536a6.png)

（「HelloWorld」と「HelloWorldWeb」というプロジェクトが追加されてたりしますが気にしないでください）

起動したら、「Welcome Page」の「Create an Application」とかメニューの「File」の「New Project」あたりから、新しいプロジェクトを作るためのウィザードを起動します。

![dart6.png](https://qiita-image-store.s3.amazonaws.com/0/11219/744bbcaa-0692-a61a-cbbd-614e78a2240f.png)

プロジェクト名と場所は何でもいいのですが、「sample content」の種類は「Command-line application」にしておきます。どうしてかは言わせないでください。

で「Finish」ボタンを押すと、こんな画面になっているはずです。

![dart7.png](https://qiita-image-store.s3.amazonaws.com/0/11219/c8a8f5ea-7eba-ebff-3774-a9e1cd2f8811.png)

どうやらDartが気を利かせて「Hello World」プログラムを自動で作っておいてくれたみたいです。

「Hello World」プログラムのをソースコードはこんな感じですね。
（QiitaにDartのハイライトが実装されていたことに驚きです）

```dart:helloworld.dart
main() {
  print("Hello World!");
}
```

`print`が文字列を表示する関数で、`main`関数がエントリーポイントなのは一目瞭然でしょうし、解説の必要も無いかと思います。
（強いて言えば`main`関数の定義のしかたが独特な気もしますが、慣れるしかないです）

じゃああとはこれを実行するだけです。

左上にある、丸に三角形のマークを押して、実行します。

![dart8-1.png](https://qiita-image-store.s3.amazonaws.com/0/11219/f47c8824-c0d9-16ee-ec2e-4e545872f719.png)

すると下の方にコンソール的なものが開かれて、「Hello World!」と表示されています。

![dart9.png](https://qiita-image-store.s3.amazonaws.com/0/11219/810aba67-b748-9347-fb41-45c354f3f9b2.png)

##Hello World!してみる(ブラウザで！)

でもやっぱりDartといったらブラウザで動かしたいですよね。
動かしたいですよね？？

というわけでブラウザで動くHello Worldを作ります。

まずはさっき同様プロジェクトを作ります。

![dart10.png](https://qiita-image-store.s3.amazonaws.com/0/11219/9c3b1430-4399-745e-c14f-b29e282c55d8.png)

プロジェクト名と場所がどこでもいいのはさっきと同じく、今回は「sample content」の種類を「Web application」にしておきます。

すると、dartファイルに加えて何やらcssやらhtmlが作成されます。

が、これらはクリックすると文字が反転するという素晴しいデモのコードで、cssはこの場では必要無いので削除しておきます。そして、htmlの方を次のように書き換えます。

```helloworldweb.html
<!DOCTYPE html>

<html>
  <head>
    <meta charset="utf-8">
    <title>Hello World!</title>
  </head>
  <body>
    <!-- このh1の中身をDartから書き換えて「Hello Dart World!」にします -->
    <h1 id="hello">Hello World!</h1>
    
    <script type="application/dart" src="helloworldweb.dart"></script>
    <script src="packages/browser/dart.js"></script>
  </body>
</html>
```

プロジェクト名を「HelloWorldWeb」にしなかった場合`helloworldweb.dart`の部分は適宜書き換えてください。

で、次はdartファイルの方を開きます。すると何やらごちゃごちゃ書かれていますが、既にhtmlが書き換えられていて動かないコードなので、全て削除して次のように書き換えます。

```dart:helloworldweb.dart
import 'dart:html';

void main() {
  querySelector("#hello").text = "Hello Dart World!";
}
```

コードの解説を少しすると、まず`import "dart:html";`というのでhtml向けの関数などを使えるようにしています。
その次に、`main`関数内では、`querySelector`というCSSセレクタからhtmlの要素を選択する関数を、`#hello`という前のhtmlのh1タグに紐付いたIDのセレクタを引数にして呼び出して、h1タグを取得しています。
そして、その`text`に`"Hello Dart World!"`という文字列を設定することで、タグの中身を書き換えています。

それではこれを実行してみます。
さきほど同様、実行ボタンをクリックすれば実行できます。
実行するとDartium(ブラウザ)が起動して、

![dart11.png](https://qiita-image-store.s3.amazonaws.com/0/11219/77a63e36-f563-31c7-6a74-04659399d84e.png)

のようになります。
`Hello World!`だった部分が`Hello Dart World!`に書き換わっていることが確認できるかと思います。

また、普段自分が使っているブラウザで動かすこともできます。しかし、その場合はDartコードは一旦JavaScriptに変換されてから実行されることになります。
自分が使っているブラウザで動かすには、htmlファイルを右クリックして、「Run as JavaScript」というものをクリックします。

![dart12-1.png](https://qiita-image-store.s3.amazonaws.com/0/11219/ba414c2e-7da6-b54c-ec6f-6cf13749033f.png)

すると自分の普段使っているブラウザ（いわゆる規定のブラウザ）が起動して、少し時間がかかるかもしれませんが（おそらくこれはDartからJavaScriptへ変換するのにかかる時間）さっきと同じような結果になるはずです。

##最後に

Dartの情報少なすぎてアレなので、初学者が迷わないようできる限り丁寧に説明しようと書き始めた記事です。僕自身Dartも初心者なんですけどね‥。
がしかし、さわりの部分を丁寧に書きすぎてDartの面白い部分にまったく触れられなかった（Cascade Invocationとかね）ので、気が向いたら続きを書くかもしれません。

また、記事に対してツッコミがありましたらじゃんじゃんしてくださって構いません。編集リクエストも大歓迎です。

――Dartは流行んないだろうな‥、と密かに思いながら。