IDCFクラウド上に構築したDockerに、Dartの開発環境を作りました。
PythonのFlaskに似た、Redstone.dartというマイクロフレームワークで簡単なサンプルを作ってみます。
コンテナの起動
今回もphusion/baseimageのイメージを使いコンテナを起動します。
$ docker run phusion/baseimage:latest /sbin/my_init --enable-insecure-key |
別シェルを起動して、コンテナのIPアドレスを確認します。jqというJSONパーサーが便利そうなので一緒に使ってみます。
$ docker inspect $(docker ps -a -q) | jq -r '.[0] | .NetworkSettings | .IPAddress' |
SSH接続に使う、insecure_keyをダウンロードします。
$ curl -o insecure_key -fSL https://github.com/phusion/baseimage-docker/raw/master/image/insecure_key |
コンテナにSSH接続をします。
$ ssh root@$172.17.0.2 -i ./insecure_key |
Dart SDKのインストール
SSH接続したあと、必要なパッケージをインストールします。
# apt-get update |
Dartのコードをダウンロードするためのdepot_toolsをcloneします。
# git clone http://chromium.googlesource.com/chromium/tools/depot_tools.git |
Dart SDKをダウンロードします。PATHを通すため.profileを読み直します。
# wget http://storage.googleapis.com/dart-archive/channels/stable/release/latest/sdk/dartsdk-linux-x64-release.zip |
Dartのバージョンを確認します。
# which dart |
Dockerイメージを作成する
Dart SDK
のインストールができた状態で、一度イメージ作成します。その前にaptをきれいにします。
# apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* |
Dockerホストに戻り、イメージを作成します。
$ docker commit $(docker ps -a -q) masato/dart-sdk |
作業していたコンテナを削除します。
$ docker stop $(docker ps -a -q) |
再度コンテナを起動する
Redstone.dartで使う8080ポートをフォワードしてコンテナを起動します。
$ docker run -d -p 8080:8080 masato/dart-sdk:latest /sbin/my_init --enable-insecure-key |
8080のポートフォワードを確認します。
$ docker ps |
コンテナにSSH接続します。
$ ssh root@172.17.0.2 -i ./insecure_key |
Redstone.dartをインストール
プロジェクトを作成します。
# mkdir -p ~/dart_apps/my_app |
pubコマンドがが依存関係をダウンロードするために、pubspec.yamlファイルを作成します。
name: my_app |
pub get
で依存しているパッケージを団ロードします。
# pub get |
Dartプログラム
Flaskみたいな、簡単なDartプログラムを作成します。
import 'package:redstone/server.dart' as app; |
サーバーを起動します。
# cd ~/dart_apps/my_app |
DockerのホストのIPアドレスを指定してブラウザから確認します。
まとめ
サーバーサイドはGoで書こうと思っていたのですが、Dartも使いやすいマイクロフレームワークもあって、いい感じに書けます。
JavaScriptで書いていたWebアプリはDartで、Goはもっとシステムよりのプログラム向けなのでしょうか。
次回は最近何かと話題のAngularDartを使ってクライアントサイドを見てみます。