Skip to main content

依存関係グラフについて

依存関係グラフを使って、プロジェクトの依存関係をすべて特定できます。 依存関係グラフは、幅広く一般的なパッケージエコシステムをサポートします。

依存関係グラフについて

依存関係グラフは、リポジトリに格納されているマニフェストおよびロック ファイルと、依存関係送信 API (ベータ) を使用してリポジトリに送信された依存関係の概要です。 それぞれのリポジトリについて、以下が表示されます:

  • リポジトリが依存している依存関係、エコシステム、パッケージ
  • リポジトリに依存する対象、リポジトリ、パッケージ

依存関係ごとに、ライセンス情報と 脆弱性の重大度を確認できます。 検索バーを使用して、特定の依存関係を検索することもできます。 依存関係は、脆弱性の重大度によって自動的に並べ替えられます。

GitHub に、デフォルト ブランチでサポートされているマニフェストもしくはロック ファイルを変更もしくは追加するコミットをプッシュすると、依存関係グラフは自動的に更新されます。加えて、誰かが依存関係のいずれかのリポジトリに変更をプッシュすると、グラフは更新されます。サポートされているエコシステムとマニフェスト ファイルに関する情報については以下の「サポートされているパッケージエコシステム」を参照してください。

また、エコシステムがマニフェストやロック ファイル分析の依存関係グラフでサポートされていなくても、選択したパッケージ マネージャーやエコシステムから 依存関係送信 API (ベータ) を使って依存関係を送信できます。 依存関係送信 API (ベータ)を使ってプロジェクトに送信された依存関係には、送信に使用された検出機能と送信日時が表示されます。 依存関係送信 API について詳しくは、「Dependency Submission API を使用する」をご覧ください。

デフォルトブランチをターゲットとする、依存関係の変更を含むPull Requestを作成すると、GitHubは依存関係グラフを使ってそのPull Requestに依存関係のレビューを追加します。 それらは、依存関係が脆弱性を含んでいるか、もしそうならその脆弱性が修復されているバージョンを示しています。 詳しくは、「依存関係の確認について」を参照してください。

少なくともリポジトリへの読み取りアクセス権がある場合は、GitHub UI または GitHub REST API を使って、リポジトリの依存関係グラフを SPDX 互換のソフトウェア部品表 (SBOM) としてエクスポートできます。 詳しくは、「リポジトリのソフトウェア部品表のエクスポート」を参照してください。

依存関係グラフの利用

依存関係グラフは、すべてのパブリック リポジトリに対して自動的に生成されます。 フォークとプライベート リポジトリに対して、それを有効にすることを選べます。 詳しくは、「リポジトリのセキュリティと分析設定を管理する」を参照してください。

リポジトリ管理者は、プライベート リポジトリの依存関係グラフを有効または無効にすることができます。 詳しくは、「依存関係グラフを設定する」を参照してください。

含まれる依存関係

依存関係グラフには、マニフェストとロック ファイルで詳しく説明されているリポジトリのすべての依存関係、またはサポートされているエコシステム に関する同等の依存関係と、依存関係送信 API (ベータ) を使用して送信されたすべての依存関係が含まれます。 これには、次のものが含まれます。

  • マニフェストまたはロック ファイルに明示的に定義されている、または 依存関係送信 API (ベータ) を使って送信された直接依存関係
  • 直接依存関係の間接依存関係。推移的な依存関係、または下位の依存関係とも言う。

依存関係グラフでは、間接的な依存関係 が、ロック ファイル で定義されているか、依存関係送信 API (ベータ) を使用して送信されている場合にのみ識別されます。 最も信頼性の高いグラフを得るには、ロックファイル (または同等のもの) を使用してください。直接および間接の依存関係のうち現在どのバージョンを使用しているかが正確に定義されているからです。 ロックファイルを使用する場合、リポジトリのすべてのコントリビューターが同じバージョンを使用していることも確認してください。そのほうが、コードのテストとデバッグが容易になります。 エコシステムにロック ファイルがない場合は、事前に作成されたアクションを使用して、多くのエコシステムの推移的な依存関係を解決できます。 詳しくは、「Dependency Submission API を使用する」をご覧ください。

GitHub を使用して環境内の依存関係を理解する方法の詳細については、「サプライ チェーンのセキュリティについて」を参照してください。

含まれる依存物

パブリックリポジトリでは、そのリポジトリに依存しているパブリックリポジトリ、もしくはそのリポジトリが公開しているパッケージのみが報告されます。 この情報は、プライベートリポジトリについては報告されません。

依存関係グラフの使用

依存関係グラフを使用する目的は、次のとおりです。

サポートされているパッケージエコシステム

推奨されるフォーマットでは、直接および間接の依存関係すべてに使用されるバージョンを明示的に定義しています。 これらの形式を使う場合、依存関係グラフはより正確になります。 これは、現在のビルドのセットアップも反映し、依存関係グラフが直接および間接の依存関係の両方で脆弱性を報告できるようにしてくれます。マニフェスト ファイル (あるいはそれに相当するもの) から推定される間接的な依存関係は、セキュリティで保護されていない依存関係のチェックから除外されます。

パッケージ マネージャー言語推奨される形式サポートされているすべての形式
CargoRustCargo.lockCargo.tomlCargo.lock
ComposerPHPcomposer.lockcomposer.jsoncomposer.lock
NuGet.NET 言語 (C#、F#、VB)、C++.csproj.vbproj.nuspec.vcxproj.fsproj.csproj.vbproj.nuspec.vcxproj.fsprojpackages.config
GitHub Actions ワークフローYAML.yml.yaml.yml.yaml
Go モジュールGogo.modgo.mod
MavenJava、Scalapom.xmlpom.xml
npmJavaScriptpackage-lock.jsonpackage-lock.jsonpackage.json
JavaScriptpnpm-lock.yamlpackage.jsonpnpm-lock.yaml
pubDartpubspec.lockpubspec.yamlpubspec.lock
Python PoetryPythonpoetry.lockpoetry.lockpyproject.toml
RubyGemsRubyGemfile.lockGemfile.lockGemfile*.gemspec
Swift Package ManagerSwiftPackage.resolvedPackage.resolved
YarnJavaScriptyarn.lockpackage.jsonyarn.lock

注:

  • setup.py ファイル内に Python の依存関係を列挙した場合、ユーザーはプロジェクト内のすべての依存関係を解析し、列挙することができない場合があります。

  • マニフェストとして認識するには、GitHub Actions ワークフローをリポジトリの .github/workflows/ ディレクトリに配置する必要があります。 構文 jobs[*].steps[*].uses または jobs.<job_id>.uses を使用して参照されるアクションまたはワークフローは、依存関係として解析されます。 詳しくは、「ギットハブ アクション のワークフロー構文」を参照してください。

  • Dependabot will only create Dependabot alerts for vulnerable GitHub Actions that use semantic versioning. You will not receive alerts for a vulnerable action that uses SHA versioning. If you use GitHub Actions with SHA versioning, we recommend enabling Dependabot version updates for your repository or organization to keep the actions you use updated to the latest versions.詳細については、「Dependabot アラートについて」と「GitHub Dependabot のバージョンアップデートについて」をご覧ください。

依存関係送信 API (ベータ) を使うと、上記のサポートされているエコシステム リストにエコシステムがない場合でも、依存関係を任意のパッケージ マネージャーまたはエコシステムから依存関係グラフに追加できます。 依存関係送信 API (ベータ) を使用してプロジェクトに送信された依存関係には、提出に使用された検出機能と、いつ送信されたかが表示されます。

GitHub Advisory Database のサポートされているエコシステムのいずれかからの依存関係に対する Dependabot alerts のみを受け取ります。 依存関係送信 API について詳しくは、「Dependency Submission API を使用する」をご覧ください。

参考資料