#:g1: quickprojectの紹介

Posted 2014-11-10 15:00:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の315日目です。

quickprojectとはなにか

 quickprojectは、Zach Beane氏作の雛形からASDFで読み込めるようなCommon Lispのプロジェクトを作成してくれるユーティリティです。

パッケージ情報

パッケージ名quickproject
Quicklisp
Quickdocsquickproject | Quickdocs
CL Test Grid: ビルド状況quickproject | CL Test Grid

インストール方法

(ql:quickload :quickproject)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

 一番単純な使い方は、

(quickproject:make-project "/tmp/bar")

のようなものですが、実行すると、/tmpの下にbarディレクトリが作成され、

README.TXT
This is the stub README.txt for the "bar" project.
bar.asd
;;;; bar.asd

(asdf:defsystem #:bar
  :description "Describe bar here"
  :author "Your Name <your.name@example.com>"
  :license "Specify license here"
  :serial t
  :components ((:file "package")
               (:file "bar")))

bar.lisp
;;;; bar.lisp

(in-package #:bar)

;;; "bar" goes here. Hacks and glory await!

package.lisp
;;;; package.lisp

(defpackage #:bar
  (:use #:cl))

のようなファイルが生成されます。
ASDFの依存関係は、make-projectに:depends-on '(...)という風にリストを渡すとdefsystemの:depends-onが埋められます。

テンプレートを足したりカスタマイズしたい場合

 生成されるテンプレートを足したい場合は、quickproject:*template-directory*以下に雛形のファイルを作って設置すれば、同名のファイルが生成されるようになります。
また、html-templateの機能を使ってパラメータを置換することが可能です。
(#| tmpl_var パラメータ名 |#) という形式で置換できますが、この書式はhtml-templateの書式になります。

~/quickproject-template/LICENSE.txt
License: (#| tmpl_var license |#)

のようなものを作成して、

(quickproject:make-project "/tmp/baz" :template-directory "/mc/quickproject-template/"
                                      :template-parameters '(:NAME "baz"
                                                             :LICENSE "Public domain"
                                                             :AUTHOR "g000001 <g000001@example.com>"))

とすれば、

LICENSE.txt
License: Public domain

のようなものが追加されます。
:template-directoryと:template-parametersについては、quickproject:*template-directory*と、quickproject:*template-parameter-functions*で設定可能ですが、quickproject:*template-parameter-functions*にplistを返す関数を入れるというのが若干ややこしいです。

まとめ

 今回は、quickprojectを紹介してみました。
書き捨てのものでも気軽にプロジェクトを作成できるので重宝しています。

comments powered by Disqus