Hello Scala

1. はじめに

まずは最初に定番のHello Worldにしたいと思います。
今回は sbt (simple build tool) を利用して、テンプレートから実行可能なアプリを作成したいと思います。
インストールしたsbt の以下コマンドで実行します。
./sbt new

$sbt new scala/scala-seed.g8
[info] Loading global plugins from /Users/XXXXXX/.sbt/0.13/plugins
[info] Set current project to scala_learn (in build file:/Users/XXXXXX//)

A minimal Scala project.

name [Scala Seed Project]:

上記状態になりますので、”name”の行の”:“にhelloscalaと入力します。

name [Scala Seed Project]:helloscala
Template applied in ./helloscala

上記コマンドを実行する事で、 “Hello” がコンソールに表示されるScalaアプリケーションが作成加能です。
また、色々なテンプレートは以下のサイトから探せます。

sbt new and Templates

2. フォルダ構成

上記のsbtで作成したプロジェクトのフォルダ構成は以下のようになっています。

├── build.sbt                       : このアプリケーションのsbt設定ファイル
├── project                         : プロジェクトの主にビルドをサポートするファイルを格納
│   ├── Dependencies.scala          :
│   └── build.properties            :
└── src
    ├── main
    │   └── scala
    │       └── example
    │           └── Hello.scala     : Scalaのソースコード
    └── test
        └── scala
            └── example
                └── HelloSpec.scala : テスト用コード

正式にはSBT Directory structureを参照の事。

object Hello extends Greeting with App {
  println(greeting)
}

trait Greeting {
  lazy val greeting: String = "Hello, Scala!"
}

ソースコードを変更後は、フォルダ内のsbtを利用して実行できます。

例えば、”hello”を println(““Hello, Scala!”)に変更した後は、下記の手順で実行できます。

$cd ~//helloscala
$sbt
[info] Loading global plugins from /Users/XXXXXX/.sbt/0.13/plugins
(色々メッセージが表示される)
>

プロンプトが”>“に変わった状態で以下のようにrunと入力します。

>run
[info] Compiling 1 Scala source to /Users/XXXXXX/helloscala/target/scala-2.12/classes...
[info] Running example.Hello
Hello, Scala!
[success] Total time: 4 s, completed 2018/01/07 10:06:31
>exit

3. 配布アプリケーションの作成

これまで説明した”Hello World”はツール(sbt)を介して実行しています。
ここでは、作成したプログラムを配布をする手順を紹介します。
配布アプリケーションを作成するためのツールが以下のツールです。

sbt-native-packager

作成したアプリケーションの下記ファイルの追加と修正をします。


├── build.sbt
├── project
    ├── plugins.sbt

a. project/plugins.sbt
以下の行を記載。

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.2")   

b. build.sbt
以下の行を追記。

enablePlugins(JavaAppPackaging)    

変更後、sbtを実行後、パッケージング用のコマンドを実行します。

$sbt
>universal:packageBin  
[info] ・・・・  
・・・・・  
[info] Done packaging.
[success] Total time: 5 s, completed 2018/01/07 10:38:12
>exit

zip形式で配布用のファイルが作成されます。
中にshell(Linux向け)とbat(Windows向け)の2種類が作成されます。
解凍するとJavaがインストールされている端末で実行加能です。

$cd ./target/universal
$unzip hello-0.1.0-SNAPSHOT.zip
Archive:  hello-0.1.0-SNAPSHOT.zip
  inflating: hello-0.1.0-SNAPSHOT/lib/com.example.hello-0.1.0-SNAPSHOT.jar
  inflating: hello-0.1.0-SNAPSHOT/lib/org.scala-lang.scala-library-2.12.4.jar
  inflating: hello-0.1.0-SNAPSHOT/bin/hello
  inflating: hello-0.1.0-SNAPSHOT/bin/hello.bat
$cd hello-0.1.0-SNAPSHOT/bin
$./hello
Hello, Scala!
$

4.REPL

対話形式でscalaのコードを実行するツールがあります。

$sbt console  
[info] Set current project to scala-activator (in build file: ・・・・・)
[info] Updating ・・・・
・・・・
[info]
Welcome to Scala version 2.10.4 (Java Hotspot ・・・・)
scala>

scala > と表示されれば起動成功です。

scala> "Hello, Scala!"
res0: String = Hello, Scala!
scala>
scala>res0
res2: String = Hello, Scala!
scala> 1+2
res3: Int = 3

プロンプト “scala>” に続けて、 “Hello, Scala!“と入力することで、変数(res0)が定義されています。
続けて、 res0 と入力すると Hello, Scala! が表示されます(そして新たにres2)。
また、 1+2 と言った演算もREPLでは実行加能です。

以上で、 scala版、 Hello Worldの紹介は終わりです。