ufo: roswell script installer
TRANSCRIPT
自己紹介
● ta2gch● 都内にある某大学の数学科2年● Twitter (@ta2gch)● Github (ta2gch)● 自己紹介ページ(https://ta2gch.github.io)
● CommonLispを嗜んでいます。
● clfreaksのリスナーです。
Roswellスクリプトとは
● CommonLispのインストーラー兼ランチャーである
Roswellが用意している簡易的なスクリプト
● 実態は CommonLisp
● main関数にスクリプトの引数を
文字列のリストで渡され、実行される。
● ros init <filename>でひな形が生成できる。
Roswellスクリプトとは
例(自分がよく使うRoswellスクリプト)
● fukamachi/clhs.ros● fukamachi/prove/run-prove.ros● fukamachi/clackup.ros● ta2gch/render.ros
UFOを作った理由
● ezoe コマンドが go で書かれてる。
● roswell スクリプトで ezoe コマンドを作った。
● 本家ezoeコマンドは go get で簡単にイントールできる。
● 一方 roswell スクリプトだと
“git clone→ ros build → mv”
● Go いいよね。← CommonLisp でも go get 欲しい。
質問ではない。
UFOで解決したいこと
問題点1問題点1Roswellスクリプトはローカルで実行するには便利だが、公開しようとするとインストール方法が煩雑になる。
例例$ git clone git://github.com/ta2gch/cl-ezoe
$ cd cl-ezoe
$ ros build cl-ezoe.ros
$ mv cl-ezoe ~/.roswell/bin
UFOで解決したいこと
問題点2問題点2Roswell の機能を使ってインストールしするときは *build-hook* を利用し~/.roswell/bin 配下にインストールするという工夫が必要。
例例#+ros.installing
(eval-when (:compile-toplevel :load-toplevel :execute)
(setq ros.install:*build-hook* (lambda () ...)))
UFOで解決したいこと
問題点3問題点3Roswell スクリプトの公開場所として最適である gist の url が直感的でないので go get をそのまま真似するのは厳しい。
例例https://gist.githubusercontent.com/ta2gch/737882bae1e7d86c99eb/raw/a57f6f0c183b2d32bcc813628cc30277bf5a4b51/test.ros
使い方
$ ufo install gist://fukamachi/clhs.ros
$ ufo install https://example.com/sample.ros
$ ufo install file:///home/username/sample.ros
$ ufo remove clhs
$ ufo update gist://fukamachi/clhs.ros
③でやっていること
● Roswell側でシステムをロードするとソースコード中 にある#+ros.installingが実行される。
● #+ros.installingでは*build-hook*にlambda式がsetqされている。
● どうやら*build-hook*が実行されることでソースツリーの中にroswellフォルダが作られ、その中にプロダクトの実行ファイルがdumpされるようになっている。
● roswellフォルダ内の実行ファイルを ~/.roswell/binに
コピー
使ってみた感想
● gistに公開されているものを気軽にインストール出来るようになるのは、やっぱり便利。
● file://はちょっと邪魔に思うときがある。
● ufo自体のインストールはちょっと面倒。
git clone → cd ufo → ros -l ufo.asd install ufo
今後の課題
● Quicklispに登録
● TravisCIでテストする。(どなたか教えてください。)
● Roswellスクリプトをもりもり書いて、ufoの出番を
増やす。
例例cl-projectやlemを呼び出すRoswellスクリプトとか。
ありがとうございました。
Thank you!
https://github.com/ta2gch/UFO
Special Thanks@nitro_idiot @snmsts