common lisp で何か書いてみる(その2)

どうも。
最近の投稿ペースが速くて自分でも驚きながら書いています。

さて、引き続き caveman2 で何か書いてみようという話です。
が、今回もまた自前のコードを入力する機会は訪れませんでした…

とりあえず目次は以下の通りです。

  • Road to qlot:quickload
  • 穴居人が立ち上がる時

■Road to qlot:quickload

結論:行ってみた限りでは全部行き止まりでした。

や、色々試したんですよ、ホントに。

qlfile の中身を次のようにして、それぞれコメントアウトしながら全部試しました。

# qlfile

github caveman2 fukamachi/caveman
# git caveman2 https://github.com/fukamachi/caveman.git
# ql caveman2 :latest

インストールコマンドも色々やってみました。

  • プロジェクトディレクトリで
    • (qlot:install :myproj1)
    • (qlot:install)
    • (qlot:install :caveman2)
  • プロジェクトディレクトリの一つ上で
    • (qlot:install :myproj1)
    • (qlot:install)
    • (qlot:install :caveman2)

見付けた変数を変えてみたりもしました。

(setq ql-setup:*quicklisp-home* #P"~/myproj1/")
(qlot:quickload :caveman2)

上の色々な組み合わせも試しました。

最終的に挫折しました…(泣)

■穴居人が立ち上がる時

で、qlot を使わずに caveman2 だけでも動かしてみようと試行錯誤して、こちらは何とかサーバを立ち上げる事ができました。

前回で (ql:quickload :caveman2) は通るようになったので、github の README を読みながら進めていきます。

最初のプロジェクト作成は caveman2:make-project で問題無く終了です。

続いて、とりあえずテスト稼動が目的なので、ルーティングとかデータベース操作とかはどんどん飛ばして、サーバの立ち上げに入るわけです。

書いてある通り、おもむろに (myproj1:start :port 8080) を実行… 当然パッケージ myproj1 が無いと怒られます。
そして毎度の如く、苦闘の日々が始まるのです。

まあ、状況としては windows ユーザに linux の bash プロンプト使わせるようなものですね。
やりたい事は分かってるのに、どうやればいいのか分からないというジレンマに陥るわけです。

最終的に動くようになるまで

  • ファイルパスの指定方法
  • 読み込ませるファイル選択

で悩む事になりました。

パスの指定方法は make-project の引数にあったので、それでいけるはずです。
が、カレントディレクトリが何処なのかとか、うっかり #P を付けずに文字列で書いてしまったりとかで、なかなかうまく行きませんでした。

さらに、読み込むファイルが分からないという点が問題の複雑さに拍車をかけることになります。

コマンドの方は load か require あたりだろうと推測しましたが、ファイルに関しては見当もつかなかったので、考えていても仕方無いと割り切って総当たりして解答に辿り着きました。

誰かの役に立つかどうか怪しいところですが、いちおう最終形を載せておきます。

(ql:quickload :caveman2)
(caveman2:make-project #P"~/myproj1/" :author "myname") ; '#P' を付けないとエラー、ディレクトリは未作成でもよい

(load #P"~/myproj1/myproj1.asd") ; これと次は '#P' 無しでも動いたが、一応付けておく
(load #P"~/myproj1/app.lisp")
(myproj1:start :port 8080)

以上です。