# CircleCI でのローカルコードスキャンのセットアップ

Aikido Security Local Scanner は、お使いの環境内で Aikido Security のスキャンを実行できるツールで、コードが社外に出ることはありません。スキャンはローカルで実行され、その結果が Aikido Security プラットフォームにアップロードされます。このセットアップにより、レポート目的で Local Scanner を CircleCI パイプラインに簡単に統合できます。

## Local Scanning のセットアップ方法 <a href="#how-to-set-up-local-scanning" id="how-to-set-up-local-scanning"></a>

**前提条件**: Local Scanning が利用可能なアカウントを作成済みであることを確認してください。[Local Scanning アカウントの作成に関する詳細はこちら](https://help.aikido.dev/en/articles/9070345-how-to-create-an-account-for-local-scanning-on-aikido)。

### 1. 認証トークンを取得する <a href="#id-1-get-your-authentication-token" id="id-1-get-your-authentication-token"></a>

1. [Local Scanner セットアップページ](https://app.aikido.dev/settings/integrations/localscan)にアクセスします。
2. 認証トークンを生成してコピーします。このトークンは一度しか表示されないことに注意してください。
3. プロジェクトで Local Scanner を実行する際に、このトークンを引数 `--apikey` として追加します。
4.  **Project Settings** > **Environment Variables** > **Add Environment Variable** に移動し、このトークンを環境変数として保存します。

    ![API キーのエントリと、変数を追加またはインポートするオプションが表示された環境変数管理画面。](https://help.aikidogov.us/_assets/8580e6fdf65a/ucarecdn-81b3d376-b9b9-492d-b470-f11c83e7f27e.png)

## 2. Local Scanner を実行する <a href="#id-2-running-the-local-scanner" id="id-2-running-the-local-scanner"></a>

あとはリポジトリでスキャナーを実行するだけです。\
​\
Local Scanner がデフォルトブランチでのみトリガーされるようにしてください。デフォルトでは、Aikido はリポジトリ内の 1 つのブランチ（通常は main または master ブランチ）について、依存関係とコードの問題のスキャンをサポートしています。そのため、Aikido プラットフォーム上でスキャン結果が混在しないよう、Local Scanner はそのブランチでのみ実行することをお勧めします。これはブランチフィルターを使用して指定できます。

## Docker を使用する <a href="#using-docker" id="using-docker"></a>

CircleCI パイプラインで Local Scanner を使用する最も簡単な方法は、Docker イメージを使用することです。

`.circleci/config.yml` の例:

```yaml
version: 2.1

jobs:
  run-aikio-scan:
    docker:
      - image: aikidosecurity/local-scanner:latest

    steps:
      - checkout:
          path: my-app
      - run:
          name: "Run Aikido scan"
          command: aikido-local-scanner scan my-app --repositoryname my-app --branchname main --apikey "$AIKIDO_API_KEY"
workflows:
  my-workflow:
    jobs:
      - run-aikio-scan:
          filters:
            branches:
              only:
                - main
```

コマンドを実行する際に、`--branchname` オプションを使用して対象のブランチを指定してください。

このリポジトリに対する初回スキャンの場合、Aikido は指定した名前でリポジトリを作成し、すべてのスキャン結果をそこに格納します。以降のスキャン結果は、Aikido 内のこのリポジトリ名の下に集約されます。

デフォルトではすべてのスキャンタイプが実行されます。一部のスキャンのみ（例: SAST スキャンのみ）を実行したい場合は、`--scan-types` オプションでスキャンタイプを指定できます。CLI オプションの詳細は[こちら](https://help.aikido.dev/en/articles/9027526-local-scanner-cli-options)をご覧ください。

スキャナーはリリースゲーティングモードまたは PR ゲーティングモードで実行することもできます。リリースゲーティングモードは、リリース前にリポジトリをスキャンする際に役立ち、リリース前に未解決の問題がないことを確認できます。リリースゲーティングモードで実行すると、スキャン完了後に選択した重大度以上の未解決の問題が存在する場合、スキャナーのプロセスは失敗します。PR ゲーティングモードは、PR で新たに持ち込まれた可能性のある問題をスキャンするために使用できます。

リリースゲーティングモードおよび PR ゲーティングモードの詳細は、[こちらの記事](https://help.aikidogov.us/docs/docs-ja/code-scanning/local-code-scanning/pr-gating-for-code-using-local-scanner)をご覧ください。

## 3. スキャン結果を確認する <a href="#id-3-check-your-scanning-results" id="id-3-check-your-scanning-results"></a>

初回スキャンが完了したら、Aikido Feed にアクセスして結果を確認できます。指定した名前のリポジトリが作成され、スキャンのすべての結果が格納されています。
