🎉

[gh-q] gh extensionでghqを置き換える

2024/08/11に公開

TL;DR

gh cli extensionとして作成したgh-qを使うことで、gitプロジェクト管理をより便利にすることができます。

gh extension install HikaruEgashira/gh-q
gh q get HikaruEgashira/gh-q

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

git cloneの接続手段

GitHubは2つのプロトコルでリソースにアクセスできます。

  • HTTP
  • SSH

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/about-authentication-to-github

SSHでの接続は便利な反面、Expireもなければ全てのリソースにアクセスできてしまいます。(HTTPプロトコルでのパスワード認証よりは何倍もマシですが)
CIなど機械的な安全なアクセスをする場合、GitHubが提供する認証手段を用いたアクセスが推奨されています。

よく見られる例が以下のinsteadOfを用いた設定です。
組織のprivateなパッケージにアクセスする場合にx-access-token:${GITHUB_TOKEN}を先頭に付与することでアクセスしたりすることができます。

git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/ORG".insteadOf "https://github.com/ORG"
git config --global url."https://x-access-token:${GITHUB_TOKEN}@github.com/ORG/".insteadOf "ssh://git@github.com/ORG/"

他にもgh cliを用いたアクセス方法があります。
gh cliはGitHubが提供するCLIツールで、GitHubのAPIを叩いたり、リポジトリの操作を行うことができます。

gh repo cloneとgit cloneの違い

gh cliを用いたリポジトリのクローンの方法としてgh repo cloneがあります。
これによって手元でもSSH鍵を利用せずにリポジトリをクローンすることが可能になります。

内部ではgh auth git-credentialを使って認証情報を付与した上でgit cloneを実行しています。

https://github.com/cli/cli/blob/trunk/git/client.go#L99-L109

gh auth setup-gitを実行することで、globalなgit設定にcredential.helperを追加できるので試してみると以下のような設定になっているようです。

[credential "https://github.com"]
        helper = 
        helper = !/opt/homebrew/bin/gh auth git-credential
[credential "https://gist.github.com"]
        helper = 
        helper = !/opt/homebrew/bin/gh auth git-credential

https://zenn.dev/royht/articles/87d10f31617840

ghqについて

ghqはGitHubのリポジトリを管理するためのツールです。日本のエンジニアは愛用してる方も多いのではないでしょうか。

ghq get [-u] [-p] [--shallow] [--vcs <vcs>] [--look] [--silent] [--branch] [--no-recursive] [--bare] <repository URL>|<host>/<user>/<project>|<user>/<project>|<project>
ghq list [-p] [-e] [<query>]
ghq create [--vcs <vcs>] <repository URL>|<host>/<user>/<project>|<user>/<project>|<project>
ghq rm [--dry-run] <repository URL>|<host>/<user>/<project>|<user>/<project>|<project>
ghq root [--all]

https://github.com/x-motemen/ghq

ghqもまたgitのwrapperのためそのままだとgit cloneを用いてリポジトリをクローンすることになります。
gh repo cloneを利用するためにghqを置き換えた簡易なスクリプト「gh-q」を作成しました。

gh-qの使い方

インストール

gh cli extensionとして作成されているためgh cliさえインストールしていれば以下のコマンドでインストールできます。

gh extension install HikaruEgashira/gh-q

使い方

cloneしたいリポジトリのURLを指定して実行します。
owner/repoの形式でも指定できます。

gh q get HikaruEgashira/gh-q

提供しているのはget, listのみですが、それ以外のコマンドを第3引数に指定することでfzfからコマンド実行をしてくれます。

## fzfを使ってリポジトリを選択してVSCodeで開く
gh q code

それ以外のコマンドが欲しくなったらPRを送っていただけると嬉しいです。

Discussion