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ファイルをダブルクリックすると、GUI(Javaの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)!
たまたまこれを書いている最中、『「日本語形態素解析器 MeCab を Clojure から呼ぶ方法」書きました --- Using MeCab the Japanese Morphological Analyzer from Clojure (http://lilyx.net/2011/07/30/using-mecab-the-japanese-morphological-analyzer-from-clojure/)』という素晴らしい記事が公開されました。MeCabをJavaから叩けることにより、Clojureを用いて自然言語処理アプリケーションを作成する敷居が随分下がったと思います。また、次の様なClojureをNLPで用いる、簡潔かつ明確な利点についてのコメントもあります。
@mhagiwara Masato Hagiwara
NLP に向いているかどうかは分かりませんが、個人的に言語仕様(というか Lisp)が好きなのと、並列計算がし易いのと、Java の膨大な資産を活用できる点に惚れ込んでいます。 RT @nokuno ClosureでNLPって向いてるの?
http://twitter.com/#!/mhagiwara/status/97152499454185472
Clojureでどんどん実用的なアプリケーションを作成、公開して行きましょう!