独りAdvent Calendar 第2弾として、Clojureについて書いていこうと思います。
Clojureは私自身最近始めたばかりの言語で、1ヶ月ほど合間を見ながら少しずつやってきた言語です。
そのため、あまりよいコードになっていなかったり、Clojureっぽくない書き方になっている部分も多々あると思います。
そのあたりはご了承ください。
そして、今回はClojureを使う上で私が素晴らしいと思ったClojure用のビルドツール、leiningenについて書いていきます。
それなりにleiningenのGithubにも詳しく分かりやすく説明されていました。
そのため詳細な使い方ではなくさっくりと、初歩的な簡単な使い方を紹介したいと思います。
まずはインストール
インストールはとても簡単で、
まずhttps://raw.github.com/technomancy/leiningen/stable/bin/leinからシェルスクリプトをダウンロードします。(Windowsであれば、https://raw.github.com/technomancy/leiningen/stable/bin/lein.batからバッチファイルをダウンロードする。)
このダウンロードしたシェルスクリプト、またはバッチファイルをパスの通ったところに配置します。
次に、シェルスクリプトに実行権限を与えます。(chmod 755 /path/to/lein など)
バッチファイルの場合は必要なさそうです。
最後に
lein self-install
とすれば、勝手にインストールされます。
プロジェクトを作成する
早速ですが、Clojureのプロジェクトをleiningenで作ってみましょう。
lein new project-name
とすると、project-nameというディレクトリがカレントディレクトリに作成されます。
ディレクトリ下は次のような構成になっていると思います。
project-name │ .gitignore │ project.clj │ README │ ├─src │ └─project_name │ core.clj │ └─test └─project_name └─test core.clj
このうち、src/project-name/下にソースコードを置き、test/project-name/test/下にテストコードを置きます。
またleiningenでビルドする際にどのようにビルドするか記述するのが、project.cljです。
Hello Worldなプロジェクトを作る
このままでは何もないので、このプロジェクトでHello Worldを表示するスタンドアロンjarファイルを作成してみましょう。
先ほどの要領でプロジェクトを作成します。
lein new helloworld
まず、ClojureでHello Worldを書いてみます。
src/helloworld/core.clj
(ns helloworld.core (:gen-class)) (defn -main [& args] (println "Hello World"))
ここで、スタンドアロンjarファイルを作成するために、2つの事を行っています。
1つは
(ns helloworld (:gen-class))
です。
クラスを作成するように指定しています。これはもちろん、Javaのクラスを作ってもらわないといけないからですね。
もう1つは
(defn -main [& args] ...)
です。
この-mainという名前を持つ関数は、スタンドアロンjarのエントリポイントとして機能します。
コードは書けたので、次にビルド方法を指定します。
project.clj
(defproject helloworld "1.0.0-SNAPSHOT" :description "FIXME: write description" :dependencies [[org.clojure/clojure "1.3.0"]] :main helloworld.core)
今回はほとんど書き変えていません。最後に
:main helloworld.core
を追加しているだけです。これによって、helloworld.core名前空間下の-main関数をスタンドアロンjarのエントリポイントとして指定できます。
それではビルドして、スタンドアロンjarファイルを作成してみます。
プロジェクトの一番上のディレクトリに行って、ターミナルで
lein uberjar
とすると、プロジェクトのディレクトリ下にhelloworld-1.0.0-SNAPSHOT-standalone.jarというjarファイルが作成されます。
java -jar helloworld-1.0.0-SNAPSHOT-standalone.jar
と実行すれば、
Hello World
と表示されるはずです。
このように簡単にビルドができるようになるleiningenはClojureの開発ではとても役に立つと思います。
他にもテストの実行や必要なjarファイルの取得などもleiningenでできるようになっています。
もっと詳しいことはtechnomancy / leiningenのREADMEや、Wikiを参考にしてみてください。