ターミナルで作業しているとき、「いまいる場所は GitHub repo なのか」をひと目で分かるようにしたくなりました。大きな仕組みではなく、ターミナルに小さく GitHub アイコンを出すだけの設定です。こういう小さい目印、後からじわっと効くんですよね。

設定には starship を使っています。git remote が GitHub のディレクトリにいるときだけ Nerd Font の GitHub アイコンを表示して、それ以外では何も出しません。派手な改善ではないですが、複数 repo を行き来していると意外と助かります。

ブランチ名は starship 標準の [git_branch] モジュールがそのまま並べてくれます。この記事では、その手前に「GitHub repo ならアイコンを出す」custom module だけを足します。やることはかなり小さいです。

まず、こう見えるようにする

表示するのは GitHub アイコンだけ

実際に GitHub repo (321dev-blog) のディレクトリに cd した直後の様子です。

cd 直後のターミナル画面で、入力行の中央に紫色の GitHub アイコンとブランチ名が表示されている

2 つ目の入力行(cd 後)に 紫色の GitHub アイコンと、その隣にブランチ名 (feat/blog/tips/starship-github-account) が並んでいるのが見えるはずです。GitHub 以外の remote のディレクトリや、git repo ではないディレクトリでは、この位置には何も出ません。静かな表示ですが、「あ、ここは GitHub repo だな」とすぐ分かります。

アイコンの後ろにブランチ名が並ぶのは、starship.tomlformat${custom.github_remote} の隣に $git_branch を置いたからです。ブランチ名自体は starship 標準のモジュールに任せています。

user.name を出すなら追加で変える

なお、画像のアイコンとブランチ名の間に挟まっている kohei321devgit config user.name の表示です。本記事のスクリプトは「アイコンだけ出す」シンプル版なので user.name は出ませんが、画像のように自分のアカウント名も並べたい場合は、後述のスクリプトの最終行を次のように変えるとこの形になります。

printf ' %s' "$(git config --get user.name 2>/dev/null)"

アイコンが四角なら、先にフォントを見る

Nerd Font が前提

GitHub アイコンは Nerd Fontnf-fa-github (U+F09B) glyph を使います。ターミナルのフォント設定を Nerd Font 系(FiraCode Nerd Font、Hack Nerd Font など好みのもの)にしておく必要があります。普通のフォントだと、その位置が `` のような四角に化けるか、空白になります。ここで一回「あれ、出ない」となりがちです。

starship を使っている人はだいたい Nerd Font を入れていると思いますが、もし「アイコンの代わりに四角が出る」場合は、まずフォント設定を確認してください。スクリプトを見る前に、フォントを見るほうが早いことが多いです。

starship.toml では custom module を 1 つ足す

custom module をプロンプトに差し込む

~/.config/starship.toml[custom.github_remote] セクションを足します。実機の format 行は他のモジュール($kubernetes など)も並んでいますが、関係する部分だけ抜粋すると次のようになります。

# ~/.config/starship.toml

format = """
$username$directory${custom.github_remote}$git_branch$git_status$cmd_duration
$character"""

[custom.github_remote]
command = '"$HOME/.config/starship-github-identity.sh"'
when = '"$HOME/.config/starship-github-identity.sh" --check'
style = "bold purple"
format = '[$output]($style)'

[custom.github_remote] は starship の custom module 機能で、when に書いたコマンドが exit 0 で返ったときだけ command の出力をターミナル画面に表示します。when は表示するかどうかの判定、command は実際に表示する文字列を出す役割です。

判定と表示を同じスクリプトに寄せる

今回はこの両方を 1 本のシェルスクリプトに任せて、--check 引数で挙動を切り替えています。判定と表示を別々に書くと、あとで条件がズレそうだったので、そこを避けました。

判定は git remote の host だけを見る

remote URL から host を取り出す

~/.config/starship-github-identity.sh に置くスクリプトです。やることは、現在のディレクトリの git remote を順に見て、ホスト名が github.com なら GitHub アイコン 1 文字を出す、それだけです。

#!/usr/bin/env bash
# SPDX-License-Identifier: MIT
# ~/.config/starship-github-identity.sh

set -u

remote_host() {
  local url="$1"
  local rest host
  case "$url" in
    *://*)
      rest="${url#*://}"
      rest="${rest%%/*}"
      rest="${rest##*@}"
      host="${rest%%:*}"
      ;;
    *@*:*)
      rest="${url#*@}"
      host="${rest%%:*}"
      ;;
    *)
      host=""
      ;;
  esac
  printf '%s\n' "$host"
}

is_github_host() {
  case "$1" in
    github.com|ssh.github.com) return 0 ;;
    *) return 1 ;;
  esac
}

github_remote_found() {
  local remote url host
  for remote in origin upstream $(git remote 2>/dev/null); do
    [ -n "$remote" ] || continue
    url="$(git remote get-url "$remote" 2>/dev/null)" || continue
    host="$(remote_host "$url")"
    is_github_host "$host" && return 0
  done
  return 1
}

main() {
  github_remote_found || return 1
  if [ "${1-}" = "--check" ]; then
    return 0
  fi
  printf '\357\202\233'   # GitHub icon (Nerd Font の nf-fa-github, U+F09B)
}

main "$@"

remote_hosthttps://... 形式と git@host:owner/repo.git 形式の両方から host 部分を切り出して、is_github_hostgithub.comssh.github.com かだけを見ています。when から呼ばれたとき(--check 付き)は判定だけして exit code を返し、引数なしで呼ばれたら GitHub アイコン 1 文字を stdout に出します。

対象ホストは必要になったら増やす

やっていることは本当にそれだけです。GitHub Enterprise Server も対象にするなら、is_github_host にそのホスト名を追加できます。自分の手元では github.comssh.github.com だけで十分でした。

設置後に実行権限を付ける

スクリプトを置いたら実行権限を付けます。

chmod +x ~/.config/starship-github-identity.sh

シェルを再起動すれば(あるいは新しいターミナルタブを開けば)、GitHub repo に cd したときにアイコンが表示されるはずです。GitHub 以外の remote や、そもそも git repo ではない場所では何も出ません。出す場所を絞っているので、ターミナルがうるさくならないのも気に入っています。

まとめ:1 文字の目印で迷子を減らす

実装は小さく、表示は静かにする

設定はこれだけです。GitHub のディレクトリに来たことがアイコン 1 文字で分かるだけですが、作業している場所の文脈が少し見えやすくなります。小さいですが、毎日見るターミナルなので、こういう改善は思ったより効きます。

スクリプトと starship.toml のサンプルは kohei321dev/starship-github-identity に置いてあります。複数の GitHub アカウントを使い分けたい場合の commit Author 側の切り替え方は、別記事 Git の Author 混入は、includeIf で防ぐ にまとめてあります。あわせて入れておくと、ターミナル上の文脈がかなり見やすくなります。


この記事は Blog Scout(自前の AI エージェントワークフロー)の起草と人間レビューで作成しました。実装と運用の判断は自分の実体験で、AI には文章化と整理を担当してもらっています。