{"meta":{"title":"GitHub ActionsでのDependabotの自動化","intro":"GitHub Actionsを使用して、一般的なDependabot関連タスクを自動化する方法の例。","product":"セキュリティとコードの品質","breadcrumbs":[{"href":"/ja/code-security","title":"セキュリティとコードの品質"},{"href":"/ja/code-security/tutorials","title":"Tutorials"},{"href":"/ja/code-security/tutorials/secure-your-dependencies","title":"依存関係をセキュリティ保護する"},{"href":"/ja/code-security/tutorials/secure-your-dependencies/automate-dependabot-with-actions","title":"アクションを使用して Dependabot を自動化する"}],"documentType":"article"},"body":"# GitHub ActionsでのDependabotの自動化\n\nGitHub Actionsを使用して、一般的なDependabot関連タスクを自動化する方法の例。\n\n> \\[!NOTE] この記事では、Dependabotを使用してGitHub Actions関連タスクを自動化する方法について説明します。\n> Dependabot updatesを使用したGitHub Actionsの実行の詳細については、代わりに [GitHub Actionsランナーのディペンダボット](/ja/code-security/concepts/supply-chain-security/dependabot-on-actions) を参照してください。\n\nGitHub Actionsを使用して、依存関係を更新するプル要求Dependabot作成するときに、自動化されたタスクを実行できます。 これは次のような場合に便利です。\n\n* Dependabotプル要求 (バージョン更新プログラムとセキュリティ更新プログラム) が、作業プロセスに適したデータ (ラベルや名前を含む) で作成されていることを確認します。\n\n* ワークフローをトリガーして、  Dependabot プル要求 (バージョン更新プログラムとセキュリティ更新プログラム) をレビュー プロセスに送信するか、自動的にマージします。\n\n## Dependabot と GitHub Actions について\n\n> \\[!IMPORTANT]\n> リポジトリに対して Dependabot が有効になっている場合は、常に GitHub Actionsで実行され、 **リポジトリまたは組織レベルでアクション ポリシーチェックと無効化の両方がバイパス**されます。 これにより、Dependabot が有効になっているときは、常にセキュリティとバージョンの更新ワークフローが常に実行されるようになります。\n\nDependabot は、依存関係を最新の状態に保つために pull request を作成します。\nGitHub Actionsを使用して、これらのプル要求が作成されたときに自動化されたタスクを実行できます。 たとえば、追加の成果物のフェッチ、ラベルの追加、テストの実行、あるいは pull request (プル リクエスト) の変更ができます。\n\nDependabot は、pull request とコメントで GitHub Actions ワークフローをトリガーできます。ただし、特定のイベントは異なる方法で処理されます。 詳細については、 [AUTOTITLE を](/ja/code-security/reference/supply-chain-security/troubleshoot-dependabot/dependabot-on-actions)参照してください。\n\n> \\[!NOTE]\n> また、依存関係の分析、更新の概要、修復に関する推奨事項に agentic workflows を使用して、確定的な GitHub Actions ワークフローでセキュリティの適用とマージの制限を維持することもできます。 詳細については、「[GitHubのエージェント型ワークフローの作成](/ja/copilot/how-tos/github-agentic-workflows/creating-github-agentic-workflows)」を参照してください。\n\nGitHub Actionsを使用して自動化できるプル要求の一般的なシナリオをいくつか次に示します。\n\n## pull reqeust (プル リクエスト) に関するメタデータのフェッチ\n\n大半の自動化では、依存関係の名前が何か、それは実働環境の依存関係か、メジャー、マイナー、パッチアップデートのいずれなのかといった、pull request (プル リクエスト) の内容に関する情報を知ることが必要です。 アクションを使用して、 Dependabotによって生成されたプル要求によって更新される依存関係に関する情報を取得できます。\n\nExample:\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\nname: Dependabot fetch metadata\non: pull_request\n\npermissions:\n  pull-requests: write\n  issues: write\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7\n        with:\n          github-token: \"${{ secrets.GITHUB_TOKEN }}\"\n      # The following properties are now available:\n      #  - steps.metadata.outputs.dependency-names\n      #  - steps.metadata.outputs.dependency-type\n      #  - steps.metadata.outputs.update-type\n```\n\n詳細については、[`dependabot/fetch-metadata`](https://github.com/dependabot/fetch-metadata) リポジトリを参照してください。\n\n## pull request (プル リクエスト) のラベル付け\n\nGitHubラベルに基づいて他の自動化またはトリアージ ワークフローがある場合は、指定されたメタデータに基づいてラベルを割り当てるアクションを構成できます。\n\nすべての運用依存関係の更新にラベルを付ける例:\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\nname: Dependabot auto-label\non: pull_request\n\npermissions:\n  pull-requests: write\n  issues: write\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7\n        with:\n          github-token: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Add a label for all production dependencies\n        if: steps.metadata.outputs.dependency-type == 'direct:production'\n        run: gh pr edit \"$PR_URL\" --add-label \"production\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n```\n\n## pull request (プル リクエスト) を自動的に承認\n\nワークフローのDependabotを使用して、GitHub CLIプル要求を自動的に承認できます。\n\nExample:\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\nname: Dependabot auto-approve\non: pull_request\n\npermissions:\n  pull-requests: write\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7\n        with:\n          github-token: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Approve a PR\n        run: gh pr review --approve \"$PR_URL\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}\n```\n\n## pull request (プル リクエスト) の自動マージを有効化\n\nメンテナーがオートマージの特定のプル要求をマークできるようにする場合は、 GitHubのオートマージュ機能を使用できます。 これにより、ブランチ保護ルールで必要なすべての必須テストと承認が正常に満たされた場合に、pull request がマージされます。\n\n詳細については、「[プルリクエストを自動的にマージする](/ja/pull-requests/how-tos/merge-and-close-pull-requests/automatically-merging-a-pull-request)」および「[ブランチ保護ルールを管理する](/ja/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule)」を参照してください。\n\n代わりに、 GitHub Actions と GitHub CLIを使用できます。 すべてのパッチ更新プログラムを `my-dependency` に自動マージする例を次に示します:\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\nname: Dependabot auto-merge\non: pull_request\n\npermissions:\n  contents: write\n  pull-requests: write\n\njobs:\n  dependabot:\n    runs-on: ubuntu-latest\n    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'\n    steps:\n      - name: Dependabot metadata\n        id: metadata\n        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7\n        with:\n          github-token: \"${{ secrets.GITHUB_TOKEN }}\"\n      - name: Enable auto-merge for Dependabot PRs\n        if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-patch'\n        run: gh pr merge --auto --merge \"$PR_URL\"\n        env:\n          PR_URL: ${{github.event.pull_request.html_url}}\n          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}\n```\n\n> \\[!NOTE]\n> ステータスチェックを使用してプルリクエストをテストする場合は、\\*\\*\\*\\* プルリクエストのターゲット ブランチで、Dependabot を有効にする必要があります。 このブランチ保護ルールを使用すると、**必須のステータス チェックすべてに合格しない限り**、確実に pull request (プル リクエスト) がマージされなくなります。 詳細については、「[ブランチ保護ルールを管理する](/ja/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule)」を参照してください。\n\nターゲット ブランチでマージ キューが使用されている場合、組み込みの `GITHUB_TOKEN` はキューにプル要求を追加できません。 この場合は、マージするアクセス許可を持つpersonal access tokenまたはGitHub App トークンを使用してワークフローを認証し、`GITHUB_TOKEN`ステップの`gh pr merge`の代わりに使用する必要があります。\n\n## Dependabot と GitHub Actions のポリシー\n\n通常、ワークフローをリポジトリで実行できるかどうかは、 GitHub Actions**ポリシー チェック** と、 GitHub Actions が組織レベルまたはリポジトリ レベルで **有効** になっているかどうかによって異なります。 これらのコントロールは、ワークフローの実行を制限できます。特に、外部アクションがブロックされたり、 GitHub Actions が完全に無効になっている場合です。\n\nただし、リポジトリに対して Dependabot が有効になっている場合、そのワークフローは常に GitHub Actionsで実行され、 **アクション ポリシーのチェックと無効化の両方がバイパス**されます。\n\n* Dependabot ワークフローは、アクションの無効化やエンタープライズ ポリシーの制限によってブロックされません。\n* 外部アクションが許可されていない場合であっても、これらのワークフロー内で参照されているアクションも、また実行を許可されます。\n\n詳細については、「[GitHub Actionsランナーのディペンダボット](/ja/code-security/concepts/supply-chain-security/dependabot-on-actions)」を参照してください。\n\n## 失敗したワークフロー実行の調査\n\nワークフローの実行が失敗した場合は、以下をチェックしてください。\n\n* 適切なアクターがトリガーした場合にのみワークフローを実行しているか。\n* `ref` に対する正しい `pull_request` をチェックアウトしています。\n* シークレットは、Dependabotシークレットとしてではなく、GitHub Actionsシークレットとして使用できます。\n* 適切なアクセス許可を持つ `GITHUB_TOKEN` があります。\n\nGitHub Actionsの記述とデバッグの詳細については、[ワークフローの書き込み](/ja/actions/how-tos/write-workflows) を参照してください。\n\nワークフローに関する問題を解決するための他のヒントについては、「[GitHub Actions での Dependabot のトラブルシューティング](/ja/code-security/reference/supply-chain-security/troubleshoot-dependabot/dependabot-on-actions)」を参照してください。"}