参考
引き続き、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)