依存関係グラフについて
依存関係グラフは、リポジトリに格納されているマニフェストおよびロック ファイル、および 依存関係送信 API を使用してリポジトリに送信された依存関係の概要です。 それぞれのリポジトリについて、以下が表示されます:の依存関係、すなわちリポジトリが依存するエコシステムとパッケージ。
依存関係ごとに、バージョン、それを含むマニフェスト ファイル、既知の脆弱性があるかどうかを確認できます。 推移的な依存関係をサポートするパッケージ エコシステムの場合、リレーションシップ状態が表示され、開示ボタン ([...]) を選ぶと、依存関係を生じさせた推移的なパスが表示されます。 推移的な依存関係のサポートの詳細については、「依存関係グラフでパッケージ エコシステムをサポート」を参照してください。
検索バーを使用して、特定の依存関係を検索することもできます。 依存関係は自動的に並べ替えられ、脆弱性が一番上に表示されます。
GitHub では、依存関係のライセンス情報は取得されず、あるリポジトリに依存する依存物、リポジトリ、パッケージに関する情報は計算されません。詳しくは、「依存関係グラフについて」をご覧ください。
サポートされているパッケージエコシステム
依存関係グラフが有効になっている場合、一般的な多くのプログラミング言語パッケージ エコシステムで使われているマニフェスト ファイルがリポジトリからスキャンされます。 サポート対象マニフェスト ファイルの 1 つが見つかると、そのファイルの内容が解析され、各パッケージの名前とバージョンなど、その内容の表現が構築されます。
一部のファイルには、すべての直接的およびすべての間接的依存関係に使われるバージョンが明示的に定義されています。 これらにより、パッケージ バージョンがビルドに含まれるものにロックされ、Dependabot で直接的および間接的依存関係の両方に含まれる脆弱なバージョンを検出できるようになります。 これらの形式を使うと、依存関係グラフがより正確になるため、この表の [Recommended files] 列に一覧表示されます。
パッケージ マネージャー | 言語 | 推移的な依存関係 | 推奨ファイル | 追加ファイル |
---|---|---|---|---|
Cargo | Rust | Cargo.lock | Cargo.toml | |
Composer | PHP | composer.lock | composer.json | |
NuGet | .NET 言語 (C#、F#、VB)、C++ | .csproj 、.vbproj 、.nuspec 、.vcxproj 、.fsproj | packages.config | |
GitHub Actionsのワークフロー | YAML | .yml , .yaml | ||
Go モジュール | Go | go.mod | ||
Maven | Java、Scala | pom.xml | ||
npm | JavaScript | package-lock.json | package.json | |
pip | Python | requirements.txt , pipfile.lock | pipfile , setup.py | |
pnpm | JavaScript | pnpm-lock.yaml | package.json | |
pub | Dart | pubspec.lock | pubspec.yaml | |
Python Poetry | Python | poetry.lock | pyproject.toml | |
RubyGems | Ruby | Gemfile.lock | Gemfile , *.gemspec | |
Swift パッケージ マネージャー | Swift | Package.resolved | ||
Yarn | JavaScript | yarn.lock | package.json |
Note
setup.py
ファイル内に Python の依存関係を列挙した場合、ユーザーはプロジェクト内のすべての依存関係を解析し、列挙することができない場合があります。- マニフェストとして認識するには、GitHub Actions ワークフローをリポジトリの
.github/workflows/
ディレクトリに配置する必要があります。 構文jobs[*].steps[*].uses
またはjobs.<job_id>.uses
を使用して参照されるアクションまたはワークフローは、依存関係として解析されます。 詳しくは、「GitHub Actions のワークフロー構文」をご覧ください。 - Dependabot は、セマンティック バージョン管理を使用する脆弱な GitHub Actions に対してのみ、Dependabot alerts を作成します。 SHA バージョン管理を使用する脆弱なアクションのアラートは受け取れません。 SHA バージョン管理で GitHub Actions を使用する場合は、リポジトリまたは組織に対して Dependabot version updates を有効にして、使用するアクションを最新バージョンに更新しておくことをおすすめします。詳細については、「Dependabot アラートについて」と「GitHub Dependabot のバージョンアップデートについて」を参照してください。
依存関係の送信アクションによってサポートされるパッケージ エコシステム
依存関係送信 API を使うと、依存関係グラフの静的分析と自動送信に加えて、たとえそのエコシステムが上記のサポート対象エコシステム リストに含まれていない場合でも、ビルド時の依存関係を依存関係グラフに追加することや、任意のパッケージ マネージャーまたはエコシステムから選んだ依存関係を依存関係グラフに追加することができます。 これらの送信された依存関係からの依存関係情報は、順番に、Dependabot updates と Dependabot alerts に送られます。
依存関係送信 API を使ってプロジェクトに送信された依存関係には、提出にどの検出機能が使われたか、いつ送信されたかが表示されます。依存関係送信 API について詳しくは、「Dependency Submission API を使用する」をご覧ください。
プロジェクトのビルド時にプロジェクトの依存関係を送信するには、通常、GitHub Actions ワークフローで 依存関係送信 API を使います。 依存関係送信 API を使う最も簡単な方法は、依存関係のリストを収集して必要なスナップショット形式に変換したものを API に送信するアクションを事前に作成し、それをリポジトリに追加することです。 現在使用可能なアクションへのリンクを次の表に示します。
エコシステム | アクション |
---|---|
Go | Go の依存関係送信 |
Gradle | Gradle の依存関係送信 |
Maven | Maven 依存関係ツリーの依存関係送信 |
製粉 | Mill の依存関係送信 |
Mix (Elixir) | Mix の依存関係送信 |
Scala | Sbt の依存関係送信 |
NuGet とその他 | コンポーネント検出の依存関係の送信アクション |
Note
コンポーネント検出依存関係の送信アクションの場合、サポートされているその他のエコシステムには、Vcpkg、Conan、Conda、Crates、NuGet などがあります。
たとえば、次の Go 依存関係送信ワークフローは、Go ビルド ターゲット (main
関数を含む Go ファイル) の依存関係を計算し、そのリストを 依存関係送信 API に送信します。
name: Go Dependency Submission
on:
push:
branches:
- main
# The API requires write permission on the repository to submit dependencies
permissions:
contents: write
# Environment variables to configure Go and Go modules. Customize as necessary
env:
GOPROXY: '' # A Go Proxy server to be used
GOPRIVATE: '' # A list of modules are considered private and not requested from GOPROXY
jobs:
go-action-detection:
runs-on: ubuntu-latest
steps:
- name: 'Checkout Repository'
uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: ">=1.18.0"
- name: Run snapshot action
uses: actions/go-dependency-submission@v1
with:
# Required: Define the repo path to the go.mod file used by the
# build target
go-mod-path: go-example/go.mod
#
# Optional. Define the repo path of a build target,
# a file with a `main()` function.
# If undefined, this action will collect all dependencies
# used by all build targets for the module. This may
# include Go dependencies used by tests and tooling.
go-build-target: go-example/cmd/octocat.go
独自のアクションの作成もできます。 詳しくは、「Dependency Submission API を使用する」をご覧ください。
マニフェストの重複除去
依存関係グラフは、静的分析、自動送信、ユーザー送信という 3 種類の方法で依存関係を学習できます。 リポジトリには複数のメソッドを構成できるため、同じパッケージ マニフェストが複数回スキャンされ、各スキャンによるの出力が異なる可能性があります。 依存関係グラフは重複除去ロジックを使って出力を解析し、各マニフェスト ファイルの最も正確な情報を優先します。
依存関係グラフには、次の優先順位規則が使われ、各マニフェスト ファイルのインスタンスが 1 つだけ表示されます。
- ユーザー送信は、通常、成果物のビルド中に作成され、最も情報がそろっているため、最優先されます。
- 異なる detector からの手動スナップショットが複数ある場合、correlator のアルファベット順に並べ替えられ、最初のものが使われます。
- detector が同じ correlator が 2 つある場合、解決された依存関係はマージされます。 correlator と detector の詳細については、「依存関係送信用の REST API エンドポイント」を参照してください。
- 自動送信は、成果物のビルド中にも作成されますが、ユーザーによって送信されたものではないため、2 番目に高い優先順位になります。
- 静的分析結果は、使用できるデータが他にない場合に使われます。