Zenn
🔧

【Coursier】Scalaの開発環境をローカル(Mac)&Dockerで構築する

2024/12/03に公開

Scalaとは?

Scalaとは、Javaを元にし、オブジェクト指向と関数型を混ぜ合わせたプログラミング言語です。
オブジェクト指向言語と関数型言語の良さがうまくミックスされた、強力な言語機能を使ってコードを書くことができます。

公式サイトはこちらです。
https://scala-lang.org

また、Scastieというプレイグラウンドもあります。
手軽に試したい方はこちらをどうぞ。

ローカルに構築する

ここで紹介されている通り、環境構築にはCoursierを使います。
CoursierとはScalaのインストーラーで、開発に必要なものを一気にインストールしてくれます。

実際に構築する際は、大まかに以下のような手順を踏みます。

  1. (Homebrewをインストール)
  2. Coursierをインストール
  3. Coursierを使ってScalaの開発に必要なものをインストール

まずはCoursierをインストールします。

ターミナル
brew install coursier

次に、Coursierを使ってScalaをインストールします。

ターミナル
coursier setup

Javaがない場合

ここで、Javaがローカルにない場合は「インストールしますか?」と聞かれるので、yを押してください。
また、Scalaの実行にはjavaコマンドが必要なので、パスを通す必要があります。
私の環境では~/.zprofileに以下を追加することでできました。

~/.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をインストールしています。
手順はこんな感じです。

  1. openjdkをベースイメージにし、Javaのインストールを省略
  2. Coursierをインストールしてセットアップを実行する
  3. 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.scala
@main def hello = println("Hello World!")

次に、scala runコマンドを実行します。
このコマンドはコンパイルと実行を同時にやってくれる優れものです。

以下のようにすると実行できます。

ターミナル
scala run main.scala

Hello World!

エディタ & IDE

とりあえず以下の2択だと思います。

  • VSCode
  • IntelliJ IDEA

なお、ドキュメントにScala IDEsというページがあるので、合わせて見てみてください。

VSCode

もし手元にVSCodeがあるならば、Scalaの拡張機能を入れましょう。
https://marketplace.visualstudio.com/items?itemName=scalameta.metals

これさえ入れれば補完が効くので、簡単な開発ができるようになります。
それ以外にもデバッガーなどもついているので、入れて損はないはずです。

IntelliJ IDEA

もし手元にIntelliJ IDEAがあるならば、Scalaのプラグインを入れましょう。
このプラグインは非常に様々なことをサポートしてくれます。

  • コードのハイライト/補完
  • デバッグ(ステップ実行)
  • sbtプロジェクトの作成

おまけ: Scala Script

Scala ScriptはScalaのスクリプト版、つまりトップレベルにコードを直接書けるScalaです。
通常のScalaではメインのコードをいちいち囲まなければならず、学習目的で使うには少し面倒です。
そのためScala Scriptを使い、トップレベルのコードを実行しながら学ぶと楽だと思います。

使い方は簡単です。

  • VSCode: 拡張子が.scのファイルを作る
  • IntelliJ IDEA: Scalaワークシートという種類でファイルを作成する
  • ターミナルから実行する場合: 拡張子が.scのファイルを通常通り実行する

参考

https://blog.3qe.us/entry/scala-2023
https://blog.3qe.us/entry/2024/04/17/213142

Discussion

ログインするとコメントできます