# GitHub Actions での Dependabot のトラブルシューティング

この記事では、DependabotでGitHub Actionsを使用するときに発生する可能性がある問題のトラブルシューティング情報を提供します。

## Dependabotが既存のワークフローをトリガーするときのエラーのトラブルシューティング

Dependabotに対して GitHub.com の更新プログラムを設定した後、Dependabot イベントによって既存のワークフローがトリガーされるとエラーが発生することがあります。

既定では、`push`、`pull_request`、`pull_request_review`、または `pull_request_review_comment` のイベントから GitHub Actions によってトリガーされる Dependabot ワークフローの実行は、リポジトリ フォークから開かれたかのように扱われます。 他のアクターによってトリガーされるワークフローとは異なり、これは読み取り専用の `GITHUB_TOKEN` を受け取り、通常使用できるシークレットにはアクセスできないことを意味します。 これにより、Dependabot によってトリガーされたときに、リポジトリへの書き込みを試みるワークフローが失敗します。

この問題を解決するには、次の 3 つの方法があります。

1. `if: github.actor != 'dependabot[bot]'` のような式を使用して、Dependabot によってトリガーされないようにワークフローを更新できます。 詳しくは、「[ワークフロー内とアクション内で式を評価する](/ja/actions/learn-github-actions/expressions)」をご覧ください。
2. ワークフローを変更して、このような制限がない `pull_request_target` を含む 2 段階のプロセスを使用できます。 詳しくは、「[GitHub Actions での Dependabot のトラブルシューティング](/ja/code-security/dependabot/troubleshooting-dependabot/troubleshooting-dependabot-on-github-actions#restrictions-when-dependabot-triggers-events)」をご覧ください。
3. Dependabot のアクセスによってトリガーされるワークフローをシークレットに提供し、`permissions` という用語で `GITHUB_TOKEN` の既定のスコープを広げることができます。

この記事では、いくつかのトラブルシューティングに関するアドバイスを提供します。 「[GitHub Actions　のワークフロー構文](/ja/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idpermissions)」も参照してください。

### シークレットにアクセスする

Dependabot イベントがワークフローをトリガーする場合、ワークフローで使用できるシークレットはDependabotシークレットだけです。
GitHub Actions シークレットは **使用できません**。 そのため、 Dependabot イベントによってトリガーされるワークフローによって使用されるシークレットを Dependabot シークレットとして格納する必要があります。 詳細については、「[Dependabot のプライベート レジストリへのアクセスの構成](/ja/code-security/dependabot/working-with-dependabot/configuring-access-to-private-registries-for-dependabot#storing-credentials-for-dependabot-to-use)」を参照してください。

Dependabot シークレットは `secrets` コンテキストに追加され、 GitHub Actionsのシークレットとまったく同じ構文を使用して参照されます。 詳細については、「[GitHub Actions でのシークレットの使用](/ja/actions/security-guides/encrypted-secrets#using-encrypted-secrets-in-a-workflow)」を参照してください。

Dependabotや他のアクターによってトリガーされるワークフローがある場合、最も簡単な解決策は、アクションと同じ名前のDependabot シークレットに必要なアクセス許可を持つトークンを格納することです。 その後、ワークフローには、これらのシークレットへの 1 回の呼び出しを含めることができます。
Dependabotのシークレットの名前が異なる場合は、条件を使用して、使用するアクターごとに適切なシークレットを指定します。

条件を使う例については、「[GitHub ActionsでのDependabotの自動化](/ja/code-security/dependabot/working-with-dependabot/automating-dependabot-with-github-actions)」を参照してください。

ユーザー名とパスワードを使用して AWS 上のプライベート コンテナー レジストリにアクセスするには、ワークフローに `username` と `password` のシークレットを含める必要があります。

この例では、Dependabotがワークフローをトリガーするときに、Dependabotと`READONLY_AWS_ACCESS_KEY_ID`の名前を持つ`READONLY_AWS_ACCESS_KEY` シークレットが使用されます。 別のアクターでワークフローがトリガーされる場合は、それらの名前を持つアクション シークレットが使用されます。

```yaml copy
# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# ドキュメントを参照してください。
name: CI
on:
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6

      - name: Login to private container registry for dependencies
        uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
        with:
          registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
          username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
          password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}

      - name: Build the Docker image
        run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
```

### `GITHUB_TOKEN` アクセス許可の変更

既定では、GitHub ActionsによってトリガーされるDependabotワークフローは、読み取り専用アクセス許可を持つ`GITHUB_TOKEN`を取得します。 ワークフローで `permissions` キーを使用すると、トークンのアクセスを増やすことができます。

```yaml copy
name: CI
on: pull_request

# Set the access for individual scopes, or use permissions: write-all
permissions:
  pull-requests: write
  issues: write
  ...

jobs:
  ...
```

詳細については、「[ワークフローでの認証に GITHUB\_TOKEN を使用する](/ja/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token)」を参照してください。

## 手動でのワークフローの再実行

Dependabot ワークフローを手動で再実行すると、再実行を開始したユーザーの権限が異なる場合でも、以前と同じ特権で実行されます。 詳細については、「[ワークフローとジョブの再実行](/ja/actions/managing-workflow-runs/re-running-workflows-and-jobs)」を参照してください。