ドキュメント
はじめかた
Gravity Lensing と area51 パッケージマネージャを使って Common Lisp プロジェクトを始めるために必要なすべて。
前提条件
area51 をインストールする前に、動作する Common Lisp 処理系が必要です。パフォーマンスと幅広い互換性から SBCL(Steel Bank Common Lisp)を推奨しますが、準拠する処理系であればどれでも使えます。
- SBCL — 推奨、ほとんどのプラットフォームで利用可能
- CCL (Clozure Common Lisp) — ネイティブスレッド対応の優れた選択肢
- ECL (Embeddable Common Lisp) — C にコンパイル、組み込み向け
- ABCL (Armed Bear Common Lisp) — JVM 上で動作
次のコマンドでインストールを確認してください:
sbcl --versionarea51 のインストール
area51 はランタイム依存なしの単一バイナリです。1つのコマンドでインストールできます:
curl -fsSL https://raw.githubusercontent.com/gr8distance/area51/main/install.sh | basharea51 バイナリが ~/.local/bin にインストールされます。PATH に含まれていることを確認してください。インストールの確認:
area51 --versionプロジェクトの作成
area51 new で新しい Common Lisp プロジェクトを作成します。開発に必要な標準的なプロジェクト構造が生成されます。
area51 new my-project
cd my-project生成される構造:
my-project/
area51.lisp # プロジェクトマニフェスト
my-project.asd # ASDF システム定義
src/
package.lisp # パッケージ定義
main.lisp # エントリーポイント
.gitignore- area51.lisp — プロジェクトマニフェスト。依存関係とメタデータを宣言。
- my-project.asd — ASDF システム定義。
area51 add/removeで自動更新。 - src/package.lisp — パッケージシンボルを定義・エクスポート。
- src/main.lisp — アプリケーションコードの開始点。
パッケージの追加
area51 add でパッケージを追加します。area51.lisp マニフェストと .asd システム定義の両方が自動更新されます。
area51 add alexandria
area51 add my-lib --github user/my-lib
area51 add some-lib --url https://example.com/lib.tar.gz次に area51 install を実行して、すべての依存関係を解決しダウンロードします:
area51 installarea51.lock ファイルが生成され、再現可能なビルドのために正確なバージョンが固定されます。ソースファイルでパッケージを使用できます:
(in-package :my-project)
(defun load-config (path)
(alexandria:read-file-into-string path))area51 add は area51.lisp と .asd を更新しますが、src/package.lisp は意図的に触りません。シンボルをパッケージに取り込む方法は好みが分かれるので、area51 はユーザーに任せる設計です。代表的な書き方をいくつか紹介します:
:import-from
(defpackage #:my-app
(:use #:cl)
(:import-from #:alexandria #:iota #:when-let)
(:import-from #:arrows #:-> #:->>)
(:export #:main))明示的で、現代の Common Lisp コードで最も一般的なスタイルです。どのシンボルがどのパッケージ由来か、コードを読む人が一目で把握できます。
:local-nicknames
(defpackage #:my-app
(:use #:cl)
(:local-nicknames (#:a #:alexandria))
(:export #:main))
;; usage: (a:iota 5)完全修飾のまま使いつつ、長いパッケージ名を毎回書く手間を減らします。
:use
(defpackage #:my-app
(:use #:cl #:arrows)
(:export #:main))
;; usage: (-> 3 (+ 20 30))エクスポートされた全シンボルを取り込みます。arrows や iterate のように、シンボルが構文のように読める DSL 系ライブラリと相性が良いですが、alexandria のような巨大ユーティリティに対しては避けるのが無難です(ライブラリ拡張時にシンボル衝突が気付かないうちに起きやすい)。
あるいは package.lisp を触らず、コード内で完全修飾シンボルをそのまま使うのもアリです:(alexandria:iota 5)。
SLY/SLIME でのインタラクティブ開発
area51 repl は、プロジェクトをロード済みで *package* もプロジェクトパッケージに切り替えた状態の slynk サーバを起動します。Emacs から M-x sly-connect で繋ぐと、プロジェクトにスコープされた REPL がそのまま使えます。Emacs 側での .sbclrc や .dir-locals.el 設定は不要です。
プロジェクトディレクトリから REPL サーバを起動します:
area51 repl次に Emacs で:
M-x sly-connect RET 127.0.0.1 RET 4005 RETREPL は最初からプロジェクトのパッケージで開くので、(main) やエクスポートされた関数をすぐに裸で呼び出せます。
--port Nで 4005 以外のポートも指定できます。- Ctrl-C で綺麗にシャットダウンしてポートを解放するので、そのまま再起動できます。
- プロジェクトごとの分離: 実行中の sbcl からは、そのプロジェクトの
area51.lockに載っている依存だけが ASDF から見えます(area51 runと同じ分離)。
slynk は起動時に ASDF 経由でロードされます。マシンにインストールされていない場合(SLY 同梱が一般的ですが (ql:quickload :slynk) でも OK)、ハングする代わりに一行のエラーで終了します。
パッケージの閲覧
Web でパッケージを閲覧・検索できます: glensing.dev/packages.
現在のプロジェクトにインストールされているものを確認するには:
area51 list設定
area51 は設定とキャッシュをホームディレクトリに保存します。
~/.area51/
packages/ # ダウンロード済みパッケージ
quicklisp/ # キャッシュ済み Quicklisp インデックスパッケージは一度ダウンロードされるとここにキャッシュされます。Quicklisp インデックスは24時間ごとに自動更新されます。area51 clean でキャッシュ全体をクリアできます。
コマンドリファレンス
area51 の全コマンド一覧。
| コマンド | 説明 |
|---|---|
area51 new <name> | 新しい Common Lisp プロジェクトを作成 |
area51 add <pkg> | area51.lisp と .asd に依存関係を追加 |
area51 remove <pkg> | プロジェクトから依存関係を削除 |
area51 install | すべての依存関係を解決しダウンロード、ロックファイルを生成 |
area51 list | 宣言済み依存関係とそのステータスを一覧表示 |
area51 build | プロジェクトをスタンドアロンバイナリにビルド |
area51 run | プロジェクトのエントリーポイントをロードして実行 |
area51 test | プロジェクトのテストスイートを実行 |
area51 repl | SLY/SLIME 接続用の slynk サーバを起動 |
area51 clean | パッケージキャッシュ (~/.area51/) をクリア |
area51 upgrade | area51 自体を最新バージョンに更新 |