[連載]Clojureで作るAPIの3記事目です。
前回の記事はこちらです。
この記事ではWebサーバーを立ち上げていきます。
Webサーバーのライブラリを追加
まずは依存関係にWebサーバーのライブラリを追加します。
deps.edn
を次のようにしてください。
{:paths ["src"] :deps {org.clojure/clojure {:mvn/version "1.11.1"} info.sunng/ring-jetty9-adapter {:mvn/version "0.17.6" :exclusions [org.slf4j/slf4j-api]} spootnik/unilog {:mvn/version "0.7.30"}}}
ClojureのWebサーバーはRingに沿って作ります。 Ringがどういうものなのかは次の記事で詳しく解説しているのでご覧ください。
ここで info.sunng/ring-jetty9-adapter
がJettyをRingの仕様に適合させてくれているライブラリです。
slf4j-api
を除外したり、Clojureのロギングライブラリである spootnik/unilog
を加えたりしているのはJavaの複雑なログライブラリの事情によるものなのですが、そこを解説していると別の記事になってしまうので、ここでは一旦触れないでおきます。
最初のWebサーバー
ライブラリが追加できたら core.clj を次のようにします。
;; ./src/cljapi/core.clj (ns cljapi.core (:require [ring.adapter.jetty9 :as jetty])) (defn ring-handler [_req] {:status 200 :body "Hello, Clojure API"}) (defn -main [& _args] (jetty/run-jetty ring-handler {:port 8000})) (comment (-main) ;; (1) )
ここまで書けたらREPLを立ち上げて、ファイル全体を評価した後で、(1)の式を評価します。 そうすると大量のログがREPLに出力されつつ、Webサーバーが立ち上がります。
curlを使って確認してみます。
$ curl http://localhost:8000 Hello, Clojure API
localhostの指定したポートにWebサーバーが起動していて、アクセスすると定義した関数(Ring handler)が呼び出されていることが確認できました。
おわりに
とても簡単にWebサーバーを立ち上げることができました。
コードはGitHubのリポジトリに上げてあります。 03_Webサーバーを立ち上げるというタグからご覧ください。
ClojureでAPIを作ることは、言ってしまえば上記で定義した ring-handler
に機能を足していくだけの作業です。
とてもシンプルであるおかげで、一度作り上げれば継続したメンテナンスが楽になるということが少しだけでも伝わるでしょうか?
次は開発の生産性を上げるために、REPLを再起動しなくてもWebサーバーの再起動ができるようにしていきます。
トヨクモでは一緒に働いてくれる技術が好きなエンジニアを募集しております。