SE(たぶん)の雑感記

一応SEやっている筆者の思ったことを書き連ねます。会計学もやってたので、両方を生かした記事を書きたいと考えています。 でもテーマが定まってない感がすごい。

Scala開発環境にDockerとVSCode使おうとしたけど、結局IntelliJ IDEAを使うことにした話(初心者)

今年の目標の一つに、

Scalaの習得

がありまして。年末年始に本を一冊読んで雰囲気は分かったので、環境を作ろうと思い立ちました。

ScalaJVM上で動くのは知っていましたが、JDKをインストールしたくないなぁという邪な気持ちになったので、Docker等駆使して開発環境作れないか試しました。

結果的にIntelliJ IDEA使ったほうが楽、という結論に至りましたが、そこまでで試したことを残しておきます。

環境

Visual Studio CodeScala開発できないかなぁ、というのが当初想定です。開発時に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

なお、DockerDocker for Windowsを使用しており、Hyper-V上で動作しています。既にインストールされている前提です。

当記事のコマンドはVSCodeのターミナルでPowerShellを使って入力しています。

筆者能力

  • Scalaやったことない
  • Scalaの本を一冊読んで、試していきたい
  • Javaは仕事で使った
  • Play framework使っていて、若干sbtを見たことはある
  • Dockerかじり始め

今回やろうとしていることに対する知識が欠けています。なので、試行錯誤しながらやりました。

Dockerイメージの取得

github.com

hub.docker.com

公開されている、こちらのイメージを使用しました。書いてある通り

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

f:id:hiroronn:20190203163018p:plain
docker run

この状態で、Linuxのコマンドは使えます。また、sbtの起動も行えます。

Scalaソースをビルドする

前述の通り、フォルダ同期しているため、Windowsの環境(Docker起動時に指定したパス)にScalaのソースを作ればよいです。

フォルダは、[src] - [main] - [scala]と掘ります。

f:id:hiroronn:20190203164519p:plain
フォルダ構成

main.scalaに、以下のソースを書きます。

object Hello {
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }
}

そして、Dockerのコンソールで

sbt run

と入力します。

初回は環境準備等でものすごく時間がかかるので、待ちましょう。すると、

f:id:hiroronn:20190203165019p:plain
ビルド後

ビルドが終わり、実行されてHello World!と表示されました。問題なく実行できています。

最終的に、VSCode上ではこんな感じで開発できます。

f:id:hiroronn:20190203165753p:plain

達成できなかった点

これで、ローカルにJDKsbtも無い状態で開発は可能になりました。

しかし、IntelliSenseが効かず、ヘルプ等も見れません。初心者にはしんどい環境です。

これを何とかする方法を模索したのですが、そもそもDocker上で動いているものに対してJAVA_HOME等へのパスを解釈する手段が無い以上、無理だと判断しました。

諦めてローカルにいろいろ入れる

インストール物

環境 バージョン
OpenJDK 11.0.2
IntelliJ IDEA 2018.3.3(Community Edition)*2

一応sbtも入れましたが、使いません。今回は省略します。

手順(公式)

www.scala-lang.org

ここ見るだけでいいです。要するに、

とすれば動くよ、とのことです。

recommended for beginners

とのこと。

OpenJDK

せっかくなので、OpenJDKで試します。

jdk.java.net

その時点の最新をダウンロードし、わかりやすいフォルダに格納します。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動作まで

これは上記リンクからたどるほうが正確です。

このような記事も参考にさせていただきました。私が書いても内容なぞるだけになります。大変助かりました。ありがとうございます。

blog.y-yuki.net

結果的に動きました。

f:id:hiroronn:20190203181216p:plain
IntelliJ IDEAで動作

その他:試したいこと

この記事書いている際に分かったのですが、ENSIMEというものを入れると、VSCode上でも開発できるそうです。

そのうち試します。公式は以下。

ensime.github.io

その他Scala情報

こういうの本当に助かります。公開されているの、懐が深いなと思います。

dwango.github.io

おわりに

Scala始めるなら、とにかくIntelliJ IDEA入れましょう、ということです。

Java界隈は環境設定のハードルが高い印象が強いですが、楽に環境作れました。

もっとも、Dockerデバッグ環境を固定する、という意味では役に立ちそうです。使い方次第だと思いました。

試行錯誤の中で学ぶことも多いですし、Docker周りは忘れやすいので、備忘を兼ねて記事にしました。

*1:-vの後、コロンの前がホストのパス、後がゲストのパス

*2:2019/2/3現在、2018.3.4がダウンロードできるようになっていた