Scalaをインストールするには

「7つの言語 7つの世界」第5章の学習のために、Scala(スカラ)言語をインストールします。

名前のScalaは、scalable languageが由来なんだね

7つの言語 7つの世界

  • Ruby
  • Io
  • Prolog
  • Scala
  • Erlang
  • Cloijure
  • Haskell

書籍では、バージョン 2.7.7 を使っているよ

Scala公式サイト

The Scala Programming Language

公式サイトの最新バージョンは、2.13.2ね

Scala 2.13.2は、p138 3日目のXMLで、scala.xmlパッケージがないエラーでした。scala.xmlパッケージは分離されたようです。

scala-xmlをbuild.sbtに記述してダウンロードしたんだけど、scalaコンソールへの適用方法がわからなかったみたいよ。

OpenJDK 8 + Scala 2.10.7の組み合わせは、p143でSource.fromURL(url)のurlにhttpsを指定するとエラー。

次の組み合わせで、動きました。
Windows 10は、Oracle JDK 8u251 + Scala 2.10.7
macOSは、Oracle JDK 8u110 + Scala 2.11.12
Ubunutu 18.04は、Oracle JDK 8u251 + Scala 2.10.7

Windows 10

Oracle JDK 8u251 + Scala 2.10.7

Oracle JDK 8u251

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html から、Windows x64、211.54MB、jdk-8u251-windows-x64.exe をダウンロードします。

インストーラを起動します。「次」ボタンをクリックします。

「次(N)」ボタンをクリックします。

数秒間、プログレバーが表示されます。

コピー先フォルダを指定します。このままで問題ありません。

インストールのプログレスバーが表示されます。

インストールが完了しました。「閉じる」ボタンをクリックします。

必要に応じて、環境変数JAVA_HOMEとPATHを設定するバッチファイルを作ります。学習でコマンドプロンプトを起動するたびに、env.batを実行することにします。

: env.bat
set JAVA_HOME=C:\Program Files\java\jdk1.8.0_251
PATH=%JAVA_HOME%\bin;%PATH%Code language: DOS .bat (dos)
C:> env.bat

C:> java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

C:> javac -version
javac 1.8.0_251
Code language: Bash (bash)

Scala 2.10.7

https://www.scala-lang.org/download/2.10.7.html の scala.msi Windows Installer(msi)をダウンロードします。

インストーラを起動します。[Next]ボタンをクリックしてください。

[I accept the terms in the License Agreement]にチェックを付けて、[Next]ボタンをクリックしてください。

設定はそのままで、[Next]ボタンをクリックしてください。

[Install]ボタンをクリックしてください。

プログレスバーが進まないときは、「この不明な発行元のアプリがデバイスに変更を加えようとしています」ダイアログが隠れているかもしれません。タスクバーに「セキュリティの盾アイコン」が点滅していないか確認してください。

インストールが完了しました。

新規にコマンドプロンプトを起動します。

C:> env.bat

C:> scala -version
Scala code runner version 2.10.7 -- Copyright 2002-2017, LAMP/EPFLCode language: plaintext (plaintext)

Scalaコンソールを起動します。「:quit」でコンソールを終了します。

C:> scala
Welcome to Scala version 2.10.7 (OpenJDK Client VM, Java 1.8.0_41).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

scala> :quit

C:>Code language: plaintext (plaintext)

JDK 14 + Scala 2.13.2

使いませんでしたが、メモとして残しておきます。

筆者はOpenJDK 14を使いました。

https://jdk.java.net/ から、Ready for use: JDK 14をクリック、Windows/x64 zipをクリックして、ダウンロードします。zipファイルを展開します。C:\jdk\jdk-14.0.1 となるように、コピーまたは移動します。

環境変数JAVA_HOMEとPATHを設定するバッチファイルを作ります。学習でコマンドプロンプトを起動するたびに、env.batを実行することにします。

: env.bat
set JAVA_HOME=C:\jdk\jdk-14.0.1
PATH=%JAVA_HOME%\bin;%PATH%Code language: DOS .bat (dos)
C:> env.bat

C:> java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment (build 14.0.1+7)
OpenJDK 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)

C:> javac -version
javac 14.0.1
Code language: Bash (bash)

https://www.scala-lang.org/download/ のページ下の Other resurcesの Windows(msi installer)をダウンロードします。

インストーラをダブルクリックで起動します。もし、このような画面が表示されたら、詳細情報をクリックしてください。

[実行]ボタンをクリックしてください。

インストーラが起動しました。[Next]ボタンをクリックしてください。

[I accept the terms in the License Agreement]にチェックを付けて、[Next]ボタンをクリックしてください。

設定はそのままで、[Next]ボタンをクリックしてください。

[Install]ボタンをクリックしてください。

プログレスバーが進まないときは、「この不明な発行元のアプリがデバイスに変更を加えようとしています」ダイアログが隠れているかもしれません。タスクバーに「セキュリティの盾アイコン」が点滅していないか確認してください。

インストールが完了しました。

新規にコマンドプロンプトを起動します。

C:> env.bat

C:> scala -version
Scala code runner version 2.13.2 -- Copyright 2002-2020, LAMP/EPFL and Lightbend, Inc.Code language: plaintext (plaintext)

Scalaコンソールを起動します。「:quit」でコンソールを終了します。

C:> scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 14.0.1).
Type in expressions for evaluation. Or try :help.


scala>

scala> :quit

C:>Code language: plaintext (plaintext)

macOS(Mac OS X) 10.15.4

JDK 8 + Scala 2.11.12

すでにインストールされていたJDK 8を使います。

$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)


$ javac -version
javac 1.8.0_111Code language: Bash (bash)

homebrewでインストールします。バージョンは、2.11.12です。

$ brew info scala@2.11
scala@2.11: stable 2.11.12 [keg-only]
JVM-based programming language
https://www.scala-lang.org/
/usr/local/Cellar/scala@2.11/2.11.12 (51 files, 31.3MB)
  Built from source on 2020-06-19 at 01:23:29
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/scala@2.11.rb
==> Requirements
Required: java = 1.8 ✔
==> Caveats
scala@2.11 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have scala@2.11 first in your PATH run:
  echo 'export PATH="/usr/local/opt/scala@2.11/bin:$PATH"' >> /Users/aoki.makoto/.bash_profile

==> Analytics
install: 544 (30 days), 1,610 (90 days), 6,977 (365 days)
install-on-request: 548 (30 days), 1,616 (90 days), 6,987 (365 days)
build-error: 0 (30 days)
Code language: Bash (bash)
$ brew install scala@2.11
(省略)
==> Downloading https://downloads.lightbend.com/scala/2.11.12/scala-2.11.12.tgz
######################################################################## 100.0%
==> Caveats
scala@2.11 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have scala@2.11 first in your PATH run:
  echo 'export PATH="/usr/local/opt/scala@2.11/bin:$PATH"' >> /Users/aoki.makoto/.bash_profile

==> Summary
🍺  /usr/local/Cellar/scala@2.11/2.11.12: 51 files, 31.3MB, built in 2 seconds

Code language: Bash (bash)

インストールメッセージにしたがって、環境変数PATHと設定します。学習用フォルダに、環境変数設定用のenv.shを作成しました。学習のたびに、env.shを適用することにします。

# env.sh
export PATH="/usr/local/opt/scala@2.11/bin:$PATH"Code language: Bash (bash)
$ source env.sh

$ which scala
/usr/local/opt/scala@2.11/bin/scala

$ scala -version
Scala code runner version 2.11.12 -- Copyright 2002-2017, LAMP/EPFL
Code language: Bash (bash)

scalaコンソールを起動します。終了するには「:quit」です。

$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 13.0.2).
Type in expressions for evaluation. Or try :help.

scala> 

scala> :quit

$Code language: Bash (bash)

JDK 13 + Scala 2.13.2

使いませんでしたが、メモとして残しておきます。

homebrewでインストールします。バージョンは、2.13.2です。

$ brew info scala
scala: stable 2.13.2
JVM-based programming language
https://www.scala-lang.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/scala.rb
==> Dependencies
Required: openjdk ✘
==> Caveats
To use with IntelliJ, set the Scala home to:
  /usr/local/opt/scala/idea
==> Analytics
install: 8,689 (30 days), 32,960 (90 days), 130,169 (365 days)
install-on-request: 8,165 (30 days), 30,586 (90 days), 120,663 (365 days)
build-error: 0 (30 days)
Code language: Bash (bash)
$ brew install scala
==> Downloading https://homebrew.bintray.com/bottles/openjdk-13.0.2%2B8_2.catalina.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/65/65adca036393f528e3830cab8b0aafec94be870de087d94cfe098fd593517307?__gda__=exp=1592213639~hmac=f6d6d606033e8fe94407ea29e3ae65233920d
######################################################################## 100.0%
==> Downloading https://downloads.lightbend.com/scala/2.13.2/scala-2.13.2.tgz
######################################################################## 100.0%
==> Installing dependencies for scala: openjdk
==> Installing scala dependency: openjdk
==> Pouring openjdk-13.0.2+8_2.catalina.bottle.tar.gz
==> Caveats
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because it shadows the macOS `java` wrapper.

If you need to have openjdk first in your PATH run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> /Users/aoki.makoto/.bash_profile

For compilers to find openjdk you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk/include"

==> Summary
🍺  /usr/local/Cellar/openjdk/13.0.2+8_2: 631 files, 314.6MB
==> Installing scala
==> Caveats
To use with IntelliJ, set the Scala home to:
  /usr/local/opt/scala/idea
==> Summary
🍺  /usr/local/Cellar/scala/2.13.2: 41 files, 22.5MB, built in 2 seconds
==> Caveats
==> openjdk
For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because it shadows the macOS `java` wrapper.

If you need to have openjdk first in your PATH run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> /Users/aoki.makoto/.bash_profile

For compilers to find openjdk you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk/include"

==> scala
To use with IntelliJ, set the Scala home to:
  /usr/local/opt/scala/idea

Code language: Bash (bash)

/usr/local/Cellar/openjdk/13.0.2+8_2/に、openjdk 13.0もインストールされました。

インストールメッセージにしたがって、環境変数PATHと環境変数CPPFLAGSを設定します。学習用フォルダに、環境変数設定用のenv.shを作成しました。学習のたびに、env.shを適用することにします。

# env.sh
export PATH="/usr/local/opt/openjdk/bin:$PATH"
export CPPFLAGS="-I/usr/local/opt/openjdk/include"Code language: Bash (bash)
$ source env.sh

$ java -version
openjdk version "13.0.2" 2020-01-14
OpenJDK Runtime Environment (build 13.0.2+8)
OpenJDK 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)

$ javac -version
javac 13.0.2Code language: Bash (bash)
$ which scala
/usr/local/bin/scala

$ scala -version
Scala code runner version 2.13.2 -- Copyright 2002-2020, LAMP/EPFL and Lightbend, Inc.
Code language: Bash (bash)

scalaコンソールを起動します。終了するには「:quit」です。

$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 13.0.2).
Type in expressions for evaluation. Or try :help.

scala> 

scala> :quit

$Code language: Bash (bash)

Ubuntu 18.04

Oracle JDK 8u251 + Scala 2.10.7 の組み合わせにしました。

Oracle JDK 8u251 + Scala 2.10.7

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html から、Linux x64 Comppressed Archive 186MB jdk-8u251-linux-x64.tar.gz をダウンロードしました。

$ which java
/home/aoki/jdk/jdk1.8.0_251/bin/java

$ java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

$ javac -version
javac 1.8.0_251Code language: JavaScript (javascript)

Scala公式サイトのhttps://www.scala-lang.org/download/2.10.7.htmlから2.10.7のdebパッケージをダウンロードして、aptでインストールしました。

$ wget https://downloads.lightbend.com/scala/2.10.7/scala-2.10.7.deb

$ sudo apt install ./scala-2.10.7.deb

$ which scala
/usr/bin/scala

$ scala -version
Scala code runner version 2.10.7 -- Copyright 2002-2017, LAMP/EPFLCode language: Bash (bash)

scalaコンソールを起動します。終了するには「:quit」です。

$ scala
Welcome to Scala version 2.10.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_251).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

scala> :quit

$
Code language: Bash (bash)

OpenJDK 8 + Scala 2.10.7

この組み合わせは、p143でSource.fromURL(url)のurlに、"https://" を指定すると、SSLExceptionが発生しました。組み合わせを試した結果「Oracle JDK 8u251 + Scala 2.10.7」の組み合わせで動きました。

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Code language: CSS (css)

Androdi Studio同梱のopenjdk 8、jdk.java.netからダウンロードしたopenjdk 8、どちらもScala 2.10.7が動きました。

Androdi Studio同梱のopenjdk 8(1.8.0_242)

$ which java
/snap/android-studio/current/android-studio/jre/bin/java

$ java -version
openjdk version "1.8.0_242-release"
OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
OpenJDK 64-Bit Server VM (build 25.242-b3-6222593, mixed mode)

$ javac -version
javac 1.8.0_242-release
Code language: JavaScript (javascript)

jdk.java.netからダウンロードしたopenjdk 8(1.8.0_41)。https://jdk.java.net/java-se-ri/8-MR3 から、Oracle Linux 7.6 x64 Java Development Kit 167MB をダウンロードしました。

$ which java
/home/aoki/jdk/java-se-8u41-ri/bin/java

$ java -version
openjdk version "1.8.0_41"
OpenJDK Runtime Environment (build 1.8.0_41-b04)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)

$ javac -version
javac 1.8.0_41Code language: JavaScript (javascript)

JDK 11 + Scala 2.13.2

openjdk 11をインストールしました。

$ sudo apt install openjdk-11-jdk openjdk-11-jdk-headless

$ java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)

$ javac -version
javac 11.0.7

$ unset JAVA_HOME
Code language: Bash (bash)

Scalaの公式サイトから最新バージョンのdebパッケージをダウンロードして、インストールしました。

$ wget https://downloads.lightbend.com/scala/2.13.2/scala-2.13.2.deb

$ sudo apt install ./scala-2.13.2.deb

$ which scala
/usr/bin/scala

$ scala -version
Scala code runner version 2.13.2 -- Copyright 2002-2020, LAMP/EPFL and Lightbend, Inc.Code language: Bash (bash)

scalaコンソールを起動します。終了するには「:quit」です。

$ scala
Welcome to Scala 2.13.2 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.

scala> 

scala> :quit

$
Code language: Bash (bash)

Scala 2.13.2は、3日目のXMLでエラーだったよ。

JDK 8/11 + Scala 2.11.12

aptでインストールしました。バージョンは2.11.12でした。

ところが、p117以降、スクリプトファイルとして実行すると、エラーになってしまいました。

error: Compile server encountered fatal condition: javax/tools/DiagnosticListener
java.lang.ClassNotFoundException: javax.tools.DiagnosticListener
Code language: Bash (bash)

https://stackoverflow.com/questions/50876388/scala-script-doesnt-run-on-ubuntu と同じエラーです。

JDK11、JDK 8どちらの組み合わせもためしましたが、やはりエラーでした。

scalaコンソールの起動と終了

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

$ scala
Welcome to Scala 2.11.12 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.

scala> 
Code language: Bash (bash)

ヘルプは「:help」です。

scala> :help
All commands can be abbreviated, e.g., :he instead of :help.
:help [command]          print this summary or command-specific help
:completions <string>    output completions for the given string
:imports [name name ...] show import history, identifying sources of names
:implicits [-v]          show the implicits in scope
:javap <path|class>      disassemble a file or class name
:line <id>|<line>        place line(s) at the end of history
:load <path>             interpret lines in a file
:paste [-raw] [path]     enter paste mode or paste a file
:power                   enable power user mode
:quit                    exit the interpreter
:replay [options]        reset the repl and replay all previous commands
:require <path>          add a jar to the classpath
:reset [options]         reset the repl to its initial state, forgetting all session entries
:save <path>             save replayable session to a file
:sh <command line>       run a shell command (result is implicitly => List[String])
:settings <options>      update compiler options, if possible; see reset
:silent                  disable/enable automatic printing of results
:type [-v] <expr>        display the type of an expression without evaluating it
:kind [-v] <type>        display the kind of a type. see also :help kind
:warnings                show the suppressed warnings from the most recent line which had any

Code language: HTML, XML (xml)

終了するには「:quit」です。

scala> :quit

$Code language: Bash (bash)

セルフスタディ2日目

クロージャはコードブロックとどこが違うのか
クロージャ | Martin Fowler's Bliki (ja)

おすすめ書籍

各出版社のショップでPDF版を販売しているよ。自炊しなくてもいいね。

Scala言語の作者が書いた、通称コップ本「Scalaスケーラブルプログラミング」がバイブル本ね。

700ページ以上もあるよ!

バイブルは長いのよ

瀬良 和弘 (著), 水島 宏太 (著), 河内 崇 (著), 麻植 泰輔 (著), 青山 直紀 (著) 技術評論社 2018/10
Martin Odersky (著), Lex Spoon (著), Bill Venners (著) インプレス 2016/09
竹添直樹 (著), 島本多可子 (著) 翔泳社 2012
アンドリュー・フィリップス (著), ネルミン・セリフォヴィック (著) 翔泳社 2016
タイトルとURLをコピーしました