GitHub のプルリクエストが出るたびに、差分を社内のコーディング規約とセキュリティの観点で一次レビューし、指摘をコメントの下書きにする
GitHub にプルリクエストが出るたびに差分を取り、社内のコーディング規約とセキュリティのチェック項目に照らして一次レビューします。指摘は行とひも付けたコメントの下書きにし、レビュー担当者が確かめてから投稿します。
- 生成AI
- ChatGPT/Claude
- 連携・自動化
- Make/n8n/Zapier
- 対象業界
- EC/IT・SaaS/製造/金融
- 対象部門
- 情報システム
- 対象業務
- 内容確認・チェック/書類作成
- 主な課題
- 人手が足りない/属人化している/確認ミスが多い
- AIで行う処理
- 校正
- 主な効果
- 品質標準化/工数削減/教育コスト削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- ノーコード連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 開発者がプルリクエストを出し、レビュー担当者を指定する
- レビュー担当者が差分を開き、規約に照らして行ごとに見る
- セキュリティのチェック項目に照らして、入力の検証・認証情報・ログの出力を見る
- 気づいた点を行にコメントし、規約の項目を書き添える
- 開発者が直して更新し、レビュー担当者がもう一度見る
- 一次レビューで問題が無くなったら、設計と仕様の本レビューに進む
- 人開発者がプルリクエストを出す(下書きのプルリクエストは対象外)
- 自動n8n の GitHub Trigger が、プルリクエストの作成・更新・下書きからの切り替えを受け取る
- 自動変更されたファイルの一覧と差分を取り、対象外のファイル(生成物・ロックファイルなど)を外す
- 自動差分の行に番号を振り、規約とチェック項目の文書を添えて Claude に渡す
- 自動Claude が、規約の項目番号にひも付いた指摘の候補を返す
- 自動ワークフローが指摘の行番号を GitHub の差分の位置に直し、下書きを Slack でレビュー担当者に送る
- 人レビュー担当者が下書きを確かめ、「投稿する」か「投稿しない」かを Slack の中で選ぶ
- 自動「投稿する」なら、機械用のアカウントが行にひも付けたコメントのレビューとして投稿する
- 人レビュー担当者が本レビューを行う
各工程の詳しい説明を読む
- 開発者がプルリクエストを出し、レビュー担当者を指定する
- レビュー担当者が差分を開き、規約に照らして行ごとに見る
- セキュリティのチェック項目に照らして、入力の検証・認証情報・ログの出力を見る
- 気づいた点を行にコメントし、規約の項目を書き添える
- 開発者が直して更新し、レビュー担当者がもう一度見る
- 一次レビューで問題が無くなったら、設計と仕様の本レビューに進む
(a)見落としが担当者によって違う。 規約は約60項目あり、全部を毎回思い出して見るのは無理です。 担当者ごとに、よく見る項目と見ない項目があり、同じ書き方が通ったり通らなかったりします。
(b)同じ指摘を毎回書いている。 協力会社のメンバーや新しく入った開発者のプルリクエストでは、例外の握りつぶし、ログへの値の出しすぎ、マジックナンバーのような同じ指摘が並びます。
(c)セキュリティの観点が後回しになる。 差分が大きいと、規約の指摘を書くだけで時間が尽き、入力の検証やログに出す値のような項目は、急ぐ日ほど見られません。
(d)レビュー待ちが長い。 リードエンジニアは自分の開発も持っています。一次レビューに時間を取られるほど、本レビューに入るのが遅れます。
- 【人】 開発者がプルリクエストを出す(下書きのプルリクエストは対象外)
- 【自動】 n8n の GitHub Trigger が、プルリクエストの作成・更新・下書きからの切り替えを受け取る
- 【自動】 変更されたファイルの一覧と差分を取り、対象外のファイル(生成物・ロックファイルなど)を外す
- 【自動】 差分の行に番号を振り、規約とチェック項目の文書を添えて Claude に渡す
- 【自動】 Claude が、規約の項目番号にひも付いた指摘の候補を返す
- 【自動】 ワークフローが指摘の行番号を GitHub の差分の位置に直し、下書きを Slack でレビュー担当者に送る
- 【人】 レビュー担当者が下書きを確かめ、「投稿する」か「投稿しない」かを Slack の中で選ぶ
- 【自動】 「投稿する」なら、機械用のアカウントが行にひも付けたコメントのレビューとして投稿する
- 【人】 レビュー担当者が本レビューを行う
7番目が、この設計の分かれ目です。 AIの指摘を直接投稿すると、誤った指摘が開発者に届き、開発者はそれに答える時間を使います。 レビュー担当者は、規約の文書を思い出しながら差分を読む代わりに、項目番号の付いた候補が当たっているかを見ることになります。
6番目で行の位置をワークフローが計算しているのも意図してのことです。 GitHub のレビューのコメントは差分の中の位置で場所を決めます。AIに位置を数えさせると、ずれたコメントが別の行に付きます。 AIには振った番号だけを返させ、位置への変換は規則で行います。
02今回想定するシステム構成
【トリガー】プルリクエストの作成・更新(GitHub Trigger:Pull request) ▼ n8n ├─ If ── 下書き・対象外のリポジトリ・機械用アカウントの更新を外す ├─ HTTP Request(GitHub の資格情報)── 変更ファイルの一覧と差分 ├─ GitHub ── 規約とチェック項目の文書(File: Get) ├─ Code ── 対象外のファイルを外し、差分の行に番号を振る ▼ Basic LLM Chain + Anthropic Chat Model + Structured Output Parser │ 規約の項目番号にひも付いた指摘の候補 ▼ Code ── 行番号を差分の位置に変換、重複と根拠の無い指摘を外す ▼ Slack(Send and Wait for Response:Approval)── 指定されたレビュー担当者へ ▼ 【レビュー担当者が投稿するかを選ぶ】 ▼ HTTP Request ── GitHub にレビュー(COMMENT)として投稿
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| ワークフロー | n8n | Make、Zapier |
| 生成AI | Claude(n8n の Anthropic Chat Model ノード) | OpenAI API |
| 保管 | n8n の Data Table(下書き、レビュー担当者の判断の記録) | スプレッドシート |
| 通知 | Slack(n8n の Slack ノード) | Microsoft Teams |
新しく足すのは n8n と、機械用の GitHub の資格情報だけです。 GitHub、Slack、規約の文書は今あるものを使います。
n8n を選ぶのは、ソースコードの流れを自社のサーバーの中に置けるからです。 差分を受け取り、外すファイルを決め、AIに渡す部分を絞るところまでを社内で行い、外に出るのは対象のリポジトリの差分と規約だけにできます。
GitHub Trigger は、Pull request のイベントを受け取ります。 公式ページでは、GitHub Trigger のイベントに Pull request・Pull request review・Push などが並びます。GitHub の webhook の説明では、プルリクエストの action に opened・synchronize・reopened・ready_for_review・converted_to_draft などがあります。この構成で動かすのは opened・synchronize・reopened・ready_for_review だけです。
03どうやって実装するのか
処理の起点を決める
n8n の GitHub Trigger で、対象のリポジトリの Pull request のイベントを受け取ります。 GitHub から n8n へ webhook が届く形なので、n8n は GitHub から HTTPS で届く場所に置きます。 社内に置く場合は、webhook の受け口だけを外から届くようにします。
受け取った直後に If ノードで外すものを決めます。
| 外すもの | 理由 |
|---|---|
| 下書きのプルリクエスト | まだ書きかけ。ready_for_review で改めて動く |
| 対象外のリポジトリ | 外部のAIに渡してよいと決めたリポジトリだけを対象にする |
| 機械用のアカウントが起こした更新 | 依存関係の自動更新など。人のレビューとは別に扱う |
| 対象の action 以外 | ラベルの付け替えや担当者の変更では動かさない |
synchronize(新しいコミットの追加)でも動かしますが、見るのは前回からの差分だけにしたい場面があります。 最初の版では、更新のたびにプルリクエスト全体の差分を見直し、前回と同じ指摘は Data Table と照らして出さないようにします。毎回同じ指摘が Slack に届くと、レビュー担当者は下書きを読まなくなります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| プルリクエストの情報 | 番号、題名、説明、作成者、指定されたレビュー担当者、最新のコミット | GitHub Trigger の受け取った内容 |
| 変更ファイルの一覧と差分 | ファイル名、変更の種類、追加と削除の行数、差分(patch) | GitHub の REST API |
| コーディング規約 | 項目番号、見出し、本文、よい例・わるい例 | リポジトリ内の Markdown |
| セキュリティのチェック項目 | 項目番号、見るべきこと、該当しやすい書き方 | リポジトリ内の Markdown |
| 対象外のファイルの一覧 | 生成物、ロックファイル、テストの固定データなどのパスの規則 | ワークフローの設定 |
| 過去の指摘の記録 | 同じプルリクエストへの前回の指摘、レビュー担当者の判断 | Data Table |
質を決めるのは、規約の文書の書き方です。 「適切に例外を扱う」としか書かれていない項目は、AIにも人にも当て方が分かりません。わるい例とよい例が書いてある項目ほど、指摘が当たります。 規約の文書を直すことが、そのままこの構成の精度になります。
規約は毎回リポジトリから取ります。 規約を更新したら、次のプルリクエストからその版で見ることになり、どの版の規約で指摘したかを記録に残せます。
データの取得方法を決める
変更ファイルの一覧は、GitHub の REST API の「List pull requests files」で取ります。 公式ページでは、応答に含まれるファイルは最大3000件で、既定では1ページに30件とされています。30件を超えるプルリクエストもあるので、ページをたどって全件を取ります。 n8n では、GitHub ノードに無い操作を HTTP Request ノードで GitHub の資格情報を使って呼ぶことができます。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 変更ファイルと差分 | REST API の List pull requests files | 指摘の対象 |
| プルリクエストの情報 | GitHub Trigger の受け取った内容 | 送り先のレビュー担当者、最新のコミット |
| 規約とチェック項目 | GitHub ノードの File の Get | AIへの判断の基準 |
n8n の GitHub ノードには、Pull Request の Get Diff・Get Patch、Review の Create などの操作があります。 ただし、行にひも付けたコメントを含むレビューを細かく組み立てるために、投稿は HTTP Request で REST API を直接呼びます。
AIへ渡す前に整形する
- 対象外のファイルを外す … 生成物、ロックファイル、画像、テストの固定データは渡しません
- 差分が大きすぎるものを分ける … 変更の行数が決めた上限を超えるプルリクエストは、AIに渡さず「大きすぎて一次レビューの対象外」としてレビュー担当者に知らせます
- 差分の行に番号を振る … ファイルごとに、追加された行に
L1、L2のような番号を振ります。AIはこの番号で場所を返します - 番号と差分の位置の対応表を作る … 各番号が、そのファイルの差分の中で何行目にあたるかを持っておきます
- 秘密情報らしい文字列を確かめる … アクセスキーや接続文字列に見える文字列が差分にあれば、AIに渡す前に伏せ、そのこと自体をレビュー担当者に知らせます
- 規約の文書から項目を取り出す … 項目番号と本文の組にしてAIに渡します
4番目が、この構成の要です。 GitHub の公式ページでは、レビューのコメントの position は差分の中の位置で、ファイルの行番号とは違うとされ、ファイルの最初の @@ の行の次が1、その後は空白の行や次のまとまりをまたいでも増え続けるとされています。この数え方をAIに任せず、Code ノードで機械的に変換します。
5番目は、見つけたこと自体が指摘になります。 差分に認証情報が入っていれば、AIのレビューより先に、そのコミットの扱いをレビュー担当者が決める必要があります。
AIに処理させる
Basic LLM Chain に、差分を規約とチェック項目に照らした校正をさせます。 公式ページでは、Basic LLM Chain はプロンプトを決め、出力の形を求めるときは Structured Output Parser などをつなぐとされています。
| させること | 中身 |
|---|---|
| 規約の違反の候補 | 差分の追加された行が、規約のどの項目に反しうるか |
| セキュリティの候補 | 入力の検証の抜け、ログに出す値、SQL の組み立て、権限の確認の抜け |
| 指摘の文 | 何が項目に反しうるかと、項目に書かれた直し方 |
| 確からしさ | 差分だけで言い切れるか、周りのコードを見ないと分からないか |
| させないこと | 理由 |
|---|---|
| 規約に無い好みの指摘 | 根拠を示せない指摘は、開発者が直すべきかを判断できない |
| 設計・仕様の評価 | 本レビューで人が行う |
| マージしてよいかの判断 | レビュー担当者が決める |
| 差分の位置の計算 | ワークフローが規則で行う |
| 修正したコードの全文 | 指摘に添えるのは項目に書かれた直し方まで |
「確からしさ」を持たせるのは、差分だけでは分からないことが多いからです。 入力の検証は、呼び出し元で済んでいるかもしれません。差分の外を見ないと言い切れないものは、needs_context として分け、言い切りの指摘と混ぜません。
指示内容を固定する
Basic LLM Chain のシステムメッセージに、次のように書きます。
あなたは社内の開発チームのレビュー担当者として、プルリクエストの差分を
社内のコーディング規約とセキュリティのチェック項目に照らして一次レビューします。
【入力】
- 規約の項目(項目番号、本文、よい例・わるい例)
- セキュリティのチェック項目(項目番号、見るべきこと)
- 変更ファイルごとの差分。追加された行には L1, L2 ... の番号が振ってあります
【進め方】
1. 追加された行(番号の付いた行)だけを対象にしてください。
削除された行と、変更の無い行には指摘しないでください。
2. 各行について、規約とチェック項目のどれかに反しうるかを見てください。
3. 指摘ごとに、ファイル名、行の番号、項目番号、指摘の文を書いてください。
【厳守事項】
- 項目番号を示せない指摘は出さないでください。好みや一般論での指摘は不要です。
- 指摘の文には、項目の本文に書かれた直し方だけを添えてください。
修正したコードの全文は書かないでください。
- 差分の外のコードを見ないと言い切れないもの(呼び出し元で検証済みかもしれない等)は
confidence を "needs_context" にしてください。"certain" にしないでください。
- 行の番号は、差分に振られた L の番号をそのまま返してください。
ファイルの行番号や差分の位置を自分で数えないでください。
- 伏せ字([MASKED])の中身を推測しないでください。
- 設計の良し悪し、仕様との一致、マージしてよいかは書かないでください。
- 指摘が無ければ、findings を空にしてください。無理に指摘を作らないでください。
「項目番号を示せない指摘は出さない」が最も大事な一文です。 書いておかないと、AIは変数名の好みやコメントの書き方のような、規約に無い一般論を指摘に混ぜます。 一般論が混ざると、レビュー担当者は全部を自分の判断で仕分け直すことになります。
「指摘が無ければ空にする」も効きます。 書いておかないと、問題の無い差分にも「念のため」の指摘を作ります。空の結果が返ることを正常として扱います。
出力形式を固定する
Structured Output Parser で、次の形に決めます。 公式ページでは、JSON の例から生成するか、JSON Schema で定義するかを選べ、例から生成するとすべての項目が必須として扱われるとされています。
{
"pull_number": 1234,
"rules_version": "",
"findings": [
{
"file": "src/api/orders.ts",
"line_ref": "L12",
"rule_id": "SEC-07",
"category": "coding_rule | security",
"confidence": "certain | needs_context",
"comment": ""
}
],
"skipped_files": [],
"summary": ""
}
1つ目の理由は、rule_id を必須にできることです。 規約の項目一覧に無い番号が返ってきたら、ワークフローがその指摘を外します。 項目番号の無い指摘は、出力の形の段階で通りません。
2つ目は、line_ref を位置に変える処理を分けられることです。 ワークフローは前処理で作った対応表で L12 を差分の位置に変えます。対応表に無い番号が返ってきたら、その指摘は外して記録します。
3つ目は、confidence で投稿の書き方を変えられることです。 needs_context の指摘は、コメントの冒頭に「差分の外で対応済みなら不要です」と添えて投稿します。
Slack の下書きは、次の形で送ります。
| 欄 | 中身 |
|---|---|
| 見出し | プルリクエストの番号・題名・作成者、指摘の件数 |
| 指摘ごと | ファイルと行、項目番号と見出し、指摘の文、確からしさ |
| 注意 | 伏せ字にした文字列があったこと、対象外にしたファイル |
| ボタン | 「投稿する」「投稿しない」 |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| GitHub(イベント) | GitHub Trigger | プルリクエストの作成・更新の受け取り |
| GitHub(データ) | HTTP Request / GitHub ノード | 変更ファイルと差分、規約の文書の取得 |
| Anthropic のモデル | Anthropic Chat Model ノード | 規約に照らした校正 |
| Slack | Slack ノードの Send and Wait for Response | 下書きの提示と、投稿するかの選択 |
| GitHub(投稿) | HTTP Request(REST API の Create a review) | 行にひも付けたコメントのレビューの投稿 |
| Data Table | Data Table ノード | 下書き、前回の指摘、レビュー担当者の判断 |
レビュー担当者への提示には、Slack ノードの Send and Wait for Response を承認の形で使います。 n8n の公式ページでは、この操作で承認する人が Slack の中で承認・却下でき、ブラウザのページは開かず、誰が応じたかが出力に記録されるとされています。承認できる人を指定でき、指定外の人には個別の案内が出てワークフローは待ち続けます。承認できる人を、プルリクエストで指定されたレビュー担当者にします。
この形には条件があります。 公式ページでは、Slack の中で承認するには、n8n が Slack から公開の HTTPS で届く場所にあること、Slack のアプリで Interactivity を有効にして n8n の受け口を登録すること、資格情報に Slack のアプリの Signing Secret を入れることが要るとされています。Signing Secret が無いと、ボタンは出ても押してもワークフローが再開しません。
投稿は、REST API の「Create a review for a pull request」で行います。 公式ページでは、event に APPROVE・REQUEST_CHANGES・COMMENT を選べ、comments にファイルのパス・差分の位置・本文を並べて行にコメントを付けられます。この構成は COMMENT だけを使い、APPROVE と REQUEST_CHANGES は使いません。 commit_id には受け取った最新のコミットを入れます。公式ページでは、最新でないコミットを指定すると、後のコミットがその位置を変えたときにコメントが古くなるとされています。
保留中のレビューは使いません。 公式ページでは、event を空にすると保留中(PENDING)のレビューになり、GitHub の説明では、保留中のコメントは提出するまで本人にしか見えないとされています。機械用のアカウントで作った保留中のレビューは、レビュー担当者には見えません。
人が確認する
指定されたレビュー担当者が、Slack の下書きを見て投稿するかを選びます。
- 伏せ字の知らせを先に見る … 認証情報らしい文字列があったなら、指摘の投稿より先に、そのコミットの扱いを決めます
certainの指摘を確かめる … 項目番号と指摘の文が、差分の行に当たっているかを見ますneeds_contextの指摘を確かめる … 呼び出し元などを見て、要るかどうかを決めます- 投稿するかを選ぶ … 外れた指摘が混ざっているときは「投稿しない」を選び、要る指摘だけを自分で書きます
4番目の選び方を、チームで決めておいてください。 一部だけ外れている下書きを「投稿する」で流すと、外れた指摘に開発者が答える時間が生まれます。 最初の数か月は、外れが1つでもあれば「投稿しない」とし、記録を見て規約とプロンプトを直します。
目標は、下書きの確認を1件ならして4分に収めることです。 差分を読み直すのではなく、項目番号が当たっているかを見る作業にします。
例外に対処する
| 起きること | 対応 |
|---|---|
| 変更が大きすぎる | AIに渡さず「一次レビューの対象外」としてレビュー担当者に知らせる |
| 変更ファイルが30件を超える | ページをたどって全件を取る。最初の30件だけで判断しない |
| 規約の文書が取れない | AIに渡さず、取れなかったことを知らせる。古い規約で判断しない |
| 一覧に無い項目番号が返る | その指摘を外し、記録に残す |
| 対応表に無い行の番号が返る | その指摘を外し、記録に残す |
| 出力が決めた形に合わない | 1回だけやり直し、だめなら「AIの一次レビューなし」として知らせる |
| レビュー担当者が決めた時間までに選ばない | 投稿せずに Data Table に残し、翌朝に再通知する |
| 投稿の前に新しいコミットが来た | 古い下書きは投稿せず、新しいコミットで見直す |
| GitHub の API がエラーを返す | 下書きを Data Table に残し、レビュー担当者に手で投稿するかを聞く |
2行目は気づかないまま起きます。 一覧は既定で1ページ30件なので、ページをたどる処理を入れ忘れると、大きなプルリクエストの後半のファイルが、一次レビューを通ったように見えます。
記録を残す
- プルリクエストの番号、最新のコミット、使った規約の版
- AIに渡したファイルと、外したファイル・伏せ字にした箇所
- AIの出力(指摘、項目番号、確からしさ)と、外した指摘とその理由
- レビュー担当者の選択(投稿する/投稿しない)と、応じた人と時刻
- 投稿したレビューのID
- 項目番号ごとの、投稿された数と「投稿しない」になった数
4つ目と最後の行を残すのは、規約とプロンプトを直すためです。 ある項目の指摘がいつも「投稿しない」になるなら、その項目の本文が曖昧か、AIの当て方がずれています。 項目ごとに数えると、直す場所が分かります。
04実装レベルの3段階
最小構成では、プルリクエストごとに貼る手間が残ります。 確かめるための段階です。 半自動化で、1件15分が8分程度になります。 規約に照らす①と②の大半は無くなりますが、指摘を GitHub の行に書き写す③が残ります。本格構成で4分になり、この段階が本記事の想定です。 差が出るのは、行にひも付けたコメントを書き写す作業が、承認のボタン1つになるからです。 段階を飛ばさないでください。 半自動化を1か月回すと、外れやすい項目と、規約の文書の曖昧な箇所が見えてきます。直してから投稿を足すほうが、開発者に届く外れが減ります。
05工数削減シミュレーション
導入後 240件 × 4分 ÷ 60 = 16 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 社内システムや自社サービスを GitHub で開発し、月に百件を超えるプルリクエストを数名のレビュー担当者が見ている開発部門。コーディング規約とセキュリティのチェック項目は文書になっているが、レビューで見られるかどうかが担当者によって違う場合。新しく入った開発者や協力会社のメンバーが多く、同じ指摘をくり返し書いている場合。
- ソースコードを社外のAIサービスに渡すことが社内の規程や契約で認められていないリポジトリ(対象から外すか、この構成を使わない)。プルリクエストが月に数件で、レビュー担当者が全件を丁寧に見られる場合。設計の妥当性や仕様との一致を見るレビュー(この構成が見るのは、規約とチェック項目に書かれたことまで)。なお、マージしてよいかの判断はこの構成では代替できません。
07最小構成で試す方法
- 直近1か月にマージされたプルリクエストから20件を選ぶ(一次レビューで指摘が付いたものと、付かなかったものを混ぜる)
- 規約とチェック項目の文書を用意する
- 手元の生成AIの画面に、規約の文書と1件の差分を貼り、「規約の項目番号を示せる指摘だけを、ファイル名と行とともに挙げてください。番号を示せないものは挙げないでください」と指示する
- 当時のレビューで付いた指摘と突き合わせる
- AIだけが出した指摘を、規約の項目に照らして当たっているか確かめる
20件は必ずやってください。 ワークフローを組む前に、「規約の文書だけで指摘が当たるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の指摘と重なり、AIだけの指摘も当たっている | n8n で組む段に進む |
| 規約に無い一般論が混ざる | 指示を強める。構成は有効 |
| 特定の項目でいつも外れる | 規約の文書の、その項目の書き方を直す |
3行目は、規約の側の問題であることが多いです。 AIが当て方を間違える項目は、新しく入った開発者にも当て方が分からない項目です。わるい例とよい例を足してください。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| コメントが別の行に付く | position は差分の中の位置。AIに数えさせず、番号から規則で変換する |
| 下書きがレビュー担当者に見えない | 保留中のレビューは本人にしか見えない。Slack で見せて承認後に投稿する |
| 規約に無い一般論の指摘が混ざる | 項目番号を必須にし、一覧に無い番号は外す |
| 大きなプルリクエストの後半が見られない | 一覧は既定で1ページ30件。ページをたどる |
| Slack のボタンを押しても再開しない | 資格情報に Signing Secret を入れ、Interactivity の受け口を登録する |
| 指定外の人が承認してしまう | 承認できる人を、指定されたレビュー担当者に限る |
| 更新のたびに同じ指摘が届く | 前回の指摘と照らし、同じものは出さない |
| 差分の外で済んでいる検証を指摘する | needs_context として分け、言い切りと混ぜない |
| 認証情報が差分に入っている | AIに渡す前に伏せ、レビュー担当者に先に知らせる |
| 古いコミットに対してコメントする | commit_id に受け取った最新のコミットを入れる |
| AIが承認や変更要求をしてしまう | event は COMMENT だけを使う |
| 外部に渡してはいけないリポジトリが流れる | 対象のリポジトリを明示し、それ以外はトリガーの直後で外す |
上の2行が、この構成でいちばん起きやすい失敗です。 どちらも GitHub の仕組みの細かいところから来ていて、AIの精度とは関係ありません。 位置の変換と下書きの置き場所を、最初に決めておきます。
最後の行は、組む前に決めてください。 どのリポジトリを外部のAIに渡してよいかは、開発部門だけでなく、情報セキュリティの担当と決めることです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: ソースコードの差分、規約とチェック項目、プルリクエストの作成者とレビュー担当者の名前です。差分には、内部の仕組みや、誤って入った認証情報が含まれることがあります。
- 外部のAIに渡してよいリポジトリを決める … 社内の規程や顧客との契約で、ソースコードを社外のサービスに渡せないものがあります。対象のリポジトリを明示し、それ以外はトリガーの直後で外します
- 認証情報らしい文字列は渡す前に伏せる … 見つけたこと自体をレビュー担当者に知らせ、そのコミットの扱いを先に決めます
- 機械用のアカウントの権限を絞る … 公式ページでは、レビューの作成には Pull requests の書き込みの権限が要るとされています。対象のリポジトリに限り、それ以外の権限を持たせません
- AIに承認させない … 投稿は
COMMENTだけにし、マージしてよいかの判断はレビュー担当者が行います - 自動で投稿しない … レビュー担当者が承認したものだけを投稿します。外れた指摘が開発者の時間を使うのを防ぎます
誤りが起きた場合のリスクは、外れた指摘が開発者に届いて時間を使わせることと、AIの一次レビューを通ったことで人の確認が緩むことの2つです。 前者は承認の手順で、後者は一次レビューの記録に「AIの下書きをもとにした」と残し、本レビューを省かないことで防ぎます。
10まず何から始めるか
1週目:規約の文書を整える
コーディング規約とセキュリティのチェック項目に、項目番号と、わるい例・よい例をそろえます。全項目でなくてよく、一次レビューでよく付く指摘の上位20項目から始めます。
2週目:20件で試す
直近のプルリクエストから20件を選び、手元の生成AIの画面で規約に照らした指摘を出させて、当時のレビューと突き合わせます。規約に無い一般論が混ざらないかを最優先で見ます。
3週目:対象のリポジトリを決める
外部のAIに渡してよいリポジトリを、情報セキュリティの担当と決めます。あわせて、機械用のアカウントと、その権限の範囲を決めます。
4週目:差分の取得と一覧をつなぐ
n8n の GitHub Trigger でプルリクエストを受け取り、差分を取ってAIの指摘を Slack に一覧で送るところまで作ります。この時点では GitHub に投稿しません。
2か月目: 行の位置への変換と、Slack の承認、GitHub への投稿を足します。3か月目以降: 項目ごとの「投稿しない」の数を見て、規約の文書とプロンプトを直し、1件15分が何分になったかを実測します。新しく入った開発者のプルリクエストでも、レビュー担当者が同じ指摘を書かずに済むようになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| GitHub Trigger のイベントに Pull request・Pull request review・Push などがあること | n8n Docs: GitHub Trigger | 2026-10-14 |
| GitHub ノードに File の Get、Pull Request の Get Diff・Get Patch、Review の Create などがあり、無い操作は HTTP Request で GitHub の資格情報を使って呼べること | n8n Docs: GitHub | 2026-10-14 |
| Basic LLM Chain がプロンプトを決め、出力の形を求めるときに Structured Output Parser などをつなぐこと | n8n Docs: Basic LLM Chain | 2026-10-14 |
| JSON の例から生成するとすべての項目が必須になること | n8n Docs: Structured Output Parser | 2026-10-14 |
| Slack の中で承認・却下でき、誰が応じたかが記録され、承認できる人を指定できること。公開の HTTPS で届くこと、Interactivity の受け口、Signing Secret が要ること | n8n Docs: Approvals in Slack | 2026-10-14 |
Create a review の event(APPROVE・REQUEST_CHANGES・COMMENT、空なら PENDING)、comments のパス・位置・本文、position が差分の中の位置でファイルの行番号と違うこと、commit_id の扱い、Pull requests の書き込みの権限 | GitHub Docs: REST API endpoints for pull request reviews | 2026-10-14 |
| List pull requests files の応答が最大3000件で、既定で1ページ30件であること | GitHub Docs: REST API endpoints for pull requests | 2026-10-14 |
| 提出前のレビューのコメントは保留中で、本人にしか見えないこと | GitHub Docs: Reviewing proposed changes in a pull request | 2026-10-14 |
| pull_request の action に opened・synchronize・reopened・ready_for_review・converted_to_draft などがあること | GitHub Docs: Webhook events and payloads | 2026-10-14 |
外部のAIサービスにソースコードを渡してよいかは、社内の規程と顧客との契約に従って決めてください。 本記事は n8n と GitHub の公開ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1472)についてのご相談はこちらから。
