mcpField
G
gerrit-review

gerrit-review

github.com/yurnovテスト・品質540 回インストール19 週間前に更新
リポジトリ

gerrit-review について

gerrit-reviewは、Gerrit REST APIでコードレビューを行うためのスキルです。変更の確認からレビュー投稿、変更のライフサイクル管理まで対応します。

主な機能

  1. 01変更と詳細の検索
  2. 02ファイル、差分、内容の確認
  3. 03レビューと下書きコメントの投稿
  4. 04変更の送信、放棄、復元
  5. 05レビュアーの追加とトピック設定

活用シーン

  1. 01レビュー対象のオープン変更の検索
  2. 02以前のコメントを踏まえたパッチセット確認
  3. 03ラベルと行内コメント付きレビューの投稿
  4. 04変更のライフサイクル操作の完了や取り消し

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/yurnov/gerrit-in-5-min --skill gerrit-review

インストール後、Claude Code で/gerrit-reviewを入力して読み込まれたか確認します。

同梱ファイルREADME.mdscripts/gerrit_api.sh

詳細

Gerrit コードレビューのスキル

REST API を通じて Gerrit コードレビューのインスタンスを操作します。オープンな変更を検索し、差分を読み取り、コードレビューを投稿して、変更のライフサイクル(送信、放棄、復元)を管理します。

前提条件

認証

ヘルパースクリプトは、次の順序で認証情報を確認します。

  1. ~/.netrc ファイル(推奨) — 最も安全です。認証情報がプロセス一覧や環境変数に表示されません。
  2. 環境変数 — Gerrit ホストが .netrc に設定されていない場合のフォールバックです。

GERRIT_URL は常に必要です(シェルのプロファイルに設定してください)。

export GERRIT_URL="https://gerrit.example.com"  # no trailing slash
オプション 1 — .netrc(推奨)

Gerrit ホストのエントリーを ~/.netrc に追加します。

machine gerrit.example.com
login your.username
password your-http-token

ファイルを保護します:chmod 600 ~/.netrc

スクリプトは curl --netrc を使用するため、認証情報がプロセス一覧やシェル環境に表示されません。

オプション 2 — 環境変数(フォールバック)

Gerrit ホストが .netrc に見つからない場合、スクリプトは次の環境変数を使用します。

変数説明
GERRIT_USERNAMEHTTP ユーザー名(Gerrit → Settings → Profile)
GERRIT_HTTP_PASSWORDHTTP 認証トークン(Gerrit → Settings → HTTP Credentials → Generate Password)

重要

HTTP パスワードはユーザーのログインパスワードではありません。Gerrit のウェブ UI の Settings → HTTP Credentials → Generate Password で生成される、別個のトークンです。

.netrc と環境変数のどちらも設定されていない場合、スクリプトはエラーと手順を表示して終了します。

ユーザーを案内する場合: 必ず最初に .netrc を提案してください。環境変数は、ユーザーが .netrc を使用できない場合にのみ推奨してください。

ツール
  • curl、jq、base64 — 必須
  • python3 — オプション。URL エンコードに推奨されます。利用できない場合は sed にフォールバックします。

クイックスタート

(この SKILL.md からの相対パスである)scripts/gerrit_api.sh のヘルパースクリプトを使用します。

chmod +x scripts/gerrit_api.sh

./scripts/gerrit_api.sh query "status:open+limit:5"
./scripts/gerrit_api.sh get-change 12345
./scripts/gerrit_api.sh list-files 12345
./scripts/gerrit_api.sh get-diff 12345 "src/main/App.java"
./scripts/gerrit_api.sh get-content 12345 "src/main/App.java"
./scripts/gerrit_api.sh list-comments 12345
./scripts/gerrit_api.sh create-draft 12345 current '{"path":"src/main/App.java","line":23,"message":"Consider renaming this.","unresolved":true}'
./scripts/gerrit_api.sh review 12345 current '{"message":"Looks good!","labels":{"Code-Review":1}}'
./scripts/gerrit_api.sh submit 12345
./scripts/gerrit_api.sh abandon 12345

Gerrit の概念

  • 変更 — 1 つのレビュー可能な単位(1 つのコミット)です。更新するたびに新しいパッチセットが作成されます。
  • Change-Id — コミットを Gerrit の変更に関連付ける、コミットメッセージ内の Change-Id: I<hex> フッターです。
  • ラベル — Code-Review(−2 ~ +2)、Verified(−1 ~ +1)です。範囲はプロジェクトごとに異なります。
  • ワークフロー — refs/for/<branch> にプッシュ → レビュアーがコメントして投票 → 修正して再プッシュ → 承認後に送信します。

REST API リファレンス

認証

すべてのリクエストで /a/ プレフィックスを使用します。認証はヘルパースクリプトが自動的に処理します(.netrc または --user)。

参考用の curl の例:

curl -s --netrc "$GERRIT_URL/a/changes/?q=status:open" | tail -n +2 | jq .
出力形式

レスポンスの最初の行には XSSI プレフィックス )]}' が含まれます。解析する前に削除してください(tail -n +2)。ヘルパースクリプトが自動的に処理します。

URL エンコード

プロジェクト名とファイルパスは URL エンコードする必要があります(/ → %2F)。ヘルパースクリプトが自動的に処理します。

主要なエンドポイント
#操作メソッドエンドポイントヘルパーコマンド
1変更を検索GET/a/changes/?q=<query>&n=<limit>&o=<option>query
2変更の詳細を取得GET/a/changes/<id>?o=CURRENT_REVISION&o=DETAILED_LABELSget-change
3ファイルを一覧表示GET/a/changes/<id>/revisions/<rev>/files/list-files
4ファイルの差分を取得GET/a/changes/<id>/revisions/<rev>/files/<file>/diffget-diff
5ファイルの内容を取得GET/a/changes/<id>/revisions/<rev>/files/<file>/contentget-content
6公開済みコメントを一覧表示GET/a/changes/<id>/commentslist-comments
7レビューを投稿POST/a/changes/<id>/revisions/<rev>/reviewreview
8下書きを作成PUT/a/changes/<id>/revisions/<rev>/draftscreate-draft
9送信POST/a/changes/<id>/submitsubmit
10放棄POST/a/changes/<id>/abandonabandon
11復元POST/a/changes/<id>/restorerestore
12レビュアーを追加POST/a/changes/<id>/reviewersadd-reviewer
13トピックを設定PUT/a/changes/<id>/topicset-topic

<id> には、数値の変更番号、project~branch~Change-Id、または Change-Id のみを指定できます。 <rev> はリビジョン/パッチセットです。最新のものには current を使用します。

クエリー演算子

status:open、status:merged、status:abandoned、owner:self、reviewer:self、project:<name>、branch:<name>、is:watched、after:"2025-01-01"、before:"2025-12-31"

よく使われる o パラメーター:CURRENT_REVISION、DETAILED_LABELS、DETAILED_ACCOUNTS、CURRENT_FILES、MESSAGES

ReviewInput JSON(review コマンド用)
{
  "message": "Overall review comment",
  "labels": {"Code-Review": 1},
  "comments": {
    "src/main/App.java": [
      {"line": 23, "message": "Consider renaming.", "unresolved": true},
      {"range": {"start_line": 50, "start_character": 0, "end_line": 55, "end_character": 20}, "message": "Refactor this block."}
    ]
  },
  "notify": "OWNER",
  "drafts": "PUBLISH"
}

ラベル値(一般的な例):Code-Review の −2 は却下、−1 は問題あり、0 はスコアなし、+1 は良好、+2 は承認です。Verified の −1 は検証失敗、+1 は検証済みです。

追加の comments フィールド:in_reply_to(UUID)、unresolved(ブーリアン値。対応が必要な場合は true、情報提供の場合は false)、fix_suggestions(修正案の配列)。

CommentInput JSON(create-draft コマンド用)
{"path": "src/main/App.java", "line": 23, "message": "[nit] trailing whitespace", "unresolved": true}

コードレビューのワークフロー

ステップ 1 — 変更を見つける
./scripts/gerrit_api.sh query "status:open+reviewer:self+-owner:self"
ステップ 2 — 確認する
./scripts/gerrit_api.sh get-change 12345
./scripts/gerrit_api.sh list-files 12345
./scripts/gerrit_api.sh get-diff 12345 "path/to/file.java"
ステップ 2a — 以前のレビューコメントをコンテキストとして再利用する

新しいパッチセットをレビューする前に、以前に公開されたコメントを確認します。

./scripts/gerrit_api.sh list-comments 12345

これらのコメントをレビュー時の追加コンテキストとして使用します。

  • 以前の対応が必要なコメント(unresolved: true、設計上の懸念、テストの依頼、命名、API の変更)を重視します
  • コメント対象のパスについて、最新のパッチセットの差分と現在のファイル内容を確認します
  • 以前の懸念がそれぞれ完全に解消されたか、一部解消されたか、未解消かを判断します
  • 解消済みのコメントを繰り返さないようにします。未解決の問題については、適切な場合に in_reply_to を使って以前のスレッドを参照します

一般的なフォローアップの流れ:

./scripts/gerrit_api.sh list-comments 12345
./scripts/gerrit_api.sh list-files 12345 current
./scripts/gerrit_api.sh get-diff 12345 "path/to/file.java" current
./scripts/gerrit_api.sh get-content 12345 "path/to/file.java" current

最新のパッチセットで以前のコメントが解消されたか確認する場合は、次の内容を比較します。

  1. list-comments にある元の懸念
  2. 同じファイル/領域に対する現在のパッチセットの差分
  3. パッチセット適用後の現在のファイル内容

最新のパッチセットで懸念が解消されている場合は、再度指摘しないでください。問題が一部しか解消されていない場合は、残っている内容を説明する簡潔なフォローアップコメントを投稿します。

ステップ 3 — レビューを投稿する

オプション A — 下書きを段階的に作成: 下書きを一つずつ作成してから公開します。

./scripts/gerrit_api.sh create-draft 12345 current '{"path":"file.java","line":42,"message":"Use a constant.","unresolved":true}'
./scripts/gerrit_api.sh review 12345 current '{"message":"See comments.","labels":{"Code-Review":-1},"drafts":"PUBLISH"}'

オプション B — レビューを一度に投稿: すべてをまとめて投稿します。

./scripts/gerrit_api.sh review 12345 current '{"message":"Looks solid.","labels":{"Code-Review":1},"comments":{"file.java":[{"line":42,"message":"Use a constant.","unresolved":true}]}}'
ステップ 4 — 送信する
./scripts/gerrit_api.sh submit 12345

トラブルシューティング

問題解決方法
401 Unauthorized.netrc のエントリ、または GERRIT_USERNAME/GERRIT_HTTP_PASSWORD を確認してください。Gerrit の Settings で HTTP パスワードを再生成してください。
404 Not Found変更番号を確認してください。GERRIT_URL の末尾にスラッシュがないことを確認してください。/a/ プレフィックスがあることを確認してください。
409 Conflict変更の編集内容をレビューしている場合や、送信要件を満たしていない場合に発生することがあります。
JSON の解析エラーXSSI プレフィックス )]}'\n が除去されていることを確認してください(ヘルパースクリプトが除去します)。
URL エンコードの問題/ を含むパスには %2F が必要です。ヘルパースクリプトが処理します。
認証情報がないというエラーGerrit のホストを ~/.netrc に追加する(推奨)か、環境変数を設定してください。

注意事項

  • GERRIT_URL は出力に含めてもかまいませんが、ログや出力に GERRIT_HTTP_PASSWORD や認証情報を決して表示しないでください。
  • ~/.netrc の権限が chmod 600 に設定されていることを確認してください。
  • このスキルは対話的な使用を想定しており、Gerrit API のすべてのエッジケースに対応しているとは限りません。

参考資料

コメント