[toc]
はじめに
よし, 認めよう. 私は, Eclipse フリークだった.
Eclipse ですべての開発環境の統合を夢見て, あらゆるプラグインを試した.
全 C/C++ プログラマに捧ぐ!Eclipse CDT を使う時のオススメ機能/ プラグインまとめ | Futurismo
歳をとるにつれて, 若かりし誤った考えを改めた. 真の統合開発環境は Emacs なのでは?
いや, うすうすは気づいている. Java 開発では Eclipse が最強なことくらい.
しかし, それを分かっていてあえて Emacs を使うことは美しい行為ではないか?
それは, 死を覚悟して決戦に挑む武士のように.
この記事は, そんな不安と挑戦の記録です.
Environment
<div class="outline-text-3" id="text-1-1">
<ul class="org-ul">
<li>
Linux Mint 16
</li>
<li>
Eclipe 4.3 Kepler
</li>
<li>
Emacs 24
</li>
</ul>
</div>
Java 開発環境について
まずは, Emacs における Java 開発環境を調べた.
以下の 3 つが選択肢としてある. 詳細な解説はリンク先に譲る.
JDEE
<div class="outline-text-3" id="text-2-1">
CEDET ベースのツール. あまりメンテナンスされていないようだ.</p>
<ul class="org-ul">
<li>
<a href="http://mikio.github.io/article/2012/12/23_emacsjdeejava.html">Emacs 中毒者に贈る JDEE による Java 開発環境の構築|ざる魂</a>
</li>
<li>
<a href="http://epian-wiki.appspot.com/wiki/Emacs/JDEEEmacs/JDEE%20-%20epian-wiki">http://epian-wiki.appspot.com/wiki/Emacs/JDEEEmacs/JDEE%20-%20epian-wiki</a>
</li>
<li>
<a href="http://www.emacswiki.org/emacs/JavaDevelopmentEnvironment">EmacsWiki: Java Development Environment</a>
</li>
</ul>
</div>
malabar-mode
<div class="outline-text-3" id="text-2-2">
JDEE にかわってでてきたモダンな java のメジャーモード.</p>
<ul class="org-ul">
<li>
<a href="http://d.hatena.ne.jp/nekop/20101215/1292380225">Emacs で Java を書く – nekop の日記</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/lranran123/20130404/1365088550">Emacs で Java の環境構築, CEDET と yasnippet と malabar-mode – 趣味プログラマがまれになんかしたことの記録</a>
</li>
</ul>
</div>
Eclim
<div class="outline-text-3" id="text-2-3">
Emacs から Eclipse をつかう. その発想があったか!</p>
<ul class="org-ul">
<li>
<a href="http://sleepboy-zzz.blogspot.jp/2014/02/emacsjava_22.html">memo: Emacs で Java の設定</a>
</li>
<li>
<a href="http://d.hatena.ne.jp/clairvy/20100630/1277854580">Emacs-Eclim を試す – クラなんとか or くらなんとか or cla なんとかの日記</a>
</li>
</ul>
</div>
選定する
<div class="outline-text-3" id="text-2-4">
<p>
選ぶに当たって重視する機能は,
</p>
<ul class="org-ul">
<li>
JUnit 連携機能
</li>
<li>
リファクタリング
</li>
<li>
コード補完・タグジャンプ
</li>
<li>
Android 開発連携
</li>
</ul>
<p>
malabar-mode に挑戦したが, maven がよくわからずに挫折.
</p>
<p>
なので, eclim を試す.
</p>
</div>
開発環境を整える
eclim
<div class="outline-text-3" id="text-3-1">
インストーラがあるので, 指示にしたがって入れればよい.</p>
<ul class="org-ul">
<li>
<a href="http://eclim.org/install.html">Download / Install – eclim (eclipse + vim)</a>
</li>
</ul>
</div>
eclim-emacs
<div class="outline-text-3" id="text-3-2">
emacs から利用するためには, eclim-emacs を入れる.</p>
<ul class="org-ul">
<li>
<a href="https://github.com/senny/emacs-eclim">senny/emacs-eclim</a>
</li>
</ul>
</div>
使い方
設定ファイルに以下を追記.
[sourcecode language=”emacs-lisp” title=””]
(require ‘eclim)
(require ‘eclimd)
;; java-mode で有効
(add-hook ‘java-mode-hook ‘eclim-mode)
[/sourcecode]
M-x start-eclimd で eclipse を eclim デーモンとして起動.
M-x eclim-project-mode で workspace にあるプロジェクト一覧が表示される.
適当にソースを選んでごにょごにょ. 詳しくは, README 参照. まだ, あんまりいじくりまわしていない.
M-x stop-eclimd で eclipse を eclim デーモンを終了.
このページがとても詳しいのでリンクをはっておきます.
- [[http://www.skybert.net/emacs/java/][.:: skybert.net :: emacs
- java ::.]]
auto-complete/company-mode で自動補完
<div class="outline-text-3" id="text-4-1">
<p>
auto-complete/company-mode で eclipse の補完機能と連携できる.
</p>
<p>
[sourcecode language=”emacs-lisp” title=””]<br /> ;; regular auto-complete initialization<br /> (require ‘auto-complete-config)<br /> (ac-config-default)<br /> ;; add the emacs-eclim source<br /> (require ‘ac-emacs-eclim-source)<br /> (ac-emacs-eclim-config)
</p>
<p>
;; for company-mode<br /> ;; (require ‘company-emacs-eclim)<br /> ;; (company-emacs-eclim-setup)<br /> [/sourcecode]
</p>
</div>
タグジャンプ
<div class="outline-text-3" id="text-4-2">
<p>
‘eclim-java-find-references で定義元にジャンプできる. しかし, gtags をしてもいい.
</p>
<p>
[sourcecode language=”elisp” title=””]<br /> (define-key eclim-mode-map (kbd "C-c C-e l") ‘eclim-java-find-references)<br /> [/sourcecode]
</p>
</div>
Program 起動
<div class="outline-text-3" id="text-4-3">
<p>
org.eclim.java.run.mainclass にメインクラスを設定.
</p>
<ul class="org-ul">
<li>
<a href="http://eclim.org/vim/java/java.html">Java / Jps – eclim (eclipse + vim)</a>
</li>
<li>
<a href="http://eclim.org/vim/settings.html">Settings – eclim (eclipse + vim)</a>
</li>
<li>
<a href="http://stackoverflow.com/questions/7394811/eclim-what-to-set-org-eclim-java-run-mainclass-to">vim – Eclim – What to set org.eclim.java.run.mainclass to? – Stack Overflow</a>
</li>
</ul>
<p>
設定方法は, .settings/org.eclim.prefs というファイルを作成して,以下を書き込む
</p>
<p>
[sourcecode language=”text” title=””]<br /> org.eclim.java.run.mainclass=<Class Name><br /> [/sourcecode]
</p>
<p>
しかし, これだけでは動作しなかった. main メソッドの場所で eclim-run-class を実行すると, ようやく eclim 経由で java program が起動.
</p>
<p>
起動は, eclim の機能を利用するのではなくて, 別のビルドツールを利用したほうがいいな.
</p>
</div>
JUnit を動かす
<div class="outline-text-3" id="text-4-4">
<p>
これで JUnit が動いた. これはいいな.
</p>
<ul class="org-ul">
<li>
<a href="https://groups.google.com/forum/#!topic/emacs-eclim/Bj0kyZ2mUSk">https://groups.google.com/forum/#!topic/emacs-eclim/Bj0kyZ2mUSk</a>
</li>
</ul>
<p>
[sourcecode language=”elisp” title=””]<br /> (defun eclim-run-test ()<br /> (interactive)<br /> (if (not (string= major-mode "java-mode"))<br /> (message "Sorry cannot run current buffer."))<br /> (compile (concat eclim-executable " -command java_junit -p " eclim–project-name " -t " (eclim-package-and-class))))<br /> [/sourcecode]
</p>
</div>
最後に
使いこなすには, 時間がかかりそうな.
今は, まだ eclipse のほうがいいと思っている. いや, 負けるな Emacs!
.emacs の設定
<div class="outline-text-3" id="text-5-1">
<p>
最後に設定を張り付けておく.
</p>
<p>
[sourcecode language=”emacs-lisp” title=””]<br /> (require ‘eclim)
</p>
<p>
;; java-mode で有効<br /> (add-hook ‘java-mode-hook ‘eclim-mode)
</p>
<p>
;; eclim daemon<br /> (require ‘eclimd)
</p>
<p>
;; regular auto-complete initialization<br /> (require ‘auto-complete-config)<br /> (ac-config-default)<br /> ;; add the emacs-eclim source<br /> (require ‘ac-emacs-eclim-source)<br /> (ac-emacs-eclim-config)
</p>
<p>
;; for company-mode<br /> ;; (require ‘company-emacs-eclim)<br /> ;; (company-emacs-eclim-setup)
</p>
<p>
;; Displaying compilation error messages in the echo area<br /> (setq help-at-pt-display-when-idle t)<br /> (setq help-at-pt-timer-delay 0.1)<br /> (help-at-pt-set-timer)
</p>
<p>
;; add keybinds<br /> (define-key eclim-mode-map (kbd "C-c C-e p q") ‘eclim-problems)<br /> (define-key eclim-mode-map (kbd "C-c C-e p o") ‘eclim-problems-open)<br /> (define-key eclim-mode-map (kbd "C-c C-e p n") ‘eclim-problems-next)<br /> (define-key eclim-mode-map (kbd "C-c C-e p p") ‘eclim-problems-previous)<br /> ;; Re-map `eclim-project-create’ to C so that I can use c for<br /> ;; `eclim-problems-correct’<br /> (define-key eclim-mode-map (kbd "C-c C-e p C") ‘eclim-project-create)<br /> (define-key eclim-mode-map (kbd "C-c C-e p c") ‘eclim-problems-correct)<br /> (define-key eclim-mode-map (kbd "M-.") ‘eclim-java-find-declaration)<br /> ;; find-references = list-callers.<br /> (define-key eclim-mode-map (kbd "C-c C-e l") ‘eclim-java-find-references)
</p>
<p>
;; skip warning error<br /> (setq compilation-skip-threshold 2)
</p>
<p>
(setq eclim-eclipse-dirs "/opt/eclipse/kepler")<br /> (setq eclim-executable "/opt/eclipse/kepler/eclim")<br /> (setq eclimd-executable "/opt/eclipse/kepler/eclimd")<br /> (setq eclimd-default-workspace "/mnt/win/src/coursera")<br /> [/sourcecode]
</p>
</div>