# ローカルスキャナーを使ったGitLabの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>`）を指定する必要があります。ベースの commit id に対して以前にスキャンが実行されていた場合、スキャン結果はそれと比較されます。そうでない場合は、デフォルトブランチ上の最新のスキャン結果と比較されます。

GitLab 環境で Local Scanner をセットアップするための一般的な情報については、次を参照してください。 [この記事](https://help.aikido.dev/docs/docs-ja/code-scanning/local-code-scanning/gitlab-self-managed-setup-for-local-code-scanning).

例 `.gitlab-ci.yml` PRゲーティング用:

```yaml
default:
  image:
    name: aikidosecurity/local-scanner:latest
    entrypoint: [""]

run_aikido_selfscanner:
  script:
  - aikido-local-scanner scan ./ --apikey $AIKIDO_LOCAL_SCANNER_TOKEN --repositoryname $CI_PROJECT_NAME --branchname $CI_COMMIT_REF_NAME --gating-mode pr --fail-on critical --base-commit-id $CI_MERGE_REQUEST_DIFF_BASE_SHA --head-commit-id $CI_COMMIT_SHA
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
```
