依存関係グラフについて
依存関係グラフは、リポジトリに格納されているマニフェストおよびロック ファイルと、Dependency submission API (ベータ) を使用してリポジトリに送信された依存関係の概要です。 それぞれのリポジトリについて、以下が表示されます:
- リポジトリが依存している依存関係、エコシステム、パッケージ
- リポジトリに依存する対象、リポジトリ、パッケージ
GitHub に、デフォルト ブランチでサポートされているマニフェストもしくはロック ファイルを変更もしくは追加するコミットをプッシュすると、依存関係グラフは自動的に更新されます。加えて、誰かが依存関係のいずれかのリポジトリに変更をプッシュすると、グラフは更新されます。サポートされているエコシステムとマニフェスト ファイルに関する情報については以下の「サポートされているパッケージエコシステム」を参照してください。
さらに、依存関係送信 API (ベータ) を使うと、マニフェストやロック ファイルの分析で依存関係グラフがサポートされていないエコシステムであっても、任意のパッケージ マネージャーやエコシステムから依存関係を送信することができます。 依存関係グラフには、送信された依存関係がエコシステム別にグループ化されて表示されますが、マニフェストまたはロック ファイルから解析された依存関係とは別に表示されます。 依存関係送信 API について詳しくは、「依存関係送信 API の使用」を参照してください。
デフォルトブランチをターゲットとする、依存関係の変更を含むPull Requestを作成すると、GitHubは依存関係グラフを使ってそのPull Requestに依存関係のレビューを追加します。 それらは、依存関係が脆弱性を含んでいるか、もしそうならその脆弱性が修復されているバージョンを示しています。 詳しくは、「依存関係の確認について」を参照してください。
依存関係グラフの利用
依存関係グラフは、すべてのパブリック リポジトリに対して自動的に生成されます。 フォークとプライベート リポジトリに対して、それを有効にすることを選べます。 詳しくは、「About the dependency graph」を参照してください。
リポジトリ管理者は、プライベート リポジトリの依存関係グラフを有効または無効にすることができます。 詳しくは、「依存関係グラフを設定する」を参照してください。
含まれる依存関係
依存関係グラフには、マニフェストとロック ファイルで詳しく説明されているリポジトリのすべての依存関係、またはサポートされているエコシステム に関する同等の依存関係と、Dependency Submission API (beta) を使用して送信されたすべての依存関係が含まれます。 これには次のものが含まれます
- マニフェストまたはロック ファイルに明示的に定義されている、または依存関係送信 API (ベータ) を使って送信された直接依存関係
- 直接依存関係の間接依存関係。推移的な依存関係、または下位の依存関係とも言う。
依存関係グラフでは、ロック ファイルから明示的に、または直接的な依存対象の依存関係をチェックして、間接的な依存関係を識別します。 最も信頼性の高いグラフを得るには、ロックファイル (または同等のもの) を使用してください。直接および間接の依存関係のうち現在どのバージョンを使用しているかが正確に定義されているからです。 ロックファイルを使用する場合、リポジトリのすべてのコントリビューターが同じバージョンを使用していることも確認してください。そのほうが、コードのテストとデバッグが容易になります。
GitHub を使用して環境内の依存関係を理解する方法の詳細については、「サプライ チェーンのセキュリティについて」を参照してください。
含まれる依存物
パブリックリポジトリでは、そのリポジトリに依存しているパブリックリポジトリ、もしくはそのリポジトリが公開しているパッケージのみが報告されます。 この情報は、プライベートリポジトリについては報告されません。
依存関係グラフの使用
依存関係グラフを使用する目的は、次のとおりです。
- コードが依存しているリポジトリ、そしてそのコードに依存しているリポジトリを調べること。 詳しくは、「リポジトリの依存関係を調べる」を参照してください。
- リポジトリの脆弱な依存関係を表示・更新すること。 詳しくは、「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 ワークフロー [1] | YAML | .yml、.yaml | .yml、.yaml | | Go モジュール | Go | go.sum | go.mod、go.sum | | 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[2] | | 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 |
[1] マニフェストとして認識するには、GitHub Actions ワークフローをリポジトリの .github/workflows/ ディレクトリに配置する必要があります。 構文 jobs[*].steps[*].uses または jobs.<job_id>.uses を使用して参照されるアクションまたはワークフローは、依存関係として解析されます。 詳しくは、「GitHub Actions のワークフロー構文」を参照してください。
[2] setup.py ファイルで Python の依存関係をリストする場合、プロジェクトの依存関係すべてを解析してリストすることはできない場合があります。
注: GitHub Actions ワークフローの依存関係は、情報提供のために依存関係グラフに表示されます。 Dependabot アラートは、現在、GitHub Actions ワークフローではサポートされていません。
依存関係申請 API (ベータ) を使用すると、上記のサポートされているエコシステム リストにエコシステムがない場合でも、依存関係を任意のパッケージ マネージャーまたはエコシステムから依存関係グラフに追加できます。 依存関係グラフには、送信された依存関係がエコシステム別にグループ化されて表示されますが、マニフェストまたはロック ファイルから解析された依存関係とは別に表示されます。 GitHub Advisory Database のサポートされているエコシステムのいずれかからの依存関係に対する Dependabot alerts のみを受け取ります。 依存関係申請 API について詳しくは、「Dependency Submission API を使用する」をご覧ください。
参考資料
- Wikipedia の「依存関係グラフ」
- リポジトリの依存関係を調べる
- 脆弱性のある依存関係の検出のトラブルシューティング