Emacsでscalaを書く

IntelliJ IDEAへの不満

ここ一ヶ月と少し、IntelliJ IDEAでscalaのコードを書いた。IntelliJ IDEAでscalaのコードを書くのは多分メジャーで、設定をあまり頑張らなくても型の表示や補完をしてくれる。scalaに慣れていない人にとってはありがたいサポートだが、慣れてくると不満が出てくる。例えば以下のようなことだ(書いていて思うけど、完全に老害っぽい感じだ)。

  • emacsキーバインド「っぽく」するアドオンがあるが、「っぽく」であって完全にemacsキーバインドというわけではないので、あれがないこれがないという状態になる
    • キーバインドを追加すればできるようになるが、無限にあるような気分がして、安心できない
  • git grepの結果をエディタでそのまま開くのは非常によく使うので、エディタの中からさくっと引けるようにしておきたいが、helm-git-grepのようなことができない
    • helmやanythingっぽいインターフェイスがないのは辛い
  • terminalとIDEAを行ったりきたりする必要があるが、terminalだけで完結しないため何度もアプリケーションを切り替えないといけない
    • emacs -nwで起動して、iTerm2をCtrl-iで常に呼び出せるようにしていたので、IDEAのためにアプリケーションの切り替えをするのはダルすぎた...
    • IDEAの呼び出しにホットキーを割り当ててみたが、いいキーの数は限られている
    • gitのcommitはmagitが最高なので、結局emacsは開かないといけない

コードが書けないといった致命的なものではないが、小さいことも積もってくると不満になってくる。

ensimeの導入

IDEAを捨ててEmacsにすぐ戻ればいいのだが、IDEAのような型の情報の補完は非常に強力だったので、そう簡単にEmacsに戻ってこれなかった。Emacsでもscalaのコードの型を表示するensimeというツールがあって、これに頼ることにした。同僚のid:shiba_yu36さんが導入記事を書いていたので、それを真似した。

小さいscalaプロジェクトだと使い慣れたemacsの環境で型情報の恩恵を受けることができて快適だったが、今やっている仕事のコードサイズだと補完に2-3秒くらいかかってたまにemacsが固まる状況であった。そのため、しばらくemacsとIDEAを行ったり来たりしていたが、auto-completeでの補完を我慢するとEmacsでもそれなりにscalaが書けるようになった(補完はできないが、symbolの型をminibufferに出したり、定義元にすぐ行けるといった必要なことはできる)。これで何とか生きていける...。

使っているキーバインド

色々あるけど、普段使うのはそんなに種類が多くないのでメモっておく。

キーバインド 意味
M-. 定義元にジャンプ
M-, ジャンプする前の位置に戻る
C-c C-c c 現在のファイルを型チェック
C-c C-c c 現在のファイルを型チェック
C-c C-v t カーソル位置のsymbolの型をminibufferに表示
M-n 現在のバッファで次のcompilation noteにジャンプ
M-p 現在のバッファで前のcompilation noteにジャンプ

余談

最近の若者はEmacsじゃなくてAtomを使うらしいので、この際Atomに乗り換えようとしましたが、あえなく失敗した。手がEmacsに侵食されている。

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)

Emacs実践入門 ?思考を直感的にコード化し、開発を加速する (WEB+DB PRESS plus)