今年の目標の一つに、
Scalaの習得
がありまして。年末年始に本を一冊読んで雰囲気は分かったので、環境を作ろうと思い立ちました。
ScalaがJVM上で動くのは知っていましたが、JDKをインストールしたくないなぁという邪な気持ちになったので、Docker等駆使して開発環境作れないか試しました。
結果的にIntelliJ IDEA使ったほうが楽、という結論に至りましたが、そこまでで試したことを残しておきます。
環境
Visual Studio CodeでScala開発できないかなぁ、というのが当初想定です。開発時にIntelliSenseは動かしたいところです。
また、ローカルにsbt等のインストールは避ける、という方針も立ててみました。
| 環境 | バージョン等 |
|---|---|
| OS | Windows 10 64bit 1809 |
| Visual Studio Code | 1.30.2 |
| Docker | 2.0.0.2 |
| Docker(VSCode拡張機能) | 0.5.2 |
| PowerShell | 6.1.2 |
なお、DockerはDocker for Windowsを使用しており、Hyper-V上で動作しています。既にインストールされている前提です。
当記事のコマンドはVSCodeのターミナルでPowerShellを使って入力しています。
筆者能力
ScalaやったことないScalaの本を一冊読んで、試していきたいJavaは仕事で使ったPlay framework使っていて、若干sbtを見たことはあるDockerかじり始め
今回やろうとしていることに対する知識が欠けています。なので、試行錯誤しながらやりました。
Dockerイメージの取得
公開されている、こちらのイメージを使用しました。書いてある通り
docker pull hseeberger/scala-sbt
でローカルに落とします。同時にopenjdkのイメージも落ちてきます。
Dockerの起動
Visual Studio Codeを使っています。
単にイメージを起動するだけならVSCodeでの操作でよいのですが、WindowsローカルフォルダとDockerゲストのフォルダを同期させる場合は、コマンドで起動します。
-vオプションで、フォルダを紐づけています。*1
docker run -it --rm -v C:\dev\scala\dock:/root hseeberger/scala-sbt

この状態で、Linuxのコマンドは使えます。また、sbtの起動も行えます。
Scalaソースをビルドする
前述の通り、フォルダ同期しているため、Windowsの環境(Docker起動時に指定したパス)にScalaのソースを作ればよいです。
フォルダは、[src] - [main] - [scala]と掘ります。

main.scalaに、以下のソースを書きます。
object Hello { def main(args: Array[String]): Unit = { println("Hello World!") } }
そして、Dockerのコンソールで
sbt run
と入力します。
初回は環境準備等でものすごく時間がかかるので、待ちましょう。すると、

ビルドが終わり、実行されてHello World!と表示されました。問題なく実行できています。
最終的に、VSCode上ではこんな感じで開発できます。

達成できなかった点
これで、ローカルにJDKもsbtも無い状態で開発は可能になりました。
しかし、IntelliSenseが効かず、ヘルプ等も見れません。初心者にはしんどい環境です。
これを何とかする方法を模索したのですが、そもそもDocker上で動いているものに対してJAVA_HOME等へのパスを解釈する手段が無い以上、無理だと判断しました。
諦めてローカルにいろいろ入れる
インストール物
| 環境 | バージョン |
|---|---|
| OpenJDK | 11.0.2 |
| IntelliJ IDEA | 2018.3.3(Community Edition)*2 |
一応sbtも入れましたが、使いません。今回は省略します。
手順(公式)
ここ見るだけでいいです。要するに、
とすれば動くよ、とのことです。
recommended for beginners
とのこと。
OpenJDK
せっかくなので、OpenJDKで試します。
その時点の最新をダウンロードし、わかりやすいフォルダに格納します。C:\dev\openjdk\jdk-11.0.2に置きました。
環境変数
まず、JAVA_HOMEを
C:\dev\openjdk\jdk-11.0.2
と、先ほど中身を置いた場所にします。次に、Path環境変数に
C:\dev\openjdk\jdk-11.0.2\bin
のように、上記パスの下のbinを追加します。
IntelliJ IDEAインストールから、Scala動作まで
これは上記リンクからたどるほうが正確です。
このような記事も参考にさせていただきました。私が書いても内容なぞるだけになります。大変助かりました。ありがとうございます。
結果的に動きました。

その他:試したいこと
この記事書いている際に分かったのですが、ENSIMEというものを入れると、VSCode上でも開発できるそうです。
そのうち試します。公式は以下。
その他Scala情報
こういうの本当に助かります。公開されているの、懐が深いなと思います。
おわりに
Scala始めるなら、とにかくIntelliJ IDEA入れましょう、ということです。
Java界隈は環境設定のハードルが高い印象が強いですが、楽に環境作れました。
もっとも、Dockerもデバッグ環境を固定する、という意味では役に立ちそうです。使い方次第だと思いました。
試行錯誤の中で学ぶことも多いですし、Docker周りは忘れやすいので、備忘を兼ねて記事にしました。