読者です 読者をやめる 読者になる 読者になる

Typesafe Stack 環境に scalas を無理やり導入した

言い訳

InfoQ: Scala Days 2012 リポート
ここを読んで思うところがあったので。

意見の要約

初学者にとって sbt は「どう便利なのか分かりにくいツール」だと思う。
メリットの見えないツールを使い始める、というのは心理的障壁が大きくてイヤだよねー、ということで、scalasの「ライブラリを自動で取ってきてくれる」という機能を餌にして推して、便利なところから使ってもらったら良いんじゃないかなーと思います。

やったこと

ScalaJP wiki の Scala 開発環境構築手順 (IntelliJ IDEA/Eclipse + Scala Plugin + sbt) の手順通りにscalaを導入した環境で、無理やり scalas が使えるようにした。

Mac OSX Lion, Ubuntu 12.04(32bit)で試してみたよ。

scalasって何?

初心者による初心者のためのScalaでhello world
ココの説明がイイ!!
使いたいライブラリをMaven Repositoryで調べてきて、コメントの中に書くとそれだけで導入してくれる優れもの。

ただし、「conscriptでsbtを導入したら自動で付いてくる」ということで、既にhomebrew等で導入している環境では二重にインストールされてしまいます

手順

と言っても、Scripts, REPL, and Dependencies — sbt Documentation コレのとおりに1行スクリプトを書くだけなんだけどね…
加えて言うと、typesafe-stackで導入されるsbt-launch.jarとは別に、自分でsbt-launch.jarを用意したほうが簡単そうです。

  • 自分で勝手に変更できる、パスの通ったディレクトリを(まだ作ってない人は)作る(~/bin に設定している人が多い)
  • Setup のページから、最新版の sbt-launch.jar をダウンロードして、↑で作ったディレクトリに入れる。
  • ↑ディレクトリに"scalas" という名前のファイルを作る。中身はこんな感じにしてみた
java -Xmx512M -Dsbt.main.class=sbt.ScriptMain -Dsbt.boot.directory=$HOME/.sbt/boot -jar `dirname $0`/sbt-launch.jar "$@"

Mac の場合は -Dfile.encoding=UTF-8 を追加したほうが良いでしょうね(文字化け対策)
メモリが足りなくなった場合は、sbtのドキュメントに書いてある設定を追加したほうが良いでしょう。

  • "chmod u+x scalas" で実行権限を付与する

これで一応導入できます。
実行してみましょう!

$ vim example.scala
#!/usr/bin/env scalas
!#
/***
scalaVersion := "2.9.2"

libraryDependencies ++= Seq(
  "org.twitter4j" % "twitter4j-core" % "2.2.5"
  )
*/

import twitter4j._
import scala.collection.JavaConversions._

val twitter = new TwitterFactory().getInstance

val query = new Query()
query.setQuery("#scalajp")

val result = twitter.search(query)

println("%d 件のツイートがあります" format result.getTweets.size)

for(tweet <- result.getTweets) {
  println("-" * 20)
  println(tweet.getFromUser)
  println(tweet.getText)
}
$ chmod u+x example.scala
$ ./example.scala