おひとり

できる限りひとりで楽しむための情報やプログラミング情報など。

【macOS】TerminalからGitHubのリポジトリをブラウザで開く

コマンドで飛ぶ方が断然早い!

Terminalからコマンド1つでGitHubのリポジトリを開く方法です。
GitHubのページと書いていますが、リモートリポジトリのWebページにアクセスする方法です。
なお、macOSに対応した情報ですが、他OSでも似たようなコマンドでできるかと思います。

TL;DR

以下のようなaliasを.zshrcなどに定義する。

alias github="git remote -v | head -1 | awk '{ print \$2 }' | xargs open"

remoteがたくさん登録してある場合は、次のコードを.zshrcに設定して、引数でアクセスするremoteを指定できるようにする。

function _browse_remote () {
  local remote=$1
  git remote -v | grep "$remote" | head -1 | awk '{ print $2 }' | xargs open
}

alias browse=_browse_remote

TerminalからGitHubのページをブラウザで開く

プログラミングをしていると、そのリポジトリのGitHubページにアクセスしたくなることがあります。
そのとき、ブラウザでGitHubにアクセスして、そのリポジトリまでnavigateして。。。とやっていたら効率が悪いですよね。

プログラミングをしているなら近くにTerminalが開かれているはずで、これでサッとコマンドを打ってGitHubにアクセスできたら素敵です。
そこで、今回はそのようなコマンドを自分で作ってみます。(と言ってもaliasを設定するだけですが。)

originのみの簡単version

さて、Gitのリポジトリにはremoteが設定されていると思います。
そして、originの1つだけが登録されている、という場合が多いでしょう。
そんな時は、以下の記述を.zshrcなどに設定しましょう。

alias github="git remote -v | head -1 | awk '{ print \$2 }' | xargs open"

※自分はリポジトリのホスティングサービスにはGitHubしか利用していません。そのため分かりやすいのでgithubのエイリアスを付けていますが、場合によってはより抽象的なbrowseなどが良いでしょう。

このaliasを設定すると、リポジトリがあるディレクトリで

github

というコマンドを実行すればGitHubの該当ページにアクセスできます。

少し解説すると、このaliasは4つのコマンドがパイプで連結されています。

  • git remote -v はそのリポジトリに登録されたremoteの一覧をURLを合わせて表示するコマンド
  • head -1 は、出力の先頭行のみを抽出するコマンド
  • awk '{ print $2 }' 出力から2列目(ここではremote url)を抽出するコマンド
  • xargs open は先ほどのawkの結果をopenに引き渡すコマンドです。openは指定されたリソースを適切なアプリで起動するコマンドです。

他のOSを使っているひとは、openにあたるコマンドに差し替えてください。

アクセスするremoteを引数で指定するversion

さて、先ほどはremoteが1つしかない場合を想定していました。
ただし、1つのリポジトリに複数のremoteが登録されている場合もあります。
そのような場合に対応する方法です。

以下のコードを.zshrcなどに書きます。

function _browse_remote () {
  local remote=$1
  git remote -v | grep "$remote" | head -1 | awk '{ print $2 }' | xargs open
}

alias browse=_browse_remote

これは、引数で受け取ったremoteのURLにアクセスする関数_browse_remoteを追加しています。
可読性重視でremoteと言う変数に$1、つまり引数で受け取ったremote名を指定しています。

それをそのままbrowseというaliasに登録している、というコードです。
このaliasを設定すると、以下のコマンドでremoteにアクセスできます。

# 先頭のURL(remoteが1つしかない場合は引数は不要)
browse

# remote [mirror] にアクセスする場合
browse mirror

なお、remoteが複数あった場合でも引数を省略したらorignにアクセスしたい人は、先ほどの_browse_remote関数を以下のように変更します。

function _browse_remote () {
  local remote="origin"
  if [ ! -z "$1" ]; then
    remote=$1
  fi
  git remote -v | grep "$remote" | head -1 | awk '{ print $2 }' | xargs open
}

まとめ

今回はターミナルからGitHub(というより、リモートリポジトリをホスティングしているサイトのページ)にアクセスする方法を紹介しました。
実際、この手のコマンドはすでに誰かが作っていて、brewなどでインストールできるかもしれません。

しかし、本当に小さい機能であればコマンドを複数パイプで繋げるだけで実現できます。すこし複雑な場合もシェルスクリプトで対応できるかもしれません。
このようなちょっとしたルーチンを効率化するためのツールは自分でササっと実装して使えるようになりたいものですね。。。!