DEV Community

kaede
kaede

Posted on

Clojure Tutorial Part 6 -- repl で ring-jetty-adapter でワンラインで サーバーを起動する

参考

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 で 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"]}}) 
Enter fullscreen mode Exit fullscreen mode

デフォルトではこうして 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"] ] 
Enter fullscreen mode Exit fullscreen mode
  • 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=> 
Enter fullscreen mode Exit fullscreen mode

lein repl で CLI 起動した際、依存関係がダウンロードされる。

(require '[ring.adapter.jetty :as jetty]) 
Enter fullscreen mode Exit fullscreen mode

依存関係に追加した ring jetty adapter を import して

(def server (jetty/run-jetty \ (fn [_] {:body "Hello, world!"}) \ {:port 3000 :join? false})) \ 
Enter fullscreen mode Exit fullscreen mode

即時関数で 引数の
body に Hello World の文字列を指定して
port に 3000 を指定して
実行する。

2022-06-04 19:58:12.556:INFO: oejs.Server:nREPL-session-123abc: Started @341863ms #'cljblog.core/server 
Enter fullscreen mode Exit fullscreen mode

すると、サーバーが起動して

Image description

ブラウザで確認できる。


サーバーの停止

(.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 
Enter fullscreen mode Exit fullscreen mode

Image description

これで先ほど起動させたサーバーを停止できる。


今後

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

参考記事の続きの、サーバーを起動、停止、再起動するファイルを作って
それを使ってコマンドとして使えるようにするところをやる


まとめ

Clojure と lein でサーバーを起動するには

project.clj ファイルに

  • ring-core
  • ring-jetty-adapter

これらを追加して

repl を起動して

run-jetty に body と port を渡す即時関数を動かす

すると、ブラウザで確認できる。

Top comments (0)