Clojure Tutorial Part 5 -- leiningen でアプリの作成、実行、testをする

12381 단어 clojureleiningen

参考



https://scrapbox.io/ayato-p/Part1_Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AF%E3%81%98%E3%82%81%E3%81%AE%E4%B8%80%E6%AD%A9

ayato-p さんの Clojure で Node.js の Express の Hello World みたいなことをしている記事があり、싱프르데모트카시키やすそうだったので参考に自分でもやってみる.

https://github.com/technomancy/leiningen/blob/stable/doc/TUTORIAL.md

technomancy/leiningen レポジtriの公式チューtriアルもある


REPL について



記事中などで触れられている REPL の定義については

clj コマンドをターミナルで打って Clojure の対話Intaーフェースが立ち上がっていれば REPL は動いている

REPL 과 Read, Exe, Print, Loop

と解釈した上で次に進める.


라이닝겐 인스톨



Clojure の web アプリを作るためには leiningen が必要.

레인 인겐?

Python における Django のような扱いだと推測する

Web フレームWork で はなく, 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 も使える


라인 코만드로 cljblog アプリを作って Hello World する




lein new app cljblog
Generating a project called cljblog based on the 'app' template.


새로운 앱 {appName}을 시작하세요.
CRA や DRF よりはるかに早い.

CHANGELOG.md
LICENSE
README.md
doc
project.clj
resources
src
test


こういう構成になっている.
첸지로그가珍しい.

라인 런 で 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を動かす



https://cljdoc.org/d/leiningen/leiningen/2.9.8/doc/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB#%E3%83%86%E3%82%B9%E3%83%88

test/cljblog/core_test.clj


ここにサンプルのtestが書いてある.

(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.


이 파이르가 라인 테스트 で実行され
表示され、当然失敗する.

ここから TDD を始めよう!


まとめ



clj で アプリ(프로제크트?)を作るためには

brew で leiningen をinstorrして

새 앱 {appName}을(를) 사용하세요

lein run でアプリを実行できる

実行されるコードは src/projectName/core.clj に書かれている.

また、lein test でtestを実行できて

実行されるコードは test/projectName/core_test.clj に書かれている.

좋은 웹페이지 즐겨찾기