【Scala】Scala ~ 環境構築編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/03/01/235100
https://dk521123.hatenablog.com/entry/2023/03/05/235755

で、Apache Flink について、触れたが、
Scalaで書かれていることを触れた。

もし、採用された場合、Scalaで開発することになりそうなので
今のうちに、予習をしておく
そこで、今回は、Scala の開発環境を設定し、
最後に、「Hello World」を行う。

なお、この後、Spark/Scalaの実行環境が必要な場合
以下の関連記事も参考になるかも、、、

Spark/Scalaの開発環境構築 ~ Windows編 ~
https://dk521123.hatenablog.com/entry/2023/03/20/115450

目次

【1】環境構築
 補足:Webブラウザ上でさっくり試したい場合
 1)JDK (Java Development Kit )
 2)sbt
 3)VS CodeのScala用プラグイン「Metals」 
【2】ビルドツール「sbt」
 1)主な機能
 2)主な sbt コマンド一覧
【3】Hello World
 1)sbt で 新しいプロジェクトを作成する
 2)ソースを確認し、修正
 3)sbt run で実行
【4】補足:VS Code上での Scala の デバッグ

 

【1】環境構築

以下をインストールする
~~~~
1)JDK (Java Development Kit )
2)ビルドツール「sbt」
3)統合開発環境 VS Code および Scala用プログイン「Metals」 
~~~~

補足:Webブラウザ上でさっくり試したい場合

* 以下のサイトでやるといい。

https://scastie.scala-lang.org/CEpZy3v4Taa0MCStp3LCYg

1)JDK (Java Development Kit )

Windows の場合

* 以下のサイトからダウンロードし、インストールする

https://www.oracle.com/java/technologies/downloads/

Linux の場合

* 以下の関連記事を参照のこと。
~~~~~
sudo apt update
sudo apt install openjdk-11-jre-headless
~~~~~

LinuxJDK を設定する
https://dk521123.hatenablog.com/entry/2017/08/01/234900

JDKが入っているか確認

$ java -version
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

2)sbt

* 以下の関連記事を参照のこと

SBT ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/13/002637

* sbt については、後述『【2】ビルドツール「sbt 」』を参照

3)VS CodeScalaプラグイン「Metals」

* IDE (統合開発環境)として、Visual Studio Codeを選択
 => インストールしていない場合は、
  以下の関連記事などを参考にインストールする

https://dk521123.hatenablog.com/entry/2019/10/24/000000

プラグイン Metals の設定
https://docs.snowflake.com/ja/developer-guide/snowpark/scala/quickstart-vscode

[1] ウィンドウの左側 にある Activity Bar で、 Extensions アイコンをクリック
 => Activity Bar が表示されない場合は、
   [View]-[Appearance]-[Show Activity Bar]がチェックされていることを確認

[2] Search Extensions in Marketplace の検索ボックスで「Metals」を検索
[3] 検索結果で、Scala(Metals)拡張機能を見つけて、 Install をクリック

【2】ビルドツール「sbt」

* 主に Scala の ビルドツール (Simple Build Tool の略)
 => JavaのMavenやAntに相当するツール
 => sbt に関しての詳細は、以下の関連記事を参照のこと

https://dk521123.hatenablog.com/entry/2023/03/22/000000

Apache Flink について

Apache Flink の古いバージョンでは、
sbt を使ったよう(sbt new tillrohrmann/flink-project.g8)

http://mogile.web.fc2.com/flink/flink-docs-release-1.5/quickstart/scala_api_quickstart.html#create-project

しかし、最新バージョン v1.16 だと、Maven or Gradle で主流?

https://nightlies.apache.org/flink/flink-docs-release-1.16/docs/dev/configuration/overview/

とはいえ、以下のURLに
sbt での Flink 用の Quick Start のシェル「sbt-quickstart.sh」があるので
それを使ってもいいかも。

https://flink.apache.org/q/

【3】Hello World

* 以下のサイトなどを参考に、恒例の「Hello World」をやってみる
=> 3Stepで可能。

https://www.scala-sbt.org/1.x/docs/ja/Hello.html

1)sbt で 新しいプロジェクトを作成する

$ mkdir HelloWorld
$ cd HelloWorld
$ sbt new scala/hello-world.g8
[info] welcome to sbt 1.8.2 (Oracle Corporation Java 11)
...
A template to demonstrate a minimal Scala application

name [Hello World template]:ThisIsMyFirstTime << 任意の名前入力(今回は「ThisIsMyFirstTime」)

$ tree << 出来上がったフォルダ階層を表示
C:.
└─thisismyfirsttime
    ├─project
    └─src
        └─main
            └─scala

2)ソースを確認し、修正

[1] VS code を立ち上げる
[2] [File]-[Open Folder]で作成したプロジェクト名のところを指定する
[3] src/main/scala 配下の「Main.scala」をクリックし、エディタで開く
[4] Main.scalaを以下を参考に修正する

Main.scala

object Main extends App {
  // println("Hello, World!")
  println("Hi, World!")
}

3)sbt run で実行

[1] VS Code の [Terminal]-[New Terminal] を選択し、ターミナルを開く
 => 以降「コマンド例」を参考に、ターミナルに入力していく

コマンド例

# 階層確認
$ dir
...
... build.sbt ... <= 「build.sbt」が直下にあることを確認
...

$ sbt run
...
[info] running Main
Hi, World! <= Main.scalaが実行され、修正した「Hi, World!」になっていることを確認
[success] Total time: 4 s, completed 2023/03/10 19:30:59

【4】補足:VS Code上での Scalaデバッグ

* 上記でとりあげた『Scala用プラグイン「Metals」』が必要
 => エラーになったら、入れ直した方がいいかも
 => 実際の解説動画は、以下を参照。

https://youtu.be/zX-t5E5hQh0?t=104
デバッグの開始の仕方
https://youtu.be/zX-t5E5hQh0?t=149

参考文献

環境設定
https://qiita.com/icoxfog417/items/31d88358942d8dd0eb8b
https://tanishiking24.hatenablog.com/entry/scala-setup-2021

関連記事

Scala ~ 環境構築編 / IntelliJ IDEA in WSL ~
https://dk521123.hatenablog.com/entry/2023/06/10/034839
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2023/01/07/000000
Scala ~ 基本編 / 繰り返し ~
https://dk521123.hatenablog.com/entry/2023/01/24/000000
Scala ~ break / continue ~
https://dk521123.hatenablog.com/entry/2023/10/14/011736
Scala ~ for yield ~
https://dk521123.hatenablog.com/entry/2023/09/06/232921
Scala ~ 基本編 / Option型 ~
https://dk521123.hatenablog.com/entry/2023/03/09/000000
Scala ~ 基本編 / Either型 ~
https://dk521123.hatenablog.com/entry/2023/08/02/132315
Scala ~ 基本編 / メソッド ~
https://dk521123.hatenablog.com/entry/2023/03/03/000000
Scala ~ 基本編 / 関数 ~
https://dk521123.hatenablog.com/entry/2023/10/09/232838
Scala ~ 基本編 / クラス ~
https://dk521123.hatenablog.com/entry/2023/03/14/000857
Scala ~ 基本編 / トレイト ~
https://dk521123.hatenablog.com/entry/2023/09/10/204016
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ コレクションで使えるメソッド ~
https://dk521123.hatenablog.com/entry/2023/09/07/223422
Scala ~ mutable collection ~
https://dk521123.hatenablog.com/entry/2024/07/09/223730
Scala ~ 基本編 / 日付・日時 ~
https://dk521123.hatenablog.com/entry/2023/03/08/000000
Scala ~ Joda-Time ~
https://dk521123.hatenablog.com/entry/2024/07/10/001348
Scala ~ 基本編 / 例外処理 ~
https://dk521123.hatenablog.com/entry/2023/10/05/000135
Scala ~ 基本編 / パターンマッチング ~
https://dk521123.hatenablog.com/entry/2023/06/06/233614
Scala ~ 基本編 / 正規表現
https://dk521123.hatenablog.com/entry/2023/03/18/034704
Scala ~ 基本編 / ジェネリック
https://dk521123.hatenablog.com/entry/2023/03/21/003817
Scala ~ 基本編 / カリー化 ~
https://dk521123.hatenablog.com/entry/2023/09/04/231709
ScalaEnum
https://dk521123.hatenablog.com/entry/2023/01/05/000000
Scala ~ ファイル名・パスの扱い ~
https://dk521123.hatenablog.com/entry/2023/03/11/000000
Scala ~ ファイルハンドリング ~
https://dk521123.hatenablog.com/entry/2023/01/03/000000
Scala ~ ファイルの読み書き ~
https://dk521123.hatenablog.com/entry/2023/04/07/000000
ScalaYAML
https://dk521123.hatenablog.com/entry/2023/03/16/012034
ScalaJSON
https://dk521123.hatenablog.com/entry/2023/04/04/000733
Scala ~ TOML ~
https://dk521123.hatenablog.com/entry/2023/10/08/232146
Scala ~ Resources ~
https://dk521123.hatenablog.com/entry/2024/05/08/233755
Scala ~ Logging / SLF4J ~
https://dk521123.hatenablog.com/entry/2023/06/27/230840
Scala ~ 非同期 / Future ~
https://dk521123.hatenablog.com/entry/2023/04/30/000000
Scala ~ 乱数 / ランダム ~
https://dk521123.hatenablog.com/entry/2023/10/11/103948
Scala ~ 部分関数 / PartialFunction ~
https://dk521123.hatenablog.com/entry/2023/09/08/235546
ScalaJDBC / DB接続 ~
https://dk521123.hatenablog.com/entry/2023/03/26/000950
ScalaAWS SDK
https://dk521123.hatenablog.com/entry/2023/03/24/211033
ScalaAWS SDK / S3サンプル ~
https://dk521123.hatenablog.com/entry/2023/04/01/002005
ScalaAWS SDK / Secrets Managerサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/03/012600
ScalaAWS SDK / SESサンプル ~
https://dk521123.hatenablog.com/entry/2023/04/16/003338
ScalaApache Kafka / Producer ~
https://dk521123.hatenablog.com/entry/2023/04/27/235703
ScalaApache Kafka / Consumer ~
https://dk521123.hatenablog.com/entry/2023/04/28/014737
SBT ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2024/01/13/002637
SBT ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/22/000000
SBT ~ 基本編 / build.sbt ~
https://dk521123.hatenablog.com/entry/2023/01/27/000000
SBT ~ 基本編 / sbtコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/26/000000
SBT ~ sbtプラグイン
https://dk521123.hatenablog.com/entry/2023/01/25/000000
SBT ~ 引数設定の仕方 ~
https://dk521123.hatenablog.com/entry/2023/08/21/000000
SBT ~ 設定の切替 ~
https://dk521123.hatenablog.com/entry/2023/08/28/165323
SBTでのエラー/警告対応
https://dk521123.hatenablog.com/entry/2023/04/06/093458
Scala ~ テスティングフレームワーク
https://dk521123.hatenablog.com/entry/2024/06/07/183708
ScalaTest ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/27/001306
ScalaTest ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/03/28/003906
ScalaTest ~ with ScalaCheck ~
https://dk521123.hatenablog.com/entry/2023/03/29/000014
ScalaTest ~ with Mockito ~
https://dk521123.hatenablog.com/entry/2023/03/31/002830
ScalaTest ~ ScalaMock ~
https://dk521123.hatenablog.com/entry/2024/06/12/215306
ScalaTest ~ with Coverage ~
https://dk521123.hatenablog.com/entry/2023/08/07/222945
specs2 ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/06/08/122708
specs2 ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/06/09/221005
SDKMAN ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/08/13/000000
Spark ~ FutureAction ~
https://dk521123.hatenablog.com/entry/2023/04/18/234214
Visual Studio Code ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/20/230323
Apache Flink ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/05/235755
Windows 上で WSLコマンドを使って Linux 環境を構築
https://dk521123.hatenablog.com/entry/2021/11/03/003836
LinuxJDK を設定する
https://dk521123.hatenablog.com/entry/2017/08/01/234900
Spark/Scalaの開発環境構築 ~ Windows編 ~
https://dk521123.hatenablog.com/entry/2023/03/20/115450
Docker compose ~ LocalStack/Glue4.0 ~
https://dk521123.hatenablog.com/entry/2023/03/25/021432