RSS2.0

Scala IDE で遊んでみる

前回はコマンドラインで scala に軽く触ってみたところですが、今回は IDE で Scala を使ってみようと思います。
Scala 用の IDE としては、おなじみ IntelliJ IDEA と Scala IDE があるようです。Scala IDE は Eclipse ベースの Scala 開発用ワークセットで、今回は Scala IDE のほうを使ってみます。
scalaIDE01.png
開発環境は例によって Linux (Fedora release 26) です。

Scala IDE のインストール

公式サイトから Scala IDE をダウンロードします。
現時点での最新バージョンは 4.7.0 Release でした。

ダウンロードしたら展開して、でてきた eclipse ディレクトリを適当な場所に置いておきましょう。
$ tar xvfz scala-SDK-4.7.0-vfinal-2.12-linux.gtk.x86_64.tar.gz

展開してできた eclipse ディレクトリ内の実行バイナリ eclipse を実行すると Scala IDE が起動します。
Eclipse をベースにしているだけあって、基本的な使い方は Eclipse と同じですね。
同じ環境で Java を Eclipse で開発している場合には、実行バイナリの eclipse 自体を別名にリネームしたり、メニューに登録する際に Scala IDE というような名前をつけておいたり、ワークスペースを Java 用 eclipse のワークスペースとは別の場所にしておいたりするとうまく住み分けができると思います。

Eclipse プロジェクトの作成

前回と同じように sbt コマンドで scala プロジェクトを作成し、それを Scala IDE で使えるようにします。
Java で maven を使っている場合に mvn eclipse:eclipse する感じです。

まず sbt コマンドで新しい Scala プロジェクトを作成します。テンプレートは前回といっしょのものです。
$ sbt new scala/hello-world.g8

次に、作成したプロジェクトを Scala IDE 用に変換するために、sbt コマンドに sbteclipse プラグインを追加します。手順はこの github リポジトリの README.md に方法が書かれている通りです。

Scala プロジェクトのプラグインを記述する設定ファイル project/plugins.sbt に、以下の内容を書いておきます。
上述のプロジェクトテンプレートを利用しているとこのファイルは生成されないので、project ディレクトリごと新規作成しましょう。
addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "5.2.4")

project/plugins.sbt を準備したら、sbt コマンドから sbteclipse プラグインを実行します。
sbt コマンドのコンソールで eclipse コマンドを実行してください。
$ sbt
> eclipse
これで Scala IDE で、既存のプロジェクトとして読み込めるようになりました。

Scala IDE の Package Explorer で右クリックし、Import... > General > Existing Projects into Workspace から作成したプロジェクトのディレクトリを選択するとプロジェクトが読み込まれ、Package Explorer に表示されます。

試しにテンプレートから作成された Main.scala を開いてみて、メニューバーのデバッグボタンを押すか、F11 を押すと、Java を開発する時のようにデバッグ実行ができます。

def main() を持つ object を実行する

例によって Main.scala ではなく、def main() メソッドを持つ自作の scala ファイルを実行してみます。
ソースコードは以下の通りです。
これを FileReader.scala という名前で src/main/scala 配下に置いておきます。
object FileReader {

  def main(args: Array[String]): Unit = {
    val fileName = "memo.txt";
    val encode = "UTF-8";

    scala.io.Source.fromFile(fileName, encode).getLines.foreach{ println _ }
  }

}
内容は、fileName に定義されたパスのファイルを読み込んで、1 行ずつ出力するというものです。シンプルなファイル入力ですね。

また、読み込むファイルとして、以下の内容で memo.txt を作成し、プロジェクトディレクトリ内に置いておきます。
いろはにほへと ちりぬるを
わかよたれそ  つねならむ
うゐのおくやま けふこえて
あさきゆめみし ゑひもせす

色はにほへど  散りぬるを
我が世たれぞ  常ならむ
有為の奥山   今日越えて
浅き夢見じ   酔ひもせず

作成した object を右クリックし、Debug as... > Scala Application と選ぶと、実行できます。
初回実行時には Select Preferred Launcher というダイアログが表示されるようですが、Use configuration specific settings チェックボックスをチェックし、Launchers のリストから Scala Application (new debugger) Launcher を選んで OK を押すと実行できます。
scalaIDE02.png
実行結果として、memo.txt の内容が Console に出力されれば成功です。

Scala の class と object の違い

Scala でクラス定義の際に使われている class と object キーワードには、そのクラスのオブジェクトがシングルトンが否かという違いがあります。
Scala の class キーワードをつけたクラスは Java でのクラスと同様に new する度にインスタンスを生成できます。
一方で Scala の object キーワードをつけたクラスは、シングルトンオブジェクトとなり、new でインスタンスを生成することなくインスタンスにアクセスできるようになります。

例えば、上記 FileReader クラスは object キーワードで定義されたシングルトンオブジェクトになります。
なので、その main() メソッドはインスタンスを new で生成することなく、Java の static メソッドのように呼び出すことができます。
scala> :load "src/main/scala/FileReader.scala"
scala> FileReader.main(Array())
いろはにほへと ちりぬるを
わかよたれそ  つねならむ
うゐのおくやま けふこえて
あさきゆめみし ゑひもせす

色はにほへど  散りぬるを
我が世たれぞ  常ならむ
有為の奥山   今日越えて
浅き夢見じ   酔ひもせず

Scala IDE を使ってみるという記事なのに最後は scala コマンドを使うという(笑
  Scala  コメント (0)  2018/02/08 20:19:52


公開範囲:
プロフィール HN: ももかん
ゲーム作ったり雑談書いたり・・・していた時期が私にもありました。
カレンダー
<<2018, 8>>
2930311234
567891011
12131415161718
19202122232425
2627282930311