11 May 2014, 10:39

Emacs で Scala 開発環境を構築 (Ensime)

はじめに

edX で受けた プログラミングパラダイム の講義のなかで,

” これからは, Scala と Erlang だ!C++ と Java はレガシーになりつつある!”

とのことだったので, ちょっと scala をいじってみようと思います.

[toc]

Environment

<div class="outline-text-3" id="text-unnumbered-2">
  <ul class="org-ul">
    <li>
      Linux Mint 16 64bit
    </li>
    <li>
      Scala 2.9
    </li>
  </ul>
</div>

Installing Scalas

Installing the JDK

<div class="outline-text-3" id="text-unnumbered-4">
  <p>
    Scala は JVM 上で動作する. まずは JDK をインストール.
  </p>

  <p>
    [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> sudo apt-get install openjdk-7-jdk<br /> [/sourcecode]
  </p>
</div>

Installing sbt

<div class="outline-text-3" id="text-unnumbered-5">
  <p>
    Scala のビルドツールである sbt を入れる. 以下から Download して, 解凍. なかにある bin ディレクトリにパスを通す.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.scala-sbt.org/release/docs/Getting-Started/Setup.html">Setup &#8211; sbt Documentation</a>
    </li>
  </ul>

  <p>
    日本語のドキュメントがあった.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://scalajp.github.io/sbt-getting-started-guide-ja/">始める sbt &#8211; ようこそ</a>
    </li>
    <li>
      <a href="http://www.scala-sbt.org/">sbt &#8211; sbt Documentation</a>
    </li>
  </ul>
</div>

Installing Scala

<div class="outline-text-3" id="text-unnumbered-6">
  [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> sudo apt-get install scala<br /> [/sourcecode]</p> 

  <p>
    以下から最新版をダウンロードしてもよい.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://www.scala-lang.org/download/">Download | The Scala Programming Language</a>
    </li>
  </ul>

  <p>
    ダウンロードしたら bin ディレクトリにパスを通す.
  </p>

  <p>
    [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> # Scala<br /> export PATH=$HOME/app/sbt/bin:$PATH<br /> export PATH=$HOME/app/scala/bin:$PATH<br /> [/sourcecode]
  </p>
</div>

Hello Scala

<div class="outline-text-3" id="text-unnumbered-7">
  <p>
    それでは, お決まりの儀式から.
  </p>

  <p>
    [sourcecode language=&#8221;scala&#8221; title=&#8221;&#8221;]<br /> object Hello extends App {<br /> println ("Hello, Scala!")<br /> }<br /> [/sourcecode]
  </p>

  <p>
    以下で実行.
  </p>

  <p>
    [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> % scalac Hello.scala<br /> % scala Hello<br /> Hello, Scala!<br /> [/sourcecode]
  </p>
</div>

Installing Emacs

Emacs 自体のインストール方法は省略.

Installing scala-mode

<div class="outline-text-3" id="text-unnumbered-9">
  <p>
    scala-mode と scala-mode2 がある. 2 を入れた.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/hvesalai/scala-mode2">hvesalai/scala-mode2</a>
    </li>
  </ul>
</div>

Installing Ensime

<div class="outline-text-3" id="text-unnumbered-10">
  <p>
    Scala 用の統合開発環境. インストールはは github にしたがえばよい.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://github.com/ensime/ensime-src">ensime/ensime-src</a>
    </li>
  </ul>

  <p>
    Ensime Server をダウンロードしてロードパスの通った場所におく.
  </p>

  <ul class="org-ul">
    <li>
      <a href="https://www.dropbox.com/sh/ryd981hq08swyqr/V9o9rDvxkS/ENSIME%20Releases">Dropbox &#8211; ENSIME Releases</a>
    </li>
  </ul>

  <p>
    (ハマリメモ. github から落としてきたやつではなくて, Dropbox から落とした Reliese 番でないとダメなんだね. めちゃくちゃハマった)
  </p>
</div>

<div id="outline-container-unnumbered-11" class="outline-4">
  <h4 id="unnumbered-11">
    .ensime を作成
  </h4>

  <div class="outline-text-4" id="text-unnumbered-11">
    <p>
      ensime を利用するには, .ensime という設定ファイルが必要.
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://d.hatena.ne.jp/masaaki1001/20121226/1356539103">ensime の設定方法 &#8211; masaaki1001 の日記</a>
      </li>
      <li>
        <a href="http://d.hatena.ne.jp/lranran123/20130409/1365515128">Emacs での Scala 開発には Ensime というプラグインらしい -q 趣味プログラマがまれになんかしたことの記録</a>
      </li>
      <li>
        <a href="https://github.com/ensime/ensime-sbt-cmd">https://github.com/ensime/ensime-sbt-cmd</a>
      </li>
    </ul>

    <p>
      上記を参考に~/.sbt/plugins/plugins.sbt を作成し, 以下を記入.
    </p>

    <p>
      [sourcecode language=&#8221;language&#8221; title=&#8221;&#8221;]<br /> resolvers += Resolver.sonatypeRepo ("snapshots")
    </p>

    <p>
      addSbtPlugin ("org.ensime" % "ensime-sbt" % "0.1.5-SNAPSHOT")<br /> [/sourcecode]
    </p>

    <p>
      M-x ensime-config-gen というコマンドでも対話的に設定ファイルが作成できるらしい.
    </p>

    <p>
      Hello.scala を開いたディレクトリで以下を実行.
    </p>

    <p>
      [sourcecode language=&#8221;language&#8221; title=&#8221;&#8221;]<br /> sbt "ensime generate"<br /> [/sourcecode]
    </p>
  </div>
</div>

<div id="outline-container-unnumbered-12" class="outline-4">
  <h4 id="unnumbered-12">
    emsime 実行
  </h4>

  <div class="outline-text-4" id="text-unnumbered-12">
    <p>
      これで, .ensime が生成される.
    </p>

    <p>
      Emacs 上で M-x ensime を実行. 先ほど生成した.ensime の場所を教える.
    </p>

    <p>
      今日はこんなところで. 逐次, 追記予定.
    </p>
  </div>
</div>

追記 2014-06-21

sbt-mode というものもある.

機能的には ensime とおなじようなことができるし, ensime ファイルを作成しなくてもいいので導入が楽.

ensime よりよいところは, M-x sbt-send-region で Scala REPL にリージョンを送信することができるところ. これは便利そう.

また, repl を autoload する方法もあるようだ.