> 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のベースイメージとして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、 
@returns、および@throws のアノテーションを含むJSDocコメントを付ける必要があります。
```


---

# 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.
