Comment on page
Scala
この記事でインストールしているバージョンは古くなっている可能性もあります。最新バージョンに読み替えて利用するようにしてください。
- OS:Mac
- Scala:2.13.6
Scala を使うには Java と sbt が必要になります。バージョン管理ツールを2つ紹介しますが、どちらを使っても構いません。
- SDKMAN
- Java と sbt どちらもこれ一つでインストールできるので、 anyenv を使っていないのであればこちらがおすすめです。
- anyenv + jenv + sbtenv
- anyenv ですべて管理したい人向けです。
無償JDKとして広く利用されていたAdoptOpenJDKはEclipse Adoptiumプロジェクトに移管されることが公表されており、2021/8/13にはそのサブプロジェクトであるEclipse Temurinプロジェクトから新たなJDKがリリースされました。今回はこちらのJDKを利用します。
また、Java には LTS バージョンが設定されており、このバージョンのみをサポートしているライブラリも多いです。特段の理由がなければ、最新版ではなく 8 や 11 といった LTS バージョンをインストールするのが良いと思います。
% 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/config
の sdkman_auto_env
を true
にしなければ自動的に適用されないの で設定しておきましょう。ちなみに Metals を使ったプロジェクトの場合、 sbt のバージョンに関しては project/build.properties を参照してくれるため、バージョン指定は不要です。
anyenvを利用する場合、java, sbtのバージョン管理ライブラリはそれぞれjenv, sbtenvを利用することになります。jenvはrbenvやnodenvと違って言語のインストール機能は持っていないため、JDKは手動でインストールし、jenvに読み込ませる必要があります。
環境構築の流れは以下の通りです。
- 1.anyenvのインストール
- 2.JDKのインストール
- 3.jenvのインストール&設定
- 4.sbtenvのインストール&設定
SDKMANではなくこちらの手順を選択している方は既にインストール済みの方が多いと思いますので、詳細な手順は割愛します。新規にインストールする方はanyenv公式のREADMEに沿ってインストールしましょう。
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のインストールは完了です。
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をインストールします。
% 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の環境設定は完了です。
以前は Scala といえば IntelliJ だったと思うのですが、最近は Metals という Language Server が出てきており、Metals を使えば Visual Studio Code や Emacs などエディタを選ばずに Scala の開発ができるようになっているようです。
scalameta.metals
という extension をインストールするだけです。extension は Scala プロジェクト以外は有効化されないはずですが[1]、私の環境では ruby のワークスペースなどにも .metals ディレクトリが出来てしまいました。基本は disable にしておいて、Scala のワークスペースでだけ手動で enable にするのが良いと思います。
VS Code のサポートについてはこちらに詳しく書かれています。
- [1] 公式サイト に次の記載あり。The extension activates when the main directory contains
build.sbt
orbuild.sc
file, a Scala file is opened, which includes*.sbt
,*.scala
and*.sc
file, or a standard Scala directory structuresrc/main/scala
is detected.