メモやちょっとしたスクリプトなどをペーストするとgitのリポジトリとして管理してくれるgistというサービスがあります。そのgistにコマンドラインから投稿するツールがあって、それは前に少し紹介したんですが、それをもうちょっと便利にしたものを作りました。
swdyh's gisty at master ― GitHub
http://github.com/swdyh/gisty/tree/master
gistコマンドとの違いはこんな感じです。
- ポストするときにファイルを指定。ファイル名、拡張子つきでアップされる。
- ポスト時に複数ファイルを指定できる。
- ポスト後、ブラウザで開く。(Macのみ)
- ポスト後、ローカルにcloneする。
- 過去のgistにアップしたのを全部のclone、またはpullする機能
gistyを使うと簡単にファイル名と拡張子つきでポストできて、そのままローカルにcloneされるので、変更したい場合も、そのファイルを編集してpushすれば済みます。なので、Webのフォームを全く使わずにgist使えるようになります。ただメモをペーストする場合ファイル名はあんまり意味がないけれど、cloneしてあとで編集しようとすると、ファイル名があった方がずっと分りやすいです。あと拡張子をつけておくとシンタックスハイライトが有効になります。あと、gistyではgithubのアカウントで投稿することを前提にしていて、無名の投稿は想定してません。
インストール方法
gem install gisty
初期設定
環境変数のGISTY_DIRで、アップしたgistをcloneしてくるディレクトリを指定します。自分の場合は、.zshrcでこんな感じに指定してます。
export GISTY_DIR="$HOME/dev/gists"
gistコマンドと同じく、git configでユーザIDとAPIトークンを設定します。
git config --global github.user your_id git config --global github.token your_token
githubのアカウントページ(https://github.com/account)の、"Global Git Config"というところを押すと、やり方が表示されます。
zshを使っているひとは、ここから_gistyというファイルを落として、$fpathのディレクトリに入れおくと、コマンドが補完されてより便利です。
使い方
- gisty post file1 file2 ...
- ファイルをgistにポストします。
- gisty private_post file1 file2 ...
- ファイルをプライベートな状態でgistにポストします。
- gisty sync
- gistにアップされたものを全てcloneしてきます。
- gisty sync_delete
- ローカルの方にしかないgistを削除して、syncします。
- gisty pull_all
- ローカルのgistでpullを実行します。
- gisty list
- ローカルにcloneしてきたgistの一覧を表示します。
- gisty help
- ヘルプを表示します。
- gisty about
- gistyに関する情報を表示します。
実装の話
gistへのポストはgistコマンドを参考にしながら、複数ファイルもいけるようにしました。ポスト後は、クリップボードにURLを入れるよりブラウザで開いた方がいいなあと思ったのでそうしました。ただMac以外の環境でのやり方がわからなかったので、とりあえずMacのみです。gist syncは、自分の一覧が必要なのでmineのページをnokogiriでスクレイピングしてます。件数が多いと取得するページ数が増えて時間がかかるかもしれません。Webページを取ってきたり、gitのコマンドを実行したりと、いろいろ外部に依存していてるので、テストはrrというモックフレームワークを使って、open_uriやsystemコマンドを差し替えるようにして書きました。