Dependabot PR処理のためのSOP(Standard Operating Procedure)

2025-02-03 hit count image

Monorepo環境でDependabotが生成したPRを効率的に処理するためのリスク分類基準と処理方法について紹介します。

github_actions

概要

Monorepo環境で開発していると、多くの依存関係ライブラリを管理する必要があります。GitHubのDependabotを使用すると、依存関係ライブラリの更新を自動的に検知してPRを生成できます。

しかし、Dependabotが生成するPRが多くなると、どのPRを優先的に処理すべきか、どのテストを実行すべきか判断が難しくなります。

このブログポストでは、Dependabotが生成したPRを効率的に処理するための標準運用手続(SOP: Standard Operating Procedure)について紹介します。

PR分類

基本分類基準

Dependabot PRを処理するためには、まず該当ライブラリのリスクレベルを把握する必要があります。次の表を参考にしてライブラリのリスクレベルを分類できます。

基準高リスク(High Risk)中リスク(Medium Risk)低リスク(Low Risk)
プロダクション(ランタイム)O (ランタイム)△ (一部ランタイム影響)X (devDependency)
影響範囲全てのアプリ特定機能/アプリ開発環境のみ
問題検知手動テスト必要CIで一部検知可能CIで全て検知可能
ユーザ影響直接間接なし

バージョン別リスク調整

ライブラリのカテゴリとアップデートされるバージョンのタイプによってリスクを調整できます。

ライブラリのカテゴリMajorMinorPatch
高リスク(react等)🔴 高🟡 中🟡 中
中リスク ランタイム(axios等)🟡 中🟡 中🟢 低
中リスク CI検知可能(vite等)🟡 中🟢 低🟢 低
低リスク ランタイム(lodash等)🟡 中🟢 低🟢 低
低リスク 開発ツール(@types等)🟢 低🟢 低🟢 低

分類フローチャート

基本分類基準とバージョン別リスク調整を使用して、次のようなフローチャートを作成できます。このフローチャートを使用すると、新しいライブラリを追加したりDependabot PRをレビューする時、簡単に分類できます。

新しいライブラリを追加


┌───────────────────────────────────┐
│ 1. プロダクション環境(ランタイム)で使用? │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 低リスク(開発ツール)


┌───────────────────────────────────┐
│ 2. 全てのアプリに影響?           │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 影響範囲を確認
    │            │
    │            ▼
    │       特定アプリのみ → 中リスク(ランタイム)
    │                        または
    │                        低リスク(ランタイム)

┌───────────────────────────────────┐
│ 3. CIで問題を検知可能?           │
└───────────────────────────────────┘

    ┌───┴───┐
    │       │
   Yes      No → 高リスク


中リスク(CI検知可能)

高リスク(High Risk)

高リスクライブラリは次のような特徴を持ちます。

  • プロダクション(ランタイム)に直接影響
  • 全てのアプリに影響
  • 手動テスト必要

対象ライブラリ

ライブラリバージョン説明影響
reactMajorUIフレームワークコア全てのアプリに影響
react-domMajorReact DOMレンダラー全てのアプリに影響
@reduxjs/toolkitMajor状態管理コアAPI変更時、全てのアプリに影響
react-reduxMajorReduxバインディング全てのアプリで状態管理影響
react-router-domMajorルーティングシステム全てのアプリでナビゲーション影響

処理方法

  1. CI通過確認(全テスト実行)
  2. CHANGELOG、Breaking Changes確認
  3. マイグレーションガイドを確認(該当する場合)
  4. 全てのアプリテストとチームメンバーレビュー

中リスク(Medium Risk)

中リスクライブラリは次のような特徴を持ちます。

  • プロダクション(ランタイム)部分的影響
  • ビルド(CI)で検知可能

対象ライブラリ

高リスクライブラリのMinor, Patchアップデート

ライブラリバージョン説明影響
reactMinor, PatchUIフレームワークコア全てのアプリに影響
react-domMinor, PatchReact DOMレンダラー全てのアプリに影響
@reduxjs/toolkitMinor, Patch状態管理コアAPI変更時、全てのアプリに影響
react-reduxMinor, PatchReduxバインディング全てのアプリで状態管理影響
react-router-domMinor, Patchルーティングシステム全てのアプリでナビゲーション影響

CI検知可能(ビルド/テスト/リント)のMajorアップデート

ライブラリバージョン説明影響
viteMajorビルドツール全アプリのビルド
typescriptMajor型システム全アプリのビルド
@vitejs/plugin-reactMajorVite Reactプラグイン全アプリのビルド
turboMajorモノレポビルドツールCI/CD
jestMajorテストフレームワーク全アプリのテスト
vitestMajorテストフレームワーク全アプリのテスト
@playwright/testMajorE2EテストE2Eテスト
eslintMajorリンターコード品質チェック
@typescript-eslint/*MajorTypeScript ESLintコード品質チェック
storybookMajorコンポーネントドキュメントcomponentsパッケージ
@storybook/*MajorStorybook関連componentsパッケージ

ランタイム影響のMajor, Minorアップデート

ライブラリバージョン説明影響
axiosMajor, MinorHTTPクライアント全アプリのAPI呼び出し
i18nextMajor, Minor多言語対応全アプリの多言語対応部分
react-i18nextMajor, MinorReact i18nバインディング全アプリの多言語対応部分
konvaMajor, MinorCanvasライブラリ特定アプリのみ
react-konvaMajor, MinorKonva Reactバインディング特定アプリのみ
rechartsMajor, Minorチャートライブラリ特定アプリのみ

低リスクランタイムユーティリティのMajorアップデート

ライブラリバージョン説明影響
lodashMajorユーティリティ本番で使用
js-cookieMajorCookieユーティリティ本番で使用
date-fnsMajor日付ユーティリティ本番で使用
clsxMajorクラス名ユーティリティ本番で使用
react-ga4MajorGoogle Analytics一部アプリのみ
qrcode.reactMajorQRコード生成特定アプリのみ
react-hotkeys-hookMajorショートカット特定アプリのみ
papaparseMajorCSVパースcomponentsのみ

処理方法

  1. CI通過確認(全テスト実行 / 特定アプリのテスト実行)
  2. CHANGELOG確認
  3. 影響されるアプリテストとチームメンバーレビュー

yarn why <package> で影響されるアプリを確認できます。

低リスク(Low Risk)

低リスクライブラリは次のような特徴を持ちます。

  • 開発ツール
  • CIで直接検知
  • ユーザへ影響なし

対象ライブラリ

CI検知可能(ビルド/テスト/リント)のMinor, Patchアップデート

ライブラリバージョン説明影響
viteMinor, Patchビルドツール全アプリのビルド
typescriptMinor, Patch型システム全アプリのビルド
@vitejs/plugin-reactMinor, PatchVite Reactプラグイン全アプリのビルド
turboMinor, PatchモノレポビルドツールCI/CD
jestMinor, Patchテストフレームワーク全アプリのテスト
vitestMinor, Patchテストフレームワーク全アプリのテスト
@playwright/testMinor, PatchE2EテストE2Eテスト
eslintMinor, Patchリンターコード品質チェック
@typescript-eslint/*Minor, PatchTypeScript ESLintコード品質チェック
storybookMinor, Patchコンポーネントドキュメントcomponentsパッケージ
@storybook/*Minor, PatchStorybook関連componentsパッケージ

ランタイム影響のPatchアップデート

ライブラリバージョン説明影響
axiosPatchHTTPクライアント全アプリのAPI呼び出し
i18nextPatch多言語対応全アプリの多言語対応部分
react-i18nextPatchReact i18nバインディング全アプリの多言語対応部分
konvaPatchCanvasライブラリ特定アプリのみ
react-konvaPatchKonva Reactバインディング特定アプリのみ
rechartsPatchチャートライブラリ特定アプリのみ

純粋な開発ツール(全バージョン)

ライブラリバージョン説明影響
@types/*Major, Minor, Patch型定義開発環境のみ
prettierMajor, Minor, Patchコードフォーマッター開発環境のみ
stylelintMajor, Minor, Patchスタイルリンター開発環境のみ
eslint-config-*Major, Minor, PatchESLint設定開発環境のみ
eslint-plugin-*Major, Minor, PatchESLintプラグイン開発環境のみ
@testing-library/*Major, Minor, Patchテストユーティリティテスト環境のみ
ts-jestMajor, Minor, PatchJest TypeScriptサポートテスト環境のみ
@vitest/uiMajor, Minor, PatchVitest UIテスト環境のみ
sassMajor, Minor, PatchSCSSコンパイラビルド環境のみ
huskyMajor, Minor, PatchGitフック開発環境のみ
lint-stagedMajor, Minor, Patchステージファイルリント開発環境のみ
remark-*Major, Minor, PatchMarkdownリント開発環境のみ
cspellMajor, Minor, Patchスペルチェック開発環境のみ
chromaticMajor, Minor, Patchビジュアルテストcomponentsのみ

低リスクランタイムユーティリティのMinor, Patchアップデート

ライブラリバージョン説明影響
lodashMinor, Patchユーティリティ本番で使用
js-cookieMinor, PatchCookieユーティリティ本番で使用
date-fnsMinor, Patch日付ユーティリティ本番で使用
clsxMinor, Patchクラス名ユーティリティ本番で使用
react-ga4Minor, PatchGoogle Analytics一部アプリのみ
qrcode.reactMinor, PatchQRコード生成特定アプリのみ
react-hotkeys-hookMinor, Patchショートカット特定アプリのみ
papaparseMinor, PatchCSVパースcomponentsのみ

処理方法

  1. CI通過確認
  2. 自動アサインされたメンバーがレビュー

処理スケジュール

このように分類したライブラリのバージョンアップデートのPRを効率的に処理するために、次のような週間スケジュールを作成できます。

曜日作業
月曜日Dependabot PR確認と担当者決め
火曜日〜水曜日低リスク/中リスクPRマージ
木曜日〜金曜日高リスクPR検討やテスト

この部分はチームの状況に合わせて調整できます。

優先順位ガイドライン

基本的に全てのPRを早く処理するのが良いですが、リソースが不足している場合は優先順位を決める必要があります。例えば、次のようなガイドラインを使用して優先順位を決めることができます。

  • Patch: 5個以上溜まったら処理(セキュリティ脆弱性は即時処理)
  • Minor: 2個以上溜まったら処理(セキュリティ脆弱性は即時処理)
  • Major: チーム論議後処理

完了

これでDependabot PRを効率的に処理するためのリスク分類基準について紹介しました。

次のポストでは、この分類基準をもとにDependabot設定とGitHub Actionsを使用した自動化方法について紹介します。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。



SHARE
Twitter Facebook RSS