(-> % read write unlearn)

All opinions expressed are solely my own and do not express the views or opinions of my employer.

Clojurescript QuickStart #2

前回の記事の続きで、Nodeで動かすところをやる。

Node.js

Node.jsでREPLを動かすためのスクリプトを作る。

touch node_repl.clj

中身は以下のように書き込む。

(require 'cljs.repl)
(require 'cljs.build.api)
(require 'cljs.repl.node)

(cljs.build.api/build "src"
  {:main 'hello-world.core
   :output-to "out/main.js"
   :verbose true})

; ここを cljs.repl.browser/repl-env から cljs.repl.node/repl-env に変更しただけ。
(cljs.repl/repl (cljs.repl.node/repl-env)
  :watch "src"
  :output-dir "out")

実行する。

rlwrap java -cp cljs.jar:src clojure.main node_repl.clj

依存関係

reactを使ってみる。

まずは、reactのjarをプロジェクトのルートにダウンロード

curl -O https://clojars.org/repo/cljsjs/react/0.12.2-8/react-0.12.2-8.jar

続いて、src/hello_world/core.cljsを以下のように、reactのライブラリをロードするように書き換える。

(ns hello-world.core
  (:require cljsjs.react))

(enable-console-print!)

(println "Hello React!")

実行する。

java -cp cljs.jar:src:react-0.12.2-8.jar clojure.main build.clj

ブラウザでindex.htmlを開いて、コンソールにhello react!と表示されていればうまくいっている。

複数のjarを依存に含めたい場合は、libというディレクトリを作って、そこに放り込み、ワイルドカードでそれらを指定するという方法がある。

mkdir lib
mv react-0.12.2-8.jar lib/

前回の続きの内容を含めて、ここまでで以下のようなファイル構成になっている。

➜  hello_cljs tree -I "out"
.
├── build.clj
├── cljs.jar
├── index.html
├── lib
│   └── react-0.12.2-8.jar
├── node_repl.clj
├── release.clj
├── repl.clj
├── src
│   └── hello_world
│       └── core.cljs
└── watch.clj

3 directories, 9 files

以下のようにして実行できる。

java -cp 'cljs.jar:lib/*:src' clojure.main build.clj

ここまでで作った内容は githubにあげた。jarまでcommitすると重いので、jarは除いている。

javaコマンドからビルドする所から学べて良いチュートリアルだったと思う。しかし、ちょっと長かった。実際は、Leiningen(やBoot?)を使ってビルドしたりすると思うので、最初にこういう操作を一通り見ておくのは意義がある。

さて、次は、AWSのLambdaから利用したいのだが。。