倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

いろいろ Clojure セット

JVM 上で動く関数型言語 Clojure のセットアップ、開発方法いろいろ。

準備

まず準備。

  1. こちらから clojure のアーカイブファイルをダウンロードして適当なフォルダ上に展開。 ここではバージョン 1.3.0 を使います。
  2. アーカイブを展開したフォルダを環境変数 CLOJURE_HOME に設定。 これは必須ではありませんが、説明にも便利なので設定されていることを前提に話を進めます。

Java はインストール済みとします。 試したのは Java SE 7 (jdk1.7.0_03)。 Windows 前提ヨロシク。

開発方法あれこれ

この記事では以下のような開発方法を見ていきます。

  • REPL でコーディングする
    • .bat ファイルから REPL を起動する
    • コマンド・ラインから REPL を起動する
  • Clojure ファイルを実行する
    • コマンドラインから実行する
    • REPL から実行する
  • Clojure ファイルをコンパイルする

参考

REPL でコーディングする


REPL とは read-eval-print loop とはのことだそうで、コマンドラインで1行ずつ Clojure コードを入力して実行するプログラムです。 とりあえず簡単なコードを試したい、ってときには便利なツールです。 REPL を起動するには以下の2つの方法があります:

  • .bat ファイルから REPL を起動する
  • コマンド・ラインから REPL を起動する

手軽に使うなら1つ目の方法が簡単。 REPL を起動したらあとは好きなようにコーディングしてちょ。

.bat ファイルから REPL を起動する

ダブルクリックで Jar ファイルが実行できるように設定してあれば(何か設定必要だっけな?)、%CLOJURE_HOME% フォルダ(環境変数に設定している必要なし)にある

をダブルクリックすれば REPL が起動されます。

コマンド・ラインから REPL を起動する

この方法はさっきの .bat ファイルの内容をコマンドラインで実行しよう、ってだけです。 さっきダブルクリックした Jar ファイルをクラスパスに含めて、clojure.main (クラス)を実行します:

java -cp %CLOJURE_HOME%\clojure-1.3.0.jar clojure.main

環境変数 CLOJURE_HOME を設定しておけば、どこのフォルダ上でもこの方法で実行できます。

Clojure ファイルを実行する


次は Clojure コードを書いたファイルを実行する方法。 実行するファイルは例えば以下のようなものとしましょう。

  • hello.clj
(println "Hello, Clojure world!")

まぁ、いつもの Hello world で。 実行方法として次の2つの方法を見ていきます:

  • コマンドラインから実行する
  • REPL から実行する

REPL もコマンドラインだろ、ってツッコミはなしで(笑) 

コマンドラインから実行する

まずはコマンドラインから実行する方法。 概ね、REPL をコマンドラインから実行する方法と同じですが、hello.clj (実行したいファイル)を clojure.main の後に指定しています:

java -cp %CLOJURE_HOME%\clojure-1.3.0.jar clojure.main hello.clj

REPL から実行する

次は REPL が起動されているとして、REPL 上で Clojure ファイルを実行する方法。 これには load-file 関数を使います:

(load-file "hello.clj")

Clojure ファイルをコンパイルする


最後は Clojure ファイルをコンパイルしてクラスファイルを生成する方法。 ただ、ガッツリしたプロジェクトなら、何らかの IDE かビルドツールを使った方がいいと思うので、ここではホントにコンパイルするだけってサンプルを見ていきます。 手順は

  1. ファイルを作成する
  2. REPL を起動する
  3. コンパイルを実行する

です。 REPL を起動せずにやる方法もありそうですが、あまり深入りしない方向で。

ファイルを作成する

まずはプロジェクトっぽいフォルダ構造とソースファイルの作成。 以下のような配置にします

  • BASE_DIR
    • src
      • org
        • sample
          • hello.clj
    • classes
  • BASE_DIR は適当なフォルダ
  • src フォルダはソースファイルを配置するフォルダ。 その下の org\sample はパッケージのフォルダ構造。 hello.clj は Clojure のソースファイルです。 内容は後で。
  • classes フォルダはコンパイルで生成されたクラスファイルを格納するフォルダです。

hello.clj ファイルの内容は以下のようなものとします:

(ns org.sample.hello)
(println "Hello, Clojure world!")

ns 関数によって名前空間、まぁ Java のパッケージを指定しています。 println 関数はいいでしょう。

REPL を起動する

コンパイルを REPL から実行するので REPL を起動するのですが、ソースファイルやコンパイルで生成されるクラスファイルをクラスパス上に配置したいので、Clojure の Jar ファイル以外にもいくつかのフォルダをクラスパスに指定します:

java -cp .\src;.\classes;%CLOJURE_HOME%\clojure-1.3.0.jar clojure.main

あまり複雑でない(特に単一の) Clojure のソースをコンパイルするには classes フォルダをクラスパスに含める必要はないかもしれませんが、まぁ入れておいたほうがよいでしょう。

コンパイルを実行する

REPL が起動されたら、compile 関数によって Clojure コードをコンパイルします:

(compile 'org.sample.hello)

コンパイルするパッケージをエスケープ(前に ' をつける)を忘れずに。 これで classes フォルダにクラスファイルが生成されるはずです。

まぁ通常のプロジェクトなら、コンパイルされたコードに定義されている関数を使ったり、実行可能 Jar ファイルのためにマニフェストファイルを書いたり、とかいった設定も必要でしょうが、ここでは省略。

IDE やビルドツールを使った開発環境の設定もそのうちにできればいいな。

プログラミングClojure

プログラミングClojure