# ペンテストとAIコード解析向けのAutoFix

AutoFix は、Aikido Pentest、AI Code Analysis、Deep Review で見つかったセキュリティ問題のコード修正を作成し、プルリクエスト（PR）として届けます。すべてのプログラミング言語に対応しています。

修正は 3 つの方法で取得できます:

* **AutoFix ページから:** 修正をプレビューし、調整して、準備ができたら PR を開きます。
* **自動的に:** Aikido は、ペンテストがポリシーに一致する検出結果を報告するとすぐに PR を開きます。
* **プルリクエストのコメントから:** Deep Review の検出結果に返信すると、Aikido があなたの PR の上に修正 PR を開きます。

## 前提条件

* [AutoFix](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/overview-aikido-autofix) は、リポジトリへの書き込み権限でセットアップされています。
* 検出結果は、接続されたリポジトリ内のソースコードファイルを指しています。Web サーバーヘッダーの設定ミスのようにファイルの場所がない検出結果は、コードで修正できません。

## 仕組み

Aikido Pentest と AI Code Analysis は、各検出結果ごとに根本原因分析を生成します。AutoFix はその分析を使って、問題が確認されたエンドポイントだけでなく、問題の原因となっているコードを変更します。

|              | AutoFix ページ                         | 自動 PR                             | プルリクエストのコメント      |
| ------------ | ----------------------------------- | --------------------------------- | ----------------- |
| **検出結果**     | Aikido Pentest と AI Code Analysis   | Aikido Pentest と AI Code Analysis | 詳細レビュー            |
| **トリガー**     | クリックします **プレビューを作成** または **PR を作成** | 新しい検出結果が、あなたの重大度ポリシーに一致します        | 検出結果のコメントに返信します   |
| **ベースブランチ**  | デフォルトブランチ、または選択したブランチ               | デフォルトブランチ、またはプレビューのブランチ           | レビューしている PR のブランチ |
| **レビューする場所** | Aikido アプリでプレビューし、その後 PR            | PR                                | PR                |

## AutoFix ページから検出結果を修正

{% stepper %}
{% step %}

### 検出結果を開きます

次へ移動します： [**AutoFix** → **コード**](https://app.aikido.dev/issues/fix/pentest) and select **ペンテスト** または **AIコード解析**。次の **リポジトリ**, **深刻度**、および **ペンテストプロジェクト** フィルターで一覧を絞り込みます。

<figure><img src="https://help.aikido.dev/_assets/50a1e9f1cb07/image-442.png" alt="AutoFix page with the Pentests tab open, listing findings by severity and repository"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### 修正をプレビュー

クリックします **プレビューを作成** 検出結果で。重大度が Critical と High の検出結果については、Aikido はペンテストで報告されるとすぐにプレビューを準備することが多いため、すぐに **プレビューを表示** をクリックできます。

<figure><img src="https://help.aikido.dev/_assets/a3a317cbb1d3/image-443.png" alt="AutoFix preview showing the code changes that fix a pentest finding"><figcaption></figcaption></figure>

利用可能な場合、プレビューには追加情報が表示されます:

* **古い:** プレビュー作成後にファイルが変更されています。ラベルをクリックすると、最新のコードに対してプレビューを再生成できます。
* **テストに合格** または **テストに失敗:** 修正に対してテストを実行した結果です。
{% endstep %}

{% step %}

### 修正を調整

修正が完全でない場合は、 **Aikido AI で絞り込む** をクリックして、変更内容を説明してください。参照: [Aikido AIでAutoFixを洗練する](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/automation-and-merging/refine-autofixes-with-aikido-ai)を見つけます。 **再生成** 最初からやり直すか、 **無視としてマーク** をクリックします。検出結果に修正が不要な場合です。
{% endstep %}

{% step %}

### プルリクエストを開く

クリックします **PR を作成**。横のドロップダウンには、さらにオプションがあります:

* **特定のブランチに PR を作成:** デフォルトブランチ以外、たとえばリリースブランチを対象に PR を開きます。
* **PR を作成してデプロイ:** PR を開き、リポジトリのデプロイラベルを追加します。
{% endstep %}
{% endstepper %}

## 修正を自動作成する

AutoFix は、誰もボタンをクリックしなくても、新しいペンテストまたは AI Code Analysis の検出結果ごとに PR を開けます。依存関係や静的アプリケーションセキュリティテスト（SAST）の毎日の自動 PR とは異なり、これらの PR は検出結果が報告されるとすぐに作成されます。

新しい検出結果ごとに、Aikido は次のことを行います:

1. 修正プレビューを生成します。
2. 検出結果をリポジトリと重大度の設定に照らして確認します。
3. プレビューにコード変更が含まれ、検出結果が一致する場合は PR を開きます。

### 自動 PR をセットアップ

{% stepper %}
{% step %}

### 自動 PR の設定を開く

次へ移動します： [**AutoFix** → **設定**](https://app.aikido.dev/issues/fix/settings) にスクロールし、 **自動 PR**.
{% endstep %}

{% step %}

### ペンテストおよび AI Code Analysis の問題に対する修正を有効にする

オンにする **Pentest & AI Code Analysis の問題を自動修正**.

<figure><img src="https://help.aikido.dev/_assets/1befee1fc87e/autofix-pentest-automated-prs-settings.png" alt="Manage Pentest and AI Code Analysis Autocreation modal with the repository and severity settings"><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### リポジトリと重大度を選択

* **リポジトリ:** すべてのリポジトリ、または一部を選択します。
* **重要度レベル:** 選択 **Critical と High の重大度** 最も重要な問題を修正する場合は、または **すべての問題**.
* **プライベートリポジトリのみ** （詳細設定内）: 公開リポジトリでは自動 PR を開かないようにします。
{% endstep %}

{% step %}

### 設定を保存

クリックします **設定を保存**。 **自動 PR** セクションには現在 **Pentest & AI Code Analysis Issues** と、選択した重大度が表示されます。
{% endstep %}
{% endstepper %}

{% hint style="info" %}
自動 PR は、 [PR 設定](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/configure/autofix-pr-configuration)に従います。たとえば、タイトルの接頭辞、ブランチ名、ラベルです。
{% endhint %}

### リポジトリごとに設定を上書きする

次の `.aikido` ファイルをリポジトリのデフォルトブランチのルートに置くことで、そのリポジトリ専用の重大度ポリシーを変更できます。ファイル内の値は、Aikido アプリでの **重要度レベル** 設定より優先されます。自動 PR は引き続き有効である必要があり、リポジトリも Aikido アプリで選択されていなければなりません。

{% code title=".aikido" %}

```yaml
autofix:
  automated:
    pentest:
      update_policy: all # or critical_and_high_only
```

{% endcode %}

リポジトリの自動ペンテスト PR を停止するには、 `disabled: true` に追記してください:

{% code title=".aikido" %}

```yaml
autofix:
  automated:
    pentest:
      disabled: true
```

{% endcode %}

参照 [リポジトリ固有の設定](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/configure/autofix-pr-configuration#repository-specific-configuration) を `.aikido` すべての

### API で設定を管理

公開 API を使って同じ設定を読み取り・更新できます。読み取りには `autofix:read` スコープが必要で、更新には `autofix:write`.

* [Pentest AutoFix PR 作成設定を取得](https://apidocs.aikido.dev/reference/getpentestautofixsettings): `GET /api/public/v1/repositories/autofix/pentest/settings`
* [Pentest AutoFix PR 作成設定を更新](https://apidocs.aikido.dev/reference/updatepentestautofixsettings): `PUT /api/public/v1/repositories/autofix/pentest/settings`

{% code title="Request body" %}

```json
{
  "enabled": true,
  "severity_filter": "critical_and_high_only",
  "repos_scope": "selected",
  "repo_ids": [123, 456]
}
```

{% endcode %}

`severity_filter` を受け入れます `all` または `critical_and_high_only`. `repos_scope` を受け入れます `all` または `selected`をデフォルトとし、 `all`です。 `{"enabled": false}` を送信すると、自動 PR がオフになります。 **プライベートリポジトリのみ** オプションは Aikido アプリでのみ利用できます。

## プルリクエストのコメントから Deep Review の検出結果を修正する

次の場合 [詳細レビュー](https://help.aikido.dev/docs/docs-ja/deep-review/how-deep-review-works) があなたの PR に検出結果を投稿したら、PR を離れずに修正を取得できます。検出結果のコメントに返信し、平易な言葉で修正を依頼してください。コマンドやタグは必要ありません。

<figure><img src="https://help.aikido.dev/_assets/e185f82f88bb/autofix-deep-review-reply-fix.png" alt="Reply on a Deep Review finding comment asking Aikido to fix the issue, with Aikido&#x27;s reply linking to the fix pull request"><figcaption></figcaption></figure>

Aikido はあなたの返信を読み取り、何を望んでいるかを解釈します。修正を依頼すると、Aikido は次のことを行います:

1. あなたの PR の最新コミットを起点に、検出結果の修正を作成します。
2. 次を対象にする新しい PR を開きます **あなたの PR のブランチ**。マージすると、その修正があなたの PR に取り込まれます。
3. コメントには次のようなリンクで返信します: 「問題を修正するための新しいプルリクエストを開きました: #123。新しいプルリクエストは現在の PR をベースにしています。」

修正 PR には変更内容の説明と、Deep Review の検出結果へのリンクが含まれます。

### 依頼にコンテキストを追加する

Aikido はあなたの返信全体を指示として AutoFix に渡します。修正の方向付けに使えます:

* 「これを修正できますか？」
* 「これを修正してください。ただし、 `sanitizeHtml` で既にあるヘルパーを使ってください `utils/`."
* 「修正して、既存のエラーレスポンス形式は維持してください。」

Aikido が修正 PR を開くのは、あなたが明確に依頼した場合だけです。「自分でこれを修正します」のような返信では修正は開始されません。

### 修正プルリクエストのその後

Aikido は、不要になった修正 PR を自動で閉じます:

* **検出結果が解決済みまたは無視された:** Aikido は修正 PR を閉じます。
* **あなたの PR がマージまたはクローズされた:** Aikido は、まだ開いている修正 PR を閉じます。

### 制限事項

プルリクエストのコメントからの修正依頼は、GitHub、GitHub Enterprise Server、GitLab Cloud、GitLab Self-Managed で利用できます。Bitbucket と Azure DevOps のサポートは近日対応予定です。

{% hint style="info" %}
Aikido ワークスペースのメンバーだけがコメントから修正を起動できるようにするには、 **@AikidoSec コマンドを Aikido ユーザーに制限** あなたの [PR チェック設定](https://help.aikido.dev/docs/docs-ja/pr-and-release-gating/aikido-ci-gating-functionality#advanced-configuration).
{% endhint %}

## 修正がマージされた後に起こること

AutoFix PR にリンクされたすべての問題が解決されると、たとえば修正が別の PR でマージされた場合、Aikido は PR を閉じ、そのブランチを削除します。ほかの誰かが PR にコミットをプッシュしている場合、Aikido はその PR を開いたままにします。

## 言語サポート

AutoFix はすべてのプログラミング言語に対応しています。JavaScript のコードベースでは、新しい単体テストも作成し、既存のテストも更新します。JavaScript、Python、.NET では、生成されたコードにリンティングルールを適用します。

## FAQ

<details>

<summary>なぜペンテストの検出結果に修正がないのですか？</summary>

AutoFix はソースコードのみを変更するため、接続されたリポジトリ内のファイルを指す検出結果が必要です。コードにアクセスできないペンテストの検出結果にはファイルの場所がありません。サーバーやクラウド構成に関する検出結果もコードでは修正できません。

</details>

<details>

<summary>なぜ Aikido は自動 PR を開かなかったのですか？</summary>

リポジトリが自動 PR 設定で選択されていること、検出結果の重大度がポリシーに一致していること、そしてリポジトリの `.aikido` ファイルがペンテストの修正を無効にしていないことを確認してください。 **プライベートリポジトリのみ** がオンの場合、公開リポジトリはスキップされます。Aikido は、ウォレット残高がマイナスの間も自動 PR をスキップします。

</details>

<details>

<summary>なぜ Aikido はプルリクエストでの修正依頼に応答しなかったのですか？</summary>

PR への新しいコメントではなく、Deep Review の検出結果コメントのスレッドに返信したことを確認してください。リポジトリが GitHub、GitHub Enterprise Server、GitLab Cloud、または GitLab Self-Managed 上にあることを確認してください。 **@AikidoSec コマンドを Aikido ユーザーに制限** がオンの場合、あなたの SCM アカウントは Aikido ワークスペースのメンバーにリンクされている必要があります。

</details>

## 関連

{% content-ref url="../automation-and-merging/automatic-creation-of-pull-requests.md" %}
[プルリクエストの自動作成](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/automation-and-merging/automatic-creation-of-pull-requests)
{% endcontent-ref %}

{% content-ref url="../automation-and-merging/refine-autofixes-with-aikido-ai.md" %}
[Aikido AIでAutoFixを洗練する](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/automation-and-merging/refine-autofixes-with-aikido-ai)
{% endcontent-ref %}

{% content-ref url="../configure/autofix-pr-configuration.md" %}
[AutoFix の PR 設定](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/configure/autofix-pr-configuration)
{% endcontent-ref %}

{% content-ref url="../../deep-review/how-deep-review-works.md" %}
[Deep Reviewの仕組み](https://help.aikido.dev/docs/docs-ja/deep-review/how-deep-review-works)
{% endcontent-ref %}
