> 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. クリック **ルールを保存** 有効化する

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

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

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

❌ **曖昧すぎる:**

```
適切なエラー処理を使用する
```

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

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

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

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

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

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

❌ **リンターで処理したほうがよいもの:**

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

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

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

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

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

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

#### API標準

```
すべてのREST APIエンドポイントにはレート制限ヘッダーを含めなければなりません 
(X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset)。
```

#### テスト要件

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

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

```
公開されるすべての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.
