参考
ayato-p さんの Clojure で Node.js の Express の Hello World みたいなことをしている記事があり、シンプルで動かしやすそうだったので参考に自分でもやってみる。
https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md
technomancy/leiningen レポジトリの公式チュートリアルもある
REPL について
記事中などで触れられている REPL の定義については
clj コマンドをターミナルで打って Clojure の対話インターフェースが立ち上がっていれば REPL は動いている
REPL とは Read, Exe,Print, Loop の基本的な実行フローの概念でもある
と解釈した上で次に進める。
leiningen のインストール
Clojure の web アプリを作るためには leiningen が必要。
レイン インゲン?
Python における Django のような扱いだと推測する
Web フレームワークではなく、clojure のプロジェクト管理ツールらしい。
https://github.com/technomancy/leiningen/wiki/Packaging
arch -arm64 brew install leiningen
...
==> Installing dependencies for leiningen: openjdk
==> Installing leiningen dependency: openjdk
==> Pouring openjdk--18.0.1.1.arm64_monterey.bottle.tar.gz
🍺 /opt/homebrew/Cellar/openjdk/18.0.1.1: 642 files, 309MB
==> Installing leiningen
==> Pouring leiningen--2.9.8.all.bottle.tar.gz
brew でインストールできる
openjdk 18 に依存しているらしい。
lein --version
Leiningen 2.9.8 on Java 18.0.1.1 OpenJDK 64-Bit Server VM
バージョンを確認してみると、2.9 が入っていて、Java 18 で動いているらしい
repl も使える
lein コマンドで cljblog アプリを作って Hello World する
lein new app cljblog
Generating a project called cljblog based on the 'app' template.
lein new app {appName} でプロジェクトを作れる
CRA や DRF よりはるかに早い。
CHANGELOG.md
LICENSE
README.md
doc
project.clj
resources
src
test
こういう構成になっている。
チェンジログが珍しい。
lein run で Hello World して中身を見る
lein run
Hello, World!
初期構成で lein run すると Hello, World が出力される。
調べてみると、
src/cljblog/core.clj
のファイルに
(ns cljblog.core
(:gen-class))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))
このファイルが Django でいう views.py だと仮定する
main のなかで println して 文字列が出力されている
文字列の部分を変更すると
lein run
core.clj's text changed
中身が変わる。
(defn -main
(println "core.clj's text changed")
)
println の前の部分を消すと
Syntax error macroexpanding clojure.core/defn
at (cljblog/core.clj:4:1).
println - failed:
失敗する。
テストを動かす
test/cljblog/core_test.clj
ここにサンプルのテストが書いてある。
(ns cljblog.core-test
(:require [clojure.test :refer :all]
[cljblog.core :refer :all]))
(deftest a-test
(testing "FIXME, I fail."
(is (= 0 1))))
core-test のライブラリを import して
0 = 1 という通らないテストを実行する
と言ったコードが書かれている。
lein test
lein test cljblog.core-test
lein test :only cljblog.core-test/a-test
FAIL in (a-test) (core_test.clj:7)
FIXME, I fail.
expected: (= 0 1)
actual: (not (= 0 1))
Ran 1 tests containing 1 assertions.
1 failures, 0 errors.
Tests failed.
このファイルが lein test で実行され
表示され、当然失敗する。
ここから TDD を始めよう!
まとめ
clj で アプリ(プロジェクト?)を作るためには
brew で leiningen をインストールして
lein new app {appName} でアプリを作って
lein run でアプリを実行できる
実行されるコードは src/projectName/core.clj に書かれている。
また、lein test でテストを実行できて
実行されるコードは test/projectName/core_test.clj に書かれている。
Top comments (0)