メインコンテンツまでスキップ

github公式ツール"gh"、webページを開く手間なしでターミナルからサクサク快適

· 約11分
時雨風
箱庭の管理者

こんにちは。時雨風です。 ここ最近、githubの便利さに気づきました。privateリポジトリでも無制限にファイルを保存できるうえに、その他管理機能や便利機能が充実しています。最近プロジェクトを作成したら、ほぼgithubに保存しています。

しかしそうなってくると、便利じゃない部分も少しずつわかってくるもので…

例えば、リポジトリのクローンをする際。 githubのページを開いて、ログイン認証し、リポジトリを探す、といった操作でボタンをポチポチするのが面倒になってきたのです。 1回であればそれほどではありませんが、いかんせんプロジェクトが増えすぎてしまいました。

そんな時にみつけたのが、ghと呼ばれるCLIアプリです。 これを使用するとコマンド一つでgithubを操れるようになります。めっちゃ便利です。

この記事ではghのコマンドや他のgithub公式ツールとの違いについてまとめました。

githubを操作したい

githubを操作する公式アプリは3つあります。 それぞれ用途が違うので、それを解説していきます。

Github(web版)、Github DesktopとGithub CLI(gh)の違い

Github (web版)

  • ブラウザから操作可能
  • githubのほぼ全ての機能が使用可能
  • gitに関する操作はできない

Github Desktop

  • gitの操作(commit,push,fetch,pull,branchなどの操作)が可能
  • アプリケーションなので、GUIで簡単に操作できる
  • 初心者におすすめ

Github CLI (gh)

  • ターミナルから使用する
  • gitと組み合わせて使用するとほぼ全ての操作をターミナルから行える (commit,push,fetch,pull,branchなどに関連する操作はgitコマンド)
  • ailasを設定できる(ショートカットのようなもの)
  • gitの認証が簡単に可能
  • 動作が軽量
機能github CLIgithub Desktopgithub webアプリケーション
認証できる範囲SSH(gh/git)github Desktopのみブラウザ
git機能を含むxOx
リポジトリの作成OOO
リポジトリの操作OxO
issuesの操作Oweb版を開くO
Pull requestsの操作Oweb版を開くO
Projectsの操作xxO
github APIの操作Oxx

この表を見るとわかるように、それぞれのアプリで得意な分野が分かれます。

githubのweb版では、githubの機能のほぼ全てを操作できるようになっています。しかし、ブラウザからローカルファイルの操作はできないためにgit操作ができません。 欠点としては、ブラウザでサーバーとのややりとりが必須になるため、動作が遅くなりがちな点です。

github Desktopでは、web版ではできないgit機能を主軸としています。githubリポジトリの作成も行えます。 guiアプリであり、gitの操作に慣れていない初心者でもわかりやすいアプリであると言えます。

github CLIは、web版と同じようなことができます。 web版と異なるのは、ターミナルで操作するため全ての動作が軽量ということです。 また、コマンドラインツールのgitと併用するとターミナルからほぼ全ての操作が行えます。ターミナル以外にブラウザやgit用のアプリを開かなくてもよくなり、「アプリを立ち上げすぎてパソコンの画面が固まった」ということを減らせます。 欠点は、ターミナルからの操作はコマンドを調べる必要があるために慣れるのに時間がかかる場合があるという点です。

gh とは?

github CLIのことです。ターミナルから使用し、ghというコマンドで機能を呼び出せます。 公式リポジトリでは、「gh はコマンドライン上の GitHub です。プルリクエストやイシュー、その他の GitHub のコンセプトを、あなたがすでに git やコードを操作している場所の隣にあるターミナルで実現します。」と紹介されています。

gh is GitHub on the command line. It brings pull requests, issues, and other GitHub concepts to the terminal next to where you are already working with git and your code. https://github.com/cli/cli

インストールはこちらから

https://cli.github.com/

便利な補完機能を設定する際はこちら

gh completion | GitHub CLI

mac(zsh)を使用している場合の設定

$brew install zsh-completions

ターミナルのタブを開くたび有効になるように、設定を~/.zshrcに出力します。

$echo "# zsh-completionsを有効にする if type brew &>/dev/null; then FPATH=$(brew --prefix)/share/zsh-completions:$FPATH autoload -Uz compinit compinit fi" >> ~/.zshrc

$echo $fpathよりzsh-completionsの補完ファイルがあるディレクトリを探します。

時雨風の環境では下記でした。

/opt/homebrew/share/zsh-completions

補完ファイルを出力します。

$gh completion -s zsh > /opt/homebrew/share/zsh-completions

補完ファイルが出力され、入力の途中でもtabを押すことで既に入力された単語から補完を行うようになります。

ここからはよく使う操作コマンドの一例を紹介します。

ログイン

まずはgithubにgh cliからログインします。

$gh auth login

このログイン機能がghの一つ目の目玉です。 というのもこの操作を行うことでコマンドラインツールであるgitの認証も行えるのです。 これを正攻法?で行うとすると、こちらのページにある手順をしなければならず、結構な手間が発生します。 こちらのコマンドを使用すると、ブラウザにコードを入力するだけでお手軽なのです!

リポジトリの操作

ghを使用してリポジトリを操作します。 gh repo --helpでリポジトリ操作に関するヘルプを表示できます。

Work with GitHub repositories.

USAGE
gh repo <command> [flags]

CORE COMMANDS
archive: Archive a repository
clone: Clone a repository locally
create: Create a new repository
delete: Delete a repository
deploy-key: Manage deploy keys in a repository
edit: Edit repository settings
fork: Create a fork of a repository
list: List repositories owned by user or organization
rename: Rename a repository
sync: Sync a repository
view: View a repository

INHERITED FLAGS
--help Show help for command

ARGUMENTS
A repository can be supplied as an argument in any of the following formats:
- "OWNER/REPO"
- by URL, e.g. "https://github.com/OWNER/REPO"

EXAMPLES
$ gh repo create
$ gh repo clone cli/cli
$ gh repo view --web

LEARN MORE
Use 'gh <command> <subcommand> --help' for more information about a command.
Read the manual at https://cli.github.com/manual

主に使用するのはclone(カレントディレクトリにクローン),create(リポジトリの作成),view(リポジトリをターミナルかブラウザで表示),list(リポジトリの一覧表示)だと思います。

--helpのオプションを指定するとヘルプが表示されます。 例えば、listの使い方がわからない場合は、$gh repo list --helpと打ち込みます。

リポジトリの一覧を表示する

リポジトリの一覧表示にはlistを使用します。 何もしてしないと自分のアカウントが持っているリポジトリが表示されます。

$ gh repo list

他アカウントや組織アカウントのリポジトリを表示するにはlistの後にownerを指定します。

$ gh repo list tokiukaze

リポジトリのブラウザ表示

githubからcloneしたディレクトリ上で下記コマンドを行うとブラウザでgithubのリポジトリを表示してくれます。

$ gh repo view --web

クローンを行う

gh repo listで確認したリポジトリを指定してカレントディレクトリにcloneすることができます。

$gh repo clone tokiukaze/python-exa

リポジトリの作成

下記コマンドで対話的にリポジトリを作成できます。

$gh repo create

リポジトリやその可視性(private/public)を指定すれば、1行のコマンドで作成できます。

$gh repo create test-repo --private

コマンドは紹介した以外にも、多数存在します。 紹介しきれないので、詳しくは実際にコマンドを叩いてみるか公式ページをみてみるとたくさんのコマンドを知ることができます。 こんなこともできるのかってくらいたくさんあります。

## まとめ

ここまで、ghの紹介をさせていただきました。 コマンドを覚える必要があるものの、githubの操作をかなり快適で簡単なものにできるツールでした。 最後まで記事を読んでいただきありがとうございました。