1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

macOSでGPG署名コミットを設定する:鍵作成→Git設定→GitHub登録まで

1
Posted at

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駆動開発の実践、技術選定の判断軸、放置プロジェクトの救い方

👉 note.com/ebiyy

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?