GitHub:行へのコメントが断られた理由
プルリクの行へのコメントは POST /repos/持ち主/リポジトリ名/pulls/番号/comments に、body・commit_id・path・line・side を付けて送ります。何行かの範囲なら start_line と start_side も付けます。GitHub の文書が挙げる答えは、作れたときの 201、許されないときの 403、検証に通らないか送りすぎたときの 422 です。422 の文は文書にありません。以下は公開の報告から引いた文と、その裏にある GitHub の文書の決まりです(2026年10月25日に確認)。
HTTP/1.1 422 Unprocessable Entity
{"message":"Validation Failed","errors":[{"resource":"PullRequestReviewComment","code":"custom","field":"pull_request_review_thread.line","message":"pull_request_review_thread.line must be part of the diff"},{"resource":"PullRequestReviewComment","code":"missing_field","field":"pull_request_review_thread.diff_hunk"}],"documentation_url":"https://docs.github.com/rest/pulls/comments#create-a-review-comment-for-a-pull-request","status":"422"}
422:GitHub の文と理由
pull_request_review_thread.line must be part of the diff(pull_request_review_thread.diff_hunkのmissing_fieldと一緒に):その行が、ファイルの差分のどのハンクにも入っていません。GitHub がコメントを受け付けるのは差分に出る行、つまり変更した行とその前後の変わらない数行だけで、Files changed に見える行と同じです。ファイルがプルリクに入っていても、そこから離れた行は断られます。sideで、行の番号をどちらのファイルで数えるかが決まる:GitHub の文書では、消した行はLEFT、足した行とその前後の変わらない行はRIGHTです。LEFTのlineは変更前のファイルの行です。新しい側でしか合わない番号は、差分の外になります。pull_request_review_thread.pathのinvalid(diff_hunkのmissing_fieldと一緒に):GitHub がpathをプルリクの差分のファイルとして受け取りませんでした。Pull request review thread start line must be part of the same hunk as the line:範囲の最初の行(start_line)と最後の行(line)が別々のハンクにあります。範囲は1つのハンクの中に収めます。pull_request_review_thread.start_line must precede the end line.:start_lineがlineと同じか、後ろにあります。1行へのコメントはlineだけで送ります。公開の報告では、消した行の範囲(sideがLEFT)をstart_sideなしで送っても同じ文でした。何行かへのコメントでは、GitHub の文書はstart_sideを必須としています。- レビューの中では(
POST /repos/持ち主/リポジトリ名/pulls/番号/reviewsのcomments)、同じ決まりがUnprocessable EntityとPull request review thread line must be part of the diff and Pull request review thread diff hunk can't be blankで報告されています。そうしたコメントが1つあると、レビュー全体が断られます。
403・404
- 403
Resource not accessible by personal access token(またはby integration):トークンはプルリクを読めても、コメントはできません。Fine-grained のトークンには Pull requests の読み書きが要ります(足す権限へ)。 - 速く送りすぎた 403・429:GitHub の文書は、この入口で速く作りすぎると二次のレート制限にかかることがあると書いています(「API rate limit exceeded」へ)。
- 404:リポジトリかプルリクが、このトークンからは見えません。トークンで見えない非公開のリポジトリにも、GitHub はこう答えます。
- 行のコメントへの返信は、保留中のレビューがあると
user_id can only have one pending review per pull requestになります(GitHub がレビューを断った理由へ)。
受け付けられたのに outdated になる
commit_id は、コメントが指すコミットです。GitHub の文書は、最新のコミットに付けないと、後のコミットがその行を変えたときに outdated と表示されることがあると書いています。差分の中の位置で行を指す古い position は廃止に向かっていて、line と side に置き換わります。
直し方
- ハンクを見る:
GET /repos/持ち主/リポジトリ名/pulls/番号/filesの各ファイルにpatchがあります。@@ -A,B +C,D @@のたびにハンクが始まり、変更前のファイルの A 行目から B 行、変更後のファイルの C 行目から D 行です。 - 差分の外の行:変更の中か、すぐそばの行を選びます。ファイル全体について言うなら
subject_typeをfileにしてpathだけで(lineなしで)送ります。プルリク全体についてなら、会話のコメント(POST /repos/持ち主/リポジトリ名/issues/番号/comments)です。 - ハンクにまたがる範囲:ハンクごとに1つずつコメントします。
- 1行:
start_lineなしでlineだけ。消した行:sideとstart_sideをLEFTにして、変更前のファイルの行の番号で。 path:リポジトリの一番上からのパスで、ファイルの一覧のfilenameのとおりに。
IntelliJ IDEA では差分に載っている行にだけコメントでき、GraphQL で送る
IntelliJ IDEA に入っている GitHub の機能が、プルリクの行にどうコメントするか。ソース(2026年10月31日に確認・IntelliJ IDEA:GHPRReviewDiffExtension.kt・GHPRReviewEditorGutterControlsState.kt・GHPRDiffReviewViewModel.kt・GHPRReviewNewCommentEditorViewModel.kt・GHPRReviewDataProviderImpl.kt・GHPRReviewServiceImpl.kt・createReview.graphql・addPullRequestReviewThread.graphql・GithubBundle.properties・CodeReviewSubmittableTextViewModel.kt)では:
- コメントできる所:プルリクの差分では、余白のコメントのボタンは差分の塊(hunk)の行にだけ出ます(変わった行と、差分に載っている前後の変わっていない行)。リポジトリの読み取り以上の権限があるアカウントのときだけです(権限は IDE がつないだ時に GitHub が返した物)。行の範囲は、両端がそうした行で、しかも同じ側(どちらも古いファイルか、どちらも新しいファイル)のときだけ選べます。
- 上の REST の API は使いません。保留中の自分のレビューが無いと、コメント欄には Add Single Comment(1件のコメント)と Start Review(レビューを始める)が出て、前回使った方が主のボタンになります。どちらも GitHub の GraphQL の
addPullRequestReviewにスレッドを付けて送ります:path・line・side、範囲ならstartLineとstartSide、commitOIDには差分の新しい側のコミット。Add Single Comment はCOMMENTのレビューとしてすぐ投稿し、Start Review は保留中のレビューに入れます。 - 保留中の自分のレビューがあると、Add Review Comment が
addPullRequestReviewThreadでそのレビューにスレッドを足します。差分がプルリク全体でなく1つのコミットのときは、代わりにマージベースからそのコミットまでの差分での、行の古い形のpositionを送ります。ソースのコメントによると、GraphQL のスレッドはコミットを指定できず、REST の API はレビューを指定できず下書きのレビューがあると失敗するためです。 - GitHub が断ると、コメント欄は書いた文のまま開いています。閉じるのは GitHub がコメントを受け取った後だけです。ソースはエラーを IDE のログにも書きます。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。IDE の差分で選んだ行にコメントします。文を打つ前に、GitHub から来たファイルのパッチのハンクと照らし(範囲は両端が同じ側の1つのハンクに入るか)、外なら外だと言います。送るのは line と side、範囲なら同じ側の start_line と start_side も付け、1行なら start_line は付けません。commit_id は画面に出ていた先頭のコミットです。パッチの無いファイルでは GitHub が決めます。GitHub が断ったときは GitHub の文をそのまま出し、書いたコメントはクリップボードに残します。受信箱・差分・会話は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English