適合性ルール(ガードレール)

Conformance rules — deterministic guardrails for AI agents

適合性ルールは、アーキテクチャ上の意思決定に照らしてコード変更を検証する決定論的なチェックです。命名規則、技術的制約、レイヤー境界、セキュリティパターンを強制します — AI は一切関与しません。

サイドバーの エージェントハブ に移動して、適合性ルールを管理します。

なぜ適合性ルールが必要なのか?

AI コーディングエージェント(Claude Code、Cursor、Copilot)は、コードを生成する際にあなたのアーキテクチャ上の意思決定を知りません。適合性ルールは、これらの意思決定を実行可能な制約としてエンコードします:

  • テクノロジーレーダーで PostgreSQL と定めている場合、エージェントは MongoDB を使用できません
  • アーキテクチャでサービスレイヤーを必須としている場合、エージェントは HTTP ハンドラーにデータベース呼び出しを置けません
  • チームで構造化ログを使用している場合、エージェントは fmt.Println を追加できません

ルールは 決定論的 に評価されます — LLM も確率的な出力もありません。同じコードからは常に同じ結果が得られます。

ルールタイプ

Archyl は 7 種類の適合性ルールをサポートしています:

必須パターン

コード内に存在しなければならないパターン、または存在してはならないパターンをチェックします。

ユースケース 例
デバッグログの禁止 fmt.Println、console.log、print() を禁止
セキュリティリスクの禁止 eval()、innerHTML、ハードコードされたパスワードを禁止
エラーハンドリングの必須化 シェルスクリプトで set -euo pipefail を必須化
標準の強制 SQL クエリでの SELECT * を禁止

設定:

  • File glob — パターンに一致するファイルのみをチェックします(例:*.go、*.{ts,tsx})
  • Forbidden patterns — 見つかると違反になる正規表現パターン
  • Required patterns — 見つからないと違反になる正規表現パターン

ファイル glob はブレース展開に対応しています:*.{js,jsx,ts,tsx} はすべての JavaScript ファイルと TypeScript ファイルに一致します。

命名規則

ファイル、型、関数の命名パターンを検証します。

スコープ 例
ファイル Go ファイルは snake_case.go でなければならない
型 エクスポートされた型は PascalCase でなければならない
関数 関数名は動詞(Get、Create、Delete)で始めるべき

設定:

  • Patterns — スコープ(ファイル/型/関数)+ 正規表現 + 説明のリスト

技術的制約

コンテナで使用できる言語とライブラリを制限します。

ユースケース 例
言語の固定 バックエンドは Go のみ
依存関係の禁止 lodash 禁止(ネイティブ JS を使用)
移行の強制 moment.js 禁止(date-fns を使用)

設定:

  • Allowed languages — カンマ区切りのリスト(例:go, typescript)
  • Forbidden imports — 1 行に 1 つのインポート

レイヤー境界

クリーンアーキテクチャ、ヘキサゴナルアーキテクチャ、または DDD のレイヤー間インポートルールを強制します。

レイヤー インポート可能な対象
Domain なし(純粋なビジネスロジック)
Service Domain のみ
Adapter Domain、Service
Infrastructure Domain のみ

設定:

  • Layers — 各レイヤーを、名前、パスパターン(glob)、許可するインポート元で定義します
  • レイヤー名をクリックすると、インポート権限を切り替えられます

契約準拠

エンドポイントのハンドラーファイルに、適切な API 契約のドキュメントが含まれていることを検証します。

設定:

  • Contract type — HTTP (OpenAPI)、gRPC、GraphQL、または AsyncAPI
  • Endpoint file patterns — エンドポイント定義を含むファイルを指定する glob
  • Strict mode — 有効にすると、契約ドキュメントのない一致ファイルはすべて違反になります

依存関係ルール

アーキテクチャ境界間で禁止するインポートパスを強制します。

設定:

  • Scope — コンテナレベルまたはコンポーネントレベル
  • Forbidden pairs — 互いに依存してはならないソースとターゲットのパスパターン(例:**/service/** -> **/handler/**)

イベントチャネル準拠

イベントのプロデューサー/コンシューマーのパターンが命名規則に従っていることを検証します。

設定:

  • Producer patterns — イベントを生成するコードを識別する正規表現パターン(例:kafka\.Send)
  • Consumer patterns — イベントを消費するコードを識別する正規表現パターン
  • Topic regex — 有効なトピック名が一致しなければならないパターン(例:^[a-z]+\.[a-z]+\.[a-z]+$)

ルールパック

パックは、ワンクリックでインストールできる厳選されたルールのコレクションです。ルールを 1 つずつ追加する代わりにパックをインストールすれば、スタックに合った完全なルールセットが手に入ります。

ツールバーの Packs をクリックすると、利用可能なパックを閲覧できます。

アーキテクチャパック

パック ルール数 強制する内容
Clean Architecture 5 domain/service/adapter/infra のレイヤー境界、モジュールの分離
Hexagonal Architecture 4 Ports & Adapters パターン、コアの分離
Domain-Driven Design 3 DDD レイヤー、CQRS のコマンド/クエリ分離

言語パック

パック ルール数 カバー範囲
Go Backend 26 エラーのラップ、goroutine の安全性、コンテキストの伝播、命名、panic の禁止、init() の禁止
React Frontend 23 TypeScript の厳格性、コンポーネントパターン、データフェッチ、DOM 操作の禁止
Next.js Full-Stack 20 React のルール + SSR の安全性、window ガード、localStorage フック
Python Backend 16 例外処理、async パターン、型ヒント、グローバルステートの禁止
Java Backend 11 Spring DI パターン、例外処理、System.exit の禁止
Rust Backend 8 unwrap/unsafe の禁止、適切なエラー型、todo!() の禁止
Kotlin / Android 5 Null 安全性、イミュータビリティ、println の禁止
Vue Frontend 10 v-html の禁止、TypeScript の厳格性、innerHTML の禁止
.NET / C# Backend 5 async パターン、例外処理、ILogger
Swift / iOS 3 Optional の安全性、強制アンラップの禁止

ドメインパック

パック ルール数 カバー範囲
Security Essentials 17 ハードコードされたシークレット、インジェクション、脆弱な暗号、TLS、CORS
DevOps & Infrastructure 24 Docker、Kubernetes、Terraform、GitHub Actions、シェルスクリプト
API Best Practices 9 ステータスコード、SQL の安全性、契約ドキュメント、URL のハードコード禁止
Testing & Reliability 5 テストのスキップ禁止、.only() の禁止、sleep の禁止、TODO の禁止
Event-Driven Architecture 3 Kafka/RabbitMQ のトピック命名、トピックのハードコード禁止

ルールカタログ

Archyl には、23 の技術にわたる 169 個の組み込みルール のカタログが付属しています。エージェントハブで カタログを閲覧 をクリックすると、カタログを参照できます。

対応技術

Go、TypeScript、JavaScript、Python、Java、Kotlin、Rust、C#、C/C++、Ruby、PHP、Swift、React、Vue、Angular、Next.js、Docker、Kubernetes、Terraform、SQL、Shell、YAML、GitHub Actions

カテゴリ

カテゴリ 例
Architecture & Design Clean Architecture、Hexagonal、DDD、MVC、CQRS、handler-service-repository
Security ハードコードされたシークレットの禁止、eval() の禁止、SQL インジェクションの禁止、TLS 無効化の禁止、CORS ワイルドカードの禁止、コマンドインジェクションの禁止
Code Quality デバッグログの禁止、エラーのラップ、空の catch の禁止、bare except の禁止、any 型の禁止、unwrap() の禁止
Infrastructure & DevOps Docker バージョンの固定、K8s のリソース制限、特権コンテナの禁止、Terraform タグ、マルチステージビルド
Naming Conventions 言語ごとの snake_case、PascalCase、camelCase
Testing & Reliability テストのスキップ禁止、.only() の禁止、TODO/FIXME の禁止、テスト内での sleep の禁止
Performance 同期 sleep の禁止、goroutine の安全性、ループ内での await の禁止、Node.js での同期 I/O の禁止
API & Data 生 SQL の禁止、適切な HTTP ステータスコード、契約ドキュメント、URL のハードコード禁止
Event-Driven Kafka/RabbitMQ のトピック命名規則、トピック名のハードコード禁止

カタログ内のルールをクリックすると追加できます — 設定フォームには値が自動的に入力されます。

重大度レベル

各ルールには、その影響度を決める重大度があります:

重大度 意味 例
重大 マージ前に必ず修正 ハードコードされたシークレットの禁止、eval() の禁止、レイヤー境界違反
高 マージ前に修正すべき デバッグログの禁止、Docker バージョンの固定、Go での panic の禁止
中 都合の良いときに修正 命名規則、any 型の禁止、JS での var の禁止
低 情報提供 TODO/FIXME の禁止、React でのインラインスタイルの禁止

重大度が「重大」または「高」の違反が 1 件でも見つかると、適合性チェックは 失敗 します。「中」と「低」の違反はレポートされますが、チェックは失敗しません。

適合性ダッシュボード

エージェントハブの ダッシュボード タブでは、すべてのプロジェクトにわたる適合性チェックの概要をリアルタイムで確認できます。

表示内容

  • 統計カード — 合計チェック数、合格率(色分け表示)、合格数、不合格数
  • 合格 / 不合格比 — 割合をひと目で把握できるビジュアルバー
  • 最新チェックのバナー — 直近のチェックのステータスと、完全なレポートへのリンク
  • 最近のチェック一覧 — すべてのチェックを、ステータス、トリガー種別、プロジェクト名、ファイル数、違反数、経過時間とともに表示

フィルタリング

上部の プロジェクトのドロップダウン でチェックをプロジェクトごとに絞り込めます。すべてを表示するには「すべてのプロジェクト」を選択します。

チェックレポート

チェックをクリックすると、完全なレポートを詳しく確認できます:

  • 重大度の内訳バー — 重大/高/中/低の違反の割合を示すビジュアル表示
  • ファイル別にグループ化された違反 — 各違反の重大度、タイトル、説明、提案を表示する折りたたみ可能なセクション
  • チェックのメタデータ — トリガー種別、コミット SHA、開始時刻、所要時間

各チェックレポートには、それぞれ 共有可能な URL があります(例:/agent/dashboard/:checkId)。

チェックの削除

複数選択 を使って、チェックを一括削除できます:

  1. 各チェックの横にあるチェックボックスをクリックするか、「すべて選択」を使用します
  2. 表示される赤い Delete ボタンをクリックします
  3. チェックとその違反は完全に削除されます

CI/CD 統合

適合性ルールは、プルリクエストごとに自動で実行できます。セットアップ手順については GitHub Actions 統合 を参照してください。

仕組み

  1. GitHub で PR が作成または更新されます
  2. Archyl GitHub Action が変更されたファイルを取得します
  3. ファイルが評価のために Archyl API に送信されます
  4. 結果が PR コメントとコミットステータスチェックとして表示されます
  5. 重大度が「重大」または「高」の違反が見つかった場合、ワークフローは失敗します

PR コメント

違反が見つかると、Archyl は PR に詳細なコメントを投稿します:

  • 重大度別の違反数をまとめたサマリーテーブル
  • ファイルごとの違反と、その説明および提案
  • 以降のプッシュでは、コメントは重複して投稿されず、更新されます

ルールの管理

ルールの作成

  1. Packs をクリックしてスタックに合った厳選ルールセットをインストールするか、
  2. カタログを閲覧 をクリックして 169 個の組み込みルールから選んで追加するか、
  3. カスタムルール をクリックして新しいルールを手動で作成します

ルールの有効化/無効化

ルールの横にあるスイッチを切り替えると、そのルールを有効化または無効化できます。無効化されたルールは評価されません。

ルールの編集

ルールの編集アイコン(鉛筆)をクリックすると、名前、説明、重大度、設定を変更できます。

ルールの削除

削除アイコン(ゴミ箱)をクリックし、確認します。この操作は元に戻せません。

ルールのフィルタリング

  • 検索 — ルール名または説明で絞り込みます
  • タイプフィルター — タイプのピルをクリックすると、特定のタイプのルールだけを表示します

MCP 統合

適合性ルールには、MCP サーバーを通じて AI エージェントからアクセスできます:

利用可能な MCP ツール

ツール 説明
run_conformance_check 渡されたファイルに対して有効なすべてのルールを実行し、違反を返す
list_conformance_rules すべてのルールを一覧表示(プロジェクトによる絞り込みも可能)
create_conformance_rule 新しいルールを作成
update_conformance_rule ルールの設定、重大度、有効状態を更新
delete_conformance_rule ルールを削除
get_agent_context 有効なガードレールを含む、完全なアーキテクチャコンテキストを取得

エージェントからのチェック実行

run_conformance_check ツールを使うと、AI エージェントはコミット前にコードを検証できます。エージェントは作業中のファイルを送信します:

{
  "projectId": "your-project-uuid",
  "changedFiles": [
    { "path": "internal/handler/user.go", "status": "modified" }
  ],
  "fileContents": {
    "internal/handler/user.go": "package handler\nimport..."
  }
}

レスポンスには以下が含まれます:

  • passed — チェックに合格したかどうか(重大度が「重大」または「高」の違反がないこと)
  • violations — 重大度、ファイルパス、タイトル、提案を含む違反のリスト
  • rulesEvaluated — 評価されたルール
  • filesAnalyzed — 分析されたファイルの数
  • checkId — チェック ID(ダッシュボードで確認できます)

エージェントはこのフィードバックを使って、コードがコミットされる前に違反を修正できます。

エージェントコンテキスト

MCP ツール get_agent_context は、アーキテクチャブリーフィングの一部として、有効なすべての適合性ルールを返します。作業を始める前にこのツールを呼び出す AI エージェントは、どのガードレールを守るべきかを把握できます。

REST API

# Rules
GET    /api/v1/conformance/rules              # List rules
POST   /api/v1/conformance/rules              # Create rule
POST   /api/v1/conformance/rules/bulk         # Create multiple rules (used by packs)
GET    /api/v1/conformance/rules/:id          # Get rule
PUT    /api/v1/conformance/rules/:id          # Update rule
DELETE /api/v1/conformance/rules/:id          # Delete rule
POST   /api/v1/conformance/rules/:id/toggle   # Enable/disable

# Checks
POST   /api/v1/projects/:id/conformance/check # Trigger check with changed files
GET    /api/v1/conformance/checks             # List all checks (org-wide, ?projectId= filter)
GET    /api/v1/conformance/checks/:id/report  # Get check report with violations
POST   /api/v1/conformance/checks/delete      # Bulk delete checks { ids: [...] }

# Stats
GET    /api/v1/conformance/stats              # Org-wide statistics
GET    /api/v1/projects/:id/conformance/stats  # Project statistics

すべてのエンドポイントで認証が必要です(JWT、または変更操作には書き込みスコープを持つ API キー)。