Precena Tech Book
コーポレートサイト採用サイト
  • はじめに
  • ソフトウェア開発
    • 開発環境構築
      • Homebrew
        • Homebrew用語の意味
      • ngrok
        • ngrokの導入
        • ngrokのアップグレード(v2 to v3)
      • Slack
        • Slackの/remind コマンドの形式
        • 対面での相談を気軽にするためのSlack設定
      • AWS CLI
      • Ruby
      • Scala
      • Prettier
      • zsh
        • zsh-completion
      • Mac
        • M1 Macでの開発環境構築(rosetta 無し)
    • バックエンド
      • OpenAPI
        • OpenAPI 定義ファイル分割のすゝめ
      • Ruby on Rails
        • ActiveRecordのfind_or_initialize_byメソッドにブロックを渡したときの挙動
        • Railsのアプリケーションサーバーのプロセス数とスレッド数の設定方法
        • Railsを6.1系から7.0系へアップグレードした時に調査したこと
        • schema.rbで差分が発生する事例とその復旧について
        • tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する
        • Rails Migrationチートシート
        • GithubのプライベートリポジトリをGemfileで参照する方法
        • ActiveSupportのto_jsonメソッドの注意点
        • 危険なJSON出力を禁止するRuboCopカスタムルールの作成方法
      • Scala
        • Validated を直列に処理したい
      • DB
        • PostgreSQLにおける、削除行に対するロック獲得時の挙動
    • フロントエンド
      • React
        • Storybookを利用したビジュアルリグレッションテスト
  • インフラ開発
    • AWS
      • IAM
        • スイッチロールの設定手順
        • AWS CLIでのスイッチロールの設定手順
        • AWS Vaultを使ったスイッチロール設定手順
        • Github ActionsでIAMロールを利用してAWSリソースを操作する
      • ECS
      • SES
        • AWS SESメールボックスシミュレーターにて、カスタムヘッダや添付ファイル付きのテストEメールを送信する
      • CloudWatch
        • Amazon SNS + Slack Workflowを使って、CloudWatch Alarmの通知をSlackチャンネルへ投稿する
      • Lambda
        • lambrollでAWS Lambda関数をデプロイしたときのTips
    • Heroku
      • HerokuのStackの設定
      • Heroku Postgresの運用でよく使うコマンド集
  • セキュリティ
    • Web
      • Same Origin PolicyとCORS
      • 脆弱性診断 2社同時依頼実施記録
  • Mail
    • SPF、DKIM、DMARCを使用した迷惑メール対策
  • データ分析
    • データ分析プロセス
  • SaaS
    • Zendesk
      • 問い合わせフォームの項目をサービスごとに出し分け、各サービス担当者に自動で振り分けてメールで通知する
  • イベント
    • RubyKaigi
      • RubyKaigi 2023 に現地参加しました
    • EMConf
      • EMConfJP2025_参加レポート
  • やってみた
    • IoT
      • Raspberry Pi + PaSoRi + Python で、勤怠打刻マシンを作ってみた
  • Precena Tech Book 管理
    • コンテンツ執筆時のルール
  • 関連リンク
    • プレセナエンジニア公式Twitter
GitBook提供
このページ内
  • 想定環境
  • Java と sbt のインストール
  • JDK と バージョンについて
  • SDKMAN
  • anyenv + jenv + sbtenv
  • IDE の設定
  • Visual Studio Code + Metals
  • 参考文献

役に立ちましたか?

PDFとしてエクスポート
  1. ソフトウェア開発
  2. 開発環境構築

Scala

前へRuby次へPrettier

最終更新 1 年前

役に立ちましたか?

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

想定環境

  • OS:Mac

  • Scala:2.13.6

Java と sbt のインストール

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

  • SDKMAN

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

  • anyenv + jenv + sbtenv

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

JDK と バージョンについて

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

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

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に読み込ませる必要があります。

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

  1. anyenvのインストール

  2. JDKのインストール

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

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

anyenvのインストール

JDKのインストール

% 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 の設定

Visual Studio Code + Metals

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

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

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

参考文献

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

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

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

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

[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ので発信しています。ご確認ください。

Eclipse Adoptium
SDKMAN
anyenv公式
jenv公式
Metals
https://scalameta.org/metals/docs/editors/vscode/
公式サイト
株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウント