JINMUSOFTWARE

Install Scala

💡 このページでは、ScalaのインストールからHello World までを説明します。

こんにちは。そろそろ関数型プログラミングを学んでみたいですよね。

書籍「なっとく!関数型プログラミング」を購入したのですが、コードの説明にJavaとScalaを使用していることがわかりました。

ということで、Scalaをインストールしてみようと思います。

Scalaのコードを実行する為には、Java、sbt、scalaコマンドライン、scalaコンパイラ、などが必要なようです。

Scala公式お薦めツールの「Coursier」を利用すれば一括して管理してくれそうです。

ちなみに、sbtは、Scala、Javaのビルドツールのです。Scalaプロジェクトの生成などもしてくれます。

Coursierのインストール

https://scala-lang.org/download

https://docs.scala-lang.org/getting-started/index.html

Scalaのインストールは、「Coursier」を使用することがScala公式よりお薦めされています。

Coursierは、Scalaの為のツールのです。Scalaコンパイラーや、sbtビルドツールなど、その他便利なツールもインストールしてくれます。

インストール後は、cs コマンドが利用できるようになります。

Coursierはフランス語のようです。発音は、「コfシ」「コfシぇ」。「コーシー」とは聞こえませんね。

💡windows環境で準備しています。

では、downloadして、解凍して、実行してみます。

https://github.com/coursier/coursier →Releases Latest → cs-x86_64-pc-win32.zipcs-x86_64-pc-win32.exe

ちょっと時間がかかるので回線が空いているときに実行しましょう。

Coursierのインストール
Coursierのインストール

JVM、Coursierのパス、各ツールのチェックとインストールが実行されます。

Javaは元々インストールしていたのでパスされていますね。

このように、Windows環境では cs-x86_64-pc-win32.exe を実行することにより cs setup が実行されているようです。

cs setup はScalaの環境を準備してくれるコマンドです。

これで、コマンドラインツールcsが使えるようになりました。

ツールの動作確認

さて、動作確認してみましょう。

cs コマンドを実行します。

> cs version
2.1.10

version が表示されるはずです。

ちなみに、csでなくて、sc は、windowsのコマンドです。タイポに注意ですね。

💡 私の環境ではPCを再起動しないと、Power Shell (x86) 上でcsコマンドを認識できませんでした。たまたまかな?

他のツールのバージョン確認をしてみましょう。

> java --version
java 22 2024-03-19
Java(TM) SE Runtime Environment (build 22+36-2370)
Java HotSpot(TM) 64-Bit Server VM (build 22+36-2370, mixed mode, sharing)
> sbt -V
sbt version in this project: 1.10.0
sbt script version: 1.10.0
> scala -version
Scala code runner version 3.4.2 -- Copyright 2002-2024, LAMP/EPFL
> scalac -version
Scala compiler version 3.4.2 -- Copyright 2002-2024, LAMP/EPFL

cs setup コマンド

先ほど、cs setup が実行されているといいました。

cs setup は、Scalaで使用するツール群をインストールしてくれます。

以下は実行例です。

cs setup
cs setup

cs-x86_64-pc-win32.exe を実行したときと似ています。

ツールの更新をしてくれるようですね。

sbtを利用する

sbt は、Scala、Javaの為のビルドツールです。

ここでは、プロジェクトの作成とプロジェクトの実行を説明します。

https://www.scala-sbt.org/index.html

sbtを使用してScalaプロジェクトを作成する方法

では、プロジェクトを生成してみましょう。

sbt new scala/scala3.g8

これで、テンプレートをダウンロードしてディレクトリ構成を準備してくれます。

3分くらいかかるかな?

途中、Project名を入力を求められます。

sbt new scala/scala3.g8
sbt new scala/scala3.g8

ファイルが色々生成されました。

適当なエディタで確認しみます。

確認すべきファイルは、src\\main\\scala\\Main.scalaです。

ファイルを覗くと、どうやら、「Hello World!」と表示するサンプルコードのようです。

実行してみましょう。

@main def hello(): Unit =
  println("Hello world!")
  println(msg)

def msg = "I was compiled by Scala 3. :)"

sbtを利用してScalaプロジェクトを実行する方法

先ほどsbtを利用してScalaのプロジェクトを生成しました。

sbtはプロジェクトの実行もできます。

試してみましょう。

コンソールで、scalaプロジェクトのディレクトリにいることを確認してください。

sbtと入力して、sbt server を起動します。

> sbt

sbtを起動すると、sbt server が起動されてコマンドを受け付ける状態になります。

このモードは exit で終了します。

sbt server の起動
sbt server の起動

このsbtですが文字が入力できなくなる現象がたまに発生します。
押したいキーを長押しすると入力することができました。
原因はわかりませんが、ターミナルとの相性だと想定しています。

run と入力してみましょう。

sbt:hello33> **run**
[info] running hello
Hello world!
I was compiled by Scala 3. :)
[success] Total time: 1 s, completed 2024/05/20 3:40:19
sbt:hello33>

Hello World と表示されました。

さて、次は~run入力してみましょう。

これは、ソースコードの変更を監視して即座に再実行します。

監視モードを終了する場合は、Enterキーを押してください。

sbt:hello33> ~run
[info] running hello
Hello world!
I was compiled by Scala 3. :)
[success] Total time: 0 s, completed 2024/05/20 3:42:38
[info] 1. Monitoring source files for root/run...
[info]    Press <enter> to interrupt or '?' for more options.

ソースコードを適当に変更すると…

sbt:hello33> ~run
[info] running hello
Hello world!
I was compiled by Scala 3. :)
[success] Total time: 0 s, completed 2024/05/20 3:42:38
[info] 1. Monitoring source files for root/run...
[info]    Press <enter> to interrupt or '?' for more options.
[info] Build triggered by C:\htdocs\Scala\hello\hello33\src\main\scala\Main.scala. Running 'run'.
[info] compiling 1 Scala source to C:\htdocs\Scala\hello\hello33\target\scala-3.4.1\classes ...
[info] running hello
Hello world3
I was compiled by Scala 3. :)
[success] Total time: 2 s, completed 2024/05/20 3:43:44
[info] 2. Monitoring source files for root/run...
[info]    Press <enter> to interrupt or '?' for more options.

わお!すぐさま再実行されました。

変更結果が反映されていますね。

Enterキーを押して終了しましょう。

IDEの準備

エディタは、VSCode, IntelliJ がお薦めのようです。

どちらも、Scala用の拡張機能やプラグインが用意されていてとても便利です。

拡張機能を追加すると、BuildファイルのImportの案内が表示されるはずですのでそれを実行します。IDEはビルドスクリプト”build.sbt” を見つけると反応するようです。

VSCodeの場合

Scala専用の拡張機能を利用しましょう。

VSCodeの拡張機能検索欄に「scala」と入力しましょう。「Scala (Metals)」が見つかります。

「Scala (Metals)」 をインストールすると「Scala Syntax (official)」もインストールされます。

  • Scala Syntax(offcial)…863K
  • Scala(Metals)…475K
Scala Metals
Scala Metals

Import Build の実行

では、プロジェクトをVSCodeで開いてみます。

sbtファイルを認識すると、buildファイルをインポートするか聞いてきます。

「Import build」を実行しましょう。

Import build
Import build

Metalsの準備が終わらないことがあります
「starting metals server」が終わらないことが一度だけありました。
適当な解決策として…
・プレリリースバージョンを使用している場合はリリースバージョンへ戻す。
・Metalsの更新準備中の場合も不具合が発生する可能性があるかも。 なので終わるまで待つ。私の場合は次の日にMetalsの更新の案内があり、更新すると正常に使用することができました。

Scalaを実行する

エントリーポイントは、Main.scala です。

src/main/scala/Main.scala です。

Main.scala
Main.scala

@mainの上に”run | debug” があるのでrunをclickすると実行されます。

コマンドラインに結果が表示されます。

F5キーでも実行可能です。

この場合、「.scalafmt.conf」を作成するか聞いてきます。どれを選択しても実行はできるようです。

.scalafmt.conf
.scalafmt.conf

VSCodeからScalaプロジェクトを作成する

先ほどは、sbtを使用してコマンドラインからScalaプロジェクトを作成しました。VSCodeからも作成してみましょう。

条件:Java、sbt、拡張機能Metalsなどが準備されている状態

以下、Vscodeから実行する手順

  1. コマンドパレットを開く(Ctrl + Shift + p)
  2. Metals: New Scala Project を選択
  3. scala/scala3.g8 を選択
  4. ディレクトリ選択
  5. プロジェクト名入力
  6. プロジェクトを開くか聞いてくるので”Yes”

Templateはいくつかあるようですね

いくつかのテンプレート - g8
いくつかのテンプレート – g8

新しいプロジェクトを開くか聞いてきます。開きましょう。

新しく作成したScalaプロジェクトを開くところ
新しく作成したScalaプロジェクトを開くところ

Import build をしておきましょう。

IntelliJの場合

プラグインのインストール

Marketplaceで「scala」を検索します。

”JetBrains s.r.o.” の「Scala」が見つかります。

プラグインのインストール後に、「ビルドスクリプトが見つかりました」と表示されると思います。

sbt プロジェクトのロードをクリックしましょう。

IntelliJ IDE の場合
IntelliJ IDE の場合

Scalaの実行

Main.scalaを開きます。

@mainの左側に実行マークがありますね。クリックしましょう。

IntelliJ IDE の場合
Scalaの実行 – IntelliJ IDE の場合

コンソールに「Hello World」 と表示されましたね!

Scala REPL を試す

さて、コマンドラインからscalaのコマンドも実行してみましょう。

scala用コンソールを起動します。

> sbt console

もしくは、sbt server が起動中であれば、console と入力します。

sbt:hello33> console

もしくは、scala REPLP を起動

> scala

待ち受けプロンプトが scala> と表示されます

scala>

sbt起動とscala起動で環境が違うようです。

終了は、 :quit と入力します。:q でも終了しました。

scala> :quit

help は、:help

scala> :help
The REPL has several commands available:

:help                    print this summary
:load <path>             interpret lines in a file
:quit                    exit the interpreter
:type <expression>       evaluate the type of the given expression
:doc <expression>        print the documentation for the given expression
:imports                 show import history
:reset [options]         reset the repl to its initial state, forgetting all session entries
:settings <options>      update compiler options, if possible

では、適当にScalaのコードを入力してみましょう。

scala> println("Hello")
Hello

他にも…

scala> 1
val res0: Int = 1

scala> var x: Int = 99
var x: Int = 99

動きましたね!

ちょっとした動作確認にいいですね。

こちらはOnlineでScalaのコードを実行できます。

https://scastie.scala-lang.org

これから

とりあえず、Scalaを実行させることができました。

追加で学習したいですが、Scala3に対応している書籍が全然ありません。

公式サイトで学習しましょう!

では、さようなら。

Links

https://scala-lang.org/ Scala公式

https://www.scala-lang.org/download/ Scalaのインストール方法

https://docs.scala-lang.org/ja/getting-started/index.html Scalaのインストールから実行まで

https://docs.scala-lang.org/scala3/book/scala-features.html Scala3の説明。Scala2との比較もあり。

https://docs.scala-lang.org/overviews/jdk-compatibility/overview.html JDKの互換表

https://scastie.scala-lang.org/pEBYc5VMT02wAGaDrfLnyw Scastie。オンラインでScalaを実行。

https://get-coursier.io/ Coursier

https://www.scala-sbt.org/ sbt

https://www.foundweekends.org/giter8/ Giter8。Templateの1つかな。