REVIEW.mdの@行でファイルを取り込み、レビュー基準を分割する手順
REVIEW.mdが長くなったら、@review-security.mdのような行で別ファイルを取り込めます。8ファイル・150,000バイトの上限、保護ブランチの条件、SKILL.mdを取り込む形まで説明します。
REVIEW.mdが長くなったら、ルートのREVIEW.mdに@review-security.mdのような行を1本書くだけで、別ファイルの中身をレビュー指示として取り込めます。Code Reviewは、その行を指定ファイルの内容に置き換えて読みます。ただし取り込みが効くのは、保護されたブランチからREVIEW.mdを読むときだけです。ファイル数・サイズ・リンク数にも上限があります。本稿は書き方、上限、効かないときの切り分けの順に説明します。
@行の書き方は「@とファイル名だけの行」
取り込みたいファイルは、ルートのREVIEW.mdに@とファイル名だけを書いた行で指定します。Code Reviewはその行を、ファイルの内容に置き換えます。取り込まれた内容はREVIEW.mdの一部として働きます。
次の例では、ルートのREVIEW.mdが自分の指示を1つ持ち、その下で2つのルールファイルを取り込みます。
# Review instructions
Report at most five Nits per review.
@review-security.md
@review-api.md取り込まれるファイルは、REVIEW.mdと同じリポジトリルートに置きます。
your-repo/
├── REVIEW.md
├── review-security.md
└── review-api.md分割が向くのは、REVIEW.mdが長くなったときと、レビュー用のルールをすでに別ファイルで持っているときです。セキュリティ、API設計、データベースのように担当が分かれる領域ごとにファイルを切ると、変更の持ち主がはっきりします。
取り込みには条件と上限がある
取り込みは無条件には効きません。どのブランチからREVIEW.mdを読むかで挙動が分かれます。
ブランチの保護状態で変わる取り込み
保護ブランチから読むとき
@行が、指定ファイルの内容に置き換わります。
保護されていないデフォルトブランチのとき
@行はREVIEW.mdの中に、ただの文字として残ります。PRが、その行の指すファイルを変更している場合は、行そのものが除かれます。
どのブランチが「保護」と数えられるかは、次のとおりです。
- デフォルトブランチ: 従来のブランチ保護ルールか、ルールセット
- それ以外のブランチ: ルールセットのみ
ルールセットが保護と数えられるのは、更新を制限しているか、承認が1件以上のPRを必須にしているときです。PRを必須にする場合は、新しいpushで承認を取り消すか、最後のpushより後の承認を求める設定も要ります。
読まれるブランチと対象ファイルは、設定ごとに次の表のとおりです。
| ブランチの状態 | 読まれるブランチ | 読まれるファイル |
|---|---|---|
| デフォルトブランチが保護済み。PRの向き先がそのブランチ、またはルールセットの無いブランチ | 読まれるブランチデフォルトブランチ | 読まれるファイルルート、取り込み先、サブディレクトリ |
| PRの向き先が、ルールセットで保護された別ブランチ | 読まれるブランチその向き先ブランチ | 読まれるファイルルート、取り込み先、サブディレクトリ |
| デフォルトブランチが未保護で、向き先にも保護ルールが無い | 読まれるブランチデフォルトブランチ | 読まれるファイルルートのみ |
| 保護設定を確認できない(未保護のデフォルトブランチ+従来ルールだけの向き先も含む) | 読まれるブランチ読まない | 読まれるファイルなし |
三行目の状況が見落とされがちです。取り込み用のファイルを丁寧に用意しても、ブランチが未保護なら、レビューはルートのREVIEW.mdしか読みません。
数の上限は3つ
@行を増やしていくと、次の3つの上限にぶつかります。
REVIEW.mdの取り込み上限
取り込めるファイル
8
異なるファイルの数
合計サイズ
150,000バイト
REVIEW.mdと取り込み先の合計
Markdownリンク
64個
http・https・mailto・#アンカーは数えない
上限を超えたときの挙動は、ファイル数・バイト数とリンク数で違います。
- ファイル数・バイト数: 上限に達するファイルは、途中で切られず丸ごと読み飛ばされます。チェックランが、読み飛ばした取り込み行の数を報告します。
- リンク数: 64個を超えると、取り込み先だけでなくルートの
REVIEW.md全体が読み飛ばされます。チェックランが、指示が適用されなかったと伝えます。
リンクの上限は、取り込みの数ではなくREVIEW.md全体の問題です。取り込み先に参考資料へのリンクを大量に貼ると、本体まで巻き添えになります。
取り込みが効かないときの切り分け
取り込み先が適用されないときの原因は、次のいずれかです。上から順に当てると絞り込めます。
取り込まれないときの確認順
- Qファイルがルート(REVIEW.mdの隣)にありますか?答えがルートへ移します答えがはい
@docs/review-rules.mdのようなサブディレクトリのパスは、スキルファイルを除いて取り込まれません。 - Qファイル名は大文字小文字まで一致し、空白がありませんか?答えが名前を直します答えがはい
名前がどのファイルにも一致しない行は、
REVIEW.mdにただの文字として残ります。チェックランも、読み飛ばした取り込みとしては報告しません。 - Q`@`行は、ルートのREVIEW.mdだけに書かれていますか?答えがルートにまとめます答えがはい
取り込み先のファイルや、サブディレクトリの
REVIEW.mdに書いた@行は、ただの文字のままです。取り込みは1段だけです。 - Q8ファイル・150,000バイト・64リンクの範囲に収まっていますか?答えが分割を見直します答えがはい
バイト数の上限に達するファイルは、丸ごと読み飛ばされます。
- Q取り込み先のファイルは、読まれるブランチにマージ済みですか?答えが先にマージします
レビューは
REVIEW.mdと取り込み先を、同じコミットから読みます。PR自身の変更からは読みません。保護ブランチから読む前提で、ここまでが全部通れば取り込みは効きます。
最後の点は、運用でつまずきやすい箇所です。REVIEW.mdの変更と取り込み先の新規ファイルを同じPRで出すと、そのPRのレビューには効きません。基準を変えるPRは、先にマージしてから効き目を見ます。
取り込み先に別ファイルへのリンクを書くとき
Markdownリンクは、取り込みの代わりにはなりません。別ファイルへのリンクを書いても、その中身は取り込まれません。また、PRが変更するファイルやフォルダへのリンクを含むと、レビューが「リンク行だけを除く」ことができず、ルートのREVIEW.mdを丸ごと読み飛ばす場合があります。この場合は、ルールをリンクで済ませず、REVIEW.mdか取り込み先の本文に直接書きます。
チェックランに出るメッセージと対処は、次のとおりです。
| チェックランのメッセージ(要旨) | 起きていること | 対処 |
|---|---|---|
| 未保護のデフォルトブランチから読んだ | 起きていることルートのみ読まれた | 対処ブランチを保護する |
| 保護設定を確認できなかった | 起きていることREVIEW.mdを読んでいない | 対処保護設定を見直す |
| 変更ファイルへのリンク、または64個超のリンク | 起きていることルートが読み飛ばされた | 対処リンクを減らす・本文に書く |
| 取り込み行が読み飛ばされた | 起きていることルートは効いているが取り込み先が効いていない | 対処上のフローで確認する |
スキルのSKILL.mdも取り込める
レビューに使いたい指針をすでにスキルで持っているなら、そのスキルのSKILL.mdをルートのREVIEW.mdに取り込めます。Code Reviewはスキルを実行しません。取り込むのはSKILL.mdの本文です。
書き方は、@の後に.claude/skills/<folder>/SKILL.mdの形のパスを1行で書きます。
# Review instructions
Report at most five Nits per review.
@.claude/skills/api-review/SKILL.md
Treat any change under `migrations/` as Important.ここでは、通常のファイルと違い、サブディレクトリのパスが使えます。ただし取り込まれるのは、保護ブランチからREVIEW.mdを読むときだけです。スキルファイルも、8ファイル・150,000バイトの上限に数えられます。そのうえで、スキルファイルには30,000バイトの独自の上限があります。
スキル行が取り込まれない条件
次のどれかに当たると、その行からスキルは取り込まれません。
| 項目 | 守る内容 |
|---|---|
| 空白 | 守る内容フォルダ名に空白を入れない。空白のある行は文字のまま残り、チェックランも読み飛ばしを報告しない |
| パス | 守る内容リポジトリルートから.claude/skills/<folder>/SKILL.md。フォルダはskills/の直下。一致するファイルが無い場合は、読み飛ばしとして数えられる |
| 取り込み元 | 守る内容.claude/配下の他のファイルや、同梱・個人・プラグインのスキルは直接取り込めない。REVIEW.mdの隣のファイルへ内容を写す |
| ファイル | 守る内容SKILL.mdは通常のテキストファイルとしてコミットする。シンボリックリンクは、ファイル自体でもパスの途中のフォルダでも辿らない |
| サイズ | 守る内容frontmatterを含めて30,000バイト以下 |
| 行数 | 守る内容スキル行は8行まで。同じ行を繰り返すと、繰り返しの数だけ数える |
| ブロック | 守る内容@行をコードフェンスの中に置かない。REVIEW.mdでそれより前にあるHTMLコメントと、<pre>・<script>・<style>・<textarea>のブロックを閉じておく |
パスの形に合うのにファイルが無い行と、ファイル・サイズ・行数・ブロックの条件に反した行は、チェックランの「読み飛ばした取り込み行」に数えられます。このメッセージが出るのは、保護ブランチからREVIEW.mdを読んだときだけです。空白を含む行は数えられません。
レビューが受け取るのは本文だけ
スキルを取り込むと、レビューはSKILL.mdの本文だけを受け取ります。Claude Codeでスキルとして使うときとは、働き方が違います。スキルを転用するときは、次の点を本文に書き直します。
スキルをREVIEW.mdに取り込む前の書き換え
スキルとして書いたまま
---
description: APIの変更をレビューするとき使う
---
Check $ARGUMENTS against the schema.取り込みに備えて本文へ移す
APIのスキーマ変更をレビューするときに適用する。
Check the changed endpoints against the schema.書き換えで見る点は次の6つです。
| 項目 | 直し方 |
|---|---|
| frontmatter | 直し方レビューに要る条件は本文へ繰り返す。たとえばdescriptionに書いた、使う条件 |
| 注入コマンド | 直し方!コマンドが返す内容は本文に書き出す。Code Reviewはコマンドを実行せず、そのコマンドを含む行やブロックを丸ごとプレースホルダに置き換える |
| 置換 | 直し方$ARGUMENTSなどは固定の文に直す。レビューは引数を渡さず、書かれたまま残す |
| 補助ファイル | 直し方レビューに要る内容はSKILL.mdへ写す。スクリプト、リンク先のファイル、@file参照は読み込まれない |
| 除外とNit上限 | 直し方REVIEW.mdか、その隣のファイルに書く。スキルの文面は根拠として受け付けられない |
| リポジトリ内のファイルへのリンク | 直し方指すものは言葉で書く。レビューには、パスが文字のままか、プレースホルダで見える |
スキルの!コマンド、$ARGUMENTS、リンクを書き換えると、Claude Codeでのスキルの働き方も変わります。チームがそれらに頼っているなら、スキルを取り込まず、指針をREVIEW.mdの隣のファイルへ写して、そのファイルを取り込みます。
コード片の文字が置き換わる
Code Reviewは、スキル本文の一部の文字を置き換えます。コード例は、次の形でレビューに届きます。
In SKILL.md: Use `items[0]`, never `List<String>`.
The review reads: Use ˋitems(0)ˋ, never ˋList< String>ˋ.
In SKILL.md: Run `ps | grep api` and ask @alice.
The review reads: Run ˋps ¦ grep apiˋ and ask @ alice.バッククォート、角括弧、山括弧、パイプ、メンション記号が置き換わります。ルールの意味がこうした文字に依存するときは、文字だけに頼らず、言葉でも書いておきます。
分割の設計は「呼び出される場所」から決める
ここまでの条件を踏まえると、ファイルの切り方は「誰がそのルールを直すか」に合わせるのが素直です。セキュリティはセキュリティ担当、APIはAPI担当というように、CODEOWNERSで持ち主が分かれている領域の単位でファイルを切ると、ルールの変更依頼が持ち主に届きます。領域が8を超えそうなら、持ち主が同じ領域を1ファイルにまとめます。
もう1つは運用の順番です。取り込み先のファイルを足すPRは、それ自身のレビューには効きません。新しい領域のファイルを足すPRと、それを使う@行を加えるPRを分け、先にファイル側をマージしておくと、次のPRから取り込みが働いているかをチェックランで確かめられます。
保護ブランチの設定は、リポジトリごとに1回の作業です。GitHub側の設定とレビュー全体の運用はClaude CodeでGitHub PR自動レビューを設定・運用するに、チームでの基準づくりはClaude Codeチーム導入ガイドにあります。取り込むスキルの書き方はClaude Code SkillsのSKILL.mdの書き方が参考になります。
よくある質問
手元の/code-reviewコマンドでも@行は取り込まれますか
REVIEW.mdそのものが読まれません。/code-reviewコマンドが読むのはCLAUDE.mdで、REVIEW.mdは読みません。ローカルでも効かせたいルールはCLAUDE.mdに書きます。
参照した一次ソース
この記事の記述は、次の一次ソースと照合しています。更新時に参照先が変わった場合は一覧も更新します。