そう言えば、selfishというツール作っていました

これは何?

gistのuploadを手軽にするやつです。goの勉強のための習作でした。

経緯

以前から結構gistを頻繁に利用していて、特に複数ファイルをuploadしたい場合には、web画面からポチポチとファイルを指定していくのではつらすぎる感じがしてました。なので、今まではgistyというツールを使っていたのですが。おそらく利用するユーザー層と自分とは完全にはマッチしていない感じでちょっと不便だなとは思っていました。

gistにuploadする際に、複数のファイルを指定してuploadしたくはなると思います。これはgistyでもサポートしていて頻繁に利用していました。

$ gisty post x y z 

ところで、このuploadしたxに少し修正を加えた結果をuploadしたいとなった時に便利に取り扱う方法がなかったというのが問題でした。gistyはgistへのuploadと同時に ~/.gisty/ 以下などにuploadした内容をcloneしてくれるので、その中のファイルを変更しpushしてあげるとupdateできた(記憶が)あるのですが。そもそも、自分が変更したかったファイルは別の場所に隔離されたコピー(~/gisty/<gist id>/x などのことを言っている)ではなく、コピー対象となったファイル自体であることがほとんどなので上手くいきません。

また、新規のアップロードか既存のgistの更新なのか判断するためにgistのidを指定するのはどうでしょう?そもそもgistのidを覚えておいたりコピペしたりするのが嫌でした。

このため、今までの利用方法としては、特定のファイルの更新であっても新規にgistをuploadし直してました。(時間当たりのファイルの内容の遷移を追うことはできなくなりますが、そのあたりは利便性との兼ね合いで目をつむってました)

selfish

そんなわけでgoの勉強も兼ねて丁度良いということでgistのuploadをする自分用のツールを作ろうと思ったのでした。基本的には新規作成・更新・削除以上のことをしないのでそれしかサポートしていません。

インストール方法

インストール自体は以下でできます。

$ go get github.com/podhmo/selfish/cmd/selfish

色々調べた結果、 cmd 以下に実行コマンドのコードを置くという方法があるらしいということを知りなるほどと思いました。 (調べたメモ)

使い方

gistのidを管理するのが面倒だったので以下のようにaliasを指定できるようにしました。

$ selfish -alias mytest x y z
create success. (id="5639abca377b5c92061248666d38e6aa")
opening.. "https://gist.github.com/5639abca377b5c92061248666d38e6aa"

上の例では、mytestという名前で管理することになります。これで新規のgistが生成されます。gistyに倣ってgist作成後に作成したgistのページをブラウザで開きます。

また、さらにxに変更があった場合には再度以下の以下のコマンドを実行してください。

$ selfish -alias mytest -silent x y z
update success. (id="5639abca377b5c92061248666d38e6aa")

gist post後にブラウザで開かれるのが邪魔な場合には、 -silent を付けると抑制出来ます。

upload済みのgistを消したい場合には -delete を付けると消せます。

$ selfish -alias mytest -delete
deleted. (id="5639abca377b5c92061248666d38e6aa")

ちなみに -alias を指定しない場合には、 head というaliasで新規作成されます。(ただし -alias head と明示的にaliasを指定しない限り更新はされません)

結果

gistのrevisionが機能するようになった。嬉しい。

細かいこと

sqliteなど使うのはおおげさかなと思い使わない選択をしたのですが、ところで、LIFOみたいなものを雑に保持するのに何が良いんだろう?みたいなことを思ったりしました。