coding-standards について
coding-standards(Corbat)は、コーディングエージェントにチーム規約、技術スタック別プロファイル、検証フィードバックを提供します。単独またはマルチエージェントの開発ワークフローで、アーキテクチャ、品質、安全性の基準を統一したいチーム向けです。
主な機能
- 01プロジェクトの技術スタックを検出してプロファイルを適用
- 02アーキテクチャとコード品質のルールを提示
- 03セキュリティを意識したチェック
- 04設定済みの基準に照らしたコード検証
- 05.corbat.jsonによるルールのカスタマイズ
活用シーン
- 01新規プロジェクトの規約設定
- 02マルチエージェント開発での基準共有
- 03コードレビュー基準に沿った変更の確認
- 04レガシーコードのモダナイズ支援
MCP 対応
Corbatはコーディングツール向けのMCPサーバーで、MCPクライアントに規約コンテキストと検証機能を提供します。プロジェクトの技術スタックを検出して適切なルールとフィードバックを返し、AIの生成結果自体は変更しません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| task | string | はい | 実装する内容(例:「決済サービスを作成」、「ログインの不具合を修正」) |
| project_dir | string | いいえ | 自動検出に使用するプロジェクトディレクトリ(任意) |
詳細
CORBAT MCP
AI コーディングエージェント向けポリシーおよび品質エンジン
エージェントを活用したソフトウェア開発のための、共通の標準、コンテキスト、検証ゲート。
MCP 対応のコーディングツールとマルチエージェントのワークフロー向けに設計されています。互換性に関する注意事項をご覧ください。
⚡ 30 秒で試せます — 以下の設定を追加して、コーディングを始めるだけです。
問題点
AI が生成したコードはローカルでは動作しても、チーム固有のレビュー基準を満たさないことがよくあります。
| Corbat なし | Corbat あり |
|---|---|
| 50 行を超えるメソッド | メソッドあたり最大 20 行 |
| 依存性注入なし | インターフェースを使った適切な DI |
throw new Error('failed') | コンテキストを含むカスタム例外 |
| テストがない、または最小限 | テストを含み、TDD アプローチを採用 |
| 巨大なクラス、関心事の混在 | SOLID 原則、クリーンなレイヤー構成 |
| ローカルでは動作 | 明示的なチェックを備え、レビュー可能な実装 |
Corbat は、実装前にエージェントへチームの標準を提示し、レビューや引き継ぎの前に検証ツールを提供することで支援します。
クイックスタート
1. MCP 設定に追加します:
{
"mcpServers": {
"corbat": {
"command": "npx",
"args": ["-y", "@corbat-tech/coding-standards-mcp"]
}
}
}
2. 設定ファイルの場所:
| ツール | 場所 |
|---|---|
| Cursor | .cursor/mcp.json |
| VS Code | .vscode/mcp.json |
| Windsurf | ~/.codeium/windsurf/mcp_config.json |
| JetBrains | Settings → AI Assistant → MCP |
| Claude Desktop | ~/.config/Claude/claude_desktop_config.json |
| Claude Code | claude mcp add corbat -- npx -y @corbat-tech/coding-standards-mcp |
MCP 対応の一般的なツールについては、セットアップガイドをご覧ください。
3. 完了です。 Corbat は技術スタックを自動検出し、対応する標準を返します。
オーバーヘッドはゼロ。 Corbat はローカルで動作し、技術スタックの検出に約 50ms 追加されるだけです。その後は AI 向けのコンテキストとして機能します。
完全にカスタマイズ可能。 ルールが気に入らない場合は、
.corbat.jsonで上書きできます。カスタマイズへ移動 →
動作を見る
You: "Create a user registration service"
Corbat なしの場合、次のようになります。
class UserService {
private users: Map<string, User> = new Map();
register(name: string, email: string, password: string) {
if (!name || !email || !password) throw new Error('Invalid input');
const user = { id: crypto.randomUUID(), name, email, password };
this.users.set(user.id, user);
return user;
}
}
// ✗ Hardcoded storage ✗ Password in plain text ✗ Generic error ✗ No tests
Corbat ありの場合、次のようになります。
// Domain
interface UserRepository {
save(user: User): Promise<void>;
findByEmail(email: string): Promise<User | null>;
}
class EmailAlreadyExistsError extends Error {
constructor(email: string) {
super(`Email already registered: ${email}`);
}
}
// Application
class RegisterUserUseCase {
constructor(
private readonly repository: UserRepository,
private readonly hasher: PasswordHasher
) {}
async execute(input: RegisterUserInput): Promise<User> {
const existing = await this.repository.findByEmail(input.email);
if (existing) throw new EmailAlreadyExistsError(input.email);
const user = User.create({
...input,
password: await this.hasher.hash(input.password)
});
await this.repository.save(user);
return user;
}
}
// ✓ Repository interface ✓ Password hashing ✓ Custom error ✓ Testable
// Test included
describe('RegisterUserUseCase', () => {
const repository = { save: vi.fn(), findByEmail: vi.fn() };
const hasher = { hash: vi.fn() };
const useCase = new RegisterUserUseCase(repository, hasher);
beforeEach(() => vi.clearAllMocks());
it('should hash password before saving', async () => {
repository.findByEmail.mockResolvedValue(null);
hasher.hash.mockResolvedValue('hashed_password');
await useCase.execute({ name: 'John', email: '[email protected]', password: 'secret' });
expect(hasher.hash).toHaveBeenCalledWith('secret');
expect(repository.save).toHaveBeenCalledWith(
expect.objectContaining({ password: 'hashed_password' })
);
});
it('should reject duplicate emails', async () => {
repository.findByEmail.mockResolvedValue({ id: '1', email: '[email protected]' });
await expect(
useCase.execute({ name: 'John', email: '[email protected]', password: 'secret' })
).rejects.toThrow(EmailAlreadyExistsError);
});
});
これは、引き継ぎの前にエージェントへ検討を促す構成の例です。
Corbat が提供するもの
Corbat は、生成前のガードレールと、反復作業中の検証チェックを提供します。
コード品質
| ルール | 重要な理由 |
|---|---|
| メソッドあたり最大 20 行 | 読みやすく、テスト可能で、単一の目的を持つ関数 |
| クラスあたり最大 200 行 | 単一責任の原則 |
| 意味のある名前 | data、info、temp、x は使わない |
| マジックナンバーを使わない | 説明的な名前を持つ定数を使用 |
アーキテクチャ
| ルール | 重要な理由 |
|---|---|
| 依存関係にはインターフェースを使用する | テスト可能なコードになり、簡単にモックできます |
| レイヤーを分離する | ドメインロジックをインフラストラクチャから切り離せます |
| ヘキサゴナル/クリーンアーキテクチャのパターン | フレームワークに依存しないビジネスルールを実現できます |
エラー処理
| ルール | 重要な理由 |
|---|---|
| カスタム例外 | UserNotFoundError と Error('not found') の違いです |
| エラーコンテキスト | エラーに ID、値、状態を含めます |
| 空の catch を使わない | すべてのエラーを処理するか、伝播させます |
セキュリティを重視したチェック
| ルール | 重要な理由 |
|---|---|
| 入力検証 | 境界で不正なデータを拒否します |
| シークレットをハードコードしない | 環境変数のみを使用します |
| パラメーター化クエリ | SQL インジェクションを防ぎます |
| 出力エンコーディング | XSS を防ぎます |
ベンチマーク結果 v3.0
Corbat を6つの言語で15のシナリオにわたって評価しました。主要なベンチマークレポートの結果は一様ではないため、正直に読み取る必要があります。元の集計スコアでは、Corbat が勝ったのは15シナリオ中1つでした。一方、別の価値分析では、コードの簡潔さと保守性において、より優れた結果が示されました。
データが裏付けること
最も強く確認された傾向は、Corbat のガイドに沿った出力が、より短く、要点を絞ったものになることが多い点です。
| シナリオ | Corbat あり | Corbat なし | これが意味すること |
|---|---|---|---|
| Kotlin コルーチン | 236行 | 1,923行 | 同じ機能を、保守対象を8分の1にして実現 |
| Java ヘキサゴナル | 623行 | 2,740行 | 過剰な記述なしでクリーンアーキテクチャを実現 |
| Go クリーンアーキテクチャ | 459行 | 2,012行 | Java 風の Go ではなく、慣用的な Go |
| TypeScript NestJS | 395行 | 1,554行 | 適切なパターンを、適切な規模で実現 |
これは、あらゆるケースで品質が向上すると主張するには不十分です。一部のワークフローでは、標準に関するコンテキストによって過剰なコード生成を抑えられることを示す証拠です。
価値指標
価値レポートでは、同じデータセットを効率性と保守性を重視する形で再評価しています。
| 指標 | 結果 | これが意味すること |
|---|---|---|
| コード削減率 | 67% | 保守、レビュー、デバッグの対象が減ります |
| セキュリティチェック | 100% | ベンチマークのパターンチェックで問題は検出されませんでした |
| 保守性 | 93%で優位 | 理解や変更が容易です |
| アーキテクチャ効率 | 87%で優位 | コード行数あたりのパターンが優れています |
| 認知負荷 | -59% | 新しい開発者のオンボーディングを迅速化します |
📊 価値分析の詳細
セキュリティ:ベンチマークのパターン検出結果はありません
OWASP Top 10 のカテゴリを参考にしたパターンチェックを使って、すべてのシナリオを分析しました。これは、SAST、DAST、依存関係スキャン、手動レビュー、脅威モデリングに代わるものではありません。
- SQL/NoSQL インジェクションのパターンは検出されませんでした
- XSS のパターンは検出されませんでした
- ハードコードされた認証情報は検出されませんでした
- 境界に入力検証のパターンが存在しました
- ベンチマークのサンプルでは、エラーメッセージからスタックトレースが漏えいしていませんでした
テストした言語とパターン
| 言語 | シナリオ | パターン |
|---|---|---|
| ☕ Java | 5 | Spring Boot、DDD 集約、ヘキサゴナル、Kafka イベント、Saga |
| 📘 TypeScript | 4 | Express REST、NestJS クリーンアーキテクチャ、React コンポーネント、Next.js フルスタック |
| 🐍 Python | 2 | FastAPI CRUD、リポジトリパターン |
| 🐹 Go | 2 | HTTP ハンドラー、クリーンアーキテクチャ |
| 🦀 Rust | 1 | リポジトリトレイトを使った Axum |
| 🟣 Kotlin | 1 | コルーチン+ストラテジーパターン |
📖 ベンチマークの全手法 · 価値分析
組み込みプロファイル
Corbat は技術スタックを自動検出し、適切な標準を適用します。
| プロファイル | 技術スタック | 提供内容 |
|---|---|---|
java-spring-backend | Java 21 + Spring Boot 3 | ヘキサゴナルアーキテクチャ + DDD、カバレッジ 80% 以上の TDD |
kotlin-spring | Kotlin + Spring Boot 3 | コルーチン、Kotest + MockK |
nodejs | Node.js + TypeScript | クリーンアーキテクチャ、Vitest |
nextjs | Next.js 14+ | App Router のパターン、Server Components |
react | React 18+ | フック、Testing Library、アクセシブルなコンポーネント |
vue | Vue 3.5+ | Composition API、Vitest |
angular | Angular 19+ | スタンドアロンコンポーネント、Jest |
python | Python + FastAPI | 非同期パターン、pytest |
go | Go 1.22+ | 慣用的な Go、テーブル駆動テスト |
rust | Rust + Axum | 所有権パターン、proptest |
csharp-dotnet | C# 12 + ASP.NET Core 8 | クリーンアーキテクチャ + CQRS、xUnit |
flutter | Dart 3 + Flutter | BLoC/Riverpod、ウィジェットテスト |
自動検出: Corbat は pom.xml、package.json、go.mod、Cargo.toml などを読み取ります。
Corbat を使う場面
| 使用例 | Corbat が役立つ理由 |
|---|---|
| 新しいプロジェクトを始める | 初日から適切なアーキテクチャを採用できます |
| 複数のエージェントによる開発 | 計画、実装、レビュー、セキュリティの各エージェントが同じポリシーコンテキストを共有します |
| 経験レベルがさまざまなチーム | 標準を明確にし、繰り返し適用できます |
| 厳格なコードレビュー基準 | エージェントが引き渡し前にレビュー基準に照らして検証できます |
| 規制対象の業界 | セキュリティとドキュメントの一貫性を保てます |
| レガシーシステムのモダナイズ | 新しいコードに最新のパターンを適用できます |
Corbat が必要ない場合
- 品質が重要ではない簡易プロトタイプ
- 使い捨ての一度限りのスクリプト
- あえて失敗を経験したい学習用プロジェクト
カスタマイズ
オプション 1:対話型セットアップ
npx corbat-init
技術スタックを検出し、適切なデフォルト値を設定した .corbat.json を生成します。
オプション 2:手動設定
プロジェクトのルートに .corbat.json を作成します。
{
"profile": "java-spring-backend",
"architecture": {
"pattern": "hexagonal",
"layers": ["domain", "application", "infrastructure", "api"]
},
"quality": {
"maxMethodLines": 20,
"maxClassLines": 200,
"minCoverage": 80
},
"rules": {
"always": [
"Use records for DTOs",
"Prefer Optional over null"
],
"never": [
"Use field injection",
"Catch generic Exception"
]
}
}
オプション 3:テンプレートを使用する
Java、Python、Node.js、React、Go、Rust などの**すぐに使える 14 種類のテンプレートを参照**できます。
仕組み
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Your Prompt │────▶│ Corbat MCP │────▶│ AI + Rules │
└─────────────┘ └──────┬──────┘ └─────────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ 1. Detect │ │ 2. Load │ │ 3. Inject │
│ Stack │ │ Profile │ │ Guardrails │
└────────────┘ └────────────┘ └────────────┘
pom.xml hexagonal max 20 lines
package.json + DDD + interfaces
go.mod + SOLID + custom errors
Corbat は AI の出力を変更しません。コンテキスト、標準、プロファイル、検証フィードバックを提供し、エージェントがレビューの期待に沿えるようにします。
重要: 実際のコード品質は、モデル、ホストツール、プロンプト、リポジトリのコンテキスト、テスト、人によるレビューによって異なります。Corbat はポリシーと検証のレイヤーとして利用し、本番環境での利用に耐えられることを保証するものとは見なさないでください。
ドキュメント
| リソース | 説明 |
|---|---|
| セットアップガイド | 主要な MCP 互換ツールのインストール手順 |
| テンプレート | すぐに使える .corbat.json の設定 |
| 互換性 | 対応する AI ツールの全一覧 |
| ベンチマーク分析 | 15 のシナリオの詳細な結果 |
| マルチエージェントアーキテクチャ | Corbat を計画/レビュー/セキュリティ/リリースエージェントのワークフローに組み込む方法 |
| セキュリティモデル | ローカル実行モデル、脅威モデル、レポート |
| API リファレンス | ツール、プロンプト、設定オプション |
エージェントの出力をレビューしやすくしましょう。
MCP の設定に追加するだけで完了です。
{ "mcpServers": { "corbat": { "command": "npx", "args": ["-y", "@corbat-tech/coding-standards-mcp"] }}}
Corbat を、共有の標準コンテキストとローカルな品質ゲートとしてご利用ください。
corbat-tech によって開発
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。