gh-otui:所属するOrganizationのリポジトリを高速に検索・クローンするためのツールの紹介
3行まとめ
- gh-otui は GitHub の Organization やユーザーに所属するリポジトリを fuzzy finder で高速に検索・閲覧できる CLIツール
- GitHub CLI(gh)と ghq、peco(または fzf)を組み合わせてターミナル上で完結する開発者向けツール
- 既にクローン済みのリポジトリは視覚的に区別され、未クローンのリポジトリは選択するだけで自動クローン
はじめに
複数の GitHub リポジトリで作業している開発者にとって、リポジトリの管理って結構大変ですよね。特に複数の Organization に所属していたり、たくさんのリポジトリを扱っていると、単純に「あのリポジトリどこだっけ?」「名前はなんとなくわかるんだけど、アクセスしてクローンするのめんどくさいな…」という経験、ありませんか?
クローンしたものをfuzzy finderで見つけたいのであれば、単純にghq + pecoなどで良いと思います。実際にそれを使っている方ももたくさんいると思います。
しかし自分の場合、クローンの手間すら簡単にしたいという思いがありました。例えば、部署異動があった場合や、パソコンの交換時など、毎回新しいリポジトリページにアクセスしてSSH URLをコピーしてターミナルに貼り付けてクローン...というのはとても面倒くさく感じました。リポジトリと Organization の大体の名前だけ知っていたらすぐにクローンできる状態が理想だと考えたのです。
そんな自分自身の悩みを解決するために作ったのが、この gh-otui(/oˈtuː.i/ と読みます)です。名前の通り、gh コマンドの拡張機能として作りました。gh の認証情報で取得したGitHub の Organization やユーザーリポジトリを fuzzy finder のインターフェースでサクッと検索して、ghq を使ってクローンする作業をスムーズにこなせます。名前の由来は「gh + org + tui」からきています。
この記事では、私が開発した gh-otui の基本的な使い方と活用法について紹介します。実際に自分が日々使って便利だと感じているポイントもお伝えできればと思います。
インストール方法
gh-otui を使うには、以下のツールが必要です:
- GitHub CLI (gh)
- ghq
- peco または fzf
これらのツールをインストールしたら、gh-otui は GitHub CLI の拡張機能として以下のコマンドで簡単にインストールできます:
gh extension install n3xem/gh-otui
使い方
1. リポジトリキャッシュの作成
まずは所属している Organization のリポジトリ情報をキャッシュしましょう。今後、gh otuiを使う時はこのキャッシュを参照するようになります。
gh otui --cache
このコマンドは GitHub API を使って、あなたが所属している Organization とあなた自身のリポジトリ情報を取得して、ローカルにキャッシュします。キャッシュは ~/.config/gh/extensions/gh-otui/cache.json
に保存されます。
2. リポジトリの選択
キャッシュを作成したら、次のコマンドを実行してリポジトリ選択画面を開きましょう:
gh otui
このコマンドを実行すると、peco または fzf のインターフェースが表示されて、キャッシュされたリポジトリ一覧から目的のリポジトリを検索できます。リポジトリは以下の形式で表示されます:
[✓] github.com/organization-name/repository-name
先頭の ✓
マークは、もう既にローカルにクローン済みのリポジトリを示しています。
3. リポジトリのクローンと移動
リストからリポジトリを選択すると、こんな動きをします:
- 未クローンのリポジトリを選んだ場合:自動的に ghq を使ってクローンしてくれます
- 選択したリポジトリのローカルパスが標準出力されます
実用的な使い方としては、以下のようにコマンドと組み合わせると、選択したリポジトリに直接移動できて便利です。
cd $(gh otui)
これだけで、リポジトリの検索からディレクトリへの移動までを一気に完了できちゃいます。個人的に、このコマンドを abbr(alias) に登録して毎日使っています。
以下のように、VSCodeやCursorなど、エディタで開くようにしても便利です。
code $(gh otui)
cursor $(gh otui)
4. 環境変数による設定
gh-otui は以下の環境変数で動作をカスタマイズできます:
-
GH_OTUI_SELECTOR
: 使用する fuzzy finder を指定します(peco
またはfzf
)- 設定がない場合は、インストールされているものを自動的に使用します(両方ある場合は peco が優先)
ユースケース
gh-otui、こんな場面で役立ちます。
1. 大規模・複数の Organization での開発
数百、数千のリポジトリがある大きな Organization、しかもそれが複数ある場合などで作業する場合、目的のリポジトリを見つけるのって大変です。gh-otui は fuzzy finder の強力な検索機能を活かして、リポジトリ名の一部からサッと目的のリポジトリを見つけられます。クローンしていなくてもです。このツールを作ったモチベーションの一つです。
2. 新しい環境のセットアップ
新しいマシンで開発環境をセットアップするとき、必要なリポジトリを次々とクローンする作業って面倒ですよね。実は ghq-handbook に書いてある通り、 ghq コマンドを使えば、クローン済みのリポジトリをリストにして、一気に取得することができます。これにより環境構築の時間を大幅に短くすることができます。
しかし、引越しを機に必要なリポジトリだけ持っていってスッキリさせたい、という場合もあると思います。
gh-otui を使えば、必要なリポジトリを対話的に選んでクローンできます。僕の同僚のKuromiyaさんもこの使い方をしていました。
自分が想定していない使い方だったので、今後この使い方をサポートできる機能を追加できないか考えています。
今後の課題
gh-otui は gh otui --cache
で取得したキャッシュを常に参照するため、新しくリポジトリが作成されると、キャッシュをし直さないと対応できないという点があります。これに対応するため、キャッシュをより便利に行えるシステムが必要だと考えています。
おわりに
gh-otui は、自分自身が部署異動した際に生まれた悩みから生まれたツールです。GitHubと連携して開発を行う中で、「もっと簡単にクローンできないかな」という思いが形になりました。シンプルな機能ですが、毎日の小さなストレスを減らすのに役立っていると実感しています。
ぜひ gh-otui を日々の開発ワークフローに組み込んで、より快適な GitHub リポジトリ管理を体験してみてください!皆さんのフィードバックをもとに、さらに便利なツールに進化させていければと思っています。
謝辞
このツールは、優れた先人たちのツールの上に成り立っています。特に、ローカルリポジトリの管理を容易にした ghq、そして直感的な検索インターフェースを提供してくれる peco や fzf のコントリビューターの皆さんに深く感謝します。
gh-otui は、これらの素晴らしいツールを組み合わせただけの小さなツールですが、日々の開発ワークフローを少しでも快適にする一助となれば嬉しいです。
Discussion