まあ、皆様今更なにいってんノ?という反応なのですけど。やるといったもんはやる!
Common Lisp/Caveman2でブログを作るブログチュートリアルを開発する(書く)というのが今回のテーマ。
SBCLのインストール
いろいろ探した結果SBCLが良さそうなのでSBCLにした。
その後いろいろ調べていると初心者にはClozure CLの方がいいらしいのだけど
本番ではSBCL鉄板みたいだし、apt-getでClozure CLインストールできなそうなのでSBCLでいく。
$ sudo aptitude install sbcl
$ sbcl --version
SBCL 1.0.55.0.debian
手元のMacにHomebrewで入れたバージョンは「SBCL 1.1.16」なのでUbuntu12.04だとちょっと古いけどとりあえず気にしない事にする。
Quicklispのインストール
Caveman2はQuicklispで提供されているのでQuicklispをインストールする。
$ curl -O http://beta.quicklisp.org/quicklisp.lisp
$ sbcl --load quicklisp.lisp
==== quicklisp quickstart 2014-02-01 loaded ====
To continue with installation, evaluate: (quicklisp-quickstart:install)
For installation options, evaluate: (quicklisp-quickstart:help)
*
ここで「(quicklisp-quickstart:install)」すればいいんだけど、
Quicklispをインストールする場所はどこがいいのかなぁと思ってCTRL+Dで一度停止。
検索してみるとプロジェクトごとに使うQuicklispを分離する – 八発白中
モダンCommon Lisp: Quicklispによるライブラリ環境 | ありえるえりあ
これが参考になった。ワンライナー便利。
SBCL使っているので下記のようにする。上記二つを混ぜて(ql:add-to-init-file)までさせてみた。
分離するって話はやりたいけどとりあえず忘れる。
$ (curl -L http://beta.quicklisp.org/quicklisp.lisp && echo '(quicklisp-quickstart:install :path #P"quicklisp/")(ql:add-to-init-file)') | sbcl --no-userinit
(ql:add-to-init-file) すると下記のようにファイルができる。
$ vim ~/.sbclrc
;;; The following lines added by ql:add-to-init-file:
#-quicklisp
(let ((quicklisp-init (merge-pathnames "commonlisp/quicklisp/setup.lisp"
(user-homedir-pathname))))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
Shellyを使う話になっているけどとりあえず忘れて、そのまま次へ進む。
プロジェクト生成する
上で使ったワンライナーが気持ちよかったのでまねして、(caveman2:make-project)でプロジェクト生成するよ。
$ echo '(ql:quickload :caveman2) (caveman2:make-project #P"~/commonlisp/myapp/" :author "yosiwo")' | sbcl
This is SBCL 1.0.55.0.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at .
SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
* To load "caveman2":
Load 1 ASDF system:
caveman2
; Loading "caveman2"
........
(:CAVEMAN2)
*
writing ~/commonlisp/myapp/.gitignore
writing ~/commonlisp/myapp/README.markdown
writing ~/commonlisp/myapp/app.lisp
writing ~/commonlisp/myapp/db/schema.sql
writing ~/commonlisp/myapp/shlyfile.lisp
writing ~/commonlisp/myapp/myapp-test.asd
writing ~/commonlisp/myapp/myapp.asd
writing ~/commonlisp/myapp/src/config.lisp
writing ~/commonlisp/myapp/src/main.lisp
writing ~/commonlisp/myapp/src/view.lisp
writing ~/commonlisp/myapp/src/web.lisp
writing ~/commonlisp/myapp/static/css/main.css
writing ~/commonlisp/myapp/t/myapp.lisp
writing ~/commonlisp/myapp/templates/_errors/404.html
writing ~/commonlisp/myapp/templates/index.tmpl
writing ~/commonlisp/myapp/templates/layouts/default.tmpl
T
起動
Common LispでWebアプリケーション#1 – hiyosi's blog
を参考にsbcl起動時にロードされているようにするには下記設定をしておく。
$ mkdir -p ~/.config/common-lisp/source-registry.conf.d/
$ vim ~/.config/common-lisp/source-registry.conf.d/setq-asd.conf
(:directory "/path/to/myapp")
Shelly使えばもっと気持ちよくなりそうだけどまだ頭が追っ付いていないのでこのまま。
sbcl起動してmyappをロードして起動。ここもワンライナーにしなよって話だけど何となく起動して待っててほしいし。(追記: やってみたけど、(myapp:start)後にsbclが終了してしまうのでうまくない。Shelly覚えるまではこのままでいくよ)
$ sbcl
(ql:quickload :myapp)
(myapp:start)
http://localhost:5000/ でアクセス!できた!
いろいろまだ勉強しなくてはいけない事が多いけどとりあえず準備はできたかなってところ。
まったくプログラミングに入ってません!先は長いけど限界なので1日目終わるよー。