【Coursier】Scalaの開発環境をローカル(Mac)&Dockerで構築する
Scalaとは?
Scalaとは、Javaを元にし、オブジェクト指向と関数型を混ぜ合わせたプログラミング言語です。
オブジェクト指向言語と関数型言語の良さがうまくミックスされた、強力な言語機能を使ってコードを書くことができます。
公式サイトはこちらです。
また、Scastieというプレイグラウンドもあります。
手軽に試したい方はこちらをどうぞ。
ローカルに構築する
ここで紹介されている通り、環境構築にはCoursierを使います。
CoursierとはScalaのインストーラーで、開発に必要なものを一気にインストールしてくれます。
実際に構築する際は、大まかに以下のような手順を踏みます。
- (Homebrewをインストール)
- Coursierをインストール
- Coursierを使ってScalaの開発に必要なものをインストール
まずはCoursierをインストールします。
brew install coursier
次に、Coursierを使ってScalaをインストールします。
coursier setup
Javaがない場合
ここで、Javaがローカルにない場合は「インストールしますか?」と聞かれるので、y
を押してください。
また、Scalaの実行にはjava
コマンドが必要なので、パスを通す必要があります。
私の環境では~/.zprofile
に以下を追加することでできました。
# Coursier関連が色々書いてある
# 以下を追加する
export JAVA_HOME="/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home"
# JAVA_HOMEに入れるコマンドのパスはインストール時のログに書いてある
これができたらシェルにログインしなおします。
そして、以下のコマンドでREPLを起動してみてください。
scala
# 出力
Welcome to Scala 3.5.1 (23, Java OpenJDK 64-Bit Server VM).
Type in expressions for evaluation. Or try :help.
scala>
無事に起動できたら成功です。
ちなみにREPLからは:quit
で抜けられます。
Dockerを使う
以下は私が作ったDockerfile
です。
参考程度にお使いください。
FROM openjdk
RUN curl -fL https://github.com/VirtusLab/coursier-m1/releases/latest/download/cs-aarch64-pc-linux.gz | gzip -d > cs && chmod +x cs
RUN ./cs setup --yes
# プロファイルを設定
RUN cp ~/.profile ~/.bashrc
WORKDIR /project
CMD ["bash"]
ここではCoursierを使ってScalaをインストールしています。
手順はこんな感じです。
-
openjdk
をベースイメージにし、Javaのインストールを省略 - Coursierをインストールしてセットアップを実行する
- 2で作られたプロファイルを
.bashrc
として複製して適用されるようにする
コンテナとして起動する
まずはビルドします。
イメージのタグは適当にscala:latest
としています。
docker image build \
--tag scala:latest
--file path/to/dockerfile
.
さて、実際に開発環境として使用する際は、ソースコードのディレクトリをバインドマウントする必要があります。
それに加え、-it
オプションをつけないとコンテナが終了してしまいます。
私の環境では、以下のコマンドを打つことでコンテナが起動しました。
docker container run \
--rm \
-it \
--mount type=bind,src=$(pwd),dst=/project \
scala
なお、バインドマウントについてはこのZenn本が参考になりました。
Hello World!
Scalaのコードが書かれたファイルを動かすには、scala run
コマンドを使います。
実際のプロジェクトではsbt
を使うのが一般的みたいですが、ここでは一度割愛します。
まずはコードを書きます。
@main def hello = println("Hello World!")
次に、scala run
コマンドを実行します。
このコマンドはコンパイルと実行を同時にやってくれる優れものです。
以下のようにすると実行できます。
scala run main.scala
Hello World!
エディタ & IDE
とりあえず以下の2択だと思います。
- VSCode
- IntelliJ IDEA
なお、ドキュメントにScala IDEsというページがあるので、合わせて見てみてください。
VSCode
もし手元にVSCodeがあるならば、Scalaの拡張機能を入れましょう。
これさえ入れれば補完が効くので、簡単な開発ができるようになります。
それ以外にもデバッガーなどもついているので、入れて損はないはずです。
IntelliJ IDEA
もし手元にIntelliJ IDEAがあるならば、Scalaのプラグインを入れましょう。
このプラグインは非常に様々なことをサポートしてくれます。
- コードのハイライト/補完
- デバッグ(ステップ実行)
- sbtプロジェクトの作成
おまけ: Scala Script
Scala ScriptはScalaのスクリプト版、つまりトップレベルにコードを直接書けるScalaです。
通常のScalaではメインのコードをいちいち囲まなければならず、学習目的で使うには少し面倒です。
そのためScala Scriptを使い、トップレベルのコードを実行しながら学ぶと楽だと思います。
使い方は簡単です。
- VSCode: 拡張子が
.sc
のファイルを作る - IntelliJ IDEA: Scalaワークシートという種類でファイルを作成する
- ターミナルから実行する場合: 拡張子が
.sc
のファイルを通常通り実行する
参考
Discussion