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
pipPythonrequirements.txtpipfile.lockrequirements.txtpipfilepipfile.locksetup.py
pnpmJavaScriptpnpm-lock.yamlpackage.jsonpnpm-lock.yaml
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 は、セマンティック バージョン管理を使用する脆弱な GitHub Actions に対してのみ、Dependabot alerts を作成します。 SHA バージョン管理を使用する脆弱なアクションのアラートは受け取れません。 SHA バージョン管理で GitHub Actions を使用する場合は、リポジトリまたは組織に対して Dependabot version updates を有効にして、使用するアクションを最新バージョンに更新しておくことをおすすめします。詳細については、「Dependabot アラートについて」と「GitHub Dependabot のバージョンアップデートについて」をご覧ください。

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

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

参考資料