> For the complete documentation index, see [llms.txt](https://help.aikido.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.aikido.dev/docs/docs-ja/kdo/add-custom-code-rules.md).

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

カスタムコードルールを使用すると、組織固有のチーム別コーディング標準やパターンを適用できます。特定のコードパターンを検出したり、命名規則を強制したり、デフォルトのチェックではカバーされないアーキテクチャ違反を検出するルールを作成できます。

### カスタムコードルールとは？

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

{% hint style="info" %}
グローバルまたはリポジトリ固有のガイドラインを実装したい場合は、こちらの [コードコンテキスト](/docs/docs-ja/kdo/add-extra-code-context.md) の機能。
{% endhint %}

### カスタムコードルールの作成

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

1. 次へ移動: [**コード品質** > **チェック**](https://app.aikido.dev/code-quality/checks) タブ
2. クリック **カスタムコードルールを追加**
3. ルールが検出すべき内容を明確に説明してください:

例:

```
Dockerfile で base image として Alpine ベースイメージのみを許可する
```

{% endstep %}

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

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

{% step %}
**例を生成して改善する**

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

**準拠例:**

```dockerfile
# ✅ ルールに従うコード
FROM alpine:3.18
RUN apk add --no-cache nodejs
```

**非準拠例:**

```dockerfile
# ❌ ルールに違反するコード
FROM ubuntu:latest
RUN apt-get update && apt-get install nodejs
```

{% endstep %}

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

1. クリック **ルールを検証** 例をテストするために
2. システムは次を検証します:
   * 準拠例がルールを通過すること
   * 非準拠例が正しくフラグ付けされること
   * ルールのロジックが一貫していて明確であること
3. 検証に失敗した場合は例を調整してください
   {% endstep %}

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

検証が完了したら、ルールに関する追加情報を入力してください:

1. **タイトル:** ルールにわかりやすく説明的な名前を付ける

   ```
   Docker コンテナで Alpine ベースイメージを使用する
   ```
2. **要約:** 問題の簡潔な要約を記載する

   ```
   Alpine 以外のベースイメージは、コンテナのサイズと攻撃対象領域を増やします
   ```
3. **修正方法:** 開発者向けに実行可能な指針を提示する

   <pre data-overflow="wrap"><code>ベースイメージを Alpine Linux 系に置き換えてください。たとえば、'FROM node:18' を 'FROM node:18-alpine' に変更します。パッケージのインストールコマンドを apt-get から apk に調整する必要がある場合があります。
   </code></pre>
4. クリック **ルールを保存** 有効にするために

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

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

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

❌ **あいまいすぎる例:**

```
適切なエラーハンドリングを使用する
```

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

```
すべての API エンドポイントは、データベース呼び出しを try-catch ブロックで囲み、返す必要があります 
ステータスコード付きの標準化されたエラーレスポンス
```

#### スタイルではなくパターンに注目する

カスタムルールは、書式よりも論理パターンの検出に最適です:

✅ **カスタムルールの良い候補:**

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

❌ **リンターで扱うほうがよいもの:**

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

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

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

```
すべての SQL クエリはパラメータ化されたステートメントを使用しなければなりません。文字列の直接 
連結は SQL クエリでは許可されません。
```

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

```
コントローラーはデータベースに直接アクセスしてはいけません。すべてのデータベース 
操作は、サービス層またはリポジトリ層を通過しなければなりません。
```

#### API 標準

```
すべての REST API エンドポイントにはレート制限ヘッダーを含める必要があります 
(X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)
```

#### テスト要件

```
エクスポートされたすべての関数には、少なくとも 1 つの対応するテストが必要です 
__tests__ ディレクトリ内に、同じファイル名パターンで配置してください。
```

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

```
すべての公開 API メソッドには、@param を含む JSDoc コメントを記載し、 
@returns および @throws の注釈を含めてください。
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://help.aikido.dev/docs/docs-ja/kdo/add-custom-code-rules.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
