参考
引き続き、ayato-p さんの記事を参考に Clojure で web を書いていく。
project.clj の dependencies に Ring を追加する
root/project.clj を開いてみる
(defproject cljblog "0.1.0-SNAPSHOT"
:description "CLJ web app"
:dependencies [[org.clojure/clojure "1.10.3"]]
:main ^:skip-aot cljblog.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all
:jvm-opts ["-Dclojure.compiler.direct-linking=true"]}})
デフォルトではこうして description や dependencies、profiles
並んでいる
project.clj というファイルは Node.js の pakcage.json のようなライブラリを管理するファイルだと解釈する。
また、Clojure では Node.js で npm i {packagaName}
でインストールするのと違って、ライブラリを追加するときはファイルに直接書き込むらしい。
:dependencies [
[org.clojure/clojure "1.10.3"]
[ring/ring-core "1.8.0"]
[ring/ring-jetty-adapter "1.8.0"]
]
- ring-core
- ring-jetty-adapter
これらのライブラリを dependencies に追加する
カッコのスタイルは まだ慣れないので、一時的に JS と同じにしてます。
lein repl で動作確認する
lein repl
Retrieving
ring/ring-core/1.8.0/ring-core-1.8.0.jar from clojars
Retrieving ring/ring-jetty-adapter/1.8.0/
ring-jetty-adapter-1.8.0.jar from clojars
Retrieving ring/ring-codec/1.1.2/
ring-codec-1.1.2.jar from clojars
Retrieving ring/ring-servlet/1.8.0/
ring-servlet-1.8.0.jar from clojars
cljblog.core=>
lein repl で CLI 起動した際、依存関係がダウンロードされる。
(require '[ring.adapter.jetty :as jetty])
依存関係に追加した ring jetty adapter を import して
(def server (jetty/run-jetty \
(fn [_] {:body "Hello, world!"}) \
{:port 3000 :join? false})) \
即時関数で 引数の
body に Hello World の文字列を指定して
port に 3000 を指定して
実行する。
2022-06-04 19:58:12.556:INFO:
oejs.Server:nREPL-session-123abc:
Started @341863ms
#'cljblog.core/server
すると、サーバーが起動して
ブラウザで確認できる。
サーバーの停止
(.stop server)
2022-06-04 22:07:42.958:INFO:
oejs.AbstractConnector:nREPL-session-1234:
Stopped ServerConnector@5ec4d432
{HTTP/1.1,[http/1.1]}{0.0.0.0:3000}
nil
これで先ほど起動させたサーバーを停止できる。
今後
参考記事の続きの、サーバーを起動、停止、再起動するファイルを作って
それを使ってコマンドとして使えるようにするところをやる
まとめ
Clojure と lein でサーバーを起動するには
project.clj ファイルに
- ring-core
- ring-jetty-adapter
これらを追加して
repl を起動して
run-jetty に body と port を渡す即時関数を動かす
すると、ブラウザで確認できる。
Top comments (0)