CodeIQ MAGAZINECodeIQ MAGAZINE

Scalaを学ぶ前に押さえておきたい!スニペット実行ツール8選!! #scala

2014.06.23 Category:技術コラム Tag:

  • 16
  • このエントリーをはてなブックマークに追加
scala

Scalaは記述の自由度が高く、同じ処理を様々な書き方ができたり、シュガーシンタクスや短縮形のバリエーションが豊富です。

Scalaを学び始めた段階ではWebで見つけてきたスニペットひとつとっても、咀嚼しながら理解することが重要です。今回は学習やテストできっと役立つような、Scalaのスニペットを実行できるツールを8つに絞って紹介します。
by 株式会社クラフトマンソフトウェア 野澤 秀仁

学び始めの人におすすめ!「SimplyScala」

今すぐScalaがどんな言語か試してみたい人にオススメしたいのが、SimplyScalaです。SimplyScalaはGoogle App Engine上で動いているWebサイトなので、コンパイルから実行までリモートで処理してくれるため、ブラウザさえあればScalaのスニペットを試すことができます。

SimplyScalaは、「Scalaを学び始める人の取っ掛かりを作ること」を目的に作られたサイトで、単にスニペットを実行できるだけでなく、Scalaのチュートリアルがついています。チュートリアルに例示されているスニペットもクリックするだけで実際に動かしてみることができます。

Mac用のエディタ「CodeRunner」

CodeRunnerは、どんなプログラミング言語でもさくっと実行できるMac用のエディタです。CodeRunnerを使えば、アルゴリズムやコードスニペットの簡単なテストや実験をサクッと行うことができます。インストール時点で使える言語はRubyやPHP・Pythonなどで、Scalaには対応していないものの、後からScalaを追加することができます。CodeRunnerでScalaを使えるようにする方法の詳細は、「CodeRunnerを使ってScalaのスニペットをサクサク試せるようにしよう – Qiita」をご覧ください。

エディタに実行コンソールがついたようなものなので、実行だけでなく書いたScalaのスクリプトを保存するこもできます。見つけてきたスニペットをコピー&ペーストしてサクッと試したいときに、あると便利なツールです。

シンプルな対話型のプログラム実行環境「REPL」

REPL(レプル;Read-Eval-Print-Loop)は、シンプルな対話型のプログラム実行環境です。ScalaはデフォルトでREPLが入っているので、Scalaさえ入っていれば使うことができます。REPLでは、Scalaコード1行入力すると、その計算結果が表示されます。逆に言うと、1行で収まるような短いスニペットを試すの向いているので、簡単な計算や単純な関数・メソッドを試すときに使うといいでしょう。

もちろん、REPLでも複数行入力することができます。その場合には、REPL上で :paste と入力すると、複数行入力モードにすることができます。また、:load と入力することで外部のScalaファイルの読み込みをすることもでき、外部のScalaクラスのメソッドを試す用途にも使うことができます。

スクリプトの実行方法

複数行に及ぶスニペットはREPLでは少し窮屈かもしれません。そんな時は、Scalaスクリプトとして実行してみるのをおすすめします。Scalaはコンパイル言語でありながら、PHPやRubyなどスクリプト言語に劣らず、まるでスクリプト言語かと思うくらい簡単に実行することができます。

Scalaスクリプトの実行方法は、scalaコマンドで実行したいスクリプトを指定するだけです。もちろん引数を与えることもできます。

scala script.scala foo bar

JavaやGoなどの言語と異なり、Scalaスクリプトはmain関数を定義する必要がないのも特徴のひとつです。例えば次のような1行だけのスクリプトもそのまま実行することができます。

script.scalaのコード:

println("Hello World: " + (args mkString ", "))

Scalaはスクリプトを自動的にmain関数でラップしてコンパイルするので、ここではmain関数を自分で定義する必要がないのです。例えば、上のScalaコードは内部的に下のコードとしてコンパイルされているわけです。

scala:

object Main { 
  def main(args: Array[String): Unit = { 
    println("Hello World: " + (args mkString ", "))
  } 
} 

アプリケーションとして実行する方法

アプリケーションとして実行する方法、エディタひとつあればスニペットを試せる、最も簡便な方法のひとつです。Scalaでは、実行可能にするには main 関数を実装したobjectを用意する必要がありますが、App トレイトを継承することで、main 関数を実装する代わりに、コンストラクタに処理を書くことができます。

hello.scalaのコード:

object HelloApp extends App {
  println("Hello World: " + (args mkString ", "))
}

このプログラムを実行するには、scalacコマンドでコンパイルしてからscalaで呼び出します。上記の HelloApp を実行するなら、次ようなコマンドになります。

scalac hello.scala && scala HelloApp foo bar

ファイル名はアプリケーション名(ここではHelloApp)と同じである必要はありません。ですので、scalac && scalaの実行方法を一般化すると次のようになります。

scalac ファイル名.scala && scala アプリケーション名 [引数]

ScalaやJavaプロジェクトのビルドツール「sbt console」

sbt(simple build tool)は、JavaのMavenやAntと似た、ScalaやJavaプロジェクトのビルドツールです。なので、本来はビルドするために使うものですが、sbtにはスニペットを実行できるコンソール機能があります。

これは、REPLをsbtで使えるようにしたものですが、REPLとの違いはプロジェクトで独自に定義したクラスや関数を使うことができるという点です。sbt console コマンドでコンソールを起動したら、例えば上の画像のように、プロジェクトで定義したクラス org.suin.Chat.MessageSent のインスタンスを作ってみることができます。

利用シーンとしては、sbtでビルドしているプロジェクトで、スニペットとプロジェクトのクラスを試しに結合してみる、といった用途に役立つ機能です。

IDEの補完機能やパラメータ情報を表示できる「IntelliJ Scala Console」

IntelliJはJavaやScalaの定番IDEのひとつですが、sbt consoleと似たことができるIntelliJ Scala Consoleというものがあります。こちらのコンソールもプロジェクトで定義したクラスや関数を実行してみることができますが、特徴的なのはIDEの補完機能やパラメータ情報を表示する機能があるという点です。

IntelliJ Scala Consoleの導入方法は「Working with Scala Console – IntelliJ IDEA – Confluence」をご覧ください。

スニペットを試すのに非常に便利なツールとして最後に紹介するのがScala IDEのWorksheetです。このWorksheetは、変数の定義したり文字列を出力するたびに、エディタ上でインラインで変数や出力を確認することができます。数行に渡るスニペットの状態を確認しながら試すことに向いているので、スニペットをベースにカスタマイズしたりデバッグしたりがとても容易です。

Scalaの作者 Martin Odersky もScala2.10をPRする動画「Intel hosts Dr. Martin Odersky presenting Scala 2.10 – YouTube」で使ってるので、是非押さえておきたいツールの1つですね。Worksheetを使ったデモは動画の30分目ぐらいで見ることができます。

Scala IDE Worksheetの導入方法はGetting Started · scala-ide/scala-worksheet Wiki · GitHubを御覧ください。

おわりに

この記事では、Scalaの学習やテストの場面で役立つ、スニペットの実行環境を紹介しました。Scalaは奥の深い言語だと思います。Scalaについていつでも理解を深められるように、Scalaコードを簡単に試せる環境を整えておくといいのではないでしょうか。

  • 16
  • このエントリーをはてなブックマークに追加

■この記事を書いた人

avatar

株式会社クラフトマンソフトウェア 野澤 秀仁

自動UIテストを支援するTaaS「ShouldBee」の開発者。「エンジニアリングは創造的で楽しくあるべき」のために、テスト・運用など退屈な作業の自動化やドメイン駆動設計を実施する。 twitter: @suin ブログ: http://blog.craftsman-software.com/

■関連記事

単体テストの正しい進捗状況を!Scalatestで未実装のテストをマークアップする方法 #scala... TDDやBDDなどテストファーストで開発を行う際、「テストを設計する → テストコードを書く → 実装を書く → テストを実行する」というサイクルで行うことがあると思います。テストを設計するの段階で、テストケースやテストシナリオが洗い出され、その後テストコードへと落ちてゆきます。 電卓のテストを例...
チームのコードを均一化したい!Scalariformで自動的に美しくコードを作る方法 #Scala... コードの書き方がバラバラだとバグを産む 多くのプログラマは自分なりのコードの書き方を持っていると思います。プログラムをひとりで作っているうちは、自分のルールに従ってコードを書いていて問題はないのですが、チームで取り組むとなるとコードの書き方で問題が起こることがあります。 コードの書き方が違うせい...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ