開発環境でのプロジェクト管理に ghq を導入しました.
ghq は Go 言語と同様のプロジェクト管理を Go 言語以外でも利用するための便利なツールです.fzf を使ってインタラクティブに ghq 管理下のプロジェクトへ移動する設定を書いたので紹介します.
検証環境
- Ubuntu: 19.10
- Bash: 5.0.3
- ghq: 0.14.0
- fzf: 0.18.0
実装
下記コードでC-]
のショートカットでプロジェクト間を移動することができます.__fzfcmd
関数は公式で提供されているスニペット集を利用しています.利用していない場合は適宜fzf
コマンドやfzf-tmux
スクリプトに置き換えてください.
function fzf_pjc() { local project_name=$(ghq list | sort | $(__fzfcmd)) if [ -n "$project_name" ]; then local project_full_path=$(ghq root)/$project_name local project_relative_path="~/$(realpath --relative-to=$HOME $project_full_path)" READLINE_LINE="cd $project_relative_path" READLINE_POINT=${#READLINE_LINE} fi } bind -x '"\C-]": fzf_pjc'
実行例
実行結果の選択画面は下記のようになります.ここでは例として ghq, fzf, kubernetes のリポジトリが ghq で管理下にあるものとします.
> < 3/3 github.com/motemen/ghq github.com/junegunn/fzf > github.com/kubernetes/kubernetes
この状態で決定キーを入力するとシェルに次のように移動コマンドが生成されます.問題なければそのまま実行します.
$ cd ~/pjc/github.com/kubernetes/kubernetes
私の環境では ghq の root を ~/pjc
と設定しているため,上記のような移動コマンドが生成されています.異なるディレクトリを指定している場合はその設定に対応したコマンドが生成されます.
まとめ
工夫した点としては,プロジェクトの選択画面では自分のプロジェクトの場所に興味はないので純粋に移動したいプロジェクトだけを表示し,選択後にそのプロジェクトに移動するコマンドを生成するようにしています.手動で移動する際は絶対パスでは書かないため相対パスで表示することで違和感を減らしたこともこだわりです.既存のスニペットでは実現できなかった自分のこだわりを実現することができたので,この機能に関しては満足しています.