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.zip
→ cs-x86_64-pc-win32.exe
ちょっと時間がかかるので回線が空いているときに実行しましょう。
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-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名を入力を求められます。
ファイルが色々生成されました。
適当なエディタで確認しみます。
確認すべきファイルは、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ですが文字が入力できなくなる現象がたまに発生します。
押したいキーを長押しすると入力することができました。
原因はわかりませんが、ターミナルとの相性だと想定しています。
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
Import Build の実行
では、プロジェクトをVSCodeで開いてみます。
sbtファイルを認識すると、buildファイルをインポートするか聞いてきます。
「Import build」を実行しましょう。
Metalsの準備が終わらないことがあります
「starting metals server」が終わらないことが一度だけありました。
適当な解決策として…
・プレリリースバージョンを使用している場合はリリースバージョンへ戻す。
・Metalsの更新準備中の場合も不具合が発生する可能性があるかも。 なので終わるまで待つ。私の場合は次の日にMetalsの更新の案内があり、更新すると正常に使用することができました。
Scalaを実行する
エントリーポイントは、Main.scala です。
src/main/scala/Main.scala です。
@mainの上に”run | debug” があるのでrunをclickすると実行されます。
コマンドラインに結果が表示されます。
F5キーでも実行可能です。
この場合、「.scalafmt.conf」を作成するか聞いてきます。どれを選択しても実行はできるようです。
VSCodeからScalaプロジェクトを作成する
先ほどは、sbtを使用してコマンドラインからScalaプロジェクトを作成しました。VSCodeからも作成してみましょう。
条件:Java、sbt、拡張機能Metalsなどが準備されている状態
以下、Vscodeから実行する手順
- コマンドパレットを開く(Ctrl + Shift + p)
- Metals: New Scala Project を選択
- scala/scala3.g8 を選択
- ディレクトリ選択
- プロジェクト名入力
- プロジェクトを開くか聞いてくるので”Yes”
Templateはいくつかあるようですね
新しいプロジェクトを開くか聞いてきます。開きましょう。
Import build をしておきましょう。
IntelliJの場合
プラグインのインストール
Marketplaceで「scala」を検索します。
”JetBrains s.r.o.” の「Scala」が見つかります。
プラグインのインストール後に、「ビルドスクリプトが見つかりました」と表示されると思います。
sbt プロジェクトのロードをクリックしましょう。
Scalaの実行
Main.scalaを開きます。
@mainの左側に実行マークがありますね。クリックしましょう。
コンソールに「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つかな。