読者です 読者をやめる 読者になる 読者になる

ほんとのこと知りたいだけなのに。

夏休みはもうおわり。

Quicklisp で 自前プロジェクトを ql:quickload。

これまでは習慣で asdf:load-system で自前のプロジェクトをロードしとったんよ。
必要なライブラリは人力で ql:quickload したりしとったんじゃけど、まぁそんとには不便は感じとらんかったんよ。

やっとったんは asdf:*central-registry* に自分プロジェクト用のディレクトリを追加しとって、そこにプロジェクトのシンボリックリンクを作成して asdf:load-system するやりかた。

.sbclrc に以下のラインを追加しとって ~/.asdf-install-dir/ にシンボリックリンクを作成しとくん。

;; .sbclrc
(push #P"~/.asdf-install-dir/" asdf:*central-registry*)

でも、そろそろ自前のプロジェクトも ql:quickload しよう思ぉてね。
関連ライプラリも勝手にロードしてくれるしね。

やりかたを調査

ほいじゃけぇ調べたいね。

そしたら Quicklisp beta FAQ ちゅうページに説明があったいね。
Can I load a local project that isn't part of Quicklisp? のセクションなんじゃけどね。

ここにゃぁ二つのやりかたが書いてあってどちらでもイケるみたい。

  1. asdf:*central-registry* を使う場合。
  2. ~/quicklisp/local-projects ディレクトリを使う場合。

簡単じゃけぇ、どちらもやってみるけぇ。

asdf:*central-registry* を使う場合。

まずはこちらから。

こっちのやり方の方が今のやり方の延長線上にあるけぇ。

Quicklisp beta FAQ には、こんとな感じで書いとる。
同じようにやってみるけぇ。

(push #p"/projects/my-project/" asdf:*central-registry*)
(ql:quickload "my-project")

最初の行の (push #p"/projects/my-project/" asdf:*central-registry*) はもうやっとるけぇ内容の確認のみにしとくわ。

> asdf:*central-registry*
(#P"/home/yanqirenshi/quicklisp/quicklisp/" #P"~/.asdf-install-dir/")

ほいじゃぁ、まずテスト用のサンプルプロジェクトを作成するけぇ。

僕は自分プロジェクトは ~/prj で管理しとるんよ。
じゃけぇ、その下にプロジェクト用のディレクトリ sample-pj を作成。

んで、そこに cl-project でプロジェクトを生成。

CL-USER> 
(cl-project:make-project #p"/home/yanqirenshi/prj/sample-pj/"
  :author "yanqirenshi"
  :email "yanqirenshi@gmail.com"
  :license "LLGPL"
  :depends-on '())
writing /home/yanqirenshi/prj/sample-pj/.gitignore
writing /home/yanqirenshi/prj/sample-pj/README.markdown
writing /home/yanqirenshi/prj/sample-pj/README.org
writing /home/yanqirenshi/prj/sample-pj/sample-pj-test.asd
writing /home/yanqirenshi/prj/sample-pj/sample-pj.asd
writing /home/yanqirenshi/prj/sample-pj/src/sample-pj.lisp
writing /home/yanqirenshi/prj/sample-pj/t/sample-pj.lisp
T

次に ~/.asdf-install-dirsample-pj.asd のシンボリックリンクを作成。

  /home/yanqirenshi/.asdf-install-dir:
  lrwxrwxrwx  1 yanqirenshi users   39  1月 28 00:10 sample.asd -> /home/yanqirenshi/prj/sample/sample.asd

これで ql:quickload でプロジェクトをロードする。
っと成功しとるね。

CL-USER> (ql:quickload "sample-pj")
To load "sample-pj":
  Load 1 ASDF system:
    sample-pj
; Loading "sample-pj"
[package sample-pj]
("sample-pj")
CL-USER> (in-package :sample-pj)
#<PACKAGE "SAMPLE-PJ">
SAMPLE-PJ> 

~/quicklisp/local-projects ディレクトリを使う場合。

次はこちらをやってみるけぇ。

Quicklisp beta FAQ には、こんとな感じで書いとる。

 $ cd ~/quicklisp/local-projects/
 $ git clone git://github.com/xach/format-time.git

quicklisp には 自分プロジェクト用のディレクトリが用意されとるんじゃね。
~/quicklisp の下に出来とる local-projects にプロジェクトを作成しときゃぁエエみたい。

ほいじゃぁやってみるけぇ。

とりあえず、プロジェクト用のディレクトリを作成。

  /home/yanqirenshi/quicklisp/local-projects:
  drwxr-xr-x 2 yanqirenshi users   6  1月 28 21:58 sample-pj-lp

んで、cl-project でプロジェクト作成。

SAMPLE-PJ> 
(cl-project:make-project #p"/home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/"
  :author "yanqirenshi"
  :email "yanqirenshi@gmail.com"
  :license "LLGPL"
  :depends-on '())
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/.gitignore
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/README.markdown
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/README.org
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/sample-pj-lp-test.asd
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/sample-pj-lp.asd
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/src/sample-pj-lp.lisp
writing /home/yanqirenshi/quicklisp/local-projects/sample-pj-lp/t/sample-pj-lp.lisp
T

んで、このままで ql:quickload イケるはず。
っとイケとるね。

SAMPLE-PJ> (ql:quickload "sample-pj-lp")
To load "sample-pj-lp":
  Load 1 ASDF system:
    sample-pj-lp
; Loading "sample-pj-lp"
[package sample-pj-lp]
("sample-pj-lp")

まとめ

まぁ、何っちゅうか、どぉっちゅう事はなかったね。
もう少し早よぉ調べときゃぁよかったいね。

二つ方法はあるけど、各々で好きなほう選べばエエんじゃなかろうか。