Dependabotのメジャーバージョンbumpがエコシステムの未対応で壊れた話 — ESLint 10とTypeScript 7の罠
はじめに
Dependabotが提案するメジャーバージョンアップ、自動マージしていませんか?
あるプロジェクトでDependabotがeslint 9 → 10のbumpを提案してきました。CIが通れば自動マージする設定にしていたのですが、案の定CIが落ちました。調べてみると、eslint本体ではなく下流のプラグインが未対応という、Dependabotではよくあるパターンに直面しました。
さらに同じタイミングでtypescript 6 → 7のbumpも来ており、こちらも同様の理由で壊れていました。
この記事では、調査から対処までの流れと、Dependabotでメジャーバンプを安全に管理する方法をまとめます。

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-nextはeslint-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にメジャーバンプを提案させないようにしました。
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が必要
調査のワークフロー
今回の調査から対処までの流れを整理します。同様の問題に遭遇した際の参考にしてください。

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をコメントで残す。解除忘れを防ぎ、チームメンバーが経緯を把握できるようにする



