Dependabotのメジャーバージョンbumpがエコシステムの未対応で壊れた話 — ESLint 10とTypeScript 7の罠

Dependabotのメジャーバージョンbumpがエコシステムの未対応で壊れた話 — ESLint 10とTypeScript 7の罠

Dependabotが提案したESLint 9→10、TypeScript 6→7のメジャーバンプでCIが壊れました。原因は下流プラグインやツールの未対応。調査からdependabot.ymlのignoreルールでの対処までをまとめます。
2026.07.21

はじめに

Dependabotが提案するメジャーバージョンアップ、自動マージしていませんか?

あるプロジェクトでDependabotがeslint 9 → 10のbumpを提案してきました。CIが通れば自動マージする設定にしていたのですが、案の定CIが落ちました。調べてみると、eslint本体ではなく下流のプラグインが未対応という、Dependabotではよくあるパターンに直面しました。

さらに同じタイミングでtypescript 6 → 7のbumpも来ており、こちらも同様の理由で壊れていました。

この記事では、調査から対処までの流れと、Dependabotでメジャーバンプを安全に管理する方法をまとめます。

dependabot-major-bump-ecosystem-lag-dependency-chain

ESLint 10で何が壊れたか

エラーの内容

CIのlintステップで以下のエラーが発生しました:

TypeError: contextOrFilename.getFilename is not a function

原因: ESLint 10のAPI破壊的変更

ESLint 10(2026年2月リリース)では、context.getFilename()context.getCwd()context.getSourceCode() などのメソッドが削除され、プロパティアクセサ(context.filename等)に置き換えられました。

この変更自体はESLint 9の段階で非推奨警告が出ていましたが、プラグイン側が実際に対応するかは別の話です。

eslint-plugin-reactが未対応

eslint-plugin-react@7.37.5(npmでの最新版)は、内部でcontext.getFilename()を呼んでいます。修正PRは存在しますが、2026年7月時点でまだマージ・リリースされていません。

項目 状態
eslint-plugin-react 最新版 7.37.5(1年以上前にリリース)
ESLint 10対応 Issue #3977 — Open
修正PR #3979 — 未マージ
eslint-config-next対応 vercel/next.js#91702 — Open

eslint-config-nexteslint-plugin-reactに依存しているため、上流のプラグインが対応しない限り、Next.jsプロジェクトではESLint 10を使えません。

TypeScript 7で何が壊れたか

ESLint 10の対処をした直後、今度はtypescript 6 → 7のDependabot PRでもCIが落ちていることに気づきました。

TypeScript 6はJavaScriptベースの最後のリリースであり、TypeScript 7はGoで書き直された新コンパイラです。バージョン番号は連続していますが、内部的にはまったく別物です。

エラー1: Next.jsビルド

It looks like you're trying to use TypeScript but do not have the required package(s) installed.

TypeScript 7がインストールされているにもかかわらず、Next.jsが検出できませんでした。

エラー2: ESLint

TypeError: Cannot read properties of undefined (reading 'Cjs')
    at @typescript-eslint/typescript-estree@8.63.0_typescript@7.0.2

typescript-eslintがTypeScript 7のAPIにアクセスしようとしてクラッシュしました。

原因: TypeScript 7にはプログラマティックAPIがない

TypeScript 7はGoで書き直された新しいコンパイラであり、従来のNode.js向けプログラマティックAPIを搭載していません。APIはTypeScript 7.1で提供予定とされています。

項目 状態
typescript-eslint 対応 Issue #12518 — "not planned"(TS 7.1待ち)
暫定策 @typescript/typescript6互換パッケージでESLint用にTS 6を並行利用
TS 7.1リリース見込み 未定

対処: dependabot.ymlのignoreルール

エコシステムが追いつくまで、Dependabotにメジャーバンプを提案させないようにしました。

dependabot.yml
updates:
  - package-ecosystem: "npm"
    directory: "/frontend"
    schedule:
      interval: "weekly"
    ignore:
      # eslint 10 breaks eslint-plugin-react (getFilename removed).
      # Unblock once eslint-config-next supports eslint 10.
      # Tracking: https://github.com/vercel/next.js/issues/91702
      - dependency-name: "eslint"
        update-types: ["version-update:semver-major"]
      # TS 7 has no programmatic API; typescript-eslint and Next.js don't support it.
      # Unblock once typescript-eslint ships TS 7 support (expected after TS 7.1).
      # Tracking: https://github.com/typescript-eslint/typescript-eslint/issues/12518
      - dependency-name: "typescript"
        update-types: ["version-update:semver-major"]

ポイント:

  • update-types: ["version-update:semver-major"] でメジャーバンプのみブロック。マイナー・パッチは引き続き提案される
  • コメントにTracking issueのURLを記載し、解除タイミングを明確にする
  • cooldown.semver-major-days では頻度を下げるだけで、提案自体は止められない。完全にブロックするにはignoreが必要

調査のワークフロー

今回の調査から対処までの流れを整理します。同様の問題に遭遇した際の参考にしてください。

dependabot-major-bump-ecosystem-lag-workflow

1. CIログでエラー箇所を特定

gh run view <run-id> --log-failed

エラーメッセージからどのパッケージが壊れているかを特定します。

2. 上流のissue/PRを確認

  • パッケージのGitHubリポジトリで対応状況を検索
  • peerDependenciesの対応範囲を確認

3. エコシステムの対応状況を判断

確認すべき質問:

  • 修正PRは存在するか?マージ済みか?
  • リリースされているか?
  • 依存チェーン全体が対応済みか?(例: eslint-config-next → eslint-plugin-react → eslint)

4. dependabot.ymlにignoreルールを追加

上流が未対応なら、Tracking issueへのリンク付きでignoreルールを設定します。

まとめ

  • メジャーバージョンのbumpは、対象パッケージだけでなくエコシステム全体の対応状況を確認する必要がある
  • ESLint 10もTypeScript 7も、本体のリリースからエコシステムが追いつくまで数ヶ月〜1年以上かかるのは珍しくない(ESLint 9のflat config移行も1年以上かかった)
  • Dependabotのignoreルールでupdate-types: ["version-update:semver-major"]を指定すれば、メジャーバンプだけ止められる
  • ignoreルールにはTracking issueのURLをコメントで残す。解除忘れを防ぎ、チームメンバーが経緯を把握できるようにする

この記事をシェアする

関連記事