Closed31

Scalaやってみる

nanasinanasi

今のところの方針

  • IDE: IntelliJ IDEA
  • SDKMAN!は使わず、Coursierを使用
nanasinanasi

環境構築(即席Docker)

公式イメージってあるん?

nanasinanasi
  1. OpenJDKのイメージでコンテナを起動
  2. 公式ページを参考にCoursierを起動
  3. パスを通す(export PATH=$PATH:~/.local/share/coursier/bin

これができたらひとまずOK。
scalaコマンドでREPLを起動できるはず。

なお、REPLは:quitで終了できる。

nanasinanasi

環境構築(Dockerfile)

Dockerfileはこちら。

./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"]

実行はこんな感じ。

./docker/run.sh
# リビルドする場合はコメントアウトを外す
# docker image build ./docker -t scala

docker run -it --rm scala
nanasinanasi

Dockerfileの解説

最初のRUN`は公式ページのコピぺ。
ARM64を使ってる。

nanasinanasi

csはCoursierの本体となるコマンド。
--yesで全ての質問にOKを出している。

nanasinanasi

~/.profile~/bashrcにコピーしている。
変更前のパスだと動かなかった...

あと.bash_profileでも動かなかった。ログインシェルとやらの関係らしい。

nanasinanasi

あとは普通にコンテナ起動してるだけ。
特に言うことはないはず。

nanasinanasi

sbtとは?

sbtはScalaのビルドツール。
公式ページのGetting Startedにも載ってる。

nanasinanasi

sbtは基本サブコマンドになってる。

  • new: プロジェクトを新しく作成する
  • compile: コンパイルする
  • console: REPLを起動する、scalaコマンドでよくない?
  • run: 実行する
nanasinanasi

sbtとだけ入力すると、sbtコンソールが立ち上がる。
そこで上のコマンドを入力できる...のか?

nanasinanasi

sbt newとすると、新しくプロジェクトが作成される。
そのとき、src/main/scala/Main.scalaにメインクラスのファイルが作られる。
src/mainに移動するとエラーになるので注意。

nanasinanasi

最小限のHello World:

@main def hello() = println("Hello World!")

予想:

  • hello関数を@mainでメインクラスに指定している
  • ()をつけると=の後の内容が処理内容となる関数になる
nanasinanasi

こんな表記もあるらしい。

object Main extends App {
  println("object")
}

トレイトをミックスイン...?

nanasinanasi

関数の定義例:

def add(x: Int, y: Int): Int = {
  println("add")
  return x + y
}

なお、戻り値の型は推論してくれないので必須。

nanasinanasi

呼び出し例:

@main def hello() = {
  println("Hello World!")
  val sum = add(5, 2)
  println("add: " + sum)
}
nanasinanasi

環境構築(ローカル)

Homebrewで行けると聞いて

nanasinanasi

JDKのインストールをしていなかった場合、デフォルトだとjavaコマンドが使えず動かない。
インストール自体は済んでいるので、コマンドの場所をJAVA_HOME環境変数を通して伝えればOK。

場所は人によって違うと思う。
インストール時のログに書いてあるから、そこを見るべし。
MacでHomebrewを使っていたら/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Homeかも。

~/.zprofile
# いろいろ
export JAVA_HOME="/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home"
# いろいろ
nanasinanasi

これができたらjavaコマンドが動くはず。
そして、scalac --versionが動くはず。

nanasinanasi

ちょっとコードを試すだけなら、scalaでREPLが立ち上がる。
また、ファイルで試したいならscala runが使える。

このスクラップは1ヶ月前にクローズされました