# カスタムコードルールを追加する

Custom Code Rules を使用すると、組織固有のチーム独自のコーディング標準やパターンを適用し、検出された違反を Aikido に修正させることができます。特定のコードパターンを検出するルール、命名規則を適用するルール、デフォルトのチェックではカバーされないアーキテクチャ違反を指摘するルールを作成できます。

### Custom Code Rules とは？

Custom Code Rules は、チーム固有の要件に合わせて定義する AI 搭載のチェックです。一般的なベストプラクティスを適用するデフォルトのチェックとは異なり、カスタムルールはコードベース、アーキテクチャ、またはビジネスロジックに固有の標準を適用します。

{% hint style="info" %}
グローバルまたはリポジトリ固有のガイドラインを実装したい場合は、[Code Context](https://help.aikido.dev/docs/docs-ja/code-quality/add-extra-code-context) 機能をご確認ください。
{% endhint %}

### Custom Code Rule の作成

{% stepper %}
{% step %}
**ルールを定義する**

1. [**Code Quality** > **Checks**](https://app.aikido.dev/code-quality/checks) タブに移動します
2. **Add Custom Code Rule** をクリックします
3. ルールが検出すべき内容を明確に記述します：

例：

```
Allow only Alpine base images in Dockerfiles as base images
```
{% endstep %}

{% step %}
**対象言語を選択する**

このルールを適用するプログラミング言語を選択します
{% endstep %}

{% step %}
**例を生成して調整する**

* **Generate Examples** をクリックして、AI に初期のコードサンプルを作成させます
* 生成された例を確認し、修正します
* 準拠する例と準拠しない例の両方を用意します：

**準拠する例：**

```dockerfile
# ✅ Code that follows the rule
FROM alpine:3.18
RUN apk add --no-cache nodejs
```

**準拠しない例：**

```dockerfile
# ❌ Code that violates the rule
FROM ubuntu:latest
RUN apt-get update && apt-get install nodejs
```
{% endstep %}

{% step %}
**ルールを検証する**

1. **Validate Rule** をクリックして例をテストします
2. システムは以下を検証します：
   * 準拠する例がルールをパスすること
   * 準拠しない例が正しく検出されること
   * ルールのロジックが一貫しており明確であること
3. 検証に失敗した場合は例を調整します
{% endstep %}

{% step %}
**AutoFix プロンプトを追加する**

この手順は任意です。ワークスペースで [AutoFix](https://help.aikido.dev/docs/docs-ja/autofix-and-remediation/overview-aikido-autofix) が有効になっている必要があります。

1. 違反の修正方法を AutoFix に指示するプロンプトを記述します。Alpine の例の場合：`Replace the base image with alpine`。
2. **Validate Prompt** をクリックします。Aikido はプロンプトを準拠しない例に適用し、その結果をルールに照らしてチェックします。
3. 検証にパスした場合、修正された例はルールをトリガーしなくなります。**Continue** をクリックします。
4. 検証に失敗した場合、修正された例は依然としてルールをトリガーします。プロンプトを調整して再度検証します。

AutoFix なしでルールを保存するには **Skip** をクリックします。Aikido は、検証にパスしたプロンプトを保存した後に、カスタムルールに対して AutoFix を提供します。プロンプトの追加や変更は、後でルールを編集して行えます。プロンプトを変更した場合は、保存する前に再度検証が必要です。
{% endstep %}

{% step %}
**ルールの詳細を設定する**

検証が完了したら、ルールに関する追加情報を入力します：

1.  **Title：** ルールに明確でわかりやすい名前を付けます

    ```
    Use Alpine base images in Docker containers
    ```
2.  **TL;DR：** 問題の簡単な要約を記述します

    ```
    Non-Alpine base images increase container size and attack surface
    ```
3.  **How to fix：** 開発者向けに実行可能なガイダンスを提供します。このテキストは検出結果に表示されます。前の手順の AutoFix プロンプトは、Aikido が変更を生成するために使用するものです。

    <pre data-overflow="wrap"><code>Replace your base image with an Alpine Linux variant. For example, change 'FROM node:18' to 'FROM node:18-alpine'. You may need to adjust package installation commands from apt-get to apk.
    </code></pre>
4. **Save Rule** をクリックしてルールを有効化します

カスタムルールが Checks タブに表示され、有効化されたリポジトリの新しいプルリクエストのスキャンを開始します。
{% endstep %}
{% endstepper %}

### 効果的なカスタムルールの書き方

#### 具体的かつ明確にする

❌ **曖昧すぎる例：**

```
Use proper error handling
```

✅ **具体的で実行可能な例：**

```
All API endpoints must wrap database calls in try-catch blocks and return 
standardized error responses with status codes
```

#### スタイルではなくパターンに焦点を当てる

カスタムルールは、フォーマットよりも論理的なパターンの検出に最適です：

✅ **カスタムルールに適した候補：**

* API 認証の要件
* データベーストランザクションのパターン
* セキュリティヘッダーの実装
* ビジネスロジックの検証

❌ **リンターで扱う方が適しているもの：**

* インデントとスペース
* 括弧の配置
* 変数の命名スタイル

### カスタムルールの一般的な例

#### セキュリティルール

```
All SQL queries must use parameterized statements. Direct string 
concatenation in SQL queries is not allowed.
```

#### アーキテクチャルール

```
Controllers should not directly access the database. All database 
operations must go through a service or repository layer.
```

#### API 標準

```
All REST API endpoints must include rate limiting headers 
(X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset).
```

#### テスト要件

```
Every exported function must have at least one corresponding test 
in the __tests__ directory with the same file name pattern.
```

#### ドキュメント標準

```
All public API methods must include JSDoc comments with @param, 
@returns, and @throws annotations.
```
