# シークレット Pre-Commit フック

Aikido は、シークレットが本番環境に到達する前に、IDE、pre-commit、PR ゲーティングの3つの段階でシークレットの流出を防ぎます。当社の pre-commit githook は、ステージングされたコードをスキャンしてシークレット、パスワード、API キーを検出します。機密データがリポジトリに到達することを防ぎ、漏洩や意図しない露出のリスクを低減します。

## インストール

{% tabs %}
{% tab title="IDE から" %}
[Aikido IDE プラグイン](https://help.aikido.dev/docs/docs-ja/ai-and-dev-tools/ide-plugins-overview)がインストールされている場合、Aikido Expansion Packs を使用してワンクリックで pre-commit フックをインストールできます。

[詳しくは Expansion Packs のドキュメントをご覧ください。](https://help.aikido.dev/docs/docs-ja/ai-and-dev-tools/ide-plugins-overview/features/aikido-expansion-packs)
{% endtab %}

{% tab title="Mac/Linux" %}
すべての git リポジトリに Aikido Secrets pre-commit フックをインストールするには、次を実行します：

```shellscript
curl -fsSL https://raw.githubusercontent.com/AikidoSec/pre-commit/6cc79e039ee78b206520f143d618a44665c904b3/installation-samples/install-global/install-aikido-hook.sh | bash
```

これにより、シークレット検出に使用される Aikido pre-commit スキャナーがダウンロードされ、グローバルフックディレクトリに pre-commit フックスクリプトがインストールされます。
{% endtab %}

{% tab title="Windows" %}
すべての git リポジトリに Aikido Secrets pre-commit フックをインストールするには、PowerShell で次を実行します：

```powershell
iex (iwr "https://raw.githubusercontent.com/AikidoSec/pre-commit/6cc79e039ee78b206520f143d618a44665c904b3/installation-samples/install-global/install-aikido-hook.ps1" -UseBasicParsing)
```

これにより、シークレット検出に使用される Aikido pre-commit スキャナーがダウンロードされ、グローバルフックディレクトリに pre-commit フックスクリプトがインストールされます。
{% endtab %}

{% tab title="Pre-Commit フレームワーク" %}
すでに [pre-commit](https://pre-commit.com/) フレームワークを使用している場合は、`.pre-commit-config.yaml` に次を追加します：

```
repos:
  - repo: https://github.com/AikidoSec/pre-commit
    rev: main  # or pin to a specific commit
    hooks:
      - id: aikido-local-scanner
```

次に、フックをインストールします：

```
pre-commit install
```

**注意：** `aikido-local-scanner` バイナリは別途インストールする必要があります。先にグローバルインストールスクリプトを実行してください：

**macOS/Linux：**

```
curl -fsSL https://raw.githubusercontent.com/AikidoSec/pre-commit/2235fe0536f9135aa561ce108702fac708b38977/installation-samples/install-global/install-aikido-hook.sh | bash -s -- --download-only
```

**Windows（PowerShell）：**

```
irm https://raw.githubusercontent.com/AikidoSec/pre-commit/2235fe0536f9135aa561ce108702fac708b38977/installation-samples/install-global/install-aikido-hook.ps1 | % { iex \"& { $_ } -DownloadOnly\" }
```

これにより、スキャナーが `~/.local/bin/aikido-local-scanner` にインストールされます。
{% endtab %}
{% endtabs %}

[スクリプトのソースとその動作に関する詳細情報](https://github.com/AikidoSec/pre-commit)は Github で公開されています。

## pre-commit フックのテスト

セットアップ後に pre-commit フックをテストするには、リポジトリ内に `sample.js` ファイルを作成します：

```javascript
const password = "eRwjQKVUSRX7uYV017B0cRHVKv45Gv8G"
```

このファイルをステージングされた変更に追加します。このファイルをコミットしようとすると、pre-commit フックが実行され、次のメッセージとともにコミットがブロックされます：

```log
Detected secrets in staged files!
Secret #1:
  File: sample.js
  Line: 1
  Secret: password = "****************************Gv8G"
  Description: Detected a Generic API Key, potentially exposing access to various services and sensitive operations.
```

## 特定のシークレットをスキップする

[特定のシークレットが検出されないようにスキップする](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/ignoring-secrets-via-code-comments)には、検出されたシークレットの行にコメントを追加します：

```javascript
const password = "eRwjQKVUSRX7uYV017B0cRHVKv45Gv8G" // gitleaks:allow
```

## Aikido Secrets pre-commit スキャンを無効化する

単一のコミットで pre-commit フックを一時的にバイパスする

```sh
git commit --no-verify
```

単一のコミットで Aikido Secrets pre-commit フックを一時的にバイパスする

```bash
AIKIDO_SKIP_PRE_COMMIT=1 git commit
```

## アンインストール

アンインストールスクリプトを使用するか、以下の手順に従ってフックを手動でアンインストールします。

{% tabs %}
{% tab title="Mac/Linux" %}
インストールスクリプトを使用して Aikido pre-commit フックをインストールし、アンインストールしたい場合は、次を実行します：

```bash
curl -fsSL https://raw.githubusercontent.com/AikidoSec/pre-commit/e6f541e65378dd30f3f320628000f837cfba0ec4/installation-samples/install-global/uninstall-aikido-hook.sh | bash
```
{% endtab %}

{% tab title="Windows" %}
インストールスクリプトを使用して Aikido pre-commit フックをインストールし、アンインストールしたい場合は、次を実行します：

```powershell
iex (iwr "https://raw.githubusercontent.com/AikidoSec/pre-commit/e6f541e65378dd30f3f320628000f837cfba0ec4/installation-samples/install-global/uninstall-aikido-hook.ps1" -UseBasicParsing)
```
{% endtab %}
{% endtabs %}

### グローバル pre-commit フックの手動アンインストール

これにより、すべてのグローバル Git フックと Aikido バイナリが完全に削除されます。

1. グローバルフックディレクトリを削除します：
   * Unix/Linux/macOS: `rm -rf ~/.git-hooks`
   * Windows: `Remove-Item -Recurse -Force $env:USERPROFILE\.git-hooks`
2. Git フックのパスをリセットします：`git config --global --unset core.hooksPath`
3. 必要に応じてバイナリを削除します：
   * Unix/Linux/macOS: `rm ~/.local/bin/aikido-local-scanner`
   * Windows: `Remove-Item $env:USERPROFILE\.local\bin\aikido-local-scanner.exe`

### Aikido Git Hook のみの手動アンインストール

すでに独自のグローバル Git フックがあり、それらを残したい場合は、フックディレクトリを削除しないでください。

代わりに：

1. グローバルフックディレクトリ内の pre-commit ファイルを開きます（例：\~/.git-hooks/pre-commit）。
2. aikido-local-scanner を呼び出している行、または Aikido によって追加されたことが明示されている行のみを削除します。
3. ファイルを保存します。

Git は Aikido Secrets を実行せずに、既存のフックを引き続き使用します。

## 関連記事

* [コードコメントによるシークレットの無視](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/ignoring-secrets-via-code-comments)
* [.aikido ファイルを使用したファイルの無視](https://help.aikido.dev/docs/docs-ja/code-scanning/scanning-practices/ignore-via-code-with-aikido-files)
