vcs-identity-check について
vcs-identity-checkは、コミット前にバージョン管理の本人情報と署名設定を確認するスキルです。必要に応じて確認を求め、本人情報の検証に失敗した場合はコミットを止めます。
主な機能
- 01Git、hg、jjの本人情報を取得
- 02名前とメール形式を検証
- 03コミット署名設定を確認
- 04過去のコミット意図と照合
- 05本人情報の検証失敗時に停止
活用シーン
- 01コミット前の作者情報確認
- 02署名設定の不整合を特定
- 03署名未設定のGitコミットへの案内
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ petr-korobeinikov/ skills --skill vcs-identity-checkインストール後、Claude Code で/vcs-identity-checkを入力して読み込まれたか確認します。
詳細
vcs-identity-check
コミット前に VCS の ID を確認し、 コミットが正しく帰属するようにします。 また、コミット署名が設定されていない場合は推奨します。
手順
-
使用中の VCS の ID を読み取ります。
- git →
git config --show-scope --get user.nameおよびgit config --show-scope --get user.email(--show-scopeは git ≥2.26 で使用できます。 値とともにスコープ(local/global/system)を表示します); - hg →
hg config ui.usernameを実行し、 最後の<…>の組で名前とメールアドレスに分割します (例:Petr Korobeinikov <[email protected]>→ 名前Petr Korobeinikov、メールアドレス[email protected])。<…>がない場合は、 文字列全体を名前として扱い、メールアドレスは未設定とします; - jj →
jj config get user.name/user.email。
- git →
-
次を確認します。
- 名前 が空でなく、 空白で区切られたトークンが2つ以上あり、 メールアドレスそのものではないこと。 この2トークンのルールは「名 姓」の慣習を前提としています。 1語の単名を使うユーザー (インドネシアやアイスランドの一部の命名パターンなど)の場合は、 ユーザーが明示的に確認したうえで値を受け入れ、 このサブチェックを省略します;
- メールアドレス が空でなく、
@をちょうど1つ含み、 その左右にそれぞれ1文字以上あること。
-
署名設定を読み取ります。
- git →
git config commit.gpgsign、git config tag.gpgsign、git config user.signingkey、git config gpg.format; - jj →
jj config get signing.behaviorおよびjj config get signing.backend。
次の3つの状態に分類します。
- 設定済み —
commit.gpgsign=true、user.signingkeyが空でない、gpg.formatが設定されている (tag.gpgsign=trueが未設定の場合は軽微な警告であり、設定不備ではありません); - 未設定 —
commit.gpgsignが未設定またはfalseで、user.signingkeyが空; - 設定不備 —
それ以外
(例:
commit.gpgsign=trueなのにuser.signingkeyが空) — 実行時にコミットの署名が失敗します。
この手順は情報提供のみを目的とし、 それだけでコミットをブロックすることはありません。
- git →
-
既存のコミットがすでに一致する場合は、確認を省略します。 同じ作成者による過去のコミットがこのリポジトリにあり、 その署名意図が現在の設定と一致する場合は、 手順5の確認と署名の推奨を省略します — ユーザーはその設定でコミットしたことで、 以前に暗黙的にこの設定を検証しています。
git では、
git log -1 --author="<email>" --pretty=format:'%G?'を実行し、 次の場合に一致とみなします。- 過去のコミットに署名があり(
%G?≠N)、 現在の署名状態が 設定済み;または - 過去のコミットに署名がなく(
%G?=N)、 現在の署名状態が 未設定。
これは鍵ではなく意図(署名する/しない)を比較するため、
user.signingkeyの記述方法 (鍵 ID、フィンガープリント、0x…接頭辞の有無、 または公開鍵ファイルのパス)にかかわらず、 GPG と SSH のどちらでも機能します。それ以外の場合 — この作成者による過去のコミットがない、 設定不備の状態、または git 以外の VCS — 手順5に進みます。
- 過去のコミットに署名があり(
-
解決した値を表示して、ユーザーに確認を求めます — «
<First> <Last>(<scope>から取得) — 順序は正しく、入力ミスはありませんか?»。<scope>は git が報告した値(local/global/system)です。 hg/jj の場合は、可能であればソースファイル名を記載し、 分からない場合は省略します。 順序を自動的に検出することはできないため、 確認が必要です。 同じメッセージ内で、次のようにします。- 署名が 未設定 の場合 → 以下の 署名 セクションにある推奨事項を含めます;
- 署名が 設定不備 の場合 → 矛盾している設定を明示し、 提案ではなく即時修正が必要なものとして扱います。
-
ID の確認に失敗した場合、またはユーザーが拒否した場合は停止します。 コミットに進んではいけません。
修正
- git、リポジトリローカル:
git config --local user.name "First Last"(およびuser.email)。 - git、グローバル:同じコマンドで
--globalを指定します。 - hg:
~/.hgrcの[ui] username = First Last <[email protected]>。 - jj:
jj config set --user user.name "First Last"(およびメールアドレス)。
修正後、確認を再実行します。
署名
コミットに署名することをおすすめします。 レビュー担当者がコミットの作成者が表示どおりであることを確認でき、 GitHub、GitLab、Gitea などのプラットフォームでは、 署名済みコミットに「Verified」バッジが表示されます。 未設定の場合は、設定することをおすすめしてください。
形式は 2 種類あります。ユーザーの環境に合うものを選んでください。
- GPG — 従来から使われている方法で、 git がホストされている環境ならどこでも利用できます。 GPG キーを生成し、ホストの「GPG keys」設定に公開鍵をアップロードする必要があります。
- SSH —
既存の SSH キーを再利用できます。
git≥2.34 とssh-keygen以外のツールは必要ありません。 GPG をまだ使っていない場合に適しています。 公開鍵をホストの「署名鍵」としてアップロードする必要があります (認証鍵とは別です)。
セットアップ(git、グローバル):
GPG:
git config --global gpg.format openpgp
git config --global user.signingkey "<KEY-ID>"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
SSH:
git config --global gpg.format ssh
git config --global user.signingkey "<path-to-public-key>"
git config --global commit.gpgsign true
git config --global tag.gpgsign true
その後、公開鍵をホストの署名鍵設定にアップロードします。