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

github 公式ツール github CLI で全てをコントロールする github

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

しかし、たくさん使うほど便利じゃない部分も少しずつわかってくるもので…

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

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

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

githubとは?

github公式ドキュメントにはこのような記述があります。

GitHubは、バージョン管理および共同作業用のコードホスティングサービスです。GitHubを使えば、どこからでもプロジェクトに参加することができます。

(原文)
GitHub is a code hosting platform for version control and collaboration. It lets you and others work together on projects from anywhere.

Hello World-GitHub Docs

これでは、よくわかりませんね…
単語としては、"Git"、"バージョン管理"、"コードホスティング"がわかれば理解できそうです。

まずは"Git"と"バージョン管理"についてです。

Gitとは、分散型バージョン管理システムの一つで、もともとLinuxのソースコードを効果的に管理するために開発されました。
Gitでは、ファイルの状態を好きなときに更新履歴として保存しておくことができます。そのため、一度編集したファイルを過去の状態に戻したり、編集箇所の差分を表示したりすることができます。

Gitを使ったバージョン管理|サル先生のGit入門【プロジェクト管理ツールBacklog】

Gitとは、ファイルの変更履歴を管理するアプリで、バージョン管理システムとも呼ばれるということがわかります。

続いて、"コードホスティング"ですが、"コード"はソースコードをさし、プログラム文やそのファイルのことです。
"ホスティング"はサーバーを借りてインターネットでコンテンツを公開することです。
つまり、"コードホスティング"はプログラムファイルをインターネット上で公開することを指します。

GitHubは、バージョン管理および共同作業用のコードホスティングサービスです。GitHubを使えば、どこからでもプロジェクトに参加することができます。

もう一度読むと、なんとなく意味がわかりますよね。
つまり、githubとはこんなサービスです。

  • gitを使用する
  • コードを保存
  • ファイルの変更履歴を管理
  • チームで共同作業ができる
  • インターネット上で実行できる

(他にも、継続的インテグレーションを支援する便利機能がたくさんありますが、ここでは省略します。)

さっそく、githubを使いたい!

まずは自分にあった道具を選びましょう。

現在、githubを操作できる公式アプリは3つあります。
初心者はGithub DesktopとWeb版を、上級者はターミナル上でghとgitを使用し補助的にweb版を使用することをおすすめします。

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

それぞれ用途が違うので、それを解説していきます。

機能github CLIgithub Desktopgithub webアプリケーション
認証方法SSHgithub Desktopブラウザ
git機能を含むxOx
リポジトリの作成OOO
リポジトリの操作OxO
issuesの操作Oweb版を開くO
Pull requestsの操作Oweb版を開くO
Projectsの操作xxO
github APIの操作Oxx
github公式アプリの機能の違いについて

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

Github (web版)

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

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

Github Desktop

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

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

Github CLI (gh)

  • ターミナルから使用する
  • gitと組み合わせて使用するとほぼ全ての操作をターミナルから行える
    (commit,push,fetch,pull,branchなどに関連する操作はgitコマンド)
  • ailasを設定できる(ショートカットのようなもの)
  • gitの認証が簡単に可能
  • 動作が軽量

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

ここからはgithub CLIについて詳しく説明します。

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.

cli/cli: GitHub’s official command line tool

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

GitHub CLI
Take GitHub to the command line

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

gh completion | GitHub CLI

この章ではMacでのインストールを前提に解説しています。

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からログインします。

$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の操作をかなり快適で簡単なものにできるツールでした。
最後まで記事を読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました