依存関係グラフについて
依存関係グラフは、リポジトリに格納されているマニフェストおよびロック ファイル、および 依存関係送信 API (ベータ) を使用してリポジトリに送信された依存関係の概要です。 それぞれのリポジトリについて、以下が表示されます:の依存関係、すなわちリポジトリが依存するエコシステムとパッケージ。
GitHub Enterprise Server を使っても、依存関係のライセンス情報は取得されず、依存関係に関する情報、リポジトリに依存するリポジトリとパッケージは計算されません。
GitHub Enterprise Server に、デフォルト ブランチでサポートされているマニフェストもしくはロック ファイルを変更もしくは追加するコミットをプッシュすると、依存関係グラフは自動的に更新されます。サポートされているエコシステムとマニフェスト ファイルに関する情報については以下の「サポートされているパッケージエコシステム」を参照してください。
さらに、依存関係送信 API (ベータ版) を使用して、マニフェストやロック ファイルの分析で依存関係グラフがサポートされていないエコシステムであっても、任意のパッケージ マネージャーやエコシステムから依存関係を送信することができます。 依存関係グラフには、送信された依存関係がエコシステム別にグループ化されて表示されますが、マニフェストまたはロック ファイルから解析された依存関係とは別に表示されます。 依存関係送信 API の詳細については、「Dependency Submission API を使用する」を参照してください。
デフォルトブランチをターゲットとする、依存関係の変更を含むPull Requestを作成すると、GitHubは依存関係グラフを使ってそのPull Requestに依存関係のレビューを追加します。 それらは、依存関係が脆弱性を含んでいるか、もしそうならその脆弱性が修復されているバージョンを示しています。 詳しくは、「依存関係の確認について」を参照してください。
少なくともリポジトリへの読み取りアクセス権がある場合は、GitHub UI または GitHub REST API を使って、リポジトリの依存関係グラフを SPDX 互換のソフトウェア部品表 (SBOM) としてエクスポートできます。 詳しくは、「リポジトリのソフトウェア部品表のエクスポート」を参照してください。
依存関係グラフの利用
Enterprise 所有者は、Enterprise の 依存関係グラフとDependabot alertsを構成できます。 詳細については、「企業の依存関係グラフの有効化」と「エンタープライズ向けの Dependabot の有効化」を参照してください。
依存関係グラフの構成について詳しくは、「依存関係グラフを設定する」をご覧ください。
含まれる依存関係
依存関係グラフには、サポートされているエコシステムのマニフェストファイルとロックファイル またはそれに相当するファイルに記載されている、リポジトリのすべての依存関係と、依存関係送信 API (ベータ版) を使用して送信された すべての依存関係が含まれます。 これには、次のものが含まれます。
- マニフェストまたはロック ファイルで明示的に定義されている、または 依存関係送信 API (ベータ) を使って送信された直接依存関係
- 直接依存関係の間接依存関係。推移的な依存関係、または下位の依存関係とも言う。
依存関係グラフでは、間接依存関係が識別されます。ロックファイルから間接的な依存関係を識別します。 エコシステムにロック ファイルがない場合は、多くのエコシステムの推移的な依存関係を解決する、事前に作成されたアクションを使用することができます。 詳しくは、「Dependency Submission API を使用する」を参照してください。
GitHub Enterprise Server を使用して環境内の依存関係を理解する方法の詳細については、「サプライ チェーンのセキュリティについて」を参照してください。
依存関係グラフの使用
依存関係グラフを使用する目的は、次のとおりです。
- コードが依存しているリポジトリを調べること。 詳しくは、「リポジトリの依存関係を調べる」を参照してください。
- リポジトリの脆弱な依存関係を表示・更新すること。 詳しくは、「Dependabot アラートについて」を参照してください。
- Pull Request中の脆弱性がある依存関係に関する情報を見ること。 詳しくは、「プルリクエスト内の依存関係の変更をレビューする」を参照してください。
サポートされているパッケージエコシステム
推奨されるフォーマットでは、直接および間接の依存関係すべてに使用されるバージョンを明示的に定義しています。 これらの形式を使う場合、依存関係グラフはより正確になります。 これは、現在のビルドのセットアップも反映し、依存関係グラフが直接および間接の依存関係の両方で脆弱性を報告できるようにしてくれます。
パッケージ マネージャー | 言語 | 推奨される形式 | サポートされているすべての形式 |
---|---|---|---|
Cargo | Rust | Cargo.lock | Cargo.toml 、Cargo.lock |
Composer | PHP | composer.lock | composer.json 、composer.lock |
NuGet | .NET 言語 (C#、F#、VB)、C++ | .csproj 、.vbproj 、.nuspec 、.vcxproj 、.fsproj | .csproj 、.vbproj 、.nuspec 、.vcxproj 、.fsproj 、packages.config |
GitHub Actionsのワークフロー | YAML | .yml 、.yaml | .yml 、.yaml |
Go モジュール | Go | go.mod | go.mod |
Maven | Java、Scala | pom.xml | pom.xml |
npm | JavaScript | package-lock.json | package-lock.json 、package.json |
pip | Python | requirements.txt 、pipfile.lock | requirements.txt 、pipfile 、pipfile.lock 、setup.py |
pub | Dart | pubspec.lock | pubspec.yaml 、pubspec.lock |
Python Poetry | Python | poetry.lock | poetry.lock 、pyproject.toml |
RubyGems | Ruby | Gemfile.lock | Gemfile.lock 、Gemfile 、*.gemspec |
Yarn | JavaScript | yarn.lock | package.json 、yarn.lock |
注:
-
setup.py
ファイル内に Python の依存関係を列挙した場合、ユーザーはプロジェクト内のすべての依存関係を解析し、列挙することができない場合があります。 -
マニフェストとして認識するには、GitHub Actions ワークフローをリポジトリの
.github/workflows/
ディレクトリに配置する必要があります。 構文jobs[*].steps[*].uses
またはjobs.<job_id>.uses
を使用して参照されるアクションまたはワークフローは、依存関係として解析されます。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。 -
Dependabot は、セマンティック バージョン管理を使用する脆弱な GitHub Actions に対してのみ、Dependabot alerts を作成します。 SHA バージョン管理を使用する脆弱なアクションのアラートは受け取れません。 SHA バージョン管理で GitHub Actions を使用する場合は、リポジトリまたは組織に対して Dependabot version updates を有効にして、使用するアクションを最新バージョンに更新しておくことをおすすめします。詳細については、「Dependabot アラートについて」と「GitHub Dependabot のバージョンアップデートについて」をご覧ください。
依存関係送信 API (ベータ版) を使用すると、エコシステムが上記のサポートされているエコシステム リストにない場合でも、依存関係を任意のパッケージ マネージャーまたはエコシステムから依存関係グラフに追加できます。 依存関係グラフには、送信された依存関係がエコシステム別にグループ化されて表示されますが、マニフェストまたはロック ファイルから解析された依存関係とは分けられます。
GitHub Advisory Database のサポートされているエコシステムのいずれかからの依存関係に対する Dependabot alerts のみを受け取ります。 依存関係送信 API の詳細については、「Dependency Submission API を使用する」を参照してください。
参考資料
- Wikipedia の「依存関係グラフ」
- リポジトリの依存関係を調べる
- 「Dependabot アラートの表示と更新」
- 脆弱性のある依存関係の検出のトラブルシューティング