こんにちは、t-hiroyoshiです。
最近はScala Days 2016 NYCで発表されたScala Nativeにコントリビュートしています。Scalaのような強力な言語がbare metalで動くのは素晴らしい事だと思っているので早く実用レベルで動くようにこれからも積極的に貢献していきたいです。
そんな訳で今回は布教を兼ねてScala NativeのデモをDocker上で簡単に動かす方法を紹介したいと思います。
Scala Native
Scala Nativeとは何かと言うと、ScalaのコードをLLVMのIR経由でコンパイルしてNative実行可能にするAOTコンパイラ(AheadOfTimeCompiler)実装です。
一部低級な処理向けにScalaを拡張しているのである意味別言語と言っても過言ではないかもしれません。
これらの拡張によってScalaをSystem level languageに落とし込めるのでその気になればScalaで何でも作れるわけで、とても未来が楽しみです。
ただREADMEにpre-release stage
とあるようにまだ完全にScala-likeには動きません、ですが活発にIssueやPull reqが飛んでいるので近いうちにまともに動くようになると思っています。(まだ完成していない今ならコントリビュートのチャンス?)
現在はLLVM(Clang)とBOEHM GCをローカル環境に依存しているのでデモを動かすまでにそれらのパスが通らなかったり、依存解決で結構躓く人が多いみたいです。
そこでScala Nativeのレポジトリ内にあるDockerfileを使って作ったコンテナ内でデモを動かしてみたいと思います。管理用のスクリプトもきちんとあるので比較的簡単に動かす事が可能です。
手順
docker-machineを立てる(Option)
なるべくローカルの環境を汚染したくないのでdocker-machineでDockerホストを立てます。
driverはvirtualbox
を使っていますがvmwarefusion
で立てた方がもしかしたら速いかもです(Scalaはcompile時間が長いと言われている)。
メモリを指定しないと1Gしか割り当てられないので増やしておきます。
|
docker-machineが立ち上がったらsshで繋ぎます。
|
管理用のスクリプトはbashで動くのですが、Boot2Dockerは標準でbashが入っていないので次に進む前にここを参考にbashをインストールしてください。
Scala Nativeのコンテナイメージをビルドする
まずはともかくScala Nativeのソースをcloneしてきます。
|
scala-native/docker
の中にDockerfileがあるので移動して管理用のスクリプトを叩きます。
|
色々ダウンロードしたりするので結構時間がかかります。
時間がかかります辛抱強く待って下さい、コーヒーでも飲んでいれば良いと思います。
ビルドが終わったらいよいよデモを動かします。
Scala Nativeのデモを実行する
スクリプトを叩いてビルドしたコンテナの中に入ります。
|
ここでエラーが出てsbtプロジェクトが読み込まれない方はscala-native/
配下のtargetフォルダを全て削除してみてください。
コンテナに入れたらsbtを起動してデモがあるdemoNativeプロジェクトを指定します。
|
後はrun
すればデモが動き出してコンパイルされたバイナリがscala-native/demo/native/target/scala-2.11/demonative-out
に吐き出されているはずです。
これはそのまま実行できるのでいろいろ試してみてください。