Tech Blog

peco&ghqでプロジェクト間の移動を最適化する

2020-01-22

やりたいこと

  • プロジェクト間の移動を最適化する
  • 履歴検索にも絞り込み検索
  • リモートリポジトリをブラウザで開く時にも絞り込み

前提条件

  • macOS環境。

Goのインストール

brew install go
go version
go version go1.11.4 darwin/amd64

インストール

pecoのインストール

brew install peco
peco --version

動作確認として以下のコマンドを実行します。

ls | peco
QUERY>

という画面が表示され、現在のディレクトリのファイル一覧が表示されればOKです。

ghqのインストールと設定

brew install ghq
ghq -v

ghqでクローンするファイルの場所を~/dev/src設定します。

(ここは任意ですが、GOPATHの中である必要があります)

.gitconfigファイルに以下の設定を追記しましょう。

[ghq]
    root = ~/dev/src

$GOPATHが~/devの場合の設定となります。GOPATHの設定方法は、zshの場合 .zshenvexport GOPATH=$HOME/go の行を追加します。

使い方は簡単で、今までgit clone [url]でクローンしてきたところを、 ghq get [url]とするだけです。

ghq getで取得したリポジトリは~/dev/src以下には 位置され、例えば~/dev/src/github.com/junpeko5/[プロジェクト名]にリポジトリがクローンされるようになります。

リモートリポジトリのサービス、アカウント毎でディレクトリが分かれるため、管理が楽になります。

また、ghq listコマンドを叩くと、ghqで取得したローカルリポジトリのパスが取得出来ます。

ghq list

プロジェクト間の移動を最適化する

準備が整ったところで、早速pecoとghqでクローンしてきたリポジトリに移動するエイリアスを設定していきます。

.zshrcに以下を追記しましょう。

# peco の設定(リポジトリ間の移動を行う)
function peco-src () {
  local selected_dir=$(ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}
zle -N peco-src
bindkey '^]' peco-src

ターミナルを再起動し、^]つまり、controlと]記号を入力することでスクリプトを実行します。

ghq list -pでローカルリポジトリを一覧表示したものをpecoに渡し、絞り込み検索出来るようになります。絞り込んだ結果を選択すると、選択したリポジトリにcdコマンドで移動出来ます。

履歴検索にも絞り込み検索

同様に、コマンドのhistoryをpecoで絞り込み検索できるようにしたものが以下です。

.zshrcに追加します。

# peco の設定 (履歴を検索する)
function peco-history-selection() {
    BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`
    CURSOR=$#BUFFER
    zle reset-prompt
}
 
zle -N peco-history-selection
bindkey '^R' peco-history-selection

リモートリポジトリをブラウザで開く時にも絞り込み

brew install hub

.zshrcに追加します。

alias hb='hub browse $(ghq list | peco | cut -d "/" -f 2,3)'

おわりに

内容が反映されない場合はexec zsh -lでログインし直して試してみてください。

これだけでかなりターミナル環境が整う印象です。

ぜひ設定してみてくださいね。