mcpField
V
vcs-identity-check

vcs-identity-check

github.com/petr-korobeinikov開発165 回インストール14 週間前に更新
リポジトリ

vcs-identity-check について

vcs-identity-checkは、コミット前にバージョン管理の本人情報と署名設定を確認するスキルです。必要に応じて確認を求め、本人情報の検証に失敗した場合はコミットを止めます。

主な機能

  1. 01Git、hg、jjの本人情報を取得
  2. 02名前とメール形式を検証
  3. 03コミット署名設定を確認
  4. 04過去のコミット意図と照合
  5. 05本人情報の検証失敗時に停止

活用シーン

  1. 01コミット前の作者情報確認
  2. 02署名設定の不整合を特定
  3. 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 を確認し、 コミットが正しく帰属するようにします。 また、コミット署名が設定されていない場合は推奨します。

手順

  1. 使用中の 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。
  2. 次を確認します。

    • 名前 が空でなく、 空白で区切られたトークンが2つ以上あり、 メールアドレスそのものではないこと。 この2トークンのルールは「名 姓」の慣習を前提としています。 1語の単名を使うユーザー (インドネシアやアイスランドの一部の命名パターンなど)の場合は、 ユーザーが明示的に確認したうえで値を受け入れ、 このサブチェックを省略します;
    • メールアドレス が空でなく、 @ をちょうど1つ含み、 その左右にそれぞれ1文字以上あること。
  3. 署名設定を読み取ります。

    • 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 が空) — 実行時にコミットの署名が失敗します。

    この手順は情報提供のみを目的とし、 それだけでコミットをブロックすることはありません。

  4. 既存のコミットがすでに一致する場合は、確認を省略します。 同じ作成者による過去のコミットがこのリポジトリにあり、 その署名意図が現在の設定と一致する場合は、 手順5の確認と署名の推奨を省略します — ユーザーはその設定でコミットしたことで、 以前に暗黙的にこの設定を検証しています。

    git では、 git log -1 --author="<email>" --pretty=format:'%G?' を実行し、 次の場合に一致とみなします。

    • 過去のコミットに署名があり(%G? ≠ N)、 現在の署名状態が 設定済み;または
    • 過去のコミットに署名がなく(%G? = N)、 現在の署名状態が 未設定。

    これは鍵ではなく意図(署名する/しない)を比較するため、 user.signingkey の記述方法 (鍵 ID、フィンガープリント、0x… 接頭辞の有無、 または公開鍵ファイルのパス)にかかわらず、 GPG と SSH のどちらでも機能します。

    それ以外の場合 — この作成者による過去のコミットがない、 設定不備の状態、または git 以外の VCS — 手順5に進みます。

  5. 解決した値を表示して、ユーザーに確認を求めます — «<First> <Last> (<scope> から取得) — 順序は正しく、入力ミスはありませんか?»。 <scope> は git が報告した値(local / global / system)です。 hg/jj の場合は、可能であればソースファイル名を記載し、 分からない場合は省略します。 順序を自動的に検出することはできないため、 確認が必要です。 同じメッセージ内で、次のようにします。

    • 署名が 未設定 の場合 → 以下の 署名 セクションにある推奨事項を含めます;
    • 署名が 設定不備 の場合 → 矛盾している設定を明示し、 提案ではなく即時修正が必要なものとして扱います。
  6. 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

その後、公開鍵をホストの署名鍵設定にアップロードします。

コメント