魔法使いの弟子

いつか私もあなたみたいに

Hunchentoot + Djula でHello World - Webアプリを作ろう3

Hunchentoot + Djula でHello Worldができた。

この記事ではHello Worldをだすまでにやった最低限のところだけを記す。

なお、以下の点は前提事項であるものとする。

  • Mac OS X
  • SBCLダウンロード済み
  • EmacsにSLIME導入済み
  • Quicklispインストール済み

まず最初は、HTMLテンプレートを作る。 といっても、Hello Worldを表示するだけなのでただのHTMLファイルだ。

<!DOCTYPE html>
<html>
  <head>
    <title>Hello World</title>
  </head>
  <body>
    <h1>Hello World</h1>
  </body>
</html>

次は、HunchentootとDjulaのロード。 SLIME上で以下を実行。

(ql:quickload :hunchentoot)
(ql:quickload :djula)

はい、簡単。

その次は、Webサーバ(Hunchentoot)の設定だ。 最初に作ったHTMLをブラウザに表示するためには、 以下を実行する。

(defvar *document-root* "/path/to/HTMLTemplate/")

(djula:add-template-directory
 (pathname *document-root*))

(defvar *acceptor*)

(defun start ()
  "サーバ 起動"
  (setf *acceptor* 
        (hunchentoot:start
         (make-instance 'hunchentoot:easy-acceptor
                        :port 4242))))

(defun stop ()
  "サーバ 停止"
  (hunchentoot:stop *acceptor*))


;; 起動
(start)

;; テストハンドラ定義
(defparameter +hello.html+ (djula:compile-template* "hello.html"))

(hunchentoot:define-easy-handler (test-handler :uri "/hello")
    ()
  (djula:render-template* +hello.html+))

まず、HTMLが置いてあるディレクトリを指定する。 そのあとのstartとstopはそれぞれサーバを起動、停止する関数である。 hunchentoot:startという関数だけでも起動自体はできるが、 この関数の返り値をacceptorという変数にバインドさせておくことで、 サーバの停止が簡単になるのでこうした書き方の方がいいと思う。

サーバ起動後は、ハンドラを定義する。 これによってHTMLとURLが結び付けられる。

これで http://localhost:4242Webブラウザのアドレスバーに打ち込めば、

f:id:aoba17:20190609175243p:plain

このようにHTMLが表示される。

Hello Worldを出すまでDjulaのDemo.lispファイルが大いに参考になった。 この記事のコードはDemoに比べると内容を大分省略したものになっている。 もっと動的なテンプレートが作りたいならDemoみたいな実際のコードをみて真似するのがいいと思う。

というわけで今日はここまで。