39
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IDEを使わず気軽にScalaを始めるまで

Last updated at Posted at 2015-06-13

概要

開発サーバ上でサクッと Scala を書く機会があったので、IDE を使わない Scala 環境構築についてまとめてみます。
CLI (CUI) と Vim のみで気軽に Scala を書き始めちゃいましょう。

おまけで AWS SDK を使えるようにする設定も書いてみました。

入れたもの

おまけで入れたもの

CLI 環境で Scala が書きたいだけで余計な情報は必要ないんだよ!って方は、sbt のチャプターだけ読んでいただければ大丈夫かと思います。

scalaenv

Scala のバージョンマネージャです。Ruby では rbenv 、Python では pyenv が有名ですね。
scalaenv は Ruby の rbenv を元に作られたものだそうです。

必須ではありませんが、システム環境を汚すのが余り好きじゃないので使っています。

インストール

README の Installation にしたがってインストールします。

$ git clone git://github.com/mazgi/scalaenv.git ~/.scalaenv
$ echo 'export PATH="${HOME}/.scalaenv/bin:${PATH}"' >> ~/.bash_profile
$ echo 'eval "$(scalaenv init -)"' >> ~/.bash_profile

Scala のインストール

scalaevn を利用して Scala の最新バージョンを導入します。

まずは最新バージョンを確認。

$ scalaenv install -l

どうやら執筆時点 (2015/06/14) ではscala-2.11.6が最新のようなので、そちらをインストールします。

$ scalaenv install scala-2.11.6

インストール後、scala-2.11.6を通常使う Scala のバージョンに設定します。

$ scalaenv global scala-2.11.6

以下のコマンドでバージョンを確認できます。

$ scala -version

バージョンが表示されていれば、これで Scala のインストールは完了です。
簡単に動かしてみましょう。

$ scala
scala> println("Hi!")
Hi!

無事、動きました。

sbt

sbt は Scala 用のビルドツールです。プログラムのビルドをよしなにやってくれます。
一言で言うとビルドを超簡単にしてくれるやつで、コマンド一発でビルドできるようになります。

ビルドツールを採用しなかった場合、きっと色々だるいです。
C を使っていたい時代にファイル分割しようとして「だるい!」ってなった記憶があります。
ちなみに、にわか C 使いだったため、Makefile を書いた経験はありません。

ところでなんて読むんでしょうねこれ。酢豚?

インストール

sbt 公式ページに日本語でインストール方法が書いてある親切設計です。

Mac で homebrew を使っている方は、以下のコマンド一発で導入出来ます。

$ brew install sbt

設定

ディレクトリ

まずはプロジェクトのルートとなるディレクトリを作り移動します。

$ mkdir scala-project
$ cd scala-project

そして必要最低限のディレクトリを作成します。

$ mkdir -p src/main/scala
$ mkdir -p src/test/scala
$ mkdir -p lib

名前から推測できるようにsrc/main/scalaが scala のソースファイルを置くところです。
src/test/scalaはテストファイルを格納するディレクトリです。
libも名前の通り、ライブラリ置き場です。

src/main/javaを作成して、そこに Java のソースファイルを格納することも出来ます。
また、src/main/scala-x.xxのようにバージョン指定のフォルダを追加すると、複数バージョンの Scala を共存させることも可能のようです。

プロジェクト

プロジェクトの設定ファイルもプロジェクトルートに簡単に作っておきます。

$ touch build.sbt
build.sbt
lazy val root = (project in file(".")).
  settings(
    name := "scala-project",
    version := "1.0",
    scalaVersion := "2.11.6"
  )

build.sbtの詳細はこちらに書いてあります。

実行

プロジェクト内でsbt runコマンドを叩けばプロジェクトがビルドされ、エントリポイントからプログラムが実行されます。

試しに簡単なファイルを作成し、プロジェクトを実行してみます。

src/main/scala/Hello.scala
object Hello {
  def main(args: Array[String]) = println("Hello, Scala!")
}

では、実行してみます。

$ sbt run

初回ビルドはプロジェクトに必要なライブラリ等をsbtが大量にダウンロードしてくるため、時間がかかります。
まぁ、そうでなくても Scala のコンパイルは遅いことで有名ですね。

画面にHello, Scala!と表示されたら成功です。

Git 管理

プロジェクトは現代人らしく Git で管理しましょう。

ビルド時に生成されたtargetディレクトリはコンパイル後の Class ファイルなどが格納されているので、管理下に置かないで良いかと思います。

.gitignore
target/

vim-scala

素の Vim だと Scala ファイルのシンタックスハイライトがないため、こちらを導入しておきます。
シンタックスハイライトなしでのコーディングは精神衛生上非常によろしくないのでやめておきましょう。

NeoBundle を使っている方は、以下の1行を.vimrcに追記するだけで導入できます。

NeoBundle 'derekwyatt/vim-scala'

AWS SDK for Java

ここまでで基本は完了ですが、おまけで AWS SDK を導入してみます。
Scala のものは存在しませんが、Scala では Java の資産が使えるのでそれを使います。

インストール

公式サイトからAWS SDK for Javaをダウンるロードします。

解凍後、libおよびthird-partyディレクトリ以下に存在するすべてのjarファイルを先ほど作成した Scala プロジェクトのlibディレクトリへとコピーします。

$ find ~/Downloads/aws-java-sdk-1.10.0/lib/ -name *.jar | xargs -J% cp -f % lib/
$ find ~/Downloads/aws-java-sdk-1.10.0/third-party/ -name *.jar | xargs -J% cp -f % lib/

libディレクトリ内は以下の様な状態になります。

$ find lib
lib
lib/aspectjrt.jar
lib/aspectjweaver.jar
lib/aws-java-sdk-1.10.0-javadoc.jar
lib/aws-java-sdk-1.10.0-sources.jar
lib/aws-java-sdk-1.10.0.jar
lib/aws-java-sdk-flow-build-tools-1.10.0.jar
lib/commons-codec-1.6.jar
lib/commons-logging-1.1.3.jar
lib/freemarker-2.3.18.jar
lib/httpclient-4.3.6.jar
lib/httpcore-4.3.3.jar
lib/jackson-annotations-2.5.3.jar
lib/jackson-core-2.5.3.jar
lib/jackson-databind-2.5.3.jar
lib/javax.mail-api-1.4.6.jar
lib/joda-time-2.8.jar
lib/spring-beans-3.0.7.jar
lib/spring-context-3.0.7.jar
lib/spring-core-3.0.7.jar

動作確認

DynamoDB のクライアントを作ってみて、エラーが出ないか確認してみます。

Trait を作ってミックスインしてみたり、それをextendsしたクラスをインスタンス化してメソッドを呼び出したりしてみました。

クエリの発行等を行ってテストすべきとも思いましたが、諸事情(面倒臭かった)により省略しています。
おまけ項目ですし勘弁して下さい。

src/main/scala/Main.scala
object Main extends App {
  val hoge = new Hoge()
  hoge.greet
  println("Hello scala!")
}
src/main/scala/Hoge.class
class Hoge extends DynamoDB {
  // ただ DynamoDB trait をミックスインしただけのクラス
}
src/main/scala/DynamoDB.scala
import com.amazonaws._
import com.amazonaws.auth._
import com.amazonaws.regions._
import com.amazonaws.services.dynamodbv2._

trait DynamoDB {
  val dynamodb = new AmazonDynamoDBClient(
    new BasicAWSCredentials(
      "アクセスキー",
      "シークレットキー"
    )
  )
  dynamodb.setRegion(Region.getRegion(Regions.AP_NORTHEAST_1))

  def greet = {
    println("I'm dynamoDB")
  }
}

DynamoDB を全く使っていませんが、実行してみます。

$ sbt run
I'm dynamoDB
Hello scala!

これで AWS SDK が無事エラーなくインストールされていることを確認できました。

まとめ

sbt を導入することで、驚くほど簡単に Scala プロジェクトを作ることが出来ます。
IDE 使うのめんどくさい!でも Scala ちょっと使いたい!って方は、ぜひ導入してみてください。

IntelliJ を使うと sbt を使ったプロジェクトが GUI で簡単に作れるので、面倒でなければ IntelliJ を入れるのが一番手っ取り早いとは思います。

個人的には、軽いプログラミングなら CLI のみで完結する開発環境が好みです。

参考文献

39
35
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?