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%
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

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/EPFL

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:>

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%
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

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.

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:>

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_111

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

$ brew info scala@2.11 scala@2.11: stable 2.11.12 [keg-only] JVM-based programming language
The Scala Programming Language
/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)
$ 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

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

# env.sh export PATH="/usr/local/opt/scala@2.11/bin:$PATH"
$ 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

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 $

JDK 13 + Scala 2.13.2

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

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

$ brew info scala scala: stable 2.13.2 JVM-based programming language
The Scala Programming Language
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)
$ 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

/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"
$ 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.2
$ which scala /usr/local/bin/scala $ scala -version Scala code runner version 2.13.2 -- Copyright 2002-2020, LAMP/EPFL and Lightbend, Inc.

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 $

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_251

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/EPFL

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 $

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

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

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_41

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

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.

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 $

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

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>

ヘルプは「: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

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

scala> :quit $

セルフスタディ2日目

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

おすすめ書籍

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

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

700ページ以上もあるよ!

バイブルは長いのよ

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