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)