Deprecation of Python 3.9 for Dependabotとは?GitHub管理者が確認すべき影響と移行ポイント

Deprecation of Python 3.9 for Dependabot は、GitHub の Dependabot が Python 3.9 をサポート対象外にした変更です。管理者が最初に確認すべきことは、組織内のリポジトリに Python 3.9 前提の Dependabot 設定や依存関係解決が残っていないか、そして Dependabot の更新プルリクエストが止まっていないかです。

GitHub は公式 Changelog で、Python 3.9 を使い続けると Dependabot が依存関係更新のプルリクエストを作成しないリスクがあると説明しています。Python 3.9 はすでに end-of-life であり、Python 公式サイトでも 3.9 のサポート終了が示されています。この記事では、GitHub 管理者・Organization オーナー・リポジトリ管理者が確認すべき影響範囲、権限、監査、移行、社内周知のポイントを実務目線で整理します。(The GitHub Blog)

目次

Deprecation of Python 3.9 for Dependabot で何が変わったのか

GitHub の告知内容はシンプルです。Dependabot は Python 3.9 をサポートしなくなりました。対象リポジトリで Python 3.9 を前提に依存関係を解決している場合、Dependabot が依存関係更新のプルリクエストを作成できなくなる可能性があります。(The GitHub Blog)

ここで重要なのは、「GitHub 上の Python プロジェクトが即座に壊れる」という話ではない点です。問題になるのは、Dependabot が Python 依存関係を解析・解決・更新する場面です。たとえば、pyproject.tomlrequirements.txtPipfilepoetry.lockuv.lock などを使っているリポジトリで、Python 3.9 固定の制約が残っていると、Dependabot の更新処理が失敗したり、更新 PR が作られなかったりする可能性があります。

なお、該当の GitHub Changelog ページは確認時点で「Retired」と表示されています。実務上は通常の新機能リリースではなく、「サポート終了対応」「依存関係更新基盤の保守対応」として扱うのが安全です。(The GitHub Blog)

影響を受ける可能性が高いリポジトリ

影響確認では、単に「Python を使っているか」ではなく、「Dependabot が Python 依存関係を更新しているか」を見ます。GitHub Docs では、Dependabot は対応する依存関係マニフェストやロックファイルを含むリポジトリに対して更新を設定でき、Python 系では pippipenvpip-compilepoetry などが対象になります。pipenvpoetry を使う場合でも、dependabot.yml の YAML 値は package-ecosystem: "pip" を使う点に注意が必要です。(GitHub Docs)

確認対象影響の見方具体例
dependabot.ymlPython 依存関係を Dependabot が監視しているかpackage-ecosystem: "pip" がある
Python バージョン指定3.9 固定または 3.9 だけを許可していないかrequires-python = "==3.9.*"python_version = "3.9"
ロックファイル古い Python 前提でロックされていないかpoetry.lockPipfile.lockrequirements.txt
CI 設定Dependabot PR の検証環境が 3.9 のままではないかactions/setup-python3.9 を指定
Docker イメージ実行環境やテスト環境が 3.9 固定ではないかFROM python:3.9-slim
プライベート依存関係Dependabot が依存関係を解決できる権限を持つか社内 PyPI、GitHub Packages、社内リポジトリ参照

特に優先度が高いのは、本番系サービス、外部公開サービス、セキュリティ更新を Dependabot に依存しているリポジトリです。Dependabot security updates は、脆弱性のある依存関係に対して修正版へのプルリクエストを作る仕組みです。GitHub Docs では、Dependabot security updates は Dependency graph と Dependabot alerts が有効なリポジトリで利用できると説明されています。(GitHub Docs)

管理者向けチェックリスト

まずは、Organization 全体で対象リポジトリを洗い出し、リポジトリごとに「対応不要」「設定修正のみ」「アプリ側の Python 移行が必要」に分けます。

チェック項目管理者が確認すること判断基準
対象リポジトリの棚卸し.github/dependabot.ymlpackage-ecosystem: "pip" があるかある場合は優先調査
Python 3.9 固定の有無pyproject.tomlPipfile、Dockerfile、CI を検索3.9 固定なら移行対象
Dependabot の稼働状況Dependency graph の Dependabot タブで直近ジョブを確認直近のチェックが止まっていないか
セキュリティ更新Dependabot alerts と security updates が有効か脆弱性対応 PR が作られる状態か
プライベート依存関係Dependabot secrets、レジストリ設定、組織内リポジトリアクセスを確認解決不能エラーがないか
CI の互換性3.10 以上、できれば 3.11 以上でテストが通るかテスト通過後に制約を更新
監査ログDependabot 関連設定の変更履歴を確認誰がいつ無効化・変更したか
社内周知開発チームに対応期限と確認観点を通知PR 放置や重複対応を防ぐ

GitHub Docs では、Dependabot version updates は .github/dependabot.yml をリポジトリにコミットすることで有効化し、Dependency graph の Dependabot タブで監視対象や直近チェック状況を確認できると説明されています。(GitHub Docs)

GitHub 管理者が最初に使う検索クエリ例

Organization 管理者は、GitHub のコード検索で次のような条件を使うと、対象を素早く絞り込めます。YOUR_ORG は自社 Organization 名に置き換えてください。

org:YOUR_ORG "package-ecosystem: \"pip\"" path:.github/dependabot.yml
org:YOUR_ORG "python-version: \"3.9\"" path:.github/workflows
org:YOUR_ORG "FROM python:3.9"
org:YOUR_ORG "python_version = \"3.9\""
org:YOUR_ORG "requires-python" "3.9"
org:YOUR_ORG ".python-version" "3.9"

検索結果が多い場合は、次の順で優先順位を付けると実務で進めやすくなります。

優先度対象理由
本番サービス、外部公開サービス、決済・認証・個人情報を扱うリポジトリ脆弱性対応 PR が止まる影響が大きい
Dependabot alerts が開いたままのリポジトリセキュリティ更新が必要な状態
Python 3.9 固定だが、CI が整っているリポジトリ移行 PR を比較的安全に進めやすい
プライベートレジストリを使うリポジトリ認証や解決エラーが起きやすい
アーカイブ済み、実験用、Dependabot 未使用のリポジトリ影響は限定的だが記録は残す

権限と設定で確認すべきポイント

Dependabot 対応では、リポジトリ管理者だけで完結しないことがあります。Organization 設定、セキュリティ設定、プライベート依存関係へのアクセス、監査ログ確認が関係するためです。

作業主に必要な権限確認場所
dependabot.yml の修正リポジトリへの書き込み権限.github/dependabot.yml
Dependabot version updates の有効化リポジトリの設定変更権限または書き込み権限Settings → Advanced Security
Dependabot security updates の有効化リポジトリ管理者または組織のセキュリティ管理者Settings → Advanced Security
Dependabot alerts の確認管理者、Organization owner、write/maintain 権限などSecurity / Dependabot
Organization 全体の設定確認Organization ownerOrganization settings
監査ログ確認Organization ownerOrganization settings → Audit log
プライベート依存関係アクセス設定Organization owner またはリポジトリ管理者Dependabot secrets、registries 設定

GitHub Docs では、Organization の audit log は組織に影響するアクションについて「誰が、何を、いつ行ったか」を確認でき、Organization owner がアクセスできると説明されています。また、audit log は直近 180 日分のイベントを扱い、createdaction などの条件で絞り込めます。(GitHub Docs)

Python 3.9 からどのバージョンへ移行すべきか

Python 3.9 を避けるだけなら、サポート中の Python に移行すればよいという話になります。ただし、管理者視点では「サポート期間」「依存ライブラリの互換性」「CI の安定性」「本番環境のベースイメージ」を合わせて判断する必要があります。

Python 公式サイトでは、確認時点で Python 3.9 は end-of-life、Python 3.10 は security、Python 3.11 以降もサポート対象として掲載されています。特に Python 3.10 はサポート終了が近いため、長期運用を前提にするなら 3.11 以上を候補にするのが現実的です。最新の Python 3.14 に一気に上げる選択肢もありますが、依存ライブラリや本番環境の対応状況を確認してから進めるべきです。(Python.org)

移行先候補向いているケース注意点
Python 3.10短期的に 3.9 固定を外したい場合サポート期間の余裕が小さい
Python 3.11安定性と移行しやすさのバランスを取りたい場合古い依存ライブラリの互換性確認が必要
Python 3.12中期運用を見据えて移行したい場合ビルド済み wheel がない依存関係に注意
Python 3.13 / 3.14新規開発や先行移行できるチームフレームワークやライブラリの対応状況を事前確認

実務では、まず 3.11 または 3.12 で CI を通し、依存ライブラリの問題が少なければ 3.13 以降を検討する流れが無難です。重要なのは、Dependabot 対応だけを目的に本番環境まで一気に上げないことです。まずはテスト環境と依存関係解決を通し、段階的に本番へ反映します。

移行作業の実務手順

対象リポジトリを分類する

最初に、対象リポジトリを次の 3 種類に分けます。

分類状態対応
対応不要Python 3.9 指定がなく、Dependabot も正常稼働監視のみ
設定修正のみCI や Dependabot 設定に 3.9 が残っている設定 PR を作成
アプリ移行が必要requires-python や依存ライブラリが 3.9 前提開発チームで移行計画を作成

この分類をせずに全リポジトリへ一律対応を始めると、重要度の低いリポジトリに時間を取られ、脆弱性対応が必要なリポジトリの確認が後回しになります。

Python バージョン指定を更新する

代表的な更新箇所は次のとおりです。

# pyproject.toml の例

[project]

requires-python = “>=3.11,<4.0”

# Pipfile の例

[requires]

python_version = “3.11”

# .python-version の例
3.11.9
# Dockerfile の例
FROM python:3.11-slim
# GitHub Actions の例
- uses: actions/setup-python@v6
  with:
    python-version: "3.11"

ここでありがちな失敗は、GitHub Actions の python-version だけを変更して、pyproject.tomlPipfile の制約を残してしまうことです。Dependabot の依存関係解決では、プロジェクト側のマニフェストやロックファイルが重要です。CI だけ 3.11 にしても、依存関係ファイルが 3.9 固定なら問題が残ります。

dependabot.yml を確認する

Python 系の Dependabot 設定では、package-ecosystem: "pip" を使います。Poetry や Pipenv を使っている場合でも、GitHub Docs では pip の YAML 値を使用するよう案内されています。(GitHub Docs)

version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "weekly"

モノレポの場合は、Python プロジェクトがあるディレクトリごとに設定を分けます。

version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/services/api"
    schedule:
      interval: "weekly"

  - package-ecosystem: "pip"
    directory: "/jobs/batch"
    schedule:
      interval: "weekly"

移行直後は依存関係更新 PR が増えることがあります。PR の量を抑えたい場合は、更新頻度、グループ化、open-pull-requests-limit などを検討します。GitHub Docs では、Dependabot version updates を止める方法として dependabot.yml の削除のほか、特定のパッケージマネージャーを一時的に止めるために open-pull-requests-limit: 0 を使う方法も説明されています。(GitHub Docs)

プライベートレジストリと社内依存関係の確認

社内 PyPI、GitHub Packages、Artifactory、Nexus などのプライベートレジストリを使っている場合は、Python バージョン移行だけでは不十分です。Dependabot が依存関係を解決できる認証情報を持っているかを確認します。

GitHub Docs では、Dependabot のプライベートレジストリへのアクセスは Organization レベルまたは dependabot.yml で構成でき、組織レベルのレジストリではトークン、ユーザー名とパスワード、OIDC 認証がサポートされると説明されています。dependabot.yml では、トップレベルの registries と、各 updates ブロック内の registries を組み合わせて指定します。(GitHub Docs)

確認すべきポイントは次のとおりです。

確認項目よくある問題対応
Dependabot secretsトークン期限切れ、権限不足トークン更新、最小権限で再発行
レジストリ URL旧 URL やミラー先を参照現行 URL に修正
Python 3.11 以上の wheel社内パッケージが 3.9 用しかないパッケージ再ビルド
依存関係のソース制約PyPI と社内レジストリが混在registries とパッケージ制約を整理
同一 Organization 内のプライベート依存Dependabot にアクセス権がないOrganization 設定でアクセス許可

GitHub Docs では、Dependabot が更新を行うには対象の依存関係ファイルにアクセスできる必要があり、プライベートまたは内部の依存関係がある場合は追加のアクセス設定が必要になると説明されています。(GitHub Docs)

監査ログで確認すべきこと

Dependabot の移行対応では、「設定が正しいか」だけでなく、「いつ誰が変更したか」も確認しておくと後のトラブル対応が楽になります。特に複数チームが同じ Organization を管理している場合、誰かが一時的に Dependabot security updates を無効化したまま戻していないケースがあります。

監査ログでは次の観点を見ます。

監査観点確認内容
Dependabot 関連設定の変更有効化・無効化の履歴
Security 設定の変更Dependabot alerts、Dependency graph、security updates の状態
権限変更リポジトリ管理者、チーム、外部コラボレーターの変更
secrets 更新Dependabot secrets やレジストリ認証情報の更新タイミング
期間指定2026年6月前後から現在までの変更履歴

GitHub の audit log は actioncreated などの条件で検索でき、必要に応じて JSON または CSV でエクスポートできます。ただし、Organization の audit log には保持期間やエクスポート上限があるため、必要な期間に絞って確認するのが現実的です。(GitHub Docs)

Dependabot のエラー確認方法

移行後は、Dependabot が実際に動いているかを必ず確認します。GitHub Docs では、Dependabot の更新が失敗したり想定外の動作をしたりした場合、Dependency graph から Dependabot job logs を確認できると説明されています。(GitHub Docs)

確認手順は次の流れです。

手順操作見るべきポイント
1リポジトリを開く対象リポジトリが正しいか
2Insights を開くDependency graph へ移動
3Dependency graphDependabot を開く監視対象の ecosystem と directory を確認
4Recent update jobs を確認失敗しているジョブがないか
5ログを開くPython バージョン、依存関係解決、認証エラーを見る

Dependabot security updates の場合、Dependabot が脆弱性修正 PR を作れないときは、アラート側にエラーが表示されることがあります。GitHub Docs でも、Dependabot が PR を作成できない場合、Dependabot alert にエラーメッセージが表示されると説明されています。(GitHub Docs)

失敗しやすいポイント

Python 3.9 固定を一部だけ残してしまう

最も多い失敗は、CI だけを 3.11 に変更して、pyproject.tomlPipfileDockerfile.python-version のどれかに 3.9 が残るパターンです。Dependabot の問題は依存関係解決に関係するため、バージョン指定は横断的に確認する必要があります。

いきなり最新 Python に上げてアプリを壊す

Dependabot 対応をきっかけに Python 3.14 へ一気に上げる判断は、すべてのプロジェクトで正解とは限りません。ライブラリ、フレームワーク、社内パッケージ、Docker ベースイメージ、CI の互換性を確認してから進めるべきです。特に古い C 拡張を含むライブラリは、移行先バージョンでビルドに失敗することがあります。

Dependabot の権限不足を Python の問題と誤認する

Dependabot が PR を作らない原因は、Python 3.9 だけとは限りません。プライベートレジストリの認証情報が期限切れ、社内パッケージへのアクセス権がない、ロックファイルが壊れている、依存関係の制約が厳しすぎる、といった原因でも失敗します。ログとアラートを確認し、原因を切り分けます。

PR の増加を想定していない

Python バージョン制約を更新すると、Dependabot が保留されていた更新を一気に提案することがあります。レビュアーが足りないチームでは、PR が滞留してかえって運用が悪化します。重要リポジトリから順に移行し、必要に応じて更新頻度やグループ化を調整します。

社内周知で伝えるべき内容

開発チームへの周知では、単に「Python 3.9 が非推奨です」と伝えるだけでは不十分です。各チームが何を確認し、いつまでに、どの状態なら完了なのかを明確にします。

周知文は次のようにまとめると、開発者が行動しやすくなります。

件名: Dependabot の Python 3.9 サポート終了に伴うリポジトリ確認のお願い

GitHub Dependabot で Python 3.9 がサポート対象外になりました。
Python 3.9 前提のまま依存関係更新を行っているリポジトリでは、Dependabot が更新 PR を作成できない可能性があります。

各チームで以下を確認してください。

- .github/dependabot.yml に package-ecosystem: "pip" があるか
- pyproject.toml、Pipfile、Dockerfile、GitHub Actions、.python-version に Python 3.9 固定が残っていないか
- Dependabot の直近ジョブに失敗が出ていないか
- Dependabot alerts に未対応の脆弱性が残っていないか
- プライベートレジストリを使う場合、Dependabot secrets が有効か

対応方針:
- 可能なリポジトリは Python 3.11 以上で CI を通してください
- 影響が大きい場合は、管理者チームに移行予定日とブロッカーを共有してください

周知のポイントは、開発チームに「Dependabot の問題」と「アプリケーション実行環境の移行」を混同させないことです。まずは Dependabot が依存関係更新 PR を作れる状態を回復し、その後に本番環境の Python 移行を計画的に進めます。

管理者が次に取るべき行動

Deprecation of Python 3.9 for Dependabot への対応では、最初の 1 回で完璧に直すよりも、対象を漏れなく把握し、重要リポジトリから順に安全に移行することが重要です。

まず、Organization 全体で package-ecosystem: "pip" を含む dependabot.yml を検索し、Python 3.9 固定が残るリポジトリを抽出します。次に、本番影響や Dependabot alerts の有無で優先順位を付け、Python 3.11 以上で CI が通る状態を作ります。最後に、Dependabot の job logs と alerts を確認し、更新 PR が再び作成されることを確認します。

管理者の完了条件は、「Python 3.9 という文字列を消したこと」ではありません。Dependabot が対象リポジトリで依存関係を解決でき、必要な security updates と version updates の PR を作成できる状態に戻すことです。ここまで確認して初めて、GitHub の依存関係更新運用として安全な状態に近づきます。

この記事を書いた人

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

コメント

コメントする

目次