Clojureのビルドツール"Leiningen"を使ってみた

 LeiningenはClojureの標準的な総合ビルドツールで、単体で動作するjarファイルを簡単に吐けたり、依存関係を適切に自動設定してくれたりと何かと便利です。Leiningenは簡単にインストールできますし、ついでにClojureも一緒に入れてくれるので、色々設定してClojure単体でインストールするより作業は楽です。
 この記事ではLeiningenをインストールし、ダブルクリックでGUIが立ち上がるjarファイル作成するところまでをご紹介したいと思います。
なお、実行環境はUbuntu10.10です。
(※Ubuntu10.10以前だと、標準ではopenjdk-6がインストールされているかもしれません。事前にsun-java6-jdkをインストールする必要があります)


1.Leiningenのインストール
 https://github.com/technomancy/leiningen/blob/master/README.md
Download the script.をダウンロードする。ダウンロードしたleinファイルをPATHの通ったディレクトリに置き、実行権限を付与します。
・PATHの設定
 PATHが通っているディレクトリは、ターミナルで"echo $PATH"とコマンドを打てば表示されます。今回は/userName/LeiningenというディレクトリにPATHを通したかったので、PATH=$PATH:/userName/Leiningen"とコマンドを打ってPATHを通しました。
・プログラムの実行権限付与
 実行権限を付与するコマンドを打つか、Ubuntuであれば、leinを右クリック→プロパティ→アクセス権→「実行:□プログラムとして実行できる」にチェックを入れると、プログラムとして動作させることができます。ここまでの設定が終われば、"lein self-install"とコマンドを打つことによって、Leiningenが/userName/.leinディレクトリにインストールされます。
※ディレクトリ名の先頭に.がついているディレクトリは隠しディレクトリです。Ctrl + Hか、メニューバーから表示→□隠しファイルを表示する、にチェックすることによって表示されます。
ここで"lein version"とコマンドを打って、Leiningenのバージョンが確認出来たら成功です。(2011/7/30現在、Leiningen 1.6.1がインストールされます)


2.プロジェクトの作成
 jarファイルをダブルクリックすると、GUIJavaのSwingを利用)で"hello Clojure!"とダイアログを出すアプリケーションを作成してみましょう。
lein new [プロジェクト名]で新規プロジェクトを作成することが出来ます。このプロジェクト単位でビルドします。ここではMyTestプロジェクトを作成するために"lein new MyTest"とコマンドを打ちました。すると/userName/LeiningenディレクトリにMyTestディレクトリが作成されます。/userName/Leiningen/MyTest/src/Mytestにcore.cljが作成されているはずです(出来ていなければ、何か設定がおかしい)。このcore.cljをエディタで開き、次のコードを書いて保存してください。

(ns MyTest.core
  (:gen-class))

(defn -main [& args]
  (. javax.swing.JOptionPane (showMessageDialog nil "hello Clojure!")))

コードをざっくり読んでみると、main関数でjavax.swingのメセージダイアログを呼ぶ処理をしていますね。
 次に、/userName/Leiningen/MyTest/project.cljを開き、次のコードを書いて保存してください。

(defproject MyTest "userName"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.2.1"]
               [org.clojure/clojure-contrib "1.2.0"]]   
  :main MyTest.core)

このコードは、MyTest.coreファイルのmain関数をエントリポイントとしてMyTest.jarを作成するものです。
これで設定は完了です。コンパイルしましょう。
今/userName/Leiningen/がカレントディレクトリだと思いますが、/userName/Leiningen/MyTest/に降りて、"lein uberjar"とコマンドを打ちます。するとMyTest-userName-standalone.jarが生成されます。
" java -jar MyTest-userName-standalone.jar"とコマンドを打ち、無事"hello Clojure!"というダイアログが表示出来たのを確認出来たら終了です。お疲れ様でした!


 如何でしたか?結構簡単にClojureから単体実行可能ファイルが生成できますね。Windowsなどでは、生成されたjarファイルをダブルクリックするだけで実行できるため、配布も実行も簡単です。もちろんJavaですから、例えばUbuntuで生成したアプリケーションがWindowsでもMacでも動きます(と信じましょう:D)!


 たまたまこれを書いている最中、『「日本語形態素解析MeCabClojure から呼ぶ方法」書きました --- Using MeCab the Japanese Morphological Analyzer from Clojurehttp://lilyx.net/2011/07/30/using-mecab-the-japanese-morphological-analyzer-from-clojure/)』という素晴らしい記事が公開されました。MeCabJavaから叩けることにより、Clojureを用いて自然言語処理アプリケーションを作成する敷居が随分下がったと思います。また、次の様なClojureNLPで用いる、簡潔かつ明確な利点についてのコメントもあります。

@mhagiwara Masato Hagiwara
NLP に向いているかどうかは分かりませんが、個人的に言語仕様(というか Lisp)が好きなのと、並列計算がし易いのと、Java の膨大な資産を活用できる点に惚れ込んでいます。 RT @nokuno ClosureでNLPって向いてるの?
http://twitter.com/#!/mhagiwara/status/97152499454185472

Clojureでどんどん実用的なアプリケーションを作成、公開して行きましょう!