Skip to main content

依存関係グラフについて

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

依存関係グラフについて

依存関係グラフは、リポジトリに格納されているマニフェストおよびロック ファイル、および 依存関係送信 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 を使用して環境内の依存関係を理解する方法の詳細については、「サプライ チェーンのセキュリティについて」を参照してください。

依存関係グラフの使用

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

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

推奨されるフォーマットでは、直接および間接の依存関係すべてに使用されるバージョンを明示的に定義しています。 これらの形式を使う場合、依存関係グラフはより正確になります。 これは、現在のビルドのセットアップも反映し、依存関係グラフが直接および間接の依存関係の両方で脆弱性を報告できるようにしてくれます。

パッケージ マネージャー言語推奨される形式サポートされているすべての形式
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
pipPythonrequirements.txtpipfile.lockrequirements.txtpipfilepipfile.locksetup.py
pubDartpubspec.lockpubspec.yamlpubspec.lock
Python PoetryPythonpoetry.lockpoetry.lockpyproject.toml
RubyGemsRubyGemfile.lockGemfile.lockGemfile*.gemspec
Swift パッケージ マネージャーSwiftPackage.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 (ベータ版) を使用すると、エコシステムが上記のサポートされているエコシステム リストにない場合でも、依存関係を任意のパッケージ マネージャーまたはエコシステムから依存関係グラフに追加できます。 依存関係グラフには、送信された依存関係がエコシステム別にグループ化されて表示されますが、マニフェストまたはロック ファイルから解析された依存関係とは分けられます。

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

参考資料