読者です 読者をやめる 読者になる 読者になる

nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

EmacsでJavaを書く

java emacs

日常的にJavaを書く人たちのたぶん99%くらいはEclipseNetBeansIntelliJ IDEAといったIDEを利用しているであろうと思われる現代において今日も元気にEmacsJava書いている絶滅危惧種のnekopです。Emacs Advent Calendar jp: 2010の12月15日分のエントリは、EmacsJavaを書くというあまり一般的ではないであろうトピックについてさらっと紹介します。昨日はkwappaさんでした。

お仕事ではRed Hatという会社でJBossというオープンソースソフトウェアのソフトウェアエンジニアをしています。詳細はばっさり省きますが、それなりの量のソースコードを毎日読み書きすることになります。それなりの量、とは具体的にどのくらいかというのは数字で見たほうが感覚がつかみやすいと思うのでちょっと調べてみましょう。

個人的にソースコードは~/usr/srcというディレクトリに置くようにしていて、それらはほぼ全てMavenというビルドツールを利用するJavaのプロジェクト群であり、Mavenでは各プロジェクト(ソースツリー)にsrcというディレクトリが一個含まれている構成になっているので、srcディレクトリの数と.javaファイルの数をカウントしてみます。

$ find . -name 'src' -type d | wc -l
2150
$ find . -name '*.java' | wc -l
145804

2150プロジェクト、Javaファイル数は15万弱くらい。これらの読み書きの早さが仕事の生産性にかなり大きく影響します。これら全てについて5秒以内にアクセスするという要件を考えたときに、上に挙げたようなグラフィカルなIDEでもできるのかもしれませんが、たぶん面倒ですよね。というわけでJavaでも変わらずEmacsです。

Emacs上でJavaの読み書きに使っているのは主に以下の3つです。

anything.elは他の方も話題に挙げてるので説明不要だと思います。これで上の5秒以内アクセスを実現できます。

malabar-modeはJava用のメジャーモードです。一昔前はEmacsJavaと言えばJDEEを利用するのが一般的だったのですが、アノテーションジェネリクス、拡張for文などJava 5以上の構文などに全然対応していないというメンテナンス状況です。一方、malabar-modeはMaven 3(ほぼMaven 2互換)とJava 6以上に依存し、ほとんどのケースでストレスなくJavaプログラミングを楽しむことができます。また、malabar-modeではJava側のインスペクションや連携のためにGroovyがインタフェースとして組み込まれています。Emacs上でGroovy Shellも起動されるので、ライブラリの挙動確認などはこのバッファ上でちょちょいとできるのも良いポイントです。

一番良く使う関数はC-c C-v C-yのmalabar-jump-to-thing、キャレットがのっかっているメソッドやらクラスやらを探してジャンプしてくれます。飛べない場合はanything.elやack(find-grep)でどうにかします :-)

興味がある人がいるかもしれないので、malabar-modeのinteractive関数の一覧を載せておきます。

malabar-abbrevs-create-test 		malabar-clear-typecache
malabar-compilation-minor-mode 		malabar-compile-file
malabar-compile-file-silently 		malabar-electric-colon
malabar-extend-class 			malabar-find-file-in-project
malabar-groovy-mode 			malabar-groovy-rerun-last-compilation
malabar-groovy-reset-compiler-notes 	malabar-groovy-restart
malabar-groovy-start 			malabar-groovy-stop
malabar-implement-interface 		malabar-import-all
malabar-import-and-unqualify 		malabar-import-group-imports
malabar-import-one-class 		malabar-import-sort-imports
malabar-insert-getset 			malabar-install-project
malabar-jump-to-thing 			malabar-mode
malabar-mode-menu 			malabar-override-method
malabar-refactor-extract-constant 	malabar-run-all-tests
malabar-run-junit-test 			malabar-run-maven-command
malabar-run-test 			malabar-show-javadoc
malabar-update-package 			malabar-visit-corresponding-test
malabar-visit-project-file

最後のyasnippetJava特有の少し冗長なコードを書く時間を大幅に短縮してくれます。Youtubeyasnippetのデモビデオがあります。自分が使っているJava向けのsnippetsはGithub上のyasnippet-java-modeというところに置いてあります。

というわけで主にmalabar-modeを中心としたJava環境の紹介でした。明日はid:oh_cannot_angelさんです。

そうそう、Red HatではLinuxJava EERuby/JRubyのエンジニアを募集しております。詳細はTwitterで"@nekop のみにいこうぜ"してください。