CommonLisp で Webサーバ(Clack)を動かしてみる
Clack というWebフレームワークがあるそうです
http://clacklisp.org/
以下のページを見ていたら簡単に入れられそうでしたので挑戦してみました。
わかりやすい記事に感謝。
http://d.hatena.ne.jp/peccu/20111108/clack_local
昔、Dockerで準備したSBCL環境があったな、、、と古い記事を検索。
あ、あった。
Ubuntu 15.04 SBCL環境を作成 - moremagicの日記
以下コマンドでSBCL環境を起動
docker run -d -p 32768:22 -p :5000 moremagic/common-lisp-study
起動したらSSHログインします
ssh -p 32768 root@localhost
SBCLを起動
Clackをインストール。
root@c7d7321088fc:~# sbcl --version SBCL 1.2.4.debian root@c7d7321088fc:~# sbcl CL-USER(1): (ql:add-to-init-file) CL-USER(2): (ql:quickload :clack) CL-USER(3): (exit)
サンプルスクリプトの作成
vi clack.lisp
;;; Clackでwebアプリ ;; Clackをロード (ql:quickload :clack) ;; パッケージとして宣言? (defpackage simple-app (:use :cl :clack)) (in-package :simple-app) ;; アプリの動作を記述 (defvar app #'(lambda (env) ;; "envを宣言だけで使ってない"という警告を止めるためと思う.たぶん (declare (ignore env)) ;; 200の時の処理 '(200 ;; header (:content-type "text/plain") ;; body ;; 要するにここに処理を書けばwebアプリになる ;; envにクライアント側の情報とか入ってる ;; http://clacklisp.org/doc/#The%20Environment 参照 ("Hello, Clack!")))) ;; 上で書いたアプリをclackupで起動する (defvar *handler* (clackup app ;; ;; apacheとmod_lispで会話する時はコメントアウトをはずす ;; ;; ローカルで試すだけならコメントのまま ;; :server :apache :port 5000 :debug t)) ;; *handler*にハンドラが入ったので ;; (clack:stop *handler*) ;; で止められる
早速起動します
sbcl --load clack.lisp
別の端末からSSHアクセスしてcurl
root@ubuntu:~# ssh -p 32768 root@localhost root@c7d7321088fc:~# curl localhost:5000 Hello, Clack!root@c7d7321088fc:~#
動きました!
簡単。
moremagic
2016-06-15