# 依存関係を維持するためのベスト プラクティス

使用する依存関係を維持するためのガイダンスと推奨事項 (役立つ GitHubのセキュリティ製品など)。

## 依存関係を維持するためのベスト プラクティス

依存関係を最新の状態に保つことは、セキュリティで保護されたソフトウェア環境を維持するために不可欠です。 以下に、推奨事項をいくつか示します。

**セキュリティ重視の依存関係管理ツールを採用する**

* 依存関係の脆弱性をスキャンし、更新プログラムを自動的に提案するツールを使い、設定します。
* 継続的に監視と更新を行うために、必ずこれらのツールを CI/CD パイプラインに統合します。
* 破壊的変更を回避するために、セマンティック バージョニングに従うようにプロセスを設定します。

**定期的な脆弱性スキャンと監査を実行する**

* 定期的な依存関係の監査と依存関係のスキャンをスケジュールして、古い依存関係や脆弱な依存関係を特定します。

**セキュリティ パッチ管理を自動化する**

* セキュリティ パッチを自動的に適用するように依存関係管理ツールを構成します。
* 不可欠なセキュリティ更新プログラムに対しては自動 pull request を設定して、迅速に確認してマージできるようにします。

**依存関係の使用に関するポリシーを適用する**

* 依存関係のセキュリティで保護されたバージョンの使用を強制するポリシーを実装します。
* Pull request によって脆弱性が生じた場合、または脆弱な依存関係の更新に失敗した場合は、pull request のマージを禁止できるツールを使います。

**セキュリティ テストを CI/CD に統合する**

* セキュリティ テスト ツールを CI/CD パイプラインに組み込みます。
* 依存関係の更新プログラムは、必ずセキュリティ コンプライアンスについて自動的にテストされるようにします。

**ロック ファイルと依存関係のピン留めを使う**

* ロック ファイル (`package-lock.json`、`yarn.lock`、`Pipfile.lock` など) を使って、依存関係を既知のセキュリティで保護されたバージョンにピン留めします。
* 意図しないセキュリティ上の issue が発生することなく依存関係が最新の状態に保たれるように、これらのロック ファイルを定期的に更新し、確認します。

**セキュリティ アドバイザリを監視する**

* 使う言語とフレームワークのセキュリティ アドバイザリをサブスクライブします。
* アドバイザリの開発ワークフローへの統合を自動化して、新しい脆弱性に関する最新情報を常に把握します。
* 依存関係管理ツールに用意されているダッシュボードを監視します。
* 重要な更新プログラム、特にセキュリティ パッチに注意し、優先順位を付けます。

**バージョン コントロールと変更管理**

* バージョン コントロールで依存関係の変更を追跡します (たとえば、自動化された pull request を使います)。

* 定期的にコード レビューを実施して、更新プログラムによって新しい脆弱性が生じないようにします。

**トレーニングと認識**

* 依存関係を安全かつ最新の状態に保つことの重要性について、開発チームと運用チームを教育します。
* 依存関係管理ツールとセキュリティ ツールを効果的に使う方法に関するトレーニングを提供します。

**脆弱性に対する対応プラン**

* 依存関係で脆弱性が特定された場合の明確なインシデント対応プランを立てます。
* セキュリティ上の issue に迅速に対処し、修復する方法をチームが確実に理解できるようにします。

これらのプラクティスに従うことで、古くて脆弱な依存関係によって生じるリスクを大幅に軽減し、より安全な環境を維持することができます。

## GitHubがどのように役立つか

GitHub には、依存関係の維持に役立つセキュリティ機能が用意されています。

**依存関係グラフ**: プロジェクトの依存関係を追跡し、脆弱性を識別します。 「[依存関係グラフ](/ja/code-security/concepts/supply-chain-security/dependency-graph)」を参照してください。

**依存関係の確認**: マージされる前に、プル要求の安全でない依存関係をキャッチします。 さらに、 依存関係レビュー アクション はチェックに失敗する可能性があり、ブランチ保護規則で必要な場合は、脆弱性を導入するプル要求がマージされないようにします。 「[依存関係の確認](/ja/code-security/concepts/supply-chain-security/dependency-review)」を参照してください。

\*\*
Dependabot
\*\*: 脆弱性を自動的にスキャンし、アラートを作成し、プル要求を開いて脆弱または古い依存関係を更新します。 複数の更新プログラムを 1 つのプル要求にグループ化して、レビューを効率化できます。 「[Dependabot アラート](/ja/code-security/concepts/supply-chain-security/dependabot-alerts)」を参照してください。

\*\*
GitHub Advisory Database
\*\*: Dependabotの脆弱性検出を強化するセキュリティ アドバイザリを提供します。
[「AUTOTITLE」を](/ja/code-security/concepts/vulnerability-reporting-and-management/github-advisory-database)参照してください。

**プライベート脆弱性レポート**: メンテナーは、公開前に非公開で脆弱性レポートを受信、議論、修正できます。

**セキュリティの概要**: リスクの高いリポジトリ、アラートの傾向、機能の有効化の状態に関するダッシュボードを使用して、組織のセキュリティ体制を示します。 「[セキュリティの概要](/ja/code-security/concepts/security-at-scale/security-overview)」を参照してください。

エンド ツー エンドのサプライ チェーンガイダンスについては、 [エンドツーエンドのサプライ チェーンのセキュリティ保護](/ja/code-security/tutorials/implement-supply-chain-best-practices/end-to-end-supply-chain-overview) を参照してください。