octahedron

LemとSKKとCommon Lispでたたかうプログラマのブログ

roswellで開発中プロジェクトを簡単にloadする

 開発中のプロジェクトを簡単にloadできるようにするスクリプトを書きましたが、改訂の途中です。

  • 2017/05/25 追記: roswellのサブコマンドになりました。詳細はroswellサブコマンドへの道参照

動機

 ぼくはrosaやinquisitor等々ライブラリを改修するときにslimeからql:quickloadするため、~/roswell/local-projects/にライブラリの.asdファイルにシンボリックリンクを張って開発をしています。どうもASDFシンボリックリンクを辿ってくれるようなので、便利です。

 ところで一方、roswellのリリースがあるたびに~/.roswellを消すことにしています。理由はなんとなくです。そうすると、だいたい一ヶ月に一回くらい~/.roswellを消していることになりますが、~/.roswell/local-projectsの中身も消えてしまうので、その度にシンボリックを張り直しています。

 それってめんどくさい。

 そして、それって自動化できるなと今日(ついに!)気付いたので、それを自動化してみました。

最初のアプローチ

……というようなことをシェルスクリプトで書いてみました。どうやっているかは中を覗いてみてください。

dotfiles/ros-local.sh at 747385a4e6900484eb2f583196dcf78cd846481c · t-sin/dotfiles · GitHub

 Usageはこんなかんじ。

    cat <<EOF
localprj.sh COMMAND [PARAMS...]
Maintain roswell local-prpjects. localprj.sh see in ROSWELL_DIR to search roswell's
local projects. Also it see in CODE_DIR to search local codes.
COMMANDS:
    show           show present configuration.
    local          list asd files in local-projects.
    list           list available asd files in code directory.
    put ASD_NAME   make symbolic link from ASD_FILE into roswell local-projects.
    del ASD_NAME   unlink ASD_FILE from roswell local-projects.
EOF

S式への道

 仕事中になにやっとんねんという感じですがお昼休みなのでだいじょうぶです。もしかしたら車輪を再発明したかもしれないのでツイートしてみたところ、roswell作者の佐野さんからご意見が。

 ql:qmergeとかasdf:load-asdとかあるんですね。初めて知りました。というわけで、roswellスクリプトとして書きなおしてみました。シェルスクリプト版が存在したのは正味一時間程度でした。

 さようなら、ros-local.sh
 ありがとう、ros-local.sh

 そして、

_人人人人人人人人人人人人人人_
> ようこそ! Common Lisp! <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

dotfiles/ros-tap.ros at 751b5298fed6f1482731d6c81b70c24335184489 · t-sin/dotfiles · GitHub

 え、しごと? ちょっとストレスが溜まってたし、忙しくなかったからゆるして……。

roswellサブコマンドへの道(追記)

 この記事を公開後、佐野さんからこのようなご意見をいただきました。

 なんと、roswellのサブコマンドは自前で追加が可能だったんだよ!!
 な、なんだってー!

 というわけで、プロジェクトに切り出しました。ライブラリ開発してるとけっこう便利そうなので使ってみてください。プルリクやご意見大募集中です。

github.com

おわりに

  • eval必要かしらん
  • 出力ファイルが大文字なの、カッコわるい気がする
  • roswellにぷるぷるリクエストを出して、rosコマンドに入れてもらうのアリでは?
    • roswell入れてもらわなくても拡張可能でした