Ghq + Percol + Docc

各プロジェクトのディレクトリをどのように管理するかってのは長年の悩みだった.

Go言語を使うようになるとそのシンプルなディレクトリ構成が自分の中で1つの最適な解となった.GithubやGoogle Codeにソースをホストすることが前提となっている今,ホスト名・ユーザ名・プロジェクト名によるGoのディレクトリ構成はどのようなプロジェクトでも通用する.そのため,最近は,社内のプロジェクトを含め,すべてプロジェクトディレクトリをGoの作法に従うように管理するようになった.

そして,以下の記事に出会った.

まとめると,

  • export GOPAHT=$HOME
  • ghqでGo以外のプロジェクトもGoの作法で$GOPATH/srcに集約
  • percolで効率的なディレクトリの検索・移動

かなりライフチェンジング.とてもシンプルになった.

docc

さらに進めてdoccというコマンドを作った.

tcnkms/docc · GitHub

これは指定したプロジェクトのGithubページ,もしくはREADME.mdを開くコマンド.単独でもさらっとプロジェクトのドキュメントを参照するのに使える.

これをghqpercolと組み合わせる.例えば,以下のようなpercolスクリプトを作る.

1
2
3
4
5
6
7
8
9
10
11
function percol-doc () {
    local selected_dir=$(ghq list --full-path | percol --query "$LBUFFER")
    if [ -n "$selected_dir" ]; then
        BUFFER="docc ${selected_dir}"
        zle accept-line
    fi
    zle clear-screen
}

zle -N percol-doc
bindkey '^O' percol-doc

すると,例えば上のgifのように^Oで,ghqで集約したプロジェクトをpercolで検索して,そのプロジェクトのGithubページをブラウザで開くということが可能になる.

インストールは以下.

1
2
$ brew tap tcnksm/docc
$ brew install docc

dockerのGoパッケージ

doccはGo言語で書いた.その際,dockerが内部で独自に作っているmflagパッケージを使った.これは,標準パッケージのflagを改良したもので,より柔軟な引数処理の作成ができる(例えば,1つのオプションに複数のオプション名を持たせることができるとか).

このようにdockerは別のプロジェクトでも使える便利Goパッケージをdotcloud/docker/pkgに持っている.詳しくは,“the lost packages of docker”にまとめられている.最近,別レポジトリもつくられたようなので,これからもっと増えそうだなと眺めている.

doccのバグは,@deeeet,もしくはGithubのIssueにお願いします.


Full Blog →