• 作成:

Emacs, ENSIMEでScala, Play開発環境を作る

複数回詰まったのでメモ.

ひっかかったところだけ書くので他は公式ドキュメント見てください.

Emacsへのインストール

ENSIMEはpackage.elでインストールできます.

scala-modeなどもついてくるのでそれ以外はインストールしなくて良いです.

依存ライブラリがオプショナルなのでバイトコンパイル時にエラーが出ますが気にしない.

プラグインのインストール

~/.sbt/0.13/plugins/plugins.sbt

addSbtPlugin("org.ensime" % "sbt-ensime" % "2.6.0")

と書きます.

私の環境ではまだsbt v1ではない.

ENSIMEは謎のバージョン付きディレクトリを作るので下のリンクに従って無効化しておきましょう.

ScalaをAtomで開発しやすくする | TIS NOTE

~/.sbt/0.13/global.sbtに以下のようなものを書きます.

import org.ensime.EnsimeKeys._

ensimeIgnoreMissingDirectories := true

you have multiple scala versionsというエラーが出る

プロジェクトのScalaコンパイラとシステムに入っているScalaコンパイラのバージョンが一致しないとダメ.

プロジェクトのScalaコンパイラのバージョンを確かめて, ensime.sbtというファイルに以下のように書き込みます.

ensimeScalaVersion in ThisBuild := "2.11.7"

Playのテンプレート参照でエラーになる

view.html.foo

みたいなコードでエラーが出ます.

Playのテンプレートのコードへの展開でエラーになるっぽいですね.

これは色々情報が古くて苦労しました.

IDE - 2.6.xは参考になりませんでした.

sbt ensimeConfigで作るのはどうもPlayの情報が取得できないのでだめです.

playコマンドを使うというのはplayコマンドは廃止されているのでだめです.

activatorコマンドも廃止されているのでだめです.

gen-ensimeコマンドも廃止されています.

色々公式ページsbt · ENSIMEを見ながら動かした結果, sbt ensimeConfig test:compileしないと情報が作られないということが分かりました. Scala初心者であることも手伝って一度コンパイルしないと情報が作られないということに思い当たりませんでした. HaskellのInteroとかはそんなこと無かったので.

Flycheckに対応していない(未解決)

ENSIMEはFlycheckでエラー情報を出しません.

これは政治的問題らしいです…

別にFlycheckにこだわるつもりは全く無いのですが, エラー表示がリストになってないというのは普通に辛いです. 一々ポイントに移動してキーバインドでecho areaにエラー情報を表示するというのは手間がありやってられないですし, エラーを確認しながら編集して治すという作業も行えません.

政治的問題ならば私が流し込む外部プログラムを書けば解決しそうではあります. 頑張って書きますか…?

Playのテンプレートが生のHTMLを名乗っているのでシンタックスエラーになる(未解決)

Playのテンプレートはテンプレートのくせに生のHTMLを装っています. よってHTMLチェックツール(tidy-html)でエラーになります. また型チェックも行えません.