📥

ghでfzfしてghqするextensionを作った

2021/11/10に公開

日本語だか英語だかわからんようなタイトル、失礼しました。

GitHub公式CLIのghの拡張機能を作成しましたので紹介します。

https://cli.github.com/manual/gh_extension

gh q

gh-qという名前にしました。

https://github.com/kawarimidoll/gh-q

依存関係

以下のツールが必要です。

導入

gh extension install kawarimidoll/gh-qでインストールできます。

つかいかた

gh qで起動します。
基本的には、自分のリポジトリが一覧で表示され、fzfを利用したfuzzy findで選択できます。
そして、選択したものをghq getでクローンします。

オプションを渡すことで、他のユーザーのリポジトリを選択することも可能です。

先行研究

はすさんのgh-fuzzycloneを大いに参考にしました。感謝!

https://github.com/hashue/gh-fuzzyclone
https://zenn.dev/hasu_83

おまけ

ブックマークレット

ブラウザで開いているリポジトリをghq getするときは、こちらのブックマークレットを使うことが多いです。

現在のページのURLをもとにghq get ...のコードを生成し、自動でコピーまで行います。

javascript:(d=>((c,b,l)=>{c.textContent=l.href.replace(/(https:\/(\/[^/]+){3}).*/,'ghq get $1');b.appendChild(c);c.select();d.execCommand('copy');b.removeChild(c)})(d.createElement('textArea'),d.body,location))(document)

ghq getしたあとの移動

ghq getはクローン先を自動で設定してくれますが、階層が深くなるので、直接cdするのは億劫です。

私は、クローンしたあとの移動用に、以下のようなコマンドをdotfiles内に定義しています。

cgh() {
  local dir
  dir=$(ghq list | fzf --no-multi --exit-0 --query="$*" --preview="ls -FA1 $(ghq root)/{}")
  [ -n "$dir" ] && cd "$(ghq root)/$dir" || return
}

gh用の拡張もあるようです。

https://github.com/cappyzawa/gh-ghq-cd

おわりに

開発環境を初期化したあと、簡単にghq getしたいと思って作り始めたのですが、運良く先人の肩に乗ることができ、サクッと完成できました。
よろしければご利用ください。

また、過去に以下のextensionも作っているので、試していただけると嬉しいです。
https://github.com/kawarimidoll/gh-graph
https://github.com/kawarimidoll/gh-gh

Discussion