いつもの如く、唐突に common lisp の勉強をしようと思い立ち、色々見ながら環境設定をしたのでメモ。
思い付きで行動したので、あちこちで袋小路に突き当たりまくっているのは相変らずである。
■alpine linux で環境設定してみた
始まる前から後のことを考え、docker コンテナで動かすと面白そうということで virtualbox で新しく VM を作って alpine linux をインストールした。
debian とか ubuntu と違って、ISO 起動でインストーラが走ってくれるわけではなくて、Wiki を見ながら何とか導入。
パッケージは sbcl と clisp があったから「apk add」で簡単に入った。
ちなみに何度も「apt install」と入力してしまったのはご愛嬌。
問題はここからで、common lisp のパッケージ管理ライブラリ quicklisp を入れてみたが動かない。
ライブラリ自体の読み込みはできるけれど、そこから他のライブラリの自動ロードをするとデバッグモードになってしまう。
しばらく格闘してみたが、このまま環境設定で時間を食ってもアレなので、alpine は放置することにした。
■debian GNU/Linux で環境設定してみた
というわけで、愛用の debian GNU/Linux の VM を立ち上げて、こっちで環境設定してみた。
慣れ親しんだ「apt-get install」で、あっと言う間に sbcl のインストールが完了。
cl-quicklisp というパッケージもあったので、それも入れた。
で、プロジェクトごとにパッケージ管理をしてくれる(ruby の bundler みたいな) qlot というのを入れてみた。
これもすんなりと入ったので「よーし、これでコードが書けるぜー」とか思いながら、web フレームワークの caveman2 を入れ「ようとし」てみた。
…入ったよ、うん、結果的には。それだけで 1時間かかったのを気にしなければ。
その経緯
- qlot が初期化できない
qlot が入った。ql:quickload でロードした。qlfile 書いた。
さあ (qlot:install :myproj) …あれ?
エラーした。
qlfile を空にしてみてもエラーした。
ライブラリ取得先を ql から git に変えてみてもエラーした。
…よし、一旦放置。 - ql:quickload で caveman2 をロードできない
さすがに直接 ql:quickload すれば動くだろう… あれ?
エラーした。パッケージ名の書き方間違ったっけ?
文字列で “caveman2” … エラー。
キーワード形式で :caveman2 … エラー。
クォートして ‘caveman2 … エラー。…落ち着け、キーボードは投げるもんじゃない。
近場には HHK2Lite(英語) は売ってないんだ。
それに買ったばかりのディスプレイに当たったらどうする。
とりあえずお茶でも飲んで落ち着くんだ。(30分経過)…ふぅ、今日の茶菓子は美味かった。
お、よく見たらエラーファイル名あるじゃん。cffi?
とりあえず「apt-cache search」して… cl-cffi …って、そのまんまかい!
駄目元でインストールっと。これで直ったら微妙だなぁ…
(ql:quickload :caveman2) Enter!
え、通るの?原因これだけ?私の30分を返せ!(←責任転嫁:嫁居ないけど) - 改めて qlot
んー、これなら qlot も動きそうな気がする。
(qlot:install :myproj) っと。ん、エラー?
…落ち着け、深呼吸だ。吸ってー、吐いてー、吐いてー、吐…けるかボケェ!吸わんと死ぬわ!
……やめよう、一人ボケツッコミは寂しすぎる…そうだ、さっきと同じくダイイングメッセージにヒントがあるに違いない。エラーでプロセス死んでるしな。
死体は語る、犯人は現場に戻る(違)
えーと…
error while parsing arguments to DESTRUCTURING-BIND:
invalid number of elements in
("caveman2:latest")」
…待て、google 翻訳に頼るんじゃない。たぶん翻訳しても、そんなに変わらんし。
一つずつ順番に行こう。- エラー
- ↓している間
- 解釈
- 引数
- ↓のため
- DESTRUCTURING-BIND
- (区切り)
- 不正な
- 数
- ↓の
- 要素
- ↓の中の
- “caveman2:latest”
まとめると
「DESTRUCTURING-BIND のため(に)引数(を)解釈している間(に)エラー」
「”caveman2:latest” の中の要素の数(が)不正」
…ん?「caveman2:latest」って qlfile の書き間違い?
あー、うん。たしかに違うわ。スペース必要なのね。よーし、これで動くはず。今日のおやつを賭けてもいい。
(qlot:install :myproj) …エラー?え、おやつ抜き?えぇっ?
くそぅ、この恨み晴らさでおくべきか。(←自業自得)
二度ある事は三度あるのであるからしてヒントはエラーメッセージにあるのである。
というわけでチェック!
Component "myproj" not found
うん、myproj は見付からないよね、今から作ろうと思ってるんだから。
……… もしかして :myproj の部分いらない?
(qlot:install) っと… あー、うん。動いたね。動いちゃったね。
私のおやつ返せ!(←再度の責任転嫁:もちろん嫁は居ない)
補足:没収されたおやつはスタッフ(= 私)がおいしくいただきました。