この記事でインストールしているバージョンは古くなっている可能性もあります。最新バージョンに読み替えて利用するようにしてください。
想定環境
- 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/config
の sdkman_auto_env
を true
にしなければ自動的に適用されないので設定しておきましょう。
ちなみに Metals を使ったプロジェクトの場合、 sbt のバージョンに関しては project/build.properties を参照してくれるため、バージョン指定は不要です。
anyenv + jenv + sbtenv
anyenvを利用する場合、java, sbtのバージョン管理ライブラリはそれぞれjenv, sbtenvを利用することになります。jenvはrbenvやnodenvと違って言語のインストール機能は持っていないため、JDKは手動でインストールし、jenvに読み込ませる必要があります。
環境構築の流れは以下の通りです。
- anyenvのインストール
- JDKのインストール
- jenvのインストール&設定
- 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
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.
本サイトの更新情報は、Twitterの株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウントで発信しています。ご確認ください。