[gh-q] gh extensionでghqを置き換える
TL;DR
gh cli extensionとして作成したgh-qを使うことで、gitプロジェクト管理をより便利にすることができます。
gh extension install HikaruEgashira/gh-q
gh q get HikaruEgashira/gh-q
git cloneの接続手段
GitHubは2つのプロトコルでリソースにアクセスできます。
- HTTP
- SSH
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を実行しています。
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
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]
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