こんにちは!チームの開発体験を極限まで高めるお手伝いをする、あなたの身近な先輩エンジニアです。
日々の開発で、GitHubを使わない日はありませんよね。プルリクエストを送り、レビューをし、マージする。チームメンバーのアイコンと共に見慣れた名前がコミット履歴に並びます。
……でも、ちょっと待ってください。そのコミットの作者、本当に「その人本人」だと言いきれますか?
実は、Gitの標準機能では、コミット時の作者名(`user.name` と `user.email`)はただの文字列として自由に変更できてしまいます。極端な話、あなたになりすまして悪質なコードを混入させたり、オープンソースのプロジェクトで勝手に名前を使ったりすることが、ほんの数秒のコマンド操作で可能なのです。
これを防ぎ、「私以外には絶対にこのコードを書けない(改ざんもされていない)」ことを暗号学的に証明するのが、今回解説する「Commit Signing(コミット署名)」です。
これをマスターすれば、あなたのGitHubプロフィールに輝く「Verified(検証済み)」のバッジがつき、オープンソース活動でも企業のエグゼクティブな開発環境でも、一目置かれる信頼性の高いエンジニアになれますよ。さあ、一緒に設定していきましょう!
—
1. なぜコミット署名が必要なのか?(技術の本質)
まずは「なぜ署名が必要なのか」を腑に落ちる形で理解しておきましょう。
Gitは分散型バージョン管理システムです。ローカル環境で自由にコミットを作り、後から作者情報を書き換えることは技術的に容易です。もしあなたのPCがマルウェアに感染したり、パブリックなWi-Fi環境で悪意ある第三者に通信を傍受されたりした場合、あなたの名前で勝手なコードがリポジトリにプッシュされるリスクがあります。
ここでCommit Signingの登場です。
1. 暗号学的署名: あなたが持っている「秘密鍵」を使って、コミットハッシュにデジタル署名を付与します。
2. GitHubでの検証: GitHubはあなたの「公開鍵」をあらかじめ登録して持っています。
3. Verifiedバッジ: GitHubが「この署名は、確かに登録された秘密鍵を持つ本人によって行われ、途中で改ざんされていない」と検証し、緑色の「Verified」マークを表示します。
エンタープライズ環境やセキュリティ要件の厳しいプロジェクトでは、この署名を「必須(Branch Protection Rule)」にしているところも急増しています。今のうちにマスターしておけば、どんな現場でも即戦力として通用しますよ。
—
2. どちらを使うべき? GPG vs SSH
GitHubでコミットに署名する方法には、主にGPG (GNU Privacy Guard)とSSHの2種類があります。
- GPGキー: 昔からある王道の方法。設定項目が多く、鍵の有効期限管理などややマニアックな知識が必要です。
- SSHキー: すでにGitHubへのプッシュ(認証)で使っているSSHキーをそのまま署名にも流用できる最新トレンド。圧倒的に楽で、初心者にはこちらを強くおすすめします。
今回は、よりモダンで簡単な「SSH鍵を使った署名設定」をメインに、ステップバイステップで解説します!
—
側道に逸れず、最短で「Verified」を手に入れる手順を見ていきましょう。
—
3. 実践!SSH鍵を使ったコミット署名セットアップ
すでにGitHubへのクローンやプッシュにSSHを使っている方であれば、ほんの数分で終わります。
Step 1: 既存のSSH鍵を確認する
まずは、手元に使えるSSHキーがあるか確認しましょう。ターミナル(またはGit Bash)を開き、以下のコマンドを叩きます。
ls -la ~/.ssh
`id_ed25519` や `id_rsa` のようなファイルがあればOKです。もし何もない場合は、以下のコマンドで新しく生成してください(Ed25519アルゴリズムが推奨です)。
メールアドレスはご自身のGitHubアカウントのものに置き換えてください
ssh-keygen -t ed25519 -C “your_email@example.com”
Step 2: GitHubに公開鍵を登録する
生成した公開鍵(例: `~/.ssh/id_ed25519.pub`)の中身をコピーします。
Macの場合
cat ~/.ssh/id_ed25519.pub | pbcopy
Linuxの場合
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard
1. GitHubの右上アイコンから [Settings] を開く。
2. 左メニューの [SSH and GPG keys] をクリック。
3. [New SSH key] をクリック。
4. Title に分かりやすい名前(例: `My Laptop`)を入れ、Key typeを “Signing key” に設定(ここが重要です! Authentication ではなく Signing を選んでください)。
5. Keyに貼り付けて [Add SSH key] を押す。
これでGitHub側の準備は完了です。
Step 3: Gitに「この鍵で署名しろ」と教える
次に、ローカルマシンのGitに対し、どの鍵を使って署名するかを設定します。
1. 署名フォーマットに ssh を指定
git config –global gpg.format ssh
2. 使用するSSH公開鍵のパスを指定(デフォルトのEd25519の場合)
git config –global user.signingkey ~/.ssh/id_ed25519.pub
Step 4: 自動署名を有効にする(これ超重要!)
毎回手動で署名コマンドを打つのは面倒ですよね。以下の設定をしておけば、通常の `git commit` をするだけで自動的に署名が付くようになります。
git config –global commit.gpgsign true
「これを設定すれば、毎日の作業が劇的に楽になりますよ!」(意識せずとも常にセキュアな状態が保たれます)
—
4. 動作確認:いざ、HelloWorld的なコミットをしてみよう!
正しく設定できているか、テスト用のリポジトリを作って確認してみましょう。
テスト用ディレクトリの作成
mkdir git-sign-test
cd git-sign-test
git init
適当なファイルを作ってステージング
echo “Hello Commit Signing” > hello.txt
git add hello.txt
いつも通りコミットする(これだけで自動署名されます!)
git commit -m “feat: 初めての署名付きコミット”
コミットができたら、以下のコマンドで署名されているか確認してみましょう。
git log –show-signature
出力の中に `Good “git” signature` や、あなたのSSHキーの指紋が表示されていれば大成功です!
最後に、適当なGitHubのリポジトリにプッシュしてブラウザで確認してみましょう。コミット履歴の横に、誇らしげな緑色の [Verified] バッジが表示されているはずです。おめでとうございます!これであなたのコードの正当性は完璧に証明されました。
—
トラブルシューティング:もし Verified にならないときは?
初心者がつまずきがちなポイントを先回りして解決しておきます。
1. コミット時のメールアドレスとGitHubのアドレスが一致していない
- Gitの設定(`git config user.email`)のメールアドレスと、GitHubアカウントのメールアドレスが完全に一致している必要があります。確認してみてください。
2. SSHキーの用途(Key Type)を間違えた
- GitHubに鍵を登録する際、「Authentication」用として登録した鍵は署名に使えません。「Signing」としてもう一度登録するか、署名専用の鍵を新しく発行してください。
—
おわりに
今回は、GitHubの「Commit Signing」について、SSH鍵を用いた最もスマートな実践方法を解説しました。
開発者としてのスキルを高めるうえで、コードの書き方やアーキテクチャの選定はもちろん重要ですが、「自分自身のアイデンティティをどう担保するか」というセキュリティの視点を持つことは、プロフェッショナルとして一段上のステージに上がるために不可欠です。
今日からあなたのすべてのコミットに「信頼」という名の署名を添えて、自信を持ってプルリクエストを送り出してください。あなたの素晴らしいオープンソース活動やチーム開発を、心から応援しています!