このエントリはModern Common Lispの一部です。
Common Lispのライブラリを利用するのに、以前はASDF-Installを使っていました。しかし、ASDF-Installは外部のシェルコマンドに依存するためWindowsでの利用が面倒だったり、接続先のサーバが落ちていてダウンロードできなかったり、ダウンロードできたとしてもビルドできないといったことが多くありました。
これを解決するためにZach Beaneが開発したのがQuicklispです。現在BETA公開中で、いくつか制限事項はありますが、誰でも利用できるようになっています。
Quicklisp BETA
セットアップ
まずはQuicklisp自身をインストールします。以下のリンクからQuicklispをダウンロードしてください。
あなたのLisp処理系 (きっとSBCL以外でしょうね) を起動し、以下のコードを実行してください。
|
(load "quicklisp.lisp") (quicklisp-quickstart:install) (ql:add-to-init-file) |
※注) もしプロキシを通す必要があれば:proxy
キーワードにURLを文字列で渡してください。例: (quicklisp-quickstart:install :proxy “http://192.168.xx.xx:8080”)
これでセットアップは完了です。~/quicklisp
というディレクトリができていることを確認してください。
もしQuicklispのディレクトリを変更したい場合には、~/quicklisp
ディレクトリを移動したあと、処理系のinitファイル (Clozure CLならば~/.ccl-init.lisp
)の一部を修正します。
|
;;; The following lines added by ql:add-to-init-file: #-quicklisp (let ((quicklisp-init (merge-pathnames "<b>.quicklisp</b>/setup.lisp" (user-homedir-pathname)))) (when (probe-file quicklisp-init) (load quicklisp-init))) |
ライブラリのインストール・ロード
Quicklispでライブラリのインストールをするにはql:quickload
を使います。このコマンドは試験に出るのでよく覚えておいてください。
指定したライブラリがまだインストールされていなければ、サーバからダウンロードしてインストールします。ASDF-INSTALLと違って依存パッケージも同時にインストールしてくれるので非常に助かります。
ライブラリを探す
Quicklispに登録されているライブラリを探すにはql:system-apropos
を使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
(ql:system-apropos "web") ;-> #<system cl-webdav / cl-webdav-0.2.0 / quicklisp 2011-02-19> ; #<system hh-web-tags / hh-web-tags-20110219-hg / quicklisp 2011-02-19> ; #<system hh-web-tags-tests / hh-web-tags-20110219-hg / quicklisp 2011-02-19> ; #<system symbolicweb / symbolicweb-20101207-git / quicklisp 2011-02-19> ; #<system symbolicweb-examples / symbolicweb-20101207-git / quicklisp 2011-02-19> ; #<system symbolicweb-jquery / symbolicweb-20101207-git / quicklisp 2011-02-19> ; #<system webactions / portableaserve-20101006-cvs / quicklisp 2011-02-19> ; #<system weblocks / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-demo / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-demo-popover / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-elephant / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-elephant-demo / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-memory / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-postmodern / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-prevalence / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-s11 / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-scripts / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-store-test / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-yarek / weblocks-20110219-hg / quicklisp 2011-02-19> ; #<system weblocks-yui / weblocks-20110219-hg / quicklisp 2011-02-19> ;=> nil |
リポジトリをアップデートする
Quicklispのリポジトリは毎月1回更新されます。ライブラリが更新されたり、追加されたり削除されたり。最新のライブラリにアップデートするには以下のコマンドを実行します。
ASDF2 – 登録されていないライブラリを使う
Quicklispには既に多くのライブラリが登録されているとはいえ、まだ登録されていないライブラリもあります。また、自分が作ったライブラリやアプリケーションのロードには使うことができません。
そこで、「ASDF2」を使ってローカルの指定のライブラリをロードできるようにします。ASDF2は多くの処理系で標準バンドルされているはずなので特にセットアップの必要はありません。
まずはライブラリを置くディレクトリを作ります。ここでは~/.lisp/systems
にライブラリを置くものとします。
そして~/.config/common-lisp/source-registry.conf.d/01-add-local-lisp.conf
に上のディレクトリパスを指定します。
|
;; ~/.config/common-lisp/source-registry.conf.d/01-add-local-lisp.conf (:tree (:home ".lisp/systems")) |
これで準備完了です。ASDF2は~/.lisp/systems
の中を再帰的に見て、その中のライブラリをロードできるようになりました
ライブラリのインストールと利用
たとえばClackを使うには~/.lisp/systems
にソースをcloneします。
|
$ cd ~/.lisp/systems $ git clone git://github.com/fukamachi/clack $ git clone git://github.com/arielnetworks/cl-annot |
Lisp処理系を立ち上げ、ql:quickload
してください。
これでClackが使えるはずです。以下のコードを実行して、http://localhost:5000/にアクセスしてみてください。“Hello, Clack!”と表示されるはずです。
|
(clack:clackup #'(lambda (req) (declare (ignore req)) '(200 nil ("Hello, Clack!")))) |
使えなかった場合は@nitro_idiotに報告してくださいね。
まとめ
今回はQuicklispとASDF2によるライブラリの導入について解説しました。PerlやRubyに比べるとそれほど良い環境とは言えませんが、以前と比べてLispのライブラリ環境も悪くなくなってきています。これから数もどんどん増えていくことでしょう。
次回は松山さんがEmacsとSLIMEの環境設定について書いてくれるはずです。
関連文書:
最近のコメント