Scala

この記事でインストールしているバージョンは古くなっている可能性もあります。最新バージョンに読み替えて利用するようにしてください。

想定環境

  • OS:Mac

  • Scala:2.13.6

Java と sbt のインストール

Scala を使うには Java と sbt が必要になります。バージョン管理ツールを2つ紹介しますが、どちらを使っても構いません。

  • SDKMAN

    • Java と sbt どちらもこれ一つでインストールできるので、 anyenv を使っていないのであればこちらがおすすめです。

  • anyenv + jenv + sbtenv

    • anyenv ですべて管理したい人向けです。

JDK と バージョンについて

無償JDKとして広く利用されていたAdoptOpenJDKはEclipse Adoptiumプロジェクトに移管されることが公表されており、2021/8/13にはそのサブプロジェクトであるEclipse Temurinプロジェクトから新たなJDKがリリースされました。今回はこちらのJDKを利用します。

また、Java には LTS バージョンが設定されており、このバージョンのみをサポートしているライブラリも多いです。特段の理由がなければ、最新版ではなく 8 や 11 といった LTS バージョンをインストールするのが良いと思います。

SDKMAN

SDKMAN のインストール以下のコマンドを実施するだけです。

% curl -s "https://get.sdkman.io" | bash

下記コマンドを実行してバージョンを確認してみます。 sdk-man-init.sh の実行は .bash_profile 等の末尾に追加されているので、次からはターミナルを開いた時に自動実行されます。

% source "$HOME/.sdkman/bin/sdkman-init.sh"
% sdk version

SDKMAN 5.12.2

バージョン管理ツールがインストールできたので、 Java と sbt をインストールします。

Java は 8系と 11系が LTS なので、どちらかをインストールします。選択肢が多いのですが、前項で述べた通り Temurin を選択します。

# インストール可能な Java のバージョン一覧を確認
% sdk list java

# 11.0.12-tem をインストール
% sdk install java 11.0.12-tem

# インストールできた事を確認
% java --version
openjdk 11.0.12 2021-07-20
OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7)
OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode)

sbt はとりあえず新しいバージョンを入れておけば良いと思います。

# インストール可能な sbt のバージョン一覧を確認
% sdk list sbt

# 1.5.5 をインストール
% sdk install sbt 1.5.5

# インストールできた事を確認
% sbt --version
sbt version in this project: 1.5.5
sbt script version: 1.5.5

ディレクトリ内で特定のバージョンを有効にするには、 sdk env コマンドを利用します。

% sdk env init
.sdkmanrc created.

% cat .sdkmanrc
# Enable auto-env through the sdkman_auto_env config
# Add key=value pairs of SDKs to use below
java=11.0.12-tem

すると .sdkmanrc ファイルが生成され、デフォルトでカレントバージョンが設定されるので、これを利用したいバージョンに変えればOKです。ただ、コメントにもあるように ~/.sdkman/etc/configsdkman_auto_envtrue にしなければ自動的に適用されないので設定しておきましょう。

ちなみに Metals を使ったプロジェクトの場合、 sbt のバージョンに関しては project/build.properties を参照してくれるため、バージョン指定は不要です。

anyenv + jenv + sbtenv

anyenvを利用する場合、java, sbtのバージョン管理ライブラリはそれぞれjenv, sbtenvを利用することになります。jenvはrbenvやnodenvと違って言語のインストール機能は持っていないため、JDKは手動でインストールし、jenvに読み込ませる必要があります。

環境構築の流れは以下の通りです。

  1. anyenvのインストール

  2. JDKのインストール

  3. jenvのインストール&設定

  4. sbtenvのインストール&設定

anyenvのインストール

SDKMANではなくこちらの手順を選択している方は既にインストール済みの方が多いと思いますので、詳細な手順は割愛します。新規にインストールする方はanyenv公式のREADMEに沿ってインストールしましょう。

JDKのインストール

jenv公式で推奨されている通りHomebrewでインストールを行います。2021/9/14現在temurinからリリースされているJDKは16系が最新となりますが、先述のとおり今回はLTSである11系をインストールします。つまり最新版以外のJDKをインストールする必要があるため、複数バージョンを扱えるようにしてくれるhomebrew-cask-versionsをインストールします。

% brew tap homebrew/cask-versions

インストール可能なJDKを検索するとtemurin11が表示されるようになりますので、これをインストールします。複数のJavaバージョンを切り替えて利用したい場合、ここで必要な分だけインストールしておきましょう。

% brew search --cask temurin # インストール可能なバージョンを表示
% brew install --cask temurin11
% ls -l /Library/Java/JavaVirtualMachines # インストールされたJDKを確認

これでJDKのインストールは完了です。

jenvのインストール&設定

anyenvの通常の使い方に沿い、以下コマンドでjenvをインストールします。

% anyenv install jenv
% exec $SHELL -l
% jenv --version # インストールされたことを確認

jenvのexportプラグインを有効化しておきましょう。

% jenv enable-plugin export
% exec $SHELL -l

インストールしたJDKのHomeディレクトリをjenvに認識させます。複数のJDKをインストールした場合はそれぞれ実施しましょう。ここで認識させたJDKがjenvのバージョン切り替え対象に加わります。

% jenv add /Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
% exec $SHELL -l
% jenv versions # jenvで切り替え可能なJDKの一覧が表示される

jenvで利用するバージョンを指定します。

% jenv local 11.0.12

これを行うと実行したディレクトリに.java-versionというファイルが生成されます(中身は指定したバージョン番号だけ記述されたシンプルなファイルです)。このディレクトリに移動した際にはjenvがこれを読み込み、指定されたjavaのバージョンが自動的に参照されるようになります。

shをリセットすると、先ほど有効化したexportプラグインにより環境変数JAVA_HOMEも設定されます。

% exec $SHELL -l
% env | grep JAVA_HOME
JAVA_HOME=~/.anyenv/envs/jenv/versions/11.0.12

以下を実行すると、.java-versionファイルが存在しないディレクトリでデフォルトで適用するバージョンを設定することができます。必要があれば設定してください。

% jenv global 11.0.12

これでjenvのインストールと設定は完了です。

sbtenvのインストール&設定

以下コマンドでsbtenvをインストールします。

% anyenv install sbtenv
% exec $SHELL -l
% sbtenv --version # インストールされたことを確認

sbtのインストールを行います。バージョンはSDKMANの項と同様に1.5.5をインストールする場合、以下のようにします。複数バージョンのsbtを切り替えて利用したい場合、ここで必要な分だけインストールします。

% sbtenv install sbt-1.5.5

gpgが必要 といったエラーが表示された場合、インストールしてsbtの公開鍵を設定してから再実行してください。

% brew install gpg
% gpg --keyserver hkps://keyserver.ubuntu.com:443 --recv 2EE0EA64E40A89B84B2DF73499E82A75642AC823

インストール完了後、jenvの時と同様に利用するバージョンのsbtを設定します。

% sbtenv versions # インストールしたsbtのバージョンが表示される
% sbtenv local 1.5.5

以上でanyenv + jenv + sbtenvの環境設定は完了です。

IDE の設定

以前は Scala といえば IntelliJ だったと思うのですが、最近は Metals という Language Server が出てきており、Metals を使えば Visual Studio Code や Emacs などエディタを選ばずに Scala の開発ができるようになっているようです。

Visual Studio Code + Metals

scalameta.metals という extension をインストールするだけです。

extension は Scala プロジェクト以外は有効化されないはずですが[1]、私の環境では ruby のワークスペースなどにも .metals ディレクトリが出来てしまいました。基本は disable にしておいて、Scala のワークスペースでだけ手動で enable にするのが良いと思います。

VS Code のサポートについてはこちらに詳しく書かれています。

https://scalameta.org/metals/docs/editors/vscode/

参考文献

  • [1] 公式サイト に次の記載あり。The extension activates when the main directory contains build.sbt or build.sc file, a Scala file is opened, which includes *.sbt, *.scala and *.sc file, or a standard Scala directory structure src/main/scala is detected.

本サイトの更新情報は、Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウントで発信しています。ご確認ください。

最終更新