Linux あれこれ

Linux 関連の備忘録です。

GitHub を「GitHub CLI」で操作してみる〈H163-3〉

登録日: 2023-01-25 更新日: 2023-01-25

GitHub のブラウザ画面において、緑色の「Code」ボタンで「GitHub CLI」を選ぶと、そのクローンを実行する「gh コマンド」の貼付けが表示されるようになりました。

-

GitHub の操作は、今までであれば、端末画面で「git」コマンドを使い、その後、ブラウザで操作していました。 「GitHub CLI」は、ブラウザの操作をしなくても、端末の「gh」コマンドで GitHub の操作が出来るツールです。

-

端末メインで使っている開発者であれば、途切れなく端末で操作出来るので、便利だろうと思います。

一般の人でも便利に使えるのか、自身のリポジトリで確認してみました。

その備忘録です。

-

-

使用したPC は「ASUS Chromebox CN60 」で、プロセッサは第4世代の「Intel Celeron 2955U 」です。

UEFI 立ち上げ」のPC です。

-

(注)リンクを戻るときはブラウザの左上の「←」をクリック

-

-


目次

-

今回の作業:

  1. 「GitHub」のアカウントを作成:

  2. 「リポジトリ」を作成:

  3. 「git」コマンドのインストール:

  4. 「gh」コマンドのインストール:

  5. 「gh」コマンドの補完の設定:

  6. 「gh auth login」でログイン(認証):

  7. 「デフォルトのリモート リポジトリ」を設定:

  8. 「gh」コマンドを実際に使ってみる:

-

参考:

  1. 「gh」コマンドのヘルプ、および、補完時の表示:

  2. 「GitHub CLI」の使用例 (Usage examples):

  3. 「gh」コマンドの設定ファイル:

  4. 「gh」の環境変数:

  5. 「GitHub」関連のリンク:

「まとめ へ」

-

「目次詳細 へ」

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - -

Xubuntu 22.04.1 LTS での操作:

-

「端末」で、「GitHub CLI」のコマンドを使用:

→見やすいように色分けして表示されます。

-

ちなみに、Xubuntu のデフォルトの「端末」アプリは「xfce4-terminal」です。

「端末」アプリの設定により、見映えは変わると思います。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - --

GitHub CLI」について:

-

公式サイト:

GitHub CLI

-

「gh」は、コマンド ラインの「GitHub」です。
ブラウザでなく、端末に表示されるので、開発環境で使いやすいツールです。

-

GitHub CLI は、「GitHub.com」および「GitHub Enterprise Server 2.20」以降でホストされている「リポジトリ」で利用でき、MacOSWindows、および Linux にインストールできます。

-

最新の安定版:

GitHub CLI 2.21.2 Latest

GitHub の本家を覗くと、「ブランチ」や「タグ」の使い方が特徴的です。 「branch」でなく「trunk」という使い方なので、色々な開発環境の人たちが集まっているようです。

ちなみに、「GitHub」は 2018年に「Microsoft」に吸収されました。その影響もありそう。

-


1). 「GitHub CLI」=「gh コマンド」+ α :

  • GitHub が公式で公開しているツールで、無償で提供されています。

  • ブラウザで行っていた「GitHub の操作」を「端末」から「gh」コマンドで実行できます。

  • コマンドで完結できるので、スクリプトによる自動化ができます。

  • 内部でのエイリアスができるので、操作性のアップやスクリプト化がやりやすそう。

  • GitHub CLI 2.0」から拡張機能がサポートされ、「カスタムコマンド」が作成できます。

 → 項番 6). 「コミュニティ拡張機能」で共有:

-


2). 「GitHub CLI」で主にできること:

  • リポジトリ」の表示、作成、クローン、フォーク
  • 「Issue」と「 プルリクエスト」の作成、クローズ、編集、一覧表示
  • 「プルリクエスト」のレビュー、diff、マージ
  • GitHub Actions」のワークフローの実行、表示、一覧表示
  • 「リリース」の作成、一覧表示、表示、削除
  • GitHub Gists」の作成、編集、一覧表示、表示、削除
  • GitHub Codespaces」の一覧表示、作成、削除、接続

-

GitHub Codespaces」とは 、GitHub 社内で運用されていたクラウド開発環境です:

仮想マシン上で実行されている Docker コンテナー内の GitHub によってホストされているので、
設定なしで、どの端末でも使えるのが利点。

→個人用アカウント: 「ストレージ」15 GB/月、「コア使用量」120 時間まで、無料で提供されています。感謝。

-


3). 不安材料:

今まではブラウザの画面で確認できましたが、 端末画面だと確認漏れが出ないか、ちょっと心配。それと日本語化されていないこと。

→追記: 必要であれば、コマンドに「-w」をつけることで「ブラウザ」を起動して確認できました。

-


4). 操作ガイド:

GitHub CLI マニュアル:

-


5). 利用可能なコマンド(Available commands

オンラインドキュメント(英文)へのリンクを紹介:

-

Core commands(主な コマンド)

-

GitHub Actions commands(GitHub Actions のコマンド)

-

Additional commands(追加のコマンド)

-


6). コミュニティ拡張機能(Community extensions)

GitHub CLI 拡張機能は、「コミュニティが管理するリポジトリ 」です。
コミュニティが作成した「カスタムコマンド」が公開されています。

-

ローカルにインストールすると、「gh」コマンドに機能が追加できます:

「カスタムコマンド」によっては、「GitHub」の操作だけでなく、別の用途にも利用できます。

-

参考:

「GitHub CLI 2.0」が公開 ~カスタムコマンドで機能を自由に拡張

-


7). 使うときのヒント:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ---

1. GitHub のアカウントを作成:

-

すでに、GitHub のアカウントを持っているのなら、作業は要りません。

-

こちらの投稿 」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----

2. 自身の GitHub の「リポジトリ」を作成:

-

上記の作業の続きです。作らなくても、フォークしたときに自動で作られます。

今回は、GitHub の操作の確認用にひとつ作りました。

-

こちらの投稿 」を参照:

-

後で非公開にする場合は、「こちら 」を参照:

-

「gh」コマンドで作成しても良いかも。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - -----

3. 「git」コマンドのインストール:

-

クローンを作成するPC で作業します。

-

こちらの投稿 」を参照:

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- -

4. 「gh」コマンドのインストール:

-

参考:

cli/README.md

Installing gh on Linux and BSD

-


1). 「Debian」や「Ubuntu」の場合:

-

(1). 「curl」のインストール:
$ sudo apt install curl
:
以下のパッケージが新たにインストールされます:
  curl

-

(2). キーとリポジトリの登録:
$ curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null

→長いですが、すべてで 1行のコマンドです。貼り付け時に警告が表示されたら、「貼付け」をクリック

注: GPG 署名キーの変更がありました。以前に「githubcli-archive-keyring.gpg」ファイルをダウンロードしていても、再度ダウンロードが必要です。

キー サーバーを使用してキーをダウンロードしている場合、新しいキーの ID は「23F3D4EA75716059」です。

-

(3). リポジトリの更新:
$  sudo apt update
:
取得:1 https://cli.github.com/packages stable InRelease [3,917 B]    ←(追加)
取得:2 https://cli.github.com/packages stable/main amd64 Packages [345 B] ←(追加)
ヒット:3 http://jp.archive.ubuntu.com/ubuntu jammy InRelease              
ヒット:4 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease      
ヒット:5 http://security.ubuntu.com/ubuntu jammy-security InRelease
ヒット:6 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
:
パッケージはすべて最新です。

-

(4). 「gh」のインストール:
$  sudo apt install gh
:
以下のパッケージが新たにインストールされます:
  gh

-

バージョンの確認:

$ gh --version
gh version 2.21.2 (2023-01-03)
https://github.com/cli/cli/releases/tag/v2.21.2

-

(5). 「gh」のアップグレード:
$ sudo apt update
$ sudo apt install gh

-


2). 「Arch Linux」系の場合:

公式の community リポジトリからインストールできます:

-

インストール:
$ sudo pacman -S github-cli

-


3). 「Fedora」、「CentOS」、「RHEL」の場合:

-

(1). インストール:
$ sudo dnf install 'dnf-command(config-manager)'
$ sudo dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
$ sudo dnf install gh

-

(2). アップグレード:
$ sudo dnf update gh

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- --

5. 「gh」コマンドを補完できるように機能を有効化:

-

「gh」コマンドは長いので、「gh」コマンドの補完機能を有効化しました。

-

コマンド文字の途中で Tab キーを押すと、「コマンド」文字を補完します。

コマンドの後に半角スペースを押してから Tab キーを押すと、それに続く「サブコマンド」の候補が表示されます。

-


1).「bash-completion」のインストール:

$ sudo apt install bash-completion
:
bash-completion はすでに最新バージョン (1:2.11-5ubuntu1) です。

→「gh」コマンドのインストールで入るみたい。

-


2). 使っている「シェル」の確認:

$ printenv | grep SHELL
SHELL=/bin/bash

もしくは、

$ echo $SHELL
/bin/bash

-


3). 設定ファイルに追記:

-

(1). 「bash」を使っている場合:
$ mousepad ~/.bashrc

-

↓ ファイルの最後に、以下の行を追記:

eval "$(gh completion -s bash)"

-

(2). 「zsh」を使っている場合:
$ mousepad ~/.zshrc

-

↓ ファイルの最後に、以下の行を追記:

eval "$(gh completion -s zsh)"

-

(3). 「fish」を使っている場合:
$ mousepad ~/.config/fish/config.fish

-

↓ ファイルの最後に、以下の行を追記:

eval (gh completion -s fish| source)

-


4). 再起動:

$ reboot

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ---

6. 「gh」コマンドのヘルプ、および、補完時の表示:

-


1). 「gh --help」、「gh」の表示:

$ gh --help

または、

$ gh
Work seamlessly with GitHub from the command line.

USAGE
  gh <command> <subcommand> [flags]

CORE COMMANDS
  auth:        Authenticate gh and git with GitHub
  browse:      Open the repository in the browser
  codespace:   Connect to and manage codespaces
  gist:        Manage gists
  issue:       Manage issues
  pr:          Manage pull requests
  release:     Manage releases
  repo:        Manage repositories

GITHUB ACTIONS COMMANDS
  run:         View details about workflow runs
  workflow:    View details about GitHub Actions workflows

ADDITIONAL COMMANDS
  alias:       Create command shortcuts
  api:         Make an authenticated GitHub API request
  completion:  Generate shell completion scripts
  config:      Manage configuration for gh
  extension:   Manage gh extensions
  gpg-key:     Manage GPG keys
  label:       Manage labels
  search:      Search for repositories, issues, and pull requests
  secret:      Manage GitHub secrets
  ssh-key:     Manage SSH keys
  status:      Print information about relevant issues, pull requests,
                and notifications across repositories

HELP TOPICS
  actions:     Learn about working with GitHub Actions
  environment: Environment variables that can be used with gh
  exit-codes:  Exit codes used by gh
  formatting:  Formatting options for JSON data exported from gh
  mintty:      Information about using gh with MinTTY
  reference:   A comprehensive reference of all gh commands

FLAGS
  --help      Show help for command
  --version   Show gh version

EXAMPLES
  $ gh issue create
  $ gh repo clone cli/cli
  $ gh pr checkout 321

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

-

「gh --help」、「gh」の表示(和訳):
$ gh --help
コマンド操作で GitHub を継ぎ間なくスムーズに操作できます。

使い方:
  gh <コマンド> <サブコマンド> [フラグ]

主なコマンド:
  auth:        GitHub で gh と git を認証
  browse:      ブラウザでリポジトリを開く
  codespace:   codespace への接続と管理
  gist:        Github Gist(断片)を管理
  issue:       issues (問題)を管理
  pr:          プルリクエストを管理
  release:     リリースを管理
  repo:        リポジトリを管理

GitHub Actions に関するコマンド:
  run:         GitHub Actions のワークフローの実行に関する詳細を表示
  workflow:    GitHub Actions のワークフローの詳細を表示

追加のコマンド:
  alias:       コマンド ショートカットを作成
  api:         認証済みの GitHub API リクエストを作成
  completion:  シェル補完スクリプトを生成
  config:      gh の構成を管理
  extension:   gh 拡張機能の管理
  gpg-key:     GPG キーの管理
  label:       ラベルを管理
  search:      リポジトリ、issue、およびプルリクエストを検索
  secret:      GitHub シークレットを管理
  ssh-key:     SSH キーの管理
  status:      関連する issue、プルリクエスト、および
                 リポジトリ全体の通知に関する情報を表示

ヘルプ関連:
  actions:     GitHub Actions の操作について学ぶ
  environment: gh で使用できる環境変数
  exit-codes:  gh が使用する終了コード
  formatting:  gh からエクスポートされた JSON データの書式設定オプション
  mintty:      MinTTY での gh の使用に関する情報
  reference:   すべての gh コマンドの総合的なリファレンス

フラグ:
  --help      gh コマンドのヘルプを表示
  --version   gh のバージョンを表示

操作例:
  $ gh issue create
  $ gh repo clone cli/cli
  $ gh pr checkout 321

詳細について:
  コマンドの詳細は、「gh <コマンド> <サブコマンド> --help」を使います。
  マニュアルは、「https://cli.github.com/manual」を参照。

-


2). 「gh」で補完時の表示:

日本語のコメントは追記しました:

$ gh 「半角スペース」「Tab」「Tab」
alias       (Create command shortcuts)                  コマンド ショートカットを作成
api         (Make an authenticated GitHub API request)  認証済みの GitHub API リクエストを作成
auth        (Authenticate gh and git with GitHub)       GitHub で gh と git を認証
browse      (Open the repository in the browser)        ブラウザでリポジトリを開く
codespace   (Connect to and manage codespaces)          codespace への接続と管理
completion  (Generate shell completion scripts)         シェル補完スクリプトを生成
config      (Manage configuration for gh)               gh の設定を管理
extension   (Manage gh extensions)                      gh 拡張機能の管理
gist        (Manage gists)                              gist を管理
gpg-key     (Manage GPG keys)                           GPG キーの管理
help        (Help about any command)                    コマンドに関するヘルプ
issue       (Manage issues)                             issues (問題)を管理
label       (Manage labels)                             ラベルを管理
pr          (Manage pull requests)                      プルリクエストを管理
release     (Manage releases)                           リリースを管理
repo        (Manage repositories)                       リポジトリを管理
run         (View details about workflow runs)          GitHub Actions のワークフローの実行に関する詳細を表示
search      (Search for repositories, issues, and pull requests) 
                                                        リポジトリ、issue、およびプルリクエストを検索
secret      (Manage GitHub secrets)                     「GitHub シークレット」を管理
ssh-key     (Manage SSH keys)                           SSH キーの管理
status      (Print information about relevant issues, pull requests, and …)
                                                        issues、プルリクエストなどの情報を表示
workflow    (View details about GitHub Actions workflows) 
                                                        GitHub Actions のワークフローの詳細を表示

→右端が欠けていたら、右にスクロールしてください。

「gh --help」において、「主なコマンド」+「GitHub の動作に関するコマンド」+「追加のコマンド」が表示。

-


3). 「gh status --help」の表示(和訳):

$ gh status --help

または、

$ gh help status
status コマンドは、読んでいるすべてのリポジトリでの GitHub での作業に関する情報を表示します:

- 割り当てられた「issues」 
- 割り当てられた「プルリクエスト」
- 「プルリクエスト」のレビュー
- メンション
- リポジトリ アクティビティ (新しい issues/プルリクエスト、コメント)

使い方:
  gh status [フラグ]

フラグ:
  -e --exclude strings   所有者/名前形式で除外するリポジトリのカンマ区切りリスト
  -o --org string        組織内の報告状況

継承されたフラグ:
  --help   コマンドのヘルプを表示

使用例:
  $ gh status -e cli/cli -e cli/go-gh # 複数のリポジトリを除外します
  $ gh status -o cli            # 結果を 1つの組織に限定します

詳しくは:
  コマンドの詳細については、「gh <command> <subcommand> --help」を使用してください
  「https://cli.github.com/manual」のマニュアルを確認

→右端が欠けていたら、右にスクロールしてください。

-


4). 「gh repo --help」の表示(和訳):

$ gh repo --help

または、

$ gh help repo
GitHub リポジトリを操作します。

使い方:
  gh repo <コマンド> [フラグ]

主なコマンド:
  create:      新しいリポジトリを作成
  list:        ユーザまたは組織が所有するリポジトリを一覧表示

対象となるコマンド:
  archive:     Archive a repository                 リポジトリをアーカイブ
  clone:       Clone a repository locally           リポジトリをローカルにクローン
  delete:      Delete a repository                  リポジトリを削除
  deploy-key:  Manage deploy keys in a repository   リポジトリでデプロイ キーを管理
  edit:        Edit repository settings             リポジトリ設定の編集
  fork:        Create a fork of a repository        リポジトリのフォークを作成
  rename:      Rename a repository                  リポジトリの名前を変更
  set-default: Configure default repository for this directory
                                                    このディレクトリのデフォルト リポジトリを設定
  sync:        Sync a repository                    リポジトリを同期します
  view:        View a repository                    リポジトリを表示

継承されたフラグ:
  --help   コマンドのヘルプを表示

引数:
  リポジトリは、次のいずれかの形式で引数として指定できます:
  - 「OWNER/REPO」 
  - URL として「https://github.com/OWNER/REPO」 

使用例:
  $ gh repo create
  $ gh repo clone cli/cli
  $ gh repo view --web

詳しくは:
  コマンドの詳細については、「gh <command> <subcommand> --help」を使用してください
  「https://cli.github.com/manual」のマニュアルを確認

→右端が欠けていたら、右にスクロールしてください。

-


5). 「gh repo」で補完時の表示:

日本語のコメントは追記しました:

$ gh repo 「半角スペース」「Tab」「Tab」
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)                 リポジトリの名前を変更
set-default  (Configure default repository for this directory)
                                                   このディレクトリのデフォルト リポジトリを設定
sync         (Sync a repository)                   リポジトリを同期します
view         (View a repository)                   リポジトリを表示

→右端が欠けていたら、右にスクロールしてください。

「gh repo --help」において、「主なコマンド」+「対象となるコマンド」が表示。

-


6). 「gh repo set-default」のヘルプ表示(和訳):

$ gh repo set-default --help
このコマンドは、クエリを実行するときに使用するデフォルトのリモート リポジトリを設定します。
ローカルに複製されたリポジトリの GitHub API。

gh は、次のようなものにデフォルトのリポジトリを使用します。

  - プルリクエストの表示と作成
  - issues の表示と作成
  - リリースの表示と作成
  - アクションの操作
  - リポジトリと環境のシークレットを追加

使い方:
   gh repo set-default [<リポジトリ>] [フラグ]

フラグ:
   -u, --unset 現在のデフォルト リポジトリの設定を解除します
   -v, --view 現在のデフォルトのリポジトリを表示します

継承されたフラグ:
   --help コマンドのヘルプを表示

例:

   デフォルトのリポジトリを対話式に選択:
   $ gh repo set-default
  
   リポジトリを明示的に設定(所有者/リポジトリ):
   $ gh repo set-default owner/repo
  
   現在のデフォルト リポジトリを表示:
   $ gh repo set-default --view
  
   対話式に、さらに多くのリポジトリ オプションを表示:
   $ git remote add newrepo https://github.com/owner/repo
   $ gh repo set-default

詳しくは:
  コマンドの詳細については、「gh <command> <subcommand> --help」を使用してください
  「https://cli.github.com/manual」のマニュアルを確認

-


7). 「gh s」で補完時の表示:

日本語のコメントは追記しました:

$ gh s「半角スペース」「Tab」「Tab」
search   (Search for repositories, issues, and pull requests)   リポジトリ、Issue、およびプルリクエストを検索
secret   (Manage GitHub secrets)                                GitHub シークレットを管理
ssh-key  (Manage SSH keys)                                      SSH キーを管理
status   (Print information about relevant issues, pull requests, and notifications across repositories) 
                               関連する issues、プルリクエスト、およびリポジトリ全体の通知に関する情報を表示

-

$ gh status
Assigned Issues                    │ Assigned Pull Requests             
Nothing here ^_^                   │ Nothing here ^_^                   
                                   │                                    
Review Requests                    │ Mentions                           
Nothing here ^_^                   │ Nothing here ^_^                   
                                   │                                    
Repository Activity
Nothing here ^_^

→ブラウザで表示されるボタンの表示です。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----

7. 「gh auth login」でログイン(認証):

-

ログインしないと「gh」コマンドは使えません。

-

ログインせずに、コマンドを使ってみると:

$ gh repo list 
:
To get started with GitHub CLI, please run:  gh auth login
Alternatively, populate the GH_TOKEN environment variable with a GitHub API authentication token.

和訳:

GitHub CLI の使用を開始するには、次を実行してください: gh auth login  
または、GH_TOKEN 環境変数に GitHub API 認証トークンを設定します。

→つまり、ログイン(認証)が必要です。スクリプトで実行するなら環境変数にセット。

-


1). 作業ディレクトリを準備:

$ mkdir -p ~/Git/
$ cd ~/Git/
$ ls -1
furuichi
worm

-

「furuichi」リポジトリを再度クローンするのに邪魔なので、名前を変更:

$ cd ~/Git/
$ mv furuichi/ furuichi-2023-01-15/
$ ls -1
furuichi-2023-01-15
worm

-


2). 「gh auth login」でログイン(認証):

日本語のコメントは実際は表示されません。

-

対話式にログインを行います:

$ gh auth login

-

対話 1:

? What account do you want to log into?  [Use arrows to move, type to filter]

どのアカウントにログインしますか? [矢印で移動、タイプしてフィルター]

> GitHub.com
  GitHub Enterprise Server

→矢印キーで「GitHub.com」を選択して、Enter

-

対話 2:

? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations?  [Use arrows to move, type to filter]

Git 操作に優先するプロトコルは何ですか?

> HTTPS
  SSH

→矢印キーで「HTTPS」を選択して、Enter

-

対話 3:

? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? (Y/n) 

GitHub 資格情報で Git を認証しますか?

→「y」Enter

-

対話 4:

? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes   ←自動で「Yes」に変換
? How would you like to authenticate GitHub CLI?  [Use arrows to move, type to filter]

GitHub CLI をどのように認証しますか?

  Login with a web browser (web ブラウザでログイン)
> Paste an authentication token (認証トークンを貼り付け)

→矢印キーで「Paste an authentication token」を選択して、Enter

-

対話 5:

? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.

ヒントの表示: 「https://github.com/settings/tokens」の手順で「パーソナル アクセス トークン」は生成できます。
最低限必要なスコープは、「repo」、「read:org」、「workflow」です。

→「パーソナル アクセス トークン」は自動で生成してくれません。事前に作成しておきます。

-

対話 6:

? Paste your authentication token: 

上記に、作成した「認証トークン」を貼り付けます

→作成するとき「repo」、「read:org」、「workflow」の 3つのチェックが必要です。

「repo」のみチェックした「パーソナル アクセス トークン」を貼り付けると強制終了しました。

-


3). ブラウザで「https://github.com/settings/tokens」を開いて、再作成:

2023-01-15 22:14(使用期限があります)

名前: My gh-furuichi2(後で見て使用目的がわかる名前)

「repo」、「read:org」、「workflow」にチェック

→緑色の「Generate token」クリック

表示された「パーソナル アクセス トークン」をボタンでコピー

-


4). 「gh」で再度ログイン:

日本語のコメントは実際は表示されません。

-

$ cd ~/Git/
$ gh auth login

対話入力:

? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: 

→新しく作成した「パーソナル アクセス トークン」を貼り付け

- gh config set -h github.com git_protocol https***************************
✓ Configured git protocol
✓ Logged in as FuRuYa7

→ログインに成功

-

5). 認証されたか確認:

$ gh auth status 
github.com
  ✓ Logged in to github.com as FuRuYa7 (oauth_token)
  ✓ Git operations for github.com configured to use https protocol.
  ✓ Token: *******************

→指定の「https」で接続されています。認証は「トークン」の貼付け

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- -----

8. 「デフォルトのリモート リポジトリ」を設定:

-

1). 「GitHub CLI」の 2.21.0 で、「gh repo set-default」コマンドが追加されました:

GitHub CLI 2.21.0 からの抜粋:

-

(1). 背景: 以前は「デフォルトのリモートリポジトリ」変更時、「.git/config」を修正していました:

「gh repo set-default」コマンドを使用して、「デフォルトのリモートリポジトリ」を選択したり、選択した値を表示したり、選択を完全に元に戻したりできます。「.git/config」ファイルに自動で反映されます。

-

(2). 「デフォルトのリモートリポジトリ」の選択がされるまで「gh」コマンドの実行はエラーします:

-

(3). 「gh」コマンドのレビューのほとんどが古いバージョンにつき、検索しても参考になりません

→「gh repo set-default」コマンドは存在しておらず、使われていません。

-

(4). ローカルにある「リポジトリ」のディレクトリごとに設定が必要なので、面倒です:

フォークの時ぐらい、自動で設定されても良さそう。

-


2). 「デフォルトのリモート リポジトリ」の設定がないと、使えない「gh」コマンド:

  • 「プルリクエスト」の表示と作成
  • 「issues」の表示と作成
  • 「リリース」の表示と作成
  • GitHub Actions」の操作
  • リポジトリ」と環境の「シークレット」を追加

-


3). 「gh repo set-default」コマンドにて、設定や解除ができます:

-

「gh repo set-default」のヘルプ表示:

和訳:

$ gh repo set-default --help
このコマンドは、クエリを実行するときに使用するデフォルトのリモート リポジトリを設定します。
ローカルに複製されたリポジトリの GitHub API。

gh は、次のようなものにデフォルトのリポジトリを使用します。

  - プルリクエストの表示と作成
  - issues の表示と作成
  - リリースの表示と作成
  - アクションの操作
  - リポジトリと環境のシークレットを追加

使い方:
   gh repo set-default [<リポジトリ>] [フラグ]

フラグ:
   -u, --unset 現在のデフォルト リポジトリの設定を解除します
   -v, --view 現在のデフォルトのリポジトリを表示します

継承されたフラグ:
   --help コマンドのヘルプを表示

例:

   デフォルトのリポジトリを対話的に選択:
   $ gh repo set-default
  
   リポジトリを明示的に設定(所有者/リポジトリ):
   $ gh repo set-default owner/repo
  
   現在のデフォルト リポジトリを表示:
   $ gh repo set-default --view
  
   対話的ピッカーでさらに多くのリポジトリ オプションを表示:
   $ git remote add newrepo https://github.com/owner/repo
   $ gh repo set-default

詳しくは:
  コマンドの詳細については、「gh <command> <subcommand> --help」を使用してください
  「https://cli.github.com/manual」のマニュアルを確認

-


4). 「gh repo set-default」コマンドの操作例:

-

(1). ローカルの「worm」リポジトリディレクトリで、「デフォルト リポジトリ」を表示:
$ cd ~/Git/worm/
$ gh repo set-default --view
no default repository has been set; use `gh repo set-default` to select one

和訳:

デフォルトのリポジトリが設定されていません。
「gh repo set-default」を使用して 1つを選択します

-

(2). ブラウザに「プルリクエストの表示」をしてみる:
$ gh pr view 3 --web
:
X No default remote repository has been set for this directory.
please run `gh repo set-default` to select a default remote repository.

和訳:

X このディレクトリには、デフォルトのリモート リポジトリが設定されていません。
`gh repo set-default` を実行して、デフォルトのリモート リポジトリを選択してください。

-

(3). デフォルトの「リモート リポジトリ」を設定:
$ cd ~/Git/worm/
$ gh repo set-default FuRuYa7/worm
:
✓ Set FuRuYa7/worm as the default repository for the current directory

→「所有者/リポジトリ」を指定

-

(4). 設定されたか確認:
$ cd ~/Git/worm/
$ gh repo set-default --view
:
FuRuYa7/worm

-

(5). 「gh pr view」が使えるか確認:
$ gh pr view 3 --web
:
GraphQL: Could not resolve to a PullRequest with the number of 3. (repository.pullRequest)

→失敗しました。

-

$ gh pr view
:
no pull requests found for branch "develop"

→プルリクエストは発行済みで承認待ちですが、プルリクエストは無いという表示。

フォークして、プルリクエストしたときに、そのプルリクエストを確認するには、本家のリポジトリを「デフォルトのリモート リポジトリ」に指定しないとダメみたい。

-

(6). デフォルトの「リモート リポジトリ」を設定:

フォークしてのプルリクエストの場合は、本家のリポジトリを指定しないとダメでした。

$ cd ~/Git/worm/
$ gh repo set-default EndeavourOS-Community-Editions/worm
:
✓ Set EndeavourOS-Community-Editions/worm as the default repository for the current directory

-

(7). 設定されたか確認:
$ gh repo set-default --view
:
EndeavourOS-Community-Editions/worm

-

(8). 使えるか確認:
$ gh pr view
no pull requests found for branch "develop"

→「develop」ブランチにプルリクエストは無いという表示。「プルリクエスト番号」の指定が要るみたい。

-

(9). プルリクエストの「一覧」表示で、「プルリクエスト番号」を確認:
$ gh pr list
:
Showing 1 of 1 open pull request in EndeavourOS-Community-Editions/worm

#3  Change the color of the number of the selected "tag" to "orange"  FuRuYa7:develop  about 5 days ago

-

もしくは、

(10). プルリクエストの「ステータス」表示で、「プルリクエスト番号」を確認:
$ gh pr status
:
Relevant pull requests in EndeavourOS-Community-Editions/worm

Current branch             ←(自分のカレントブランチに関するプルリクエスト)
  There is no pull request associated with [develop]

Created by you             ←(自分が作成したプルリクエスト: open)
  #3  Change the color of the number of the selected ... [FuRuYa7:develop]

Requesting a code review from you     ←(レビュー依頼されているプルリクエスト)

  You have no pull requests to review

→こちらでも「プルリクエスト番号」は確認できました。

-

(11). 番号指定でプルリクエストを表示:
$ gh pr view 3
:
Change the color of the number of the selected "tag" to "orange" #3
Open • FuRuYa7 wants to merge 1 commit into master from develop • about 5 days ago
+3 -1 • No checks

  Changed the color of the selected number to make it easier to understand.

  Image of taskbar after change: 

  Image: worm-taskbar-color → https://user-images.githubusercontent.com/46095926/212521452-0c47bd17-f5cd-4cd8-889d-
  c005b842c46a.jpg

View this pull request on GitHub: https://github.com/EndeavourOS-Community-Editions/worm/pull/3

→表示されました。番号指定しないとダメでした。

-

(12). ブラウザで表示してみる:
$ gh pr view 3 --web
:
Opening github.com/EndeavourOS-Community-Editions/worm/pull/3 in your browser.

→ブラウザにて、新しいタブで表示されました。

-

(13). ブラウザでサインアウトしていても、表示されるか確認:
$ gh pr view 3 --web
:
Opening github.com/EndeavourOS-Community-Editions/worm/pull/3 in your browser.

→ブラウザの新しいタブで表示されました。サインアウトされた状態です。

-

(14). 別件、issue の「一覧」表示で、「issue 番号」を確認:
$ gh issue list
:
no open issues in EndeavourOS-Community-Editions/worm

→issues の発行はなし

-

(15). issue の「ステータス」表示で、「issue 番号」を確認:
$ gh issue status
:
Relevant issues in EndeavourOS-Community-Editions/worm

Issues assigned to you             ←(自分がアサインされた issue)
  There are no issues assigned to you

Issues mentioning you             ←(メンションされた issue)
  There are no issues mentioning you

Issues opened by you             ←(自分が作成した issue)
  There are no issues opened by you

→ issue の発行はなし

-

(16). 現在の「デフォルト リポジトリ」の設定を解除したい場合:
$ cd ~/Git/worm/
$ gh repo set-default --unset
:
✓ Unset FuRuYa7/worm as default repository

-

(17). 確認:
$ gh repo set-default -v
:
no default repository has been set; use `gh repo set-default` to select one

→設定なし

-

(18). 自身のリポジトリに設定:
$ cd ~/Git/worm/
$ gh repo set-default worm
:
expected the "[HOST/]OWNER/REPO" format, got "worm"

→エラー

「[HOST/]OWNER/REPO」形式を期待していましたが、「worm」を取得しました

「所有者名」は省略できないみたい。

-

(19). 「デフォルト リポジトリ」の設定のやり直し:
$ cd ~/Git/worm/
$ gh repo set-default FuRuYa7/worm
:
✓ Set FuRuYa7/worm as the default repository for the current directory

-

確認:

$ gh repo set-default -v
:
FuRuYa7/worm

-

→フォークした「本家のリポジトリ名」を知らないと、デフォルトの「リモート リポジトリ」を設定できません。

追記: 「gh repo set-default」でパラメータを指定しなければ、対話式に聞いてくるので知らなくても設定できました。「項番 7).」参照:

-


5). フォークした「本家のリポジトリ名」を確認できるかトライ:

-

(1). フォークで作成された自身のリポジトリで、プルリクエストのステータスを表示:
$ gh pr status
:
Relevant pull requests in FuRuYa7/worm

Current branch             ←(自分のカレントブランチに関するプルリクエスト)
  There is no pull request associated with [develop]

Created by you             ←(自分が作成したプルリクエスト: open)
  You have no open pull requests

Requesting a code review from you     ←(レビュー依頼されているプルリクエスト)
  You have no pull requests to review

→自身の「所有者名/リポジトリ名」がわかるだけですね。

-

(2). 別のコマンドで、調べることが出来るか確認:
$ cd ~/Git/worm/

$ git branch
* develop
  master

$ git status
ブランチ develop
nothing to commit, working tree clean
$ git remote -v
:
origin  https://github.com/FuRuYa7/worm.git (fetch)
origin  https://github.com/FuRuYa7/worm.git (push)

→「git」コマンドでも、自身の「所有者名/リポジトリ名」がわかるだけですね。

-

参考: ちなみに、リモートリポジトリとして、オリジナルのリポジトリを「upstream」という名前(任意)で設定できます:

$ git remote add upstream https://github.com/ORIGINAL_OWNER/REPO.git

上記の設定で、このリポジトリは「upstream」という名前(任意)で本家リポジトリを参照します:

$ git remote -v
:
origin  https://github.com/FuRuYa7/worm.git (fetch)
origin  https://github.com/FuRuYa7/worm.git (push)
upstream https://github.com/ORIGINAL_OWNER/REPO.git (fetch)
upstream https://github.com/ORIGINAL_OWNER/REPO.git (push)

フォークの URL は「origin」と表示、上流リポジトリの URL は「upstream」と表示されます。

-

(3). 自身のリポジトリの「ビュー」表示:
$ gh repo view worm
FuRuYa7/worm                 ←「所有者名/リポジトリ名」
Worm CE for EndeavourOS     ←(そのリポジトリに登録のプロフィールの内容)

   Eos Worm Edition          ←(README.md の内容)

  The community edition for EndeavourOS that ships the worm window manager.
  Copy the files from ~/.config to your home folder. 

View this repository on GitHub: https://github.com/FuRuYa7/worm  ←「所有者名/リポジトリ名」のURL

→自身のリポジトリの「所有者名/リポジトリ名」は確認できます。

単に README.md が表示されるだけなので、知りたい情報があるかは記述されている内容しだい。

-

(4). 別のリポジトリの「ビュー」表示でも確認:
$ gh repo view furuichi
FuRuYa7/furuichi             ←「所有者名/リポジトリ名」
Check how to use GitHub     ←(そのリポジトリに登録のプロフィールの内容)

  ## GitHub (Check how to use GitHub)  ←(README.md の内容)

  -------- 
省略

View this repository on GitHub: https://github.com/FuRuYa7/furuichi  ←「所有者名/リポジトリ名」のURL

→同じですね。

-


6). 「端末」だと、フォークした本家側の「所有者名/リポジトリ名」を確認できませんでした

(表示されていそうで、表示されない項目)

→本家側の「所有者名/リポジトリ名」がわからないと、デフォルトの「リモート リポジトリ」を設定できないので、依存したコマンドが使えません。

「ブラウザ」で自身のリポジトリを見て、「どのリポジトリからフォークしたか」は確認できます。

-


7). 「灯台もと暗し」でした。簡単にデフォルトの「リモート リポジトリ」を設定できました:

-

(1). 現在の状態を確認:
$ cd ~/Git/worm/
$ gh repo set-default -v
FuRuYa7/worm
$ git remote -v
origin  https://github.com/FuRuYa7/worm.git (fetch)
origin  https://github.com/FuRuYa7/worm.git (push)

-

(2). デフォルトの「リモート リポジトリ」を解除:
$ gh repo set-default -u
✓ Unset FuRuYa7/worm as default repository
$ gh repo set-default -v
no default repository has been set; use `gh repo set-default` to select one

→準備 OK

-

(3). デフォルトの「リモート リポジトリ」を設定:

作業フォルダを対象のリポジトリのフォルダに移動:

$ cd ~/Git/worm/

-

パラメータなしで、「gh repo set-default」コマンドを実行:

$ gh repo set-default
This command sets the default remote repository to use when querying the
GitHub API for the locally cloned repository.

gh uses the default repository for things like:

 - viewing and creating pull requests
 - viewing and creating issues
 - viewing and creating releases
 - working with Actions
 - adding repository and environment secrets

? Which repository should be the default?  [Use arrows to move, type to filter]
> EndeavourOS-Community-Editions/worm       ←(本家: フォーク元のリポジトリ)
  FuRuYa7/worm               ←(自身: フォーク先のリポジトリ)

→対話式に、どちらにするか、聞いてきました。調べておく必要はありませんでした。

→そのままEnter

? Which repository should be the default? EndeavourOS-Community-Editions/worm
✓ Set EndeavourOS-Community-Editions/worm as the default repository for the current directory

→本家のリポジトリが設定されました。

-

(4). 作業後の確認:
$ gh repo set-default -v
EndeavourOS-Community-Editions/worm

→本家のリポジトリが設定できました。

-

$ git remote -v
origin  https://github.com/FuRuYa7/worm.git (fetch)
origin  https://github.com/FuRuYa7/worm.git (push)

→こちらには登録されないみたい。

push すれば、自身のフォークのリポジトリにアップされ、「プルリクエスト」するかのボタンが表示されるはずです。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- -

9. 参考: 「GitHub CLI」の使用例(Usage examples)を見てみる:

-

似たようなコマンドが多いので、条件の違いがわかりやすいように和訳して整理:

-

GitHub CLI の使用例(Usage examples

すぐ本番でなく、一度試してから使用のこと。リポジトリの操作にはリスクが伴うので自己責任です。

-

例1). プルリクエスト番号を使って、プルリクエストをローカルで「チェックアウト」:
$ cd ~/Projects/my-project/
$ gh pr checkout 12
:
remote: Enumerating objects: 66, done.
remote: Counting objects: 100% (66/66), done.
remote: Total 83 (delta 66), reused 66 (delta 66), pack-reused 17
Unpacking objects: 100% (83/83), done.
From https://github.com/owner/repo
 * [new ref]             refs/pull/8896/head -> patch-2
M       README.md
Switched to branch 'patch-2'

-

例2). URL とブランチ名を使って、プルリクエストをローカルで「チェックアウト」:
$ cd ~/Projects/my-project/
$ gh pr checkout branch-name
:
Switched to branch 'branch-name'
Your branch is up to date with 'origin/branch-name'.
Already up to date.

-

例3). OWNER/REPO 構文を使って、リポジトリを「クローン」:
$ cd ~/Projects/
$ gh repo clone cli/cli
:
Cloning into 'cli'...
$ cd ~/Projects/cli/

-

例4). GitHub URL を使って、リポジトリを「クローン」:
$ cd ~/Projects/my-project/
$ gh repo clone https://github.com/cli/cli
:
Cloning into 'cli'...
remote: Enumerating objects: 99, done.
remote: Counting objects: 100% (99/99), done.
remote: Compressing objects: 100% (76/76), done.
remote: Total 21160 (delta 49), reused 35 (delta 18), pack-reused 21061
Receiving objects: 100% (21160/21160), 57.93 MiB | 10.82 MiB/s, done.
Resolving deltas: 100% (16051/16051), done.
$ cd ~/Projects/my-project/cli/

-

例5). 対話式に、「プルリクエスト」を作成:
$ cd ~/Projects/my-project/
$ gh pr create
:
Creating pull request for feature-branch into main in owner/repo
? Title My new pull request
? Body [(e) to launch nano, enter to skip]
http://github.com/owner/repo/pull/1

-

例6). 対話式に、「issue」を作成:
$ cd ~/Projects/my-project/
$ gh issue create
:
Creating issue in owner/repo
? Title My new issue
? Body [(e) to launch nano, enter to skip]
http://github.com/owner/repo/issues/1

-

例7). フラグを使って、「プルリクエスト」を作成:
$ cd ~/Projects/my-project/
$ gh pr create --title "Pull request title" --body "Pull request body"
http://github.com/owner/repo/pull/1

-

例8). フラグを使って、「issue」を作成:
$ cd ~/Projects/my-project/
$ gh issue create --title "Issue title" --body "Issue body"
:
http://github.com/owner/repo/issues/1

-

例9). web の「プルリクエストの作成ページ」に、すばやく移動:
$ cd ~/Projects/my-project/
$ gh pr create --web
:
Opening https://github.com/owner/repo/pull/branch in your browser.

-

例10). web の「issue の作成ページ」に、すばやく移動:
$ cd ~/Projects/my-project/
$ gh issue create --web
:
Opening https://github.com/owner/repo/issues/new in your browser.

-

例11). 引数なしで、現在のリポジトリの「フォーク」を作成:

引数なしの場合、プッシュする権限がないリポジトリにいる場合、このコマンドは自動的にフォークを作成します。

git リポジトリ内で、引数なしで、現在のディレクトリのアカウントの GitHub にフォークを自動的に作成します。

その後、上流のリモートを設定するかどうかを尋ねられます。

$ cd ~/Projects/cli/
$ gh repo fork
:
- Forking cli/cli...
✓ Created fork user/cli
? Would you like to add a remote for the fork? Yes
✓ Renamed origin remote to upstream
✓ Added remote origin
$ cd ~/Projects/cli/cli/

-

例12). 引数付きで、別のリポジトリのフォークを作成:

引数付きの場合、OWNER/REPO 形式でリポジトリを渡すと、gh はアカウントの GitHub にフォークを自動的に作成し、クローンを作成するかどうかを尋ねます。これは、git リポジトリの内外で機能します。

$ cd ~/Projects/
$ gh repo fork cli/cli
:
- Forking cli/cli...
✓ Created fork cli/cli
? Would you like to clone the fork? Yes
Cloning into 'cli'...
✓ Cloned fork
$ cd ~/Projects/cli/

-

例13). 引数なしの「フォーク」の作成にて、フラグを使って、リモート プロンプトをスキップします:

フラグを使って、フォーク用の git リモートの追加に関するプロンプト、またはフォークされたリポジトリのローカルでのクローン作成に関するプロンプトをスキップします。

$ cd ~/Projects/cli/
$ gh repo fork --remote=false
:
- Forking cli/cli...
✓ Created fork user/cli

-

例14). 引数付きの「フォーク」の作成にて、フラグを使って、リモート プロンプトをスキップします:
$ cd ~/Projects/
$ gh repo fork cli/cli --clone=false
:
- Forking cli/cli...
✓ Created fork user/cli
$ cd ~/Projects/cli/

-

例15). リポジトリ内のオープンされたプルリクエストの「一覧」を表示:

デフォルトで、最新の 30 個のオープン されたアイテムが表示されます。

$ cd ~/Projects/my-project/
$ gh pr list
:
Pull requests for owner/repo

#14  Upgrade to Prettier 1.19                           prettier
#14  Extend arrow navigation in lists for MacOS         arrow-nav
#13  Add Support for Windows Automatic Dark Mode        dark-mode
#8   Create and use keyboard shortcut react component   shortcut

-

例16). リポジトリ内のオープンされた issues の「一覧」を表示:

デフォルトで、最新の 30 個のアイテムが表示されます。

$ cd ~/Projects/my-project/
$ gh issue list
:
Issues for owner/repo

#14  Update the remote url if it changed  (bug)
#14  PR commands on a detached head       (enhancement)
#13  Support for GitHub Enterprise        (wontfix)
#8   Add an easier upgrade command        (bug)

-

例17). ユーザに割り当てられたクローズされたプルリクエストの「一覧」を表示:

フラグを使って、特定のユース ケースに合わせてリストをフィルタリングできます。

$ cd ~/Projects/my-project/
$ gh pr list --state closed --assignee user
:
Pull requests for owner/repo

#13  Upgrade to Electron 7         electron-7
#8   Release Notes Writing Guide   release-notes

-

例18). ユーザに割り当てられたクローズされた issues の「一覧」を表示:
$ cd ~/Projects/my-project/
$ gh issue list --state closed --assignee user
:
Issues for owner/repo

#13  Enable discarding submodule changes  (bug)
#8   Upgrade to latest react              (upgrade)

-

例19). 関連するプルリクエストの「ステータス」を表示:
$ cd ~/Projects/my-project/
$ gh pr status
:
Current branch
  #12 Remove the test feature [user:patch-2]
   - All checks failing - Review required

Created by you
  You have no open pull requests

Requesting a code review from you
  #13 Fix tests [branch]
  - 3/4 checks failing - Review required
  #15 New feature [branch]
   - Checks passing - Approved

-

例20). 関連する issue の「ステータス」を表示:
$ cd ~/Projects/my-project/
$ gh issue status
:
Issues assigned to you
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues mentioning you
  #8938 [Fork] Add create fork flow entry point at commit warning  (epic:fork)
  #8509 [Fork] Improve how Desktop handles forks  (epic:fork, meta)

Issues opened by you
  #8936 [Fork] Hide PR number badges on branches that have an upstream PR  (epic:fork)
  #6386 Improve no editor detected state on conflicts modal  (enhancement)

-

例21). プルリクエスト番号を使って、端末に「プルリクエスト」を表示:
$ cd ~/Projects/my-project/
$ gh pr view 21
:
Pull request title
opened by user. 0 comments. (label)

  Pull request body

View this pull request on GitHub: https://github.com/owner/repo/pull/21

-

例22). issue 番号を使って、端末に「issue」を表示:
$ cd ~/Projects/my-project/
$ gh issue view 21
:
Issue title
opened by user. 0 comments. (label)

  Issue body

View this issue on GitHub: https://github.com/owner/repo/issues/21

-

例23). owner/repo 指定で、端末に「プルリクエスト」を表示:
$ cd ~/Projects/my-project/
$ gh repo view owner/repo
:
owner/repo
Repository description

  Repository README

View this repository on GitHub: https://github.com/owner/repo/

-

例24). プルリクエスト番号を使って、ブラウザで「プルリクエスト」を表示:

--web または -w を使用

$ cd ~/Projects/my-project/
$ gh pr view 21 --web
:
Opening https://github.com/owner/repo/pull/21 in your browser.

-

例25). issue 番号を使って、ブラウザで「issue」を表示:

--web または -w を使用

$ cd ~/Projects/my-project/
$ gh issue view 21 --web
:
Opening https://github.com/owner/repo/issues/21 in your browser.

-

例26). owner/repo 指定で、ブラウザで「リポジトリ」を表示:
$ cd ~/Projects/
$ gh repo view owner/repo --web
:
Opening https://github.com/owner/repo/ in your browser.

-

例27). 端末に、現在使用しているブランチの「プルリクエスト」を表示:
$ cd ~/Projects/my-project/
$ gh pr view
:
Pull request title
opened by user. 0 comments. (label)

  Pull request body

View this pull request on GitHub: https://github.com/owner/repo/pull/21

-

例28). 端末に、現在のリポジトリを表示:
$ cd ~/Projects/my-project/
$ gh repo view
:
owner/my-project
Repository description

  Repository README

View this repository on GitHub: https://github.com/owner/repo/

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- --

10. 「gh」コマンドを実際に使ってみる:

-

個人的には「GitHub」を使うことは、

GitHub」に置かれたソースを(クローンではなく)「ZIP でダウンロード」することや、

貢献できそうなときに、フォークして「プルリクエストを作成」することくらいです。

なので、コマンドを使える場面は少ないです:

-


1). 「GitHub」に置かれたソースをダウンロード(クローンで代用):

GitHub」の対象のサイトにて、画面にある緑色の「Code」ボタンをクリックして「GitHub CLI」を選ぶと、入力すべき「gh コマンド」が表示されます。

利点は、ファイルを展開する手間が減らせること。

-

(1). リポジトリを「クローン」:

参照: 例3). OWNER/REPO 構文を使って、リポジトリを「クローン」:

$ cd ~/Git/
$ gh repo clone cli/cli
:
Cloning into 'cli'...
$ ls -1
cli
furuichi
furuichi-2023-01-15
worm

-

(2). パラメータなしで、リポジトリを確認:
$ cd ~/Git/cli/
$ gh repo view
X No default remote repository has been set for this directory.

please run `gh repo set-default` to select a default remote repository.

→「所有者名/リポジトリ名」を省略した場合は、「デフォルトリポジトリ」の設定を見に行くみたい。

-

(3). 「所有者名/リポジトリ名」を指定して、リポジトリを確認:
$ gh repo view FuRuYa7/cli
:
FuRuYa7/cli
GitHub’s official command line tool

   GitHub CLI
                                                                                                                
   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.                                               
                                                                                                                
  Image: screenshot of gh pr status → https://user-images.githubusercontent.com/98482/84171218-327e7a80-aa40-11ea-
  8cd1-5177fc2d0e72.png                                                                                         
                                                                                                                
  GitHub CLI is available for repositories hosted on GitHub.com and GitHub Enterprise Server 2.20+, and to      
  install on macOS, Windows, and Linux.                                                                         
                                                                                                                
  ## Documentation                                                                                              
                                                                                                                
  For installation options see below, for usage instructions see the manual https://cli.github.com/manual/.     
:
View this repository on GitHub: https://github.com/FuRuYa7/cli

→「リポジトリ名」を指定すれば、作業ディレクトリの位置に関係なく表示できました。

-

(4). 「リポジトリ名」だけで、リポジトリを確認:
$ gh repo view cli
:
FuRuYa7/cli
GitHub’s official command line tool

   GitHub CLI                                                                                                   
                                                                                                                
   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.                                               
 :
View this repository on GitHub: https://github.com/FuRuYa7/cli

→フォークしているので、「所有者名」を省略しても表示できました。

-

(5). 「リポジトリ名」だけで、プルリクエストを確認:
$ cd ~/Git/
$ gh pr view cli
failed to run git: fatal: not a git repository (or any of the parent directories): .git

→このコマンドは、作業ディレクトリの移動が必要みたい。

-

(6). 作業ディレクトリを移動:
$ cd ~/Git/cli/

-

(7). 「リポジトリ名」だけで、プルリクエストを確認:
$ gh pr view cli
:
X No default remote repository has been set for this directory.

please run `gh repo set-default` to select a default remote repository.

-

(8). 「所有者名/リポジトリ名」を指定して、プルリクエストを確認:
$ gh pr view FuRuYa7/cli
:
X No default remote repository has been set for this directory.

please run `gh repo set-default` to select a default remote repository.

→このコマンドは、「デフォルトリポジトリ」の設定が必要みたい。

-

(9). 「デフォルトリポジトリ」を設定:
$ cd ~/Git/cli/

$ gh repo set-default FuRuYa7/cli
✓ Set FuRuYa7/cli as the default repository for the current directory

→本家(フォーク元)のリポジトリでなく、自身に作成されたフォークを指定してみました。

-

(10). 「デフォルトリポジトリ」が設定されたか確認:
$ gh repo set-default --view
:
FuRuYa7/cli

→「デフォルトリポジトリ」が設定されています。

-

(11). パラメータを付けずに、プルリクエストを表示:
$ gh pr view
no pull requests found for branch "trunk"

→「ブランチ名」が認識されています。

-

$ gh pr view cli
no pull requests found for branch "cli"

$ gh pr view FuRuYa7/cli
no pull requests found for branch "FuRuYa7/cli"

→コマンドの書式が違います。パラメータが「ブランチ名」の指定として受け取られています。

-

(12). 「issue」を表示:
$ gh issue view
:
accepts 1 arg(s), received 0

→「issue」が無いという表示かな。

-

(13). 別のフォルダに、作業ディレクトリを移動:
$ cd ~/Git/

$ gh repo set-default --view
:
must be run from inside a git repository

リポジトリのフォルダではない(.git がない)と怒られました。

-

$ gh repo list

Showing 30 of 31 repositories in @FuRuYa7

FuRuYa7/cli                           GitHub’s official command line tool               public, fork  1d
FuRuYa7/worm                          Worm CE for EndeavourOS                           public, fork  5d
FuRuYa7/furuichi                      Check how to use GitHub                           private       10d
:

→こちらはフォルダ位置に関係なく表示できます。git の初期設定の情報を見ているのかな。

-

(14). 別のリポジトリのフォルダに、作業ディレクトリを移動:
$ cd ~/Git/worm/

$ gh repo set-default --view
:
no default repository has been set; use `gh repo set-default` to select one

→今度は、「gh repo set-default」が設定されていないと怒られました。

-

(15). 各リポジトリディレクトリごとに、「gh repo set-default」で設定しておく必要があります。

-


2). 自身のリポジトリの「クローン」を作成する場合:

-

(1). リポジトリの一覧を確認:
$ gh repo list

Showing 30 of 31 repositories in @FuRuYa7

FuRuYa7/cli                           GitHub’s official command line tool               public, fork  1d
FuRuYa7/worm                          Worm CE for EndeavourOS                           public, fork  5d
FuRuYa7/furuichi                      Check how to use GitHub                           private       10d
:

→ほとんどに「public, fork」があることに注目 →つまり、「プルリクエスト」したリポジトリということ。

ほとんどが、消すことを知らなかった、以前に出した日本語化のプルリクエストの残骸です。 承認されたらフォークは削除しているので、最近のものは残っていません。

-

行の中央のコメント表示は、リポジトリの「プロフィール」に登録されている説明です。ここがないものは、GitHub 以外をメインにして管理されているか、マンパワーが足りない可能性が高いリポジトリだろうと思います。

「private」のみオレンジ色で表示

-

$ gh repo view
failed to run git: fatal: not a git repository (or any of the parent directories): .git

→「.git」のあるフォルダに移動しないとリポジトリの情報は見れないみたい。

-

(2). リポジトリを「クローン」:

参照: 例3). OWNER/REPO 構文を使って、リポジトリを「クローン」:

$ cd ~/Git/
$ gh repo clone FuRuYa7/furuichi
:
Cloning into 'furuichi'...
remote: Enumerating objects: 56, done.
remote: Counting objects: 100% (30/30), done.
remote: Compressing objects: 100% (30/30), done.
remote: Total 56 (delta 8), reused 3 (delta 0), pack-reused 26
Receiving objects: 100% (56/56), 13.08 KiB | 1.87 MiB/s, done.
Resolving deltas: 100% (12/12), done.

→「gh repo list」の一覧で表示された「リポジトリ名」でクローンできました。

-

$ ls -1
:
furuichi
furuichi-2023-01-15
worm

-

(3). クローンで作成されたディレクトリに移動:
$ cd ~/Git/furuichi

$ ls -1a
.
..
.git
README.md
git-test.md
markdown.nanorc

-

$ gh repo view
FuRuYa7/furuichi
Check how to use GitHub


  ## GitHub (Check how to use GitHub)                                                                 
                                                                                                      
  --------                                                                                            
                                                                                                      
  履歴:                                                                                               
                                                                                                      
  2018-12-24:  GitHub の使用開始                                                                      
                                                                                                      
  2023-01-10:  GitHub で「SSH」タブの表示が無くなったので、プルリクエストを再確認                     
                                                                                                      
  --------                                                                                            



View this repository on GitHub: https://github.com/FuRuYa7/furuichi

→ブラウザでリポジトリをのぞいたときと同じイメージで、 README ファイルが表示されました。

-

$ gh repo set-default --view
no default repository has been set; use `gh repo set-default` to select one

→デフォルトリポジトリは設定されてませんが、自身で作成したリポジトリは色々と表示できるみたい。

-


3). 他のリポジトリに「プルリクエスト」を行う場合:

普段の操作は、ブラウザで対象のリポジトリを開き、
「Fork」ボタンを押して、フォークされた自身のリポジトリを作成しています。

-

参照: 例12). 引数付きで、別のリポジトリのフォークを作成:

引数として「OWNER/REPO」形式でリポジトリを渡すと、「gh」はアカウントの GitHub にフォークを自動的に作成し、クローンを作成するかどうかを尋ねます。これは、git リポジトリの内外で機能します。

-

$ cd ~/Git/
$ gh repo fork cli/cli
✓ Created fork FuRuYa7/cli  ←「フォークされ、自身のリポジトリが自動作成」されました。
? Would you like to clone the fork? (Y/n)  Yes  ←「y」で「Yes」に自動変換。

Cloning into 'cli'...
remote: Enumerating objects: 43694, done.
remote: Counting objects: 100% (344/344), done.
remote: Compressing objects: 100% (206/206), done.
remote: Total 43694 (delta 188), reused 267 (delta 137), pack-reused 43350
Receiving objects: 100% (43694/43694), 26.58 MiB | 6.52 MiB/s, done.
Resolving deltas: 100% (29508/29508), done.
✓ Cloned fork

-

確認:

$ ls -1 ~/Git/
:
cli              ←(新規作成)
furuichi
furuichi-2023-01-15
worm

-

作成されたディレクトリに移動:

$ cd ~/Git/cli/
$ ls -a
.               .github          LICENSE    cmd      go.sum    utils
..              .gitignore       Makefile   context  internal
.devcontainer   .golangci.yml    README.md  docs     pkg
.git            .goreleaser.yml  api        git      script
.gitattributes  CODEOWNERS       build      go.mod   test

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- ---

11.「GitHub CLI」を使ってみて:

-

1). やっぱり英語。日本語化される可能性は低そう

-

ソースを見るため、「GitHub CLI」の GitHub を覗いてみました。

GitHub CLI」は、GitHub 社内の開発環境を良くするためのツール(hub コマンドの後継?)として開発されたと思われます。

そのツールが使われる環境は、色々な国の人たちがいるけど共通語は英語。なので「英語」の表示で十分です。

→次元が違うみたい。日本語化でなく、自分の方が国際化(英語を使えるように)しないとダメかなと思ってしまいました。

-

開発の言語が「go」言語なのも、日本語化されないと思える要因:

cli/cmd/gh/main.go

→ソースの国際化対応はされてません。

-

国際化がルール化されている「C」言語であれば、国際化対応のコードである可能性が高かったのですが、

「go」言語だと、国際化はルール化されてません。なので、選んだ組み込む翻訳モジュールにより翻訳すべき部分の記述や、翻訳ファイルの配置のルールが異なります。

国際化が意識されていないと、英語のままのコードになります。

-

2). 「GitHub CLI」は、「GitHub」の操作法のひとつ。端末メインなので、プロ向けです:

→(自分も含め)コマンドの理解が足りなかったり、英語が使えないときは「ブラウザ」を使うという、別の操作法があります。なので、わざわざ「GitHub CLI」のコマンドを翻訳する必要はありません。

-

3). プロ向けなので、git コマンドを理解していることが前提。

-

4). ですが、端末画面で「ブラウザでの操作」が出来るように工夫されています:

画面は要点が色分けされていて見やすく、矢印キーとEnter で簡易的なGUI 操作ができるので、操作性は良いです。

入力の質問にヒント(Tips:)が一緒に表示され、迷わないようによく考えて作られています。

使い方がわかれば、使いやすそう。

-

5). 「GitHub CLI」だけを使って「プルリクエスト」出来るか確認:

「Git」コマンドと一緒に使います。ただし、今までのブラウザ操作をコマンドで出来るだけでなく、
今までの「git」コマンドよりも、楽に入力できたりします:

-

例えば、クローンする場合:

-

(1). 自身のGitHubリポジトリ名の一覧を確認:

$ gh repo list

-

(2). 確認したリポジトリ名でクローン:

$ gh repo clone FuRuYa7/furuichi

HTTPS を使うか、などの質問が表示されます。

別に一覧からでなく、実際のサイトを表示して、緑色の「Code」ボタンで、「GitHub CLI」を選べば、 こちらのコマンドがそのまま表示されています。

他人のリポジトリをクローンする場合も悩む必要はありません。

-

(3). ちなみに、今まで使っていた git と同じ書式の URL の指定でもクローンできます:

$ gh repo clone https://github.com/FuRuYa7/furuichi.git

→たぶん、こちらを使うと、HTTPS を使う質問はスキップされると思うけど未確認。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- ----

12. 参考:「gh」コマンドの設定ファイル:

-

手動で設定することはありません。参考です。

-

その1:

$ cat ~/.config/gh/config.yml
# What protocol to use when performing git operations. Supported values: ssh, https
git_protocol: https
# What editor gh should run when creating issues, pull requests, etc. If blank, will refer to environment.
editor:
# When to interactively prompt. This is a global config that cannot be overridden by hostname. Supported values: enabled, disabled
prompt: enabled
# A pager program to send command output to, e.g. "less". Set the value to "cat" to disable the pager.
pager:
# Aliases allow you to create nicknames for gh commands
aliases:
    co: pr checkout
# The path to a unix socket through which send HTTP connections. If blank, HTTP traffic will be handled by net/http.DefaultTransport.
http_unix_socket:
# What web browser gh should use when opening URLs. If blank, will refer to environment.
browser:

-

その2:

$ cat ~/.config/gh/hosts.yml
    oauth_token: ********************************
    user: FuRuYa7
    git_protocol: https

-

その3:

$ cat ~/.local/state/gh/state.yml
checked_for_update_at: 2023-01-15T19:02:45.827341312+09:00
latest_release:
    version: v2.21.2
    url: https://github.com/cli/cli/releases/tag/v2.21.2
    publishedat: 2023-01-03T22:54:10Z

-

その4:

リポジトリディレクトリごとに設定があります:

$ cd ~/Git/worm/
$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/FuRuYa7/worm.git   ←「gh repo set-default」で設定
    fetch = +refs/heads/*:refs/remotes/origin/*
    gh-resolved = base
[branch "master"]
    remote = origin
    merge = refs/heads/master

-

現在の状態:

$ cd ~/Git/worm/

$ gh repo set-default -v
FuRuYa7/worm
$ git remote -v
origin  https://github.com/FuRuYa7/worm.git (fetch)
origin  https://github.com/FuRuYa7/worm.git (push)

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- -----

13. 参考:「gh」の環境変数:

-

環境変数 からの抜粋:

-

GH_TOKEN、GITHUB_TOKEN (優先順位順):

github.com への、API リクエストの認証トークン。
これを設定すると、認証を求めるプロンプトが表示されなくなり、以前に保存された資格情報よりも優先されます。

-

GH_ENTERPRISE_TOKEN、GITHUB_ENTERPRISE_TOKEN (優先順位順):

GitHub Enterprise への API リクエストの認証トークン。
これを設定するときは、GH_HOST も設定してください。

-

GH_HOST:

既存のリポジトリのコンテキストにない場合、「github.com」ホストを想定するコマンドの GitHub ホスト名を指定します。

-

GH_REPO:

GitHub リポジトリを「[HOST/]OWNER/REPO」形式で指定して、それ以外の場合はローカル リポジトリで動作するコマンドを指定します。

-

GH_EDITOR、GIT_EDITOR、VISUAL、EDITOR (優先順位順):

テキストのオーサリングに使用するエディター ツール。

-

GH_BROWSER、BROWSER (優先順位順):

リンクを開くために使用する Web ブラウザ。

-

GH_DEBUG:

標準エラーで詳細出力を有効にするには、true 値に設定します。
HTTP トラフィックの詳細をさらにログに記録するには、「api」に設定します。

-

DEBUG (deprecated):

標準エラーで詳細出力を有効にするには、「1」、「true」、または「yes」に設定します。

-

GH_PAGER、PAGER (優先順位順):

標準出力を送信する端末ページング プログラム。 例.「less」

-

GLAMOUR_STYLE:

Markdownレンダリングに使用するスタイル。
https://github.com/charmbracelet/glamour#styles」を参照してください

-

NO_COLOR:

カラー出力用の ANSI エスケープ シーケンスの出力を回避するには、任意の値に設定します。

-

CLICOLOR:

出力での ANSI カラーの印刷を無効にするには、「0」に設定します。

-

CLICOLOR_FORCE:

"0" 以外の値に設定すると、出力がパイプ処理された場合でも ANSI カラーが出力されます。

-

GH_FORCE_TTY:

出力がリダイレクトされた場合でも端末スタイルの出力を強制するには、任意の値に設定します。値が数値の場合、ビューポートで使用可能な列の数として解釈されます。値がパーセンテージの場合、現在のビューポートで使用可能な列の数に対して適用されます。

-

GH_NO_UPDATE_NOTIFIER:

更新通知を無効にするには、任意の値に設定します。デフォルトでは、gh は 24 時間ごとに新しいリリースをチェックし、新しいバージョンが見つかった場合は標準エラーにアップグレード通知を表示します。

-

GH_CONFIG_DIR:

gh が設定ファイルを保存するディレクトリ。

デフォルト: 「$XDG_CONFIG_HOME/gh」または「$HOME/.config/gh」

-

GH_PROMPT_DISABLED:

ターミナルでの対話型プロンプトを無効にするには、任意の値に設定します。

-

-


- --- - --- - --- - --- - --- - --- - --- - --- - ----- ----- ----- ----- -

14. 参考:「gh」コマンドに関連の GitHub の機能へのリンク:

-

-

GitHub Actions:

-

GitHub Gits:

-

GitHub Codespaces:

-

-


まとめ

GitHub CLI」をインストールして、使ってみました。

個人的には、慣れれば使えそうだけど、わざわざ使うこともないかな。という印象です。

-

たぶん、使用頻度によります。いつも使うとか仕事で使うなら、工数削減ができます。
たまにしか使わないのであれば、確認できて確実なブラウザを使います。

-

ただし、「フォークしてリポジトリを作成する」コマンドだけは使えそうです。 コマンドを覚えていなくても入力できるし、ひと手間減ります。

-

フォーク作成の手順:

(1). 作業フォルダに移動後、ログイン:

$ cd ~/Git/
$ gh auth login

→事前に、もしくは作業途中で、「認証トークン」を作成する必要があります。

もしかしたら、一度ログイン(認証)すれば、認証トークンの有効期限内であれば、毎回ログインする必要はないかも。(未確認)なので、怒られたら、入力。

(2). ブラウザで対象のリポジトリを開き、緑色の「Code」ボタンで、「GitHub CLI」を選び、コピーします。

→事前に、「所有者名/リポジトリ名」を調べておけば、ブラウザの起動は要りません。

(3). 端末に貼付け(実行はまだ)

(4). コマンドを「fork」に修正:

gh repo clone 所有者名/リポジトリ名

gh repo fork 所有者名/リポジトリ名

(5). コマンドの実行で、自身にフォークされたリポジトリが追加され、PC にクローンされます。

(6). もし、引き続き、「gh」コマンドを使うのであれば、デフォルトのリポジトリを設定します:

「git」コマンドとブラウザを使うのであれば、要りません。

$ gh repo set-default

→対話式にリポジトリを選択

-

簡単かと思ったら、手順を書いてみたら、けっこう面倒かな。

-

-

-


-

-

    目次

-

「投稿の先頭 へ」

-

-


-

「この目次 の先頭へ」

「本編の目次 に戻る」

-