Scala 環境構築からコンパイルまでやってみた。

##初めてのScala
最近、静的型付け関数型言語であるScalaを学び始めました。これまで、動的型付け言語のみ、やってきたので、環境構築から、ビルド、コンパイルまでアウトプットしておこうと思い、綴らせて頂きました。では、実際に環境構築からコンパイルまでを書いていきたいと思います。私は,今回はvagrant(僕はCentOs)ではなく、Mac OSに環境を作りましたので、下記はMac OSに開発環境を作りたい方が対象となっています。予めご了承ください。

##Java development kit(JDK)のインストール
ScalaはJava virtual Machine(JVM)上で動作する言語です。ですので、Scalaでは、Javaのライブラリなどをそのまま使うことができ、非常に便利だそうです。また、Java SE Runtime Environment(JRE)というJavaの実行環境も用意する必要があります。JDKは、これら2つの環境が用意されている開発用のkitですので、JDKをinstallする必要があります。本や、ネットで調べたところ、この以下のURLで記事にされているoracle社のJDKをフリーでインストールすることができますので、まずは下記のURLを参考にインストールしてみてください。
参考記事→https://eng-entrance.com/java-install-jdk-mac
oracle社のJDKインストールページ→https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

##sbtのインストール
sbtとはScalaの実行ファイルをビルドするビルドツールになります。これも、使うのでインストールしましょう。僕は、homebrewをインストールしているので、下記のコマンドでインストールしました。

```
brew install sbt
```

また、homebrewを使ってない方でも下記のページでインストールできるのでURLを記載しておきます。
sbtのインストール→ https://www.scala-sbt.org/

#scalaのインストール
scalaもインストールしていきます。こちらも僕は、homebrewを使ってインストールしました。

```
brew install scala
```

もしくは、こちらのページでインストールしましょう。
scalaのインストール→ https://scala-lang.org/

以上で、必要なものは揃いました。ちなみにIDEを使いたいよという方は、intelliJ IDEAという統合開発環境があります。Jetbrains社が提供しているものです。Community Edition(無料版)とUltimate Edition(有料版)があるみたいで、Community Editionでscalaのプラグインをインストールする事で、Scalaの開発環境としては充分使えるみたいですが、今回は、こちらは使ってませんので、使う機会があれば、また記事にしようと思います。
IntelliJ IDEA→https://www.jetbrains.com/idea/

##Atomでlanguage-Scalaのプラグインのインストール
Scalaのプログラムは、どうやらAtomの方でデフォルトでは対応してないみたいなので、こちらのプラグインは、Atomユーザーの方はお好みでインストールしておきましょう。

##sbt console→対話型の評価環境作成
scalaには対話型の評価環境が2種類あります。Scala側で用意されているREPLと、sbt側で用意されている、sbt consoleです。Rubyでいう、irbのようなものです。

今回は、sbt consoleの対話型の評価環境を作り、ビルドからコンパイルまでやってみます。

まずは、scalaソースを管理するディレクトリを作成します。ちなみにscalaコマンドは、Scalaパッケージにあるライブラリだけ使う場合に向いており、

sbt consoleはlibraryDependenciesが必要なライブラリを使いたい時や プロジェクトで定義しているクラスをREPLで使いたい時に向いているそうです。

そのため冒頭にあったREPLでlibraryDependenciesが必要なライブラリを試したい時は、sbt consoleを使うといいそうです。

sbtの公式ドキュメントには、

```
コンパイル済のソースと依存ライブラリにクラスパスを通して、Scala インタプリタを開始する。
```
と記載されています。これをやっていきます。まずはプロジェクトを作成します。


```
mkdir scala_lessons
```

その後、sbtを立ち上げて、

```
sbt
```

以下のようにやっていきます。

```
'echo scalaVersion := "2.11.8" > build.sbt'
```

```
cat build.sbt
```

上記のコマンドで完了です。


```
 sbt:scala_lesson >
```

と表記されるようになりますので、ここでconsoleコマンドを実行します。

```
 sbt:scala_lesson > console
```

上記を実行すると下記のようになります。

```
scala > 
```


```
scala > 1 + 1
res0: Int = 2
```

これで対話型の評価環境をsbtで作る事ができました。

##エディタで編集したソースファイルのコンパイル
次に編集したファイルをビルドしてコンパイルしていきます。
上記の流れをすると、先ほど作成した、scala_lessonディレクトリ以下に2つのフォルダと1つのファイルが生成されます。

```
build.sbt project target
```

僕もまだ学び始めたばかりでこれらのファイルが何なのかは今後調べていき、ここに追記していきます。
調べたところ、scalaの実行ファイルを管理するのはこのscala_lessonディレクトリ以下に、srcフォルダを作成して、mainフォルダを作り、そのディレクトリ以下でscalaの実行ファイルを管理することが推奨されているようです。実際に作成していきます。

```
cd scala_lesson

rsmac:scala_lesson > ls
build.sbt project target

rsmac:scala_lesson > mkdir src
rsmac:scala_lesson > ls
build.sbt project target src

rsmac:scala_lesson > cd src
rsmac:src > mkdir main
rsmac:src > ls
main
rsmac:src > cd main
rsmac:main > mkdir scala
rsmac:main > cd scala
```

このscalaディレクトリでscalaの実行ファイルを作成して、編集してきます。

```
rsmac:scala > touch MyApp.scala
```

エディタで編集してきます。

scala_lesson/main/scala/Myapp.scala

```.scala
object MyApp {
 def main(args:Array[String]):Unit = {
   printIn("Hello World");
 }
}
```

では、ビルドしてきます。ビルドする際には、scala_lessonディレクトリまで戻って、ビルドします。
そして、runコマンドで、コンパイルします。

```
rsmac:scala_lesson > sbt
 [info] Loading project definition from /Users/fujisawaryouhei/Desktop/scala_lesson/project
[info] Loading settings for project scala_lesson from build.sbt ...
[info] Set current project to scala_lesson (in build file:/Users/fujisawaryouhei/Desktop/scala_lesson/)
[info] sbt server started at local:///Users/fujisawaryouhei/.sbt/1.0/server/6afa86314333d591c63c/sock

sbt:scala_lesson > run
[info] Running MyApp 
Hello World
[success] Total time: 1 s, completed 2018/11/15 18:49:22
```

sbtを抜ける時は、exitで抜けましょう。

```
sbt:scala_lesson > exit
[info] shutting down server
rsmac:scala_lesson > 
```

これで作成した実行ファイルのビルドとコンパイルが終了になります。
まだまだ知識が及ばない事が多いのでご指摘のコメント、編集リクエスト等お待ちしています。
参考本→https://gihyo.jp/book/2018/978-4-297-10141-1 [実践scala入門]
全体の参考記事→http://labs.septeni.co.jp/entry/2017/07/13/093000