2012年12月8日土曜日

eMacsでscaLaを書く準備

この投稿はLL/ML Advent Calendarの12/8向けです。

動機

Scala基礎勉強会にて、Scalaを書くのにemacsを使っている人が多数いたので、
エクなんとかというエディタのことはこの際忘れて、
eMacsでscaLaを書くことに挑戦しようと思い、設定方法などを記事にする次第。


環境

  • CentOS 6.3(64bit)
  • GNU emacs 24.2.2
これらは既に入っている前提で。

で何を入れるの?

scala-mode2

まずは、scala-mode2という、Scala用のメジャーモードを使用します。
scala-mode2は下記の機能を提供してくれます。
  • インデント
  • シンタックスハイライト
  • モーションコマンド
※2012年12月8日現在のステータスとしては、
  • インデント:完成(finalized)
  • ハイライト:仕掛り中
  • モーションコマンド:emacsの標準的なものについては対応していますが、Scalaに特化したものはまだ対応できていない
とのこと。

scala-mode2はGNU emacsの24.2を対象に開発されています。
24より過去にはない機能を使っているそうなのでご注意を。

設定手順

昔はScala本体と一緒に配布されて気もしますが、今はGithubからダウンロードするようです。

ファイルをダウンロードします。
git clone git://github.com/hvesalai/scala-mode2.git

パスなどの情報をemacsの初期化ファイル(自分の場合は~/.emacd.d/init.el)に書き込んでやります。
(add-to-list 'load-path "/path/to/scala-mode2/")
(require 'scala-mode)

基本的にはこれだけです。Emacsを起動して、.scalaファイルを開くと、Scalaモードになっていると思います。


シンタックスハイライトが効いていますね。


ENSIME

が、これだけだとScalaをばりばり書くには物足りません。
やはり補完とかリファクタリングしたいですよねー。
ということでENSIMEを使います。
ENSIMEとは"ENhanced Scala Interaction Mode for Emacs"の略称とのこと。
えんざいむ、と読むそうな。

ENSIMEを導入することにより、
  • ファイルを保存するたびにコンパイルエラーを確認できる
  • 補完
  • 基本的なリファクタリング
  • シンボルのインスペクション
  • パッケージ/型のブラウジング
  • デバッグ(※ステータスはwork in progress)
などができるようになります。

emacsの対象バージョンは22以降。23が推奨されています。
が、私が試している限り、24.2でも問題なく動いています。


設定手順

Downloadサイトから適切なファイルを取得します。

展開後、emacsの初期化ファイルに下記を追記します。
(add-to-list 'load-path "ENSIME_ROOT/elisp/")
(require 'ensime)

(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)

SBTから設定ファイルを作成


ENSIMEを使うには、設定ファイルを作成する必要があります。
設定ファイルを作成する方法は以下の2つの方法が用意されています。
  1. ウィザード形式で対話的に作成する
  2. SBTプロジェクトにて、ENSIMEプラグインを使って生成する
ここでは、2の方法を採用します。
今回は、Play Frameworkで新規作成したプロジェクトについて、ENSIMEの設定ファイルを生成してみます。

※Play Frameworkのバージョンは、2.1-RC1を使います。

{プロジェクトルート}/project/plugins.sbt に下記の通り追記します。

addSbtPlugin("org.ensime" % "ensime-sbt-cmd" % "0.1.0")

その後、プロジェクトルートにて
play
ensime generate

とやるとENSIMEの設定ファイル(.ensime)がプロジェクトルートに作成されます。

ENSIMEの有効化


{プロジェクトルート}/app/controllers/Application.scala をemacsで開いてみます。

右下に[ENSIME: No Connection]というのが見えますね。


M-x ensime

としてやるとENSIMEの機能を有効にできます。


ENSIMEを使った際の画面イメージは?


totoshiさんが
EmacsでつくるScala開発環境 後編(ENSIME)
という分かりやすいポストを書かれているのでご参照ください。



最後に


正直、私のemacs力が低いため、未だemacsでScalaをバリバリ書ける!という状態ではないのですが、
だんだんと慣れていけたらなぁと思います。

明日は@youku_sさんと@kotashanさんが担当です。

0 件のコメント:

コメントを投稿