What is it, naokirin?

leiningenでClojureをビルドしよう

独り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

まず、ClojureHello 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を参考にしてみてください。