# 依存関係グラフが依存関係を認識する方法

依存関係グラフでは、マニフェスト ファイルが自動的に分析されます。 自動的に検出できない依存関係のデータを送信できます。

依存関係グラフでは、次のメソッドを使用してプロジェクトの依存関係を識別できます。

| メソッド           | どのように機能するのか                  |
| -------------- | ---------------------------- |
| **静的分析**       | リポジトリ内のマニフェストとロック ファイルを解析します |
|                |                              |
|                |                              |
| **依存関係送信 API** | プログラムで送信した依存関係データを受け入れます     |

依存関係がグラフに表示されたら、既知の脆弱性の Dependabot alerts と Dependabot security updates を受け取ることができます。

## 静的分析

依存関係グラフを有効にすると、 GitHub は、サポートされているマニフェスト ファイルのリポジトリをスキャンし、各パッケージの名前とバージョンを解析します。 グラフは、既定のブランチでサポートされているマニフェストまたはロック ファイルを変更したとき。

静的分析では、次の情報を特定できます。

* マニフェストまたはロック ファイルで明示的に定義された**直接の依存関係**
* **間接依存関係**—これらの直接依存関係の依存関係は「推移的な依存関係」とも呼ばれますが、これはマニフェストやロックファイルで定義されている場合に限ります。ビルド時に解決される場合は含まれません。

最も信頼性の高いグラフでは、ロック ファイル (またはそれと同等のもの) を使用する必要があります。これは、現在使用している直接的および間接的な依存関係のバージョンを正確に定義するためです。 また、ファイルをロックすると、リポジトリのすべての共同作成者が同じバージョンを使用することが保証されます。これにより、コードのテストとデバッグが容易になります。

## 依存関係送信 API

独自のスクリプトまたはワークフローで 依存関係送信 API を呼び出すことができます。 これは、次の場合に役立ちます。

* ロック ファイルから検出できない推移的な依存関係を送信する必要があります。
* カスタム ロジックを作成するか、外部 CI/CD システムを使用している必要があります。

依存関係は、スナップショットの形式で 依存関係送信 API に送信されます。 これは、リポジトリの現在の状態を反映した、コミット SHA とその他のメタデータに関連付けられている依存関係の一覧です。

GitHub Actions ワークフローで API を呼び出す場合は、依存関係を自動的に収集して API に送信するエコシステムに対して事前に作成されたアクションを使用できます。 それ以外の場合は、独自のアクションを記述するか、外部システムから API を呼び出すことができます。

送信された依存関係は、組織の依存関係インサイトには表示されません。\_\_

詳しくは、「[依存関係サブミッション API を使用する](/ja/enterprise-server@3.22/code-security/how-tos/secure-your-supply-chain/secure-your-dependencies/use-dependency-submission-api)」をご覧ください。

## 優先順位付け

リポジトリでは、依存関係の送信に複数のメソッドを使用できます。これにより、同じパッケージ マニフェストが複数回スキャンされる可能性があり、各スキャンからの出力が異なる可能性があります。 依存関係グラフは重複除去ロジックを使って出力を解析し、各マニフェスト ファイルの最も正確な情報を優先します。

依存関係グラフには、次の優先順位規則が使われ、各マニフェスト ファイルのインスタンスが 1 つだけ表示されます。

1. **ユーザー送信**は、通常、成果物のビルド中に作成され、最も情報がそろっているため、最優先されます。
   * 異なる detector からの手動スナップショットが複数ある場合、correlator のアルファベット順に並べ替えられ、最初のものが使われます。
   * 同じ検出器を持つ 2 つの相関器がある場合、解決された依存関係はマージされます。 相関子と検出器の詳細については、 [依存関係送信用の REST API エンドポイント](/ja/enterprise-server@3.22/rest/dependency-graph/dependency-submission) を参照してください。
2. **自動送信** は、成果物のビルド中にも作成されますが、ユーザーによって送信されないため、次の優先順位を持ちます。
3. **静的分析結果**は、使用できるデータが他にない場合に使われます。