いま限定！AngularDart5のはじめかた

最近、思い立ったようにAngularDartでサイトを作りたくなったんですが、やっぱりいまならDart2+Angular5ではじめたいですよね。正式リリース前のこの時期限定ネタですが、同じように今から手を出そうとしている方おられましたら参考にしてください。

ちなみに思い立っただけあって、つくりこみは全くすすんでません。汗

## 新バージョンのパッケージとドキュメントへのリンク

[About AngularDart](https://webdev.dartlang.org/angular/)で[Current version](https://webdev.dartlang.org/version)をクリックすると、新しいバージョン（いまですとangularなら5.0.0-alpha+10）のパッケージおよびドキュメントへのリンクがあります。

## ビルド

以降、mac前提で書いてますが、全ての環境にあてはまります。dartは開発版(Dart 2)をインストールしておきます。

```
$ brew install dart --devel
$ dart --version
Dart VM version: 2.0.0-dev.49.0 (Wed Apr 18 20:41:36 2018 +0200) on "macos_x64"
```

Dart 2からデバッグにDartiumは不要です。--with-content-shellも--with-dartiumもdeprecatedになります。

[Install Dart](https://www.dartlang.org/install)

チュートリアル[Tour of Heroes](https://webdev-dartlang-org-dev.firebaseapp.com/angular/tutorial)の完成版ソース、[toh-6](https://github.com/angular-examples/toh-6)~~にangular5向けの5-devブランチが用意されています~~のmasterブランチはすでに5.0.0用がマージされています。そちらでビルドしてみましょう。

```
$ git clone https://github.com/angular-examples/toh-6.git
```

ちなみにチュートリアル開始時のソースは[toh-0](https://github.com/angular-examples/toh-0)です。

```
$ git clone https://github.com/angular-examples/toh-0.git
```

あとはパッケージを取得して起動するだけです。

```
$ pub get
$ pub run build_runner serve
```

5.0.0-alpha+5から、serve(build)で[build_runner](https://github.com/dart-lang/build/blob/master/build_runner/README.md)を実行するように変更になってますので、ネット上の現バージョンネタを参照しているときは思い出してください。

[Dart 2 Migration Guide - Tools](https://webdev.dartlang.org/dart-2#tools)

ブラウザから
http://localhost:8080
で見ることができます。

# WebStormでのビルド

上記の通り、pub serve(build)はbuild_runnerを使用するように変更となりましたが、WebStormはまだ対応していないため実行(Run)もデバッグ(Debug)も失敗します。

```
/usr/local/opt/dart/libexec/bin/pub serve web --port=60169
Dart 2 will have a new build system. Learn how to migrate from pub build and
pub serve: https://webdev.dartlang.org/dart-2
```

どうやらWebStormが対応するのは ~~2018.2~~ 2018.1.3からのようでEAPもまだですので、解決するのはもうちょっと先になりそうです。

[WEB-31788 Allow to switch to 'pub run build_runner serve' instead of 'pub serve'.](https://youtrack.jetbrains.com/issue/WEB-31788)

これでよく晒せたな、といった代物で恐縮ですが、自分は以下のようなquick botchでしのいでいるとことです。

```
$ cd /usr/local/opt/dart/libexec/bin
$ mv pub pub.org # オリジナルpubを改名
$ ln -s /Users/myhome/bin/pub pub # なんちゃってpubスクリプトに置き換え
```
```bash:/Users/myhome/bin/pub
#!/usr/bin/env bash

DART_SDK_BIN="/usr/local/opt/dart/libexec/bin"

BUILD_RUNNER=$($DART_SDK_BIN/pub.org deps | grep build_runner)

if [[ ${BUILD_RUNNER} = "" ]]; then
        $DART_SDK_BIN/pub.org "$@"
        exit 0
fi

if [[ "$1" = "serve" ]]; then
        if [[ "$3" =~ ^(--port)=([0-9]+) ]]; then
                $DART_SDK_BIN/pub.org run build_runner "$1" "$2":${BASH_REMATCH[2]}
        else
                $DART_SDK_BIN/pub.org run build_runner "$@"
        fi
elif [[ "$1" = "build" ]]; then
        if [[ "$2" =~ ^(--mode)=(release|debug|.+) ]]; then
                $DART_SDK_BIN/pub.org run build_runner "$1" "$3"
        else
                $DART_SDK_BIN/pub.org run build_runner "$@"
        fi
elif [[ "$1" = "run" && "$2" = "angular_test" ]]; then
        $DART_SDK_BIN/pub.org run build_runner test -- -p chrome
else
        $DART_SDK_BIN/pub.org "$@"
fi
```


そもそもそんなことしなくてもできるとか、他にもっといい方法があるだとか、ご存知でしたらどなたか大声で教えてくれると助かります。

~~デバッグ(Debug)もできてたんですがいまやってみるとブラウザと接続できなくなってる、、、。もう一手間あったかな？確認しときます。~~時間がかかってただけで、デバッグ(Debug)もできてました。（ひょっとしたら出来ないケースがあるのかも。）