2013年10月13日日曜日

NTEmacsでEmacs Code Browserを使ってIDE風の表示に

久々の投稿です。前回の投稿から仕事も変わり、製造業の社内エンジニアになりました。またソフトウェア開発や情報インフラ運用に触れる時間が増えたので、役立ちそうな取り組みを少しずつ投稿していきたいと思っています。

現在の仕事で使っている言語はJavaで、Eclipseを用いて開発しています。Gradleというビルドツールを使うように数ヶ月前から変更し、これからガンガン開発するぞ!という矢先。なんとEclipseのGradleプラグインが頻繁にフリーズするようになってしまいました...orz

原因の調査が必要ですが、今まで利用していたWindows XPのマシンをリース更新でWindows 7に変更した直後のこと。Eclipse依存を断ってビルドツールに乗っければ環境をもっとポータブルにできるぞ!と意気込んでGradle化したけど、やっぱり甘かったですね...: P

しかし、その努力がムダだったわけじゃなくて、Eclipseから切り離してもテキストエディタ+コマンドプロンプト(からGradleを叩く)、で開発ができるようになりました。手を止めたくないのでしばらくEclipseなしでも「おー、できるじゃん!」って思いながら開発を進めていましたが、でもやっぱり不便!

せめてソースコードの階層くらいIDEっぽく表示したい!という思いから、「Emacsで何とかしてみよう!」と思い至りました。前置きが長くなりましたが、以下、その取り組みをメモ的に記載。

[やったこと(やりたいこと)]

Windows環境でEmacsを導入し、Emacs Code Browser (ECB)を導入した。
(今後さらにmalabar-modeを導入して、もう少し便利に使いたい)

[導入した環境]

  • OS: Windows 7 (32bit版)
  • Emacs: NTEmacs (24.3.1) - ここのビルドを使わせてもらいました
  • ECBプラグイン: https://github.com/alexott/ecb (最新のCEDETで動作するよう手を加えた版 - 後述)

[手順]

NTEmacsを任意のフォルダに展開(今回はD:\emacsとして話を進める)

ここで、ECBの本家版をD:\emacs\site-lisp に展開してmake、とするが、下記エラーで失敗する。要は新しい環境に対応していないとのこと。
ECB 2.40 - Error: ECB can only be used with cedet [1.0pre6, 1.0.9]! Please install it and restart Emacs!
調べると、下記のチケットが見つかり、上記で記載した最新版対応のECBプラグインがあるとのこと。上記ECBプラグインが紹介されているので、そっちを試すことに。
https://github.com/alexott/ecb の中身を落として、D:\emacs\site-lisp\ecb-2.40 として展開。さらに、%APPDATA% (Windows 7の場合 C:\Users\(Windowsユーザー名)\AppData\Roaming のようなパスになる)に .emacsファイルを作成、下記の内容を記載して起動した。
(add-to-list 'load-path "d:/emacs/site-lisp/ecb-2.40")
(require 'ecb)
byte-compileをするため、D:\emacs\site-lisp\ecb-2.40\make.bat の中身を編集。47行目あたりから、下記のようにパスを設定。(emacs.exeのバイナリパスをEMACSとして設定し、NTEmacs組み込みのCEDETを指定)
set EMACS=D:/emacs/bin/emacs.exe
set CEDET=../../lisp/cedet
さらに、make.batのcedet.elへのパス指定は単体配布版のディレクトリ構造を想定しているようです。Emacs組み込みのCEDETはcommonディレクトリがなかったので、
echo (load-file "%CEDET%/common/cedet.el") >> ecb-compile-script-init
となっていたところ、common/の部分を削除して、下記のようにパス合わせをしたところ、makeが完了できました。
echo (load-file "%CEDET%/cedet.el") >> ecb-compile-script-init

[起動]

Emacsを立ち上げて、
M-x ecb-activate
を実行すればOK。ECBは自動起動させたかったので、READMEに書いてあった 
(require 'ecb-autoloads)
も試したけれど、書いただけではうまく動作しませんでした。こっちはしばし保留。

[スクリーンショット]

左側がIDE風になっています。