# Local Scanner を使用した GitHub PR ゲーティング

Aikido Local Scanner を使用すると、CI パイプラインでセキュリティゲートを適用できます。

{% hint style="info" %}
クラウド接続されたワークスペース（GitHub、BitBucket など）でも PR ゲーティングを使用できます。CI の[インテグレーションセクション](https://help.aikido.dev/section/ci-integrations/sg3q6UrIf4qE)をご覧ください。
{% endhint %}

PR ゲーティングにより、新しいコードがデフォルトブランチにマージされる前に、セキュリティ基準を満たしていることを確認できます。スキャンの対象はプルリクエストで導入された変更のみです。設定した重大度のしきい値以上の新しい問題がスキャンで検出された場合、CI パイプラインは失敗します。

これにより、既存の検出結果は別途対処しつつ、新たな脆弱性の混入を防ぐことができます。

{% hint style="info" %}
リリース時にチェックを適用したいチーム向けに、[リリースゲーティング](https://help.aikido.dev/docs/docs-ja/container-image-scanning/local-image-scanning/release-gating-for-container-images-using-local-image-scanner)もサポートしています。
{% endhint %}

PR ゲーティングを有効にするには、`--fail-on <severity>` オプションを追加して希望する重大度レベルを選択します。次に、`--gating-mode pr` オプションを追加して、PR ゲーティングを実行することを指定します。また、ベースコミット（`--base-commit-id <commit-id>`）とヘッドコミット（`--head-commit-id <commit-id>`）も指定する必要があります。ベースコミット ID で以前にスキャンが実行されている場合、スキャン結果はその結果と比較されます。実行されていない場合は、デフォルトブランチでの最新のスキャン結果と比較されます。

GitHub 環境での Local Scanner のセットアップに関する一般的な情報については、[こちらの記事](https://help.aikido.dev/docs/docs-ja/code-scanning/local-code-scanning/github-action-setup-for-local-code-scanning)をご覧ください。

PR ゲーティング用の `.github/workflows/aikido-scan.yml` の例：

```yaml
on:
  pull_request:
    branches:
      - main

name: Aikido Scan
jobs:
  aikido-local-scan-repo:
    runs-on: ubuntu-latest
    container:
      image: aikidosecurity/local-scanner:latest
    steps: 
      - uses: actions/checkout@v4 
        with: 
          token: ${{ secrets.GITHUB_TOKEN }} 
          path: ${{ github.event.repository.name }}
          fetch-depth: 0 # Makes sure base and head commit are accessible in workflow
      - name: Run scan
        run: aikido-local-scanner scan ${{ github.event.repository.name }} --apikey ${{ secrets.AIKIDO_API_KEY }} --repositoryname ${{ github.event.repository.name }} --branchname ${{ github.event.pull_request.head.ref }} --gating-mode pr --fail-on critical --base-commit-id ${{ github.event.pull_request.base.sha }} --head-commit-id ${{ github.event.pull_request.head.sha }}
```
