GitHub rate_limit APIのcode_scanning_upload削除とは?影響範囲と移行ポイント

GitHubの「Removal of code_scanning_upload field from rate_limit API endpoint」は、コードスキャン機能の廃止ではありません。2026年5月19日以降、GET /rate_limit のレスポンスに含まれていた resources.code_scanning_upload が削除され、コードスキャン結果のアップロードに関するレート制限は core を参照する形に整理されました。/rate_limit の結果をパースして監視・制御しているスクリプト、CI/CD、社内ツールは、code_scanning_upload を直接参照していないか確認する必要があります。(The GitHub Blog)

目次

GitHubのRemoval of code_scanning_upload field from rate_limit API endpointとは

今回の変更は、GitHub REST APIの GET /rate_limit エンドポイントに関するレスポンス仕様の変更です。

従来は、resources オブジェクト内に code_scanning_upload という項目が表示されることがありました。これはSARIFなどのコードスキャン結果をGitHubへアップロードする際のレート制限を示すように見える項目でした。

しかしGitHubの公式発表によると、code_scanning_upload は独立したレート制限枠ではなく、実際には core の制限プールと結合されていました。そのため、別枠の上限があるように誤解されやすく、2026年5月19日に rate_limit APIのレスポンスから削除されました。コードスキャンアップロード自体は、引き続き標準の core レート制限で管理されます。(The GitHub Blog)

何が変わったのか

変更点はシンプルです。GET /rate_limit の resources に code_scanning_upload が出なくなりました。

項目変更前変更後
resources.code_scanning_upload表示される場合があった表示されない
コードスキャン結果のアップロード制限code_scanning_upload を見ているように扱われるケースがあったcore を参照する
代替フィールド必要に見える場合があった代替フィールドは不要
コードスキャン機能継続継続
SARIFアップロード継続継続

重要なのは、APIレスポンスの見え方が変わっただけで、code scanning uploadsの制限管理は core に統一して考えればよいという点です。

変更前後のレスポンスイメージ

変更前は、次のように core と code_scanning_upload が並んで見えるケースがありました。

{
  "resources": {
    "core": {
      "limit": 5000,
      "used": 100,
      "remaining": 4900,
      "reset": 1779200000
    },
    "code_scanning_upload": {
      "limit": 5000,
      "used": 100,
      "remaining": 4900,
      "reset": 1779200000
    }
  }
}

変更後は、code_scanning_upload がなくなり、確認すべき対象は core になります。

{
  "resources": {
    "core": {
      "limit": 5000,
      "used": 100,
      "remaining": 4900,
      "reset": 1779200000
    }
  }
}

実際の https://api.github.com/rate_limit のレスポンスでも、resources には core、search、code_search、graphql などが含まれ、code_scanning_upload は表示されない状態になっています。(GitHub API)

影響を受ける可能性がある対象者

この変更で影響を受けるのは、GitHubのコードスキャンを使っているすべての利用者ではありません。影響が出るのは、主に /rate_limit のレスポンスを機械的に処理している実装 です。

対象影響の可能性確認ポイント
CI/CDでSARIFアップロード前にレート制限を確認しているスクリプト高resources.code_scanning_upload を参照していないか
GitHub APIの社内ラッパー、SDK拡張高型定義や必須フィールドに含めていないか
Datadog、Grafana、CloudWatchなどの監視ダッシュボード中メトリクス名に code_scanning_upload を使っていないか
GitHub App、OAuth App、PATを使う自動化ツール中/rate_limit の戻り値を厳密に検証していないか
手動でGitHubのCode scanning画面を見るだけの利用者低基本的に対応不要
CodeQLやコードスキャン結果の閲覧のみをしている管理者低API連携がなければ影響は限定的

特に注意したいのは、「コードスキャンが失敗するかどうか」ではなく、「アップロード前にレート制限を確認する自作処理が壊れるかどうか」です。

起きやすい不具合

code_scanning_upload の削除で起きやすい不具合は、API制限そのものよりも、レスポンスの前提崩れです。

undefined や KeyError で処理が止まる

JavaScriptやTypeScriptで次のように直接参照している場合、code_scanning_upload が存在しないためエラーや undefined の扱いミスが起きます。

const remaining = data.resources.code_scanning_upload.remaining;

Pythonでも同様です。

remaining = data["resources"]["code_scanning_upload"]["remaining"]

このようなコードは、core を参照する形に変更します。

const remaining = data.resources.core.remaining;
remaining = data["resources"]["core"]["remaining"]

監視アラートが「メトリクス消失」として発火する

監視ツールで github.rate_limit.code_scanning_upload.remaining のような独自メトリクスを作っている場合、フィールド削除後に値が取れず、アラートが発火する可能性があります。

この場合は、メトリクス名を単純に置き換えるだけでなく、アラート条件も見直してください。

例えば、以前の条件が次のような内容だったとします。

code_scanning_upload.remaining < 100

変更後は次のように core を見る必要があります。

core.remaining < 100

ただし、core はコードスキャンアップロード専用ではありません。通常のREST API呼び出しも同じプールを消費するため、アラートのしきい値は運用実態に合わせて再調整した方が安全です。

スキーマ検証テストが失敗する

APIレスポンスをJSON Schemaやスナップショットテストで検証している場合、code_scanning_upload を必須項目として定義しているとテストが落ちます。

この変更では、code_scanning_upload を「任意項目」にするよりも、参照自体を削除して core を使う方が自然です。GitHubの公式発表でも、代替フィールドは不要で core を使うよう案内されています。(The GitHub Blog)

管理者・開発者が確認すべきポイント

まず、コードや設定ファイル全体から code_scanning_upload を検索してください。見つかった箇所を、用途別に仕分けると対応漏れを防げます。

確認場所探す文字列の例対応
アプリケーションコードcode_scanning_uploadcore 参照に変更
CI/CD設定/rate_limit、jq、remainingresources.core.remaining を使う
監視設定code_scanning_upload.remainingメトリクスとアラート条件を更新
テストコードスナップショット、JSON Schema必須フィールドから削除
ドキュメント手順書、運用Runbook古い参照を修正
SDKや型定義RateLimitResource などcode_scanning_upload 前提を削除

GitHubのレート制限状況は、各APIレスポンスヘッダーの x-ratelimit-limit、x-ratelimit-remaining、x-ratelimit-used、x-ratelimit-reset、x-ratelimit-resource でも確認できます。GitHub Docsでは、可能な場合はレート制限確認のためだけに /rate_limit を呼ぶより、レスポンスヘッダーを利用することが推奨されています。(GitHub Docs)

移行時の実装例

JavaScript・TypeScriptの場合

変更前のコードが次のような形なら、code_scanning_upload を直接参照しているため修正が必要です。

const res = await fetch("https://api.github.com/rate_limit", {
  headers: {
    Authorization: `Bearer ${token}`,
    Accept: "application/vnd.github+json"
  }
});

const data = await res.json();
const remaining = data.resources.code_scanning_upload.remaining;

if (remaining < 10) {
  throw new Error("Code scanning upload rate limit is too low");
}

変更後は core を参照します。

const res = await fetch("https://api.github.com/rate_limit", {
  headers: {
    Authorization: `Bearer ${token}`,
    Accept: "application/vnd.github+json"
  }
});

const data = await res.json();
const core = data.resources?.core;

if (!core) {
  throw new Error("GitHub rate limit response does not include core resource");
}

if (core.remaining < 10) {
  throw new Error("GitHub core rate limit is too low");
}

実務では、単にフィールド名を置き換えるだけでなく、core が存在しない場合のエラー処理も入れておくと安全です。APIレスポンスの仕様変更や認証ミスを早期に検知できます。

Pythonの場合

変更前は、次のようなコードがよくあります。

import requests

response = requests.get(
    "https://api.github.com/rate_limit",
    headers={
        "Authorization": f"Bearer {token}",
        "Accept": "application/vnd.github+json",
    },
    timeout=10,
)

data = response.json()
remaining = data["resources"]["code_scanning_upload"]["remaining"]

変更後は core を参照します。

import requests

response = requests.get(
    "https://api.github.com/rate_limit",
    headers={
        "Authorization": f"Bearer {token}",
        "Accept": "application/vnd.github+json",
    },
    timeout=10,
)
response.raise_for_status()

data = response.json()
core = data.get("resources", {}).get("core")

if core is None:
    raise RuntimeError("GitHub rate limit response does not include core resource")

remaining = core["remaining"]

Pythonでは data["resources"]["code_scanning_upload"] のような直接アクセスを続けると、削除後に KeyError が発生します。運用スクリプトでは、例外が起きたときにCI全体を止めるのか、アップロードだけをスキップするのかも決めておきましょう。

jqを使っている場合

シェルスクリプトで jq を使っている場合も確認が必要です。

変更前の例です。

curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
  https://api.github.com/rate_limit \
  | jq '.resources.code_scanning_upload.remaining'

変更後は次のようにします。

curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
  https://api.github.com/rate_limit \
  | jq '.resources.core.remaining'

CIの事前チェックで使うなら、値が null の場合に失敗させる処理も入れておくと、レスポンス異常を見逃しにくくなります。

remaining=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
  https://api.github.com/rate_limit \
  | jq -r '.resources.core.remaining // empty')

if [ -z "$remaining" ]; then
  echo "core rate limit not found"
  exit 1
fi

移行で間違えやすいポイント

code_search に置き換えない

code_scanning_upload という名前を見ると、似た名前の code_search に置き換えたくなるかもしれません。しかし、code_search はコード検索のレート制限に関する項目です。コードスキャン結果のアップロードとは用途が違います。

今回の変更で見るべきなのは code_search ではなく、core です。

rate オブジェクトに戻らない

/rate_limit のレスポンスには、古くから rate オブジェクトが含まれる場合があります。しかしGitHub Docsでは、新規コードや既存コードの更新では rate ではなく core を使うよう案内されています。rate は core と同じ情報を持つ互換的な項目として扱われるため、移行先としては resources.core を選ぶのが安全です。(GitHub Docs)

「コードスキャンが無効になった」と判断しない

code_scanning_upload が消えたことを、コードスキャン機能やSARIFアップロード機能が無効になったサインと誤解しないでください。

今回の削除は、あくまで /rate_limit レスポンス内のフィールド整理です。CodeQL、サードパーティ製解析ツール、CI/CDからのSARIFアップロードを使っている場合でも、アップロード処理そのものではなく、レート制限確認処理を見直すのが主な対応です。

レート制限の監視を /rate_limit だけに頼りすぎない

GitHub Docsでは、GET /rate_limit はプライマリレート制限にはカウントされない一方で、セカンダリレート制限にはカウントされる可能性があると説明されています。また、可能な場合は各レスポンスに含まれるレート制限ヘッダーを使うことが推奨されています。(GitHub Docs)

つまり、監視や制御のために短い間隔で /rate_limit を叩き続ける設計は避けた方がよいです。API呼び出しの直後に返ってくるヘッダーをログ化し、必要に応じて集計する方が実運用では安定します。

チームで展開する際のチェックリスト

組織内でGitHub APIを複数チームが使っている場合は、次の順番で確認すると効率的です。

優先度作業目的
高リポジトリ全体で code_scanning_upload を検索直接参照の洗い出し
高CI/CDの事前チェック処理を確認SARIFアップロード前の停止を防ぐ
高監視・アラートのメトリクス名を確認不要な障害通知を防ぐ
中JSON Schema、スナップショットテストを更新テスト失敗を防ぐ
中社内SDKや共通ライブラリを修正各チームへの影響を一括で抑える
中運用手順書を更新障害対応時の誤判断を防ぐ
低古いサンプルコードを整理将来の再発を防ぐ

特に共通ライブラリを使っている組織では、各サービス側で個別対応するより、GitHub APIクライアントのレート制限取得処理を一箇所で直す方が安全です。

対応方針のまとめ

今回のGitHub API変更では、GET /rate_limit の resources.code_scanning_upload が削除されました。コードスキャン結果のアップロードは引き続き利用できますが、レート制限の確認には resources.core を使います。

対応としては、まずコード・CI/CD・監視設定から code_scanning_upload を検索し、見つかった箇所を core 参照へ移行してください。あわせて、code_search への誤置換、rate オブジェクトへの後戻り、/rate_limit の過剰呼び出しを避けることが重要です。

今日すぐ行うべきことは、次の3つです。

  1. 全リポジトリと監視設定で code_scanning_upload を検索する
  2. 該当箇所を resources.core 参照に変更する
  3. CI/CDとアラートを実行し、フィールド欠落による失敗がないか確認する

この対応を済ませれば、Removal of code_scanning_upload field from rate_limit API endpointによる実務上の影響は、多くの環境で最小限に抑えられます。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次