目次
概要
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で全て検知可能 |
| ユーザ影響 | 直接 | 間接 | なし |
バージョン別リスク調整
ライブラリのカテゴリとアップデートされるバージョンのタイプによってリスクを調整できます。
| ライブラリのカテゴリ | Major | Minor | Patch |
|---|---|---|---|
| 高リスク(react等) | 🔴 高 | 🟡 中 | 🟡 中 |
| 中リスク ランタイム(axios等) | 🟡 中 | 🟡 中 | 🟢 低 |
| 中リスク CI検知可能(vite等) | 🟡 中 | 🟢 低 | 🟢 低 |
| 低リスク ランタイム(lodash等) | 🟡 中 | 🟢 低 | 🟢 低 |
| 低リスク 開発ツール(@types等) | 🟢 低 | 🟢 低 | 🟢 低 |
分類フローチャート
基本分類基準とバージョン別リスク調整を使用して、次のようなフローチャートを作成できます。このフローチャートを使用すると、新しいライブラリを追加したりDependabot PRをレビューする時、簡単に分類できます。
新しいライブラリを追加
│
▼
┌───────────────────────────────────┐
│ 1. プロダクション環境(ランタイム)で使用? │
└───────────────────────────────────┘
│
┌───┴───┐
│ │
Yes No → 低リスク(開発ツール)
│
▼
┌───────────────────────────────────┐
│ 2. 全てのアプリに影響? │
└───────────────────────────────────┘
│
┌───┴───┐
│ │
Yes No → 影響範囲を確認
│ │
│ ▼
│ 特定アプリのみ → 中リスク(ランタイム)
│ または
│ 低リスク(ランタイム)
▼
┌───────────────────────────────────┐
│ 3. CIで問題を検知可能? │
└───────────────────────────────────┘
│
┌───┴───┐
│ │
Yes No → 高リスク
│
▼
中リスク(CI検知可能)
高リスク(High Risk)
高リスクライブラリは次のような特徴を持ちます。
- プロダクション(ランタイム)に直接影響
- 全てのアプリに影響
- 手動テスト必要
対象ライブラリ
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| react | Major | UIフレームワークコア | 全てのアプリに影響 |
| react-dom | Major | React DOMレンダラー | 全てのアプリに影響 |
| @reduxjs/toolkit | Major | 状態管理コア | API変更時、全てのアプリに影響 |
| react-redux | Major | Reduxバインディング | 全てのアプリで状態管理影響 |
| react-router-dom | Major | ルーティングシステム | 全てのアプリでナビゲーション影響 |
処理方法
- CI通過確認(全テスト実行)
- CHANGELOG、Breaking Changes確認
- マイグレーションガイドを確認(該当する場合)
- 全てのアプリテストとチームメンバーレビュー
中リスク(Medium Risk)
中リスクライブラリは次のような特徴を持ちます。
- プロダクション(ランタイム)部分的影響
- ビルド(CI)で検知可能
対象ライブラリ
高リスクライブラリのMinor, Patchアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| react | Minor, Patch | UIフレームワークコア | 全てのアプリに影響 |
| react-dom | Minor, Patch | React DOMレンダラー | 全てのアプリに影響 |
| @reduxjs/toolkit | Minor, Patch | 状態管理コア | API変更時、全てのアプリに影響 |
| react-redux | Minor, Patch | Reduxバインディング | 全てのアプリで状態管理影響 |
| react-router-dom | Minor, Patch | ルーティングシステム | 全てのアプリでナビゲーション影響 |
CI検知可能(ビルド/テスト/リント)のMajorアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| vite | Major | ビルドツール | 全アプリのビルド |
| typescript | Major | 型システム | 全アプリのビルド |
| @vitejs/plugin-react | Major | Vite Reactプラグイン | 全アプリのビルド |
| turbo | Major | モノレポビルドツール | CI/CD |
| jest | Major | テストフレームワーク | 全アプリのテスト |
| vitest | Major | テストフレームワーク | 全アプリのテスト |
| @playwright/test | Major | E2Eテスト | E2Eテスト |
| eslint | Major | リンター | コード品質チェック |
| @typescript-eslint/* | Major | TypeScript ESLint | コード品質チェック |
| storybook | Major | コンポーネントドキュメント | componentsパッケージ |
| @storybook/* | Major | Storybook関連 | componentsパッケージ |
ランタイム影響のMajor, Minorアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| axios | Major, Minor | HTTPクライアント | 全アプリのAPI呼び出し |
| i18next | Major, Minor | 多言語対応 | 全アプリの多言語対応部分 |
| react-i18next | Major, Minor | React i18nバインディング | 全アプリの多言語対応部分 |
| konva | Major, Minor | Canvasライブラリ | 特定アプリのみ |
| react-konva | Major, Minor | Konva Reactバインディング | 特定アプリのみ |
| recharts | Major, Minor | チャートライブラリ | 特定アプリのみ |
低リスクランタイムユーティリティのMajorアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| lodash | Major | ユーティリティ | 本番で使用 |
| js-cookie | Major | Cookieユーティリティ | 本番で使用 |
| date-fns | Major | 日付ユーティリティ | 本番で使用 |
| clsx | Major | クラス名ユーティリティ | 本番で使用 |
| react-ga4 | Major | Google Analytics | 一部アプリのみ |
| qrcode.react | Major | QRコード生成 | 特定アプリのみ |
| react-hotkeys-hook | Major | ショートカット | 特定アプリのみ |
| papaparse | Major | CSVパース | componentsのみ |
処理方法
- CI通過確認(全テスト実行 / 特定アプリのテスト実行)
- CHANGELOG確認
- 影響されるアプリテストとチームメンバーレビュー
yarn why <package> で影響されるアプリを確認できます。
低リスク(Low Risk)
低リスクライブラリは次のような特徴を持ちます。
- 開発ツール
- CIで直接検知
- ユーザへ影響なし
対象ライブラリ
CI検知可能(ビルド/テスト/リント)のMinor, Patchアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| vite | Minor, Patch | ビルドツール | 全アプリのビルド |
| typescript | Minor, Patch | 型システム | 全アプリのビルド |
| @vitejs/plugin-react | Minor, Patch | Vite Reactプラグイン | 全アプリのビルド |
| turbo | Minor, Patch | モノレポビルドツール | CI/CD |
| jest | Minor, Patch | テストフレームワーク | 全アプリのテスト |
| vitest | Minor, Patch | テストフレームワーク | 全アプリのテスト |
| @playwright/test | Minor, Patch | E2Eテスト | E2Eテスト |
| eslint | Minor, Patch | リンター | コード品質チェック |
| @typescript-eslint/* | Minor, Patch | TypeScript ESLint | コード品質チェック |
| storybook | Minor, Patch | コンポーネントドキュメント | componentsパッケージ |
| @storybook/* | Minor, Patch | Storybook関連 | componentsパッケージ |
ランタイム影響のPatchアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| axios | Patch | HTTPクライアント | 全アプリのAPI呼び出し |
| i18next | Patch | 多言語対応 | 全アプリの多言語対応部分 |
| react-i18next | Patch | React i18nバインディング | 全アプリの多言語対応部分 |
| konva | Patch | Canvasライブラリ | 特定アプリのみ |
| react-konva | Patch | Konva Reactバインディング | 特定アプリのみ |
| recharts | Patch | チャートライブラリ | 特定アプリのみ |
純粋な開発ツール(全バージョン)
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| @types/* | Major, Minor, Patch | 型定義 | 開発環境のみ |
| prettier | Major, Minor, Patch | コードフォーマッター | 開発環境のみ |
| stylelint | Major, Minor, Patch | スタイルリンター | 開発環境のみ |
| eslint-config-* | Major, Minor, Patch | ESLint設定 | 開発環境のみ |
| eslint-plugin-* | Major, Minor, Patch | ESLintプラグイン | 開発環境のみ |
| @testing-library/* | Major, Minor, Patch | テストユーティリティ | テスト環境のみ |
| ts-jest | Major, Minor, Patch | Jest TypeScriptサポート | テスト環境のみ |
| @vitest/ui | Major, Minor, Patch | Vitest UI | テスト環境のみ |
| sass | Major, Minor, Patch | SCSSコンパイラ | ビルド環境のみ |
| husky | Major, Minor, Patch | Gitフック | 開発環境のみ |
| lint-staged | Major, Minor, Patch | ステージファイルリント | 開発環境のみ |
| remark-* | Major, Minor, Patch | Markdownリント | 開発環境のみ |
| cspell | Major, Minor, Patch | スペルチェック | 開発環境のみ |
| chromatic | Major, Minor, Patch | ビジュアルテスト | componentsのみ |
低リスクランタイムユーティリティのMinor, Patchアップデート
| ライブラリ | バージョン | 説明 | 影響 |
|---|---|---|---|
| lodash | Minor, Patch | ユーティリティ | 本番で使用 |
| js-cookie | Minor, Patch | Cookieユーティリティ | 本番で使用 |
| date-fns | Minor, Patch | 日付ユーティリティ | 本番で使用 |
| clsx | Minor, Patch | クラス名ユーティリティ | 本番で使用 |
| react-ga4 | Minor, Patch | Google Analytics | 一部アプリのみ |
| qrcode.react | Minor, Patch | QRコード生成 | 特定アプリのみ |
| react-hotkeys-hook | Minor, Patch | ショートカット | 特定アプリのみ |
| papaparse | Minor, Patch | CSVパース | componentsのみ |
処理方法
- CI通過確認
- 自動アサインされたメンバーがレビュー
処理スケジュール
このように分類したライブラリのバージョンアップデートのPRを効率的に処理するために、次のような週間スケジュールを作成できます。
| 曜日 | 作業 |
|---|---|
| 月曜日 | Dependabot PR確認と担当者決め |
| 火曜日〜水曜日 | 低リスク/中リスクPRマージ |
| 木曜日〜金曜日 | 高リスクPR検討やテスト |
この部分はチームの状況に合わせて調整できます。
優先順位ガイドライン
基本的に全てのPRを早く処理するのが良いですが、リソースが不足している場合は優先順位を決める必要があります。例えば、次のようなガイドラインを使用して優先順位を決めることができます。
- Patch: 5個以上溜まったら処理(セキュリティ脆弱性は即時処理)
- Minor: 2個以上溜まったら処理(セキュリティ脆弱性は即時処理)
- Major: チーム論議後処理
完了
これでDependabot PRを効率的に処理するためのリスク分類基準について紹介しました。
次のポストでは、この分類基準をもとにDependabot設定とGitHub Actionsを使用した自動化方法について紹介します。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Dekuが開発したアプリを使ってみてください。Dekuが開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。