macOS(Homebrew)でGPG鍵を作り、Gitの署名付きコミットを有効化して、GitHubでVerified表示になるまでを最短手順でまとめます。
つまずきやすい「Verifiedにならない条件(メール一致)」も併記。
なぜ署名が必要?
- OSSプロジェクトによっては署名付きコミットが必須
- GitHubで「Verified」バッジが表示され、なりすまし対策になる
補足: GitHubは署名方式としてGPG/SSH/S/MIMEに対応している。本記事ではGPGを主、SSHを代替として扱う。
参考: About commit signature verification - GitHub Docs
重要:Verifiedになる条件(ここで詰まりがち)
GitHubは署名の検証時に、コミッター(committer)のメールが、GPG鍵のUID(identities)に含まれるメールと一致し、かつそのメールがGitHubアカウントでverify済みかを見る。
→ つまり git config user.email がズレるとUnverifiedになる。
参考: Using a verified email address in your GPG key - GitHub Docs
手順
1. GPGをインストール
brew install gnupg
2. GPG鍵を作成(対話式を推奨)
バッチ生成でパスフレーズ無し(%no-protection)にすると鍵が無防備になるため、対話式での生成を推奨。
gpg --full-generate-key
選択肢:
- 種別:RSA and RSA
- 鍵長:4096
- 有効期限:必要に応じて(迷うなら1y)
- Name/Email:GitHubでVerifiedにしたいメールに合わせる
3. GitHubのnoreplyメールを使う場合(プライバシー重視)
GitHub提供のnoreplyを使うと、個人メールを露出しない。
noreplyの形式はアカウント作成時期/設定で変わる:
-
2017/07/18以降:
<ID>+<USERNAME>@users.noreply.github.com(推奨) -
それ以前の一部:
<USERNAME>@users.noreply.github.com
古いUSERNAME@...形式はusername変更で変わるため、ID付き形式の方が安全。
自分のnoreplyアドレスを確認:
gh api user --jq '"\(.id)+\(.login)@users.noreply.github.com"'
参考: Email addresses reference - GitHub Docs
4. キーIDを確認
gpg --list-secret-keys --keyid-format=long
出力例:
sec rsa4096/XXXXXXXXXXXXXXXX 2025-12-15 [SC]
XXXXXXXXXXXXXXXX の部分がキーID。
5. Git側で署名鍵とコミッターEmailを揃える(最重要)
# noreplyを実値でセット(gh CLIで自動取得)
git config --global user.email "$(gh api user --jq '"\(.id)+\(.login)@users.noreply.github.com"')"
# 署名に使う鍵(Step 4で確認したキーID)
git config --global user.signingkey XXXXXXXXXXXXXXXX
# 常に署名
git config --global commit.gpgsign true
6. GitHubに公開鍵を登録
# 権限追加(必要な場合のみ)
gh auth refresh -h github.com -s write:gpg_key
# 登録
gpg --armor --export XXXXXXXXXXXXXXXX | gh gpg-key add -
参考: gh gpg-key add - GitHub CLI
7. 動作確認(ローカル)
echo "test" | gpg --clearsign
エラーがなければOK。
8. GitHubでVerified確認
適当に1コミットしてGitHub上のコミット表示を確認。Unverifiedなら、だいたいuser.emailとGPG鍵UIDのEmail不一致が原因。
よくある詰まり
gpg failed to sign the data
端末/エージェント周りの設定問題が多い。まずは gpg --clearsign が通る状態にする。
# GPG_TTYの設定(.zshrc等に追加)
export GPG_TTY=$(tty)
パスフレーズ入力のダイアログが出ない
macOSではpinentry-macを入れると、GUIでパスフレーズを入力できる。
brew install pinentry-mac
echo "pinentry-program $(which pinentry-mac)" >> ~/.gnupg/gpg-agent.conf
gpgconf --kill gpg-agent
参考: Telling Git about your signing key - GitHub Docs
SSH署名という選択肢もある
GPGが面倒なら、SSH署名の方が簡単。Git 2.34+が前提。
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/id_ed25519.pub
git config --global commit.gpgsign true
GitHubへは「署名用」として公開鍵を追加(認証用とは別枠)。
gh ssh-key add ~/.ssh/id_ed25519.pub --type signing
ただし、OSSプロジェクトによってはGPG署名を明示的に求める場合があるので要確認。
参考:
まとめ
| 目的 | コマンド |
|---|---|
| GPG導入 | brew install gnupg |
| 鍵作成 | gpg --full-generate-key |
| 鍵ID確認 | gpg --list-secret-keys --keyid-format=long |
| Git署名ON | git config --global commit.gpgsign true |
| GitHubへGPG鍵登録 | gpg --armor --export <KEYID> | gh gpg-key add - |
| SSH署名に切替 | git config --global gpg.format ssh |
| 署名用SSH鍵登録 | gh ssh-key add ~/.ssh/id_ed25519.pub --type signing |
一度設定すれば、以降のコミットは自動で署名される。
noteでは「AI × 技術 × ビジネス」視点で書いています
Qiitaでは純粋な技術Tipsを、noteでは「その技術をどう活かすか」というPM/事業視点の記事を書いています。
- Qiita: ハマりポイント、解決策、設定方法
- note: AI駆動開発の実践、技術選定の判断軸、放置プロジェクトの救い方