Update 2014-10-04
: Docker開発環境をつくる - Emacs24とEclimからEclipseに接続するJava開発環境
GitHubのensimeのリポジトリはもうすぐDEPRECATEDになるようで、ensime-serverに移動したようです。
Emacsのパッケージはensime-emacsになりました。Sublimeからも使われるようになったからでしょうか。
Scalaやsbtのバージョン管理やディレクトリ構造は、私には複雑すぎです。
Scalaな人たちは普通なのでしょうが、どうもこの雰囲気に馴染めません。
TL;DR
Typesafe Activator
でインストールしたScalaとsbtも、ENSIME-Emacsから使うことができましたが、
2014-06-30は、うってつけの日ではなかったようです。
scala-mode2のインストール
Emacsを起動して、M-x list-packages
を実行、
scala-mode2を検索、選択(i)して、実行(x)します。package.elは便利!
謎のENSIME配布パッケージ
packege.elのM-x list-packages
で表示されるMELPAのensimeは、
ensime-20131030.1503.tarです。
GitHubのリンクはDEPRECATEDの方で2013-10-30と更新が古いです。
一方、新しいensime-serverリポジトリのREADMEからリンクがあるENSIME Releasesの最新は、
ensime_2.10.0-0.9.8.9.tar.gz)で、Modifiedが1年前です。(日付はいいつなの?)
また、ENSIME User Manualに書いてあるdistributionページの最新は、
ensime_2.10.0-RC3-0.9.8.2.tar.gzで、更新はUploaded on 2 Dec 2012
です。
3種類の配布パッケージがあって、この時点ですでに心が折れているのですが、がんばります。
更新日付だけ見ると、MELPAが一番新しいようですが、そもそもこの世界では更新日付は意味がないのかも知れません。
ファイルやパッケージのバージョンや更新日はものすごく気にする方なので、こういう状態はちょっと混乱してしまいます。
MELPAのensime-20131030.1503.tarをダウンロードして解凍してみると、libにあるのは、ensime_2.10.0-0.9.9.jar
でした。
MELPAのENSIMEを使う
命名規則から読み取ると、MELPAのensime_2.10.0-0.9.9.jar
が2014-06-30の時点で最新ぽいので、MEPLAからインストールします。
M-x list-packages
を表示し、Ctrl-s
でensimeを検索、選択(i)して、実行(x)します。
インストールしたパッケージlibを確認します。
$ ls ~/.emacs.d/elpa/ensime-20131030.1503/lib/ |
ScalaはTypesafe Activator
でインストールしていました。
sbtコマンドは直接使えないので、.ensime
を作成するためにsbtをラップしているactivatorコマンドを実行します。
project/plugins.sbt
ファイルを作成して、ensime-sbtを記述します。
addSbtPlugin("org.ensime" % "ensime-sbt" % "0.1.4") |
./activator "ensime generate"
を実行するとエラーになりました。
$ ./activator "ensime generate" |
ensime-sbtをローカルに配置してやり直し
Plugin version 0.1.3 not availableを読むと、masterの最新バージョンは0.1.4-SNAPSHOT
らしく、
ローカルにライブラリを配置して使うようです。
ensime-sbtをgit clone
します。
$ git clone https://github.com/ensime/ensime-sbt.git |
ensime-sbtのVERSIONを、0.1.4-SNAPSHOT
にします。
addSbtPlugin("org.ensime" % "ensime-sbt" % "0.1.4-SNAPSHOT") |
.ensime
の作成をやり直します。
$ cd ~/spike-scala |
ENSIME用の.emacs
ensime-emacsのQuick Start
を読むと、.emacsの設定方法が書いてあります。
(require 'ensime) |
Emacsを起動してM-x ensime
Emacsを起動してM-x ensime
をするとエラーが出ました。
Debugger entered: (("Error in timer" ensime-attempt-connection ((:subprojects ((:name "spike-scala" $ |
まだ、がんばります。
.elcを削除する
ensime-serverのissuesをググっていると、ちょうと該当するものがありました。
1年以上、この状態のようです。。
ENSIME cannot be used when lisp code is byte compiled by MELPA [renamed] #310
原因はMELPAがelをコンパイルしてしまうのが問題らしく、.elcを削除します。
$ cd ~/.emacs.d/elpa/ensime-20131030.1503 |
再度Emacsを起動して、M-x engime
を実行すると、ようやくENSIMEが起動しました。
ENSIME ready. Death to null! |
“Death to null!” ってなに?
ensime.elによると、Scala的に励ましてくれているようです。
(defvar ensime-words-of-encouragement |
まとめ
こういったScalaライブラリのバージョン管理の複雑性を隠蔽してくれるのがTypesafe Activator
の位置づけなのだと思います。
ただ、sbtやMavenをラップしてjarを使っていることには変わりなく、Mavenの依存関係はちょっと嫌いなので、インターナルなリポジトリサーバーで全部管理しない限り、リリース後のライブラリ管理とか、ちょっとプロダクションでScalaをやる勇気はしないです。
個人でScalaのコードを書いているのはすごく楽しいのですが。