# 自動修正 {#autofix}

## 概要

自動修正機能は、セキュリティ診断で検出された脆弱性を対象に、Takumi が自動的に修正のためのパッチを生成し、Pull Request を作成する機能です。

Shisho Cloud byGMO の Web 画面から利用できます。

## クレジット消費に関して {#credits}

利用にはクレジットが必要です。
クレジット消費量は、修正対象の脆弱性の複雑さやリポジトリのサイズに応じて変動します。

## 前提条件

自動修正機能を利用するには、修正したいコードが含まれるリポジトリに対するアクセス権限を持つ Write 用の GitHub Apps を連携させる必要があります。

詳細は [GitHub 連携](/docs/ja/g/getting-started/integrate-apps/github.md) のページを参照してください。

:::info[既に Write 用の GitHub Apps をインストール済みの場合]
本機能のリリースに伴い、GitHub App の「[Contents](https://docs.github.com/en/rest/authentication/permissions-required-for-github-apps?apiVersion=2022-11-28#repository-permissions-for-contents)」権限が Read から Read and Write に変更されました。すでに GitHub App をインストール済みの組織については、GitHub から権限更新のリクエストがメールで送信されます。自動修正機能を利用する際には、事前にこのリクエストを承認してください。
:::

## 使い方

自動修正機能では、修正対象の脆弱性ごとに「修正タスク」を作成し、そのタスクを単位として自動修正を実施します。

### 1. タスクの作成

タスクの作成方法は2通りあります。

#### 1-A: 診断結果から作成する（推奨）

診断結果ページで「脆弱性を修正する」ボタンを押し、表示されるメニューにおいて修正したい脆弱性を選択し、「タスク作成に進む」ボタンをクリックします。

:::info
過去に実施した診断結果については、「脆弱性を修正する」ボタンが利用できない場合があります。その場合は、「1-B: 自動修正タブから直接作成する」の方法をお試しください。
:::

![修正する脆弱性を選択](/docs/ja/_md-assets/3b0cc328c9-select-menu.png)

その後、表示されるタスク作成画面において以下の情報を入力・確認します：

- **タスク名**: 脆弱性のタイトルが自動入力されます
- **出力言語**: レポートの出力言語（日本語/英語）を選択
- **リポジトリ**: 修正対象のコードが含まれる GitHub リポジトリを選択
- **ブランチ**: 修正のベースとなるブランチを指定
- **修正対象の脆弱性**: 脆弱性のレポートが自動入力されます

![修正する脆弱性を選択](/docs/ja/_md-assets/807e7b6799-task-create.png)

#### 1-B: 自動修正タブから直接作成する

「診断」ページ内の「自動修正」タブを開き、「タスクを作成」ボタンをクリックします。

以下の情報を入力します：

- **タスク名**: 識別しやすい名前を設定します
- **出力言語**: レポートの出力言語（日本語/英語）を選択
- **リポジトリ**: 修正対象の GitHub リポジトリを選択
- **ブランチ**: 修正のベースとなるブランチを指定
- **修正対象の脆弱性**: 修正対象の脆弱性の詳細を入力（診断レポートからコピーしてください）

### 2. 自動修正の実行

タスク作成後、タスク一覧のメニューから「自動修正を実行」を選択すると、当該タスクが「実行中」の状態に移行します。

タスクが実行されている間、Takumi は以下の処理を自動的に行います：

- リポジトリのクローン
- 脆弱性の分析
- 修正コードの作成
- 修正内容の正当性を保証するためのユニットテストの作成
- 修正内容に関するレポートの作成

処理には数分から数十分程度かかる場合があります。

### 3. 結果の確認

処理が完了すると、タスクのステータスが「レビュー中」に変わります。
タスク一覧でタスク名をクリックすると、詳細ダイアログが開きます。

![結果の確認](/docs/ja/_md-assets/0e71551b0e-task-detail.png)

詳細ダイアログでは以下の内容を確認できます：

- **「修正案」**: 生成された修正内容を確認できます
  - **レポート**: 脆弱性の分析結果と修正内容の説明
  - **差分**: 生成された修正コードの差分
- **「修正対象の脆弱性」**: 入力した脆弱性情報を確認できます

:::tip
修正を複数回実行した場合、バージョンごとに修正案が保存されます。左側のバージョン一覧から任意のバージョンを選択して確認できます。
:::

### 4. Pull Request の作成

修正内容を確認し、問題がなければ「このバージョンで Pull Request を作成」ボタンをクリックします。
選択中のバージョンの修正内容で、GitHub リポジトリに Pull Request が自動的に作成されます。

PR 作成後、タスクのステータスは「完了」に変わり、一覧からも PR へのリンクが表示されます。

### 5. 再実行・クローズ・削除

タスクのメニューから以下の操作が可能です：

- **再実行**: 「自動修正を再実行」を選択し、「追加の指示」を入力して再度修正を実行できます。新しい修正案が生成され、バージョンとして追加されます。
- **クローズ**: 「クローズ」を選択すると、タスクを終了できます。ステータスが「クローズ済み」に変わります。
- **削除**: 「削除」を選択すると、タスクを完全に削除できます。

![再実行・クローズ・削除](/docs/ja/_md-assets/71e6d0fdb5-task-menu.png)

## タスクのステータス

| ステータス                | 説明                                                   |
| ------------------------- | ------------------------------------------------------ |
| 保留中（Pending）         | タスクが作成され、実行待ちの状態                       |
| 実行中（Running）         | Takumi が修正処理を実行中                              |
| レビュー中（Reviewing）   | 修正が完了し、ユーザーの確認待ち                       |
| 失敗（Failed）            | 修正処理中にエラーが発生した（再実行またはクローズ可） |
| 完了（Completed）         | Pull Request が作成され、タスクが完了                  |
| クローズ済み（Dismissed） | ユーザーによりタスクがクローズされた                   |

## 注意事項

- 生成された修正コードは、必ず人間による確認を行ってから本番環境に適用してください
- AI による修正は完璧ではない場合があります。テストの実行やコードレビューを推奨します
- 大規模なリポジトリや複雑な脆弱性の場合、処理に時間がかかることがあります
