メインコンテンツまでスキップ

アーキテクチャ分析

ArchiCore を使用してコードベースのアーキテクチャを理解し、改善する方法を学びます。

概要

ArchiCore はコード構造を分析して以下を特定します:

  • モジュール依存関係
  • 循環依存
  • レイヤー違反
  • 複雑度のホットスポット
  • アーキテクチャパターン

可視化

依存関係グラフ

メインダッシュボードにはインタラクティブな依存関係グラフが表示されます:

  • ノード はファイルまたはモジュールを表す
  • エッジ はインポート/依存関係を表す
  • はモジュールタイプまたは健全性を示す
  • サイズ はファイルの複雑さを反映

ナビゲーション

  • ズーム マウスホイールで
  • パン ドラッグで
  • クリック ノードで詳細を表示
  • ダブルクリック モジュールにフォーカス

アーキテクチャルール

アーキテクチャ境界を強制するルールを定義します。

ルールの作成

// .archicore/rules.json
{
"rules": [
{
"id": "layer-separation",
"name": "レイヤー分離",
"type": "import",
"severity": "error",
"config": {
"forbidden": [
{
"from": "controllers/*",
"to": "repositories/*",
"message": "コントローラーはリポジトリに直接アクセスすべきではありません"
}
]
}
}
]
}

組み込みルール

ルール説明
no-circular-deps循環依存を防止
max-complexityサイクロマティック複雑度を制限
max-file-lengthファイルサイズを制限
naming-convention命名規則を強制

ルールの検証

> /rules validate
アーキテクチャルールを検証中...

✓ no-circular-deps: 合格
✗ layer-separation: 失敗 (2 件の違反)
- src/controllers/user.ts:5 が src/repositories/user.ts をインポート
- src/controllers/product.ts:3 が src/repositories/product.ts をインポート

境界づけられたコンテキスト

アプリケーションの論理的な境界を定義します:

// .archicore/architecture.json
{
"boundedContexts": [
{
"name": "認証",
"description": "ユーザー認証とセッション",
"paths": ["src/auth/*", "src/middleware/auth*"]
},
{
"name": "製品",
"description": "製品カタログ管理",
"paths": ["src/products/*", "src/inventory/*"]
}
]
}

メトリクス

複雑度メトリクス

  • サイクロマティック複雑度 - 独立パスの数
  • 認知的複雑度 - コードの理解しにくさ
  • 保守性指数 - 全体的な保守性スコア

ホットスポットの特定

> /metrics --sort complexity
コード複雑度ホットスポット:

1. src/services/order.ts:processOrder()
複雑度: 25 | 行数: 180 | 保守性: 45

2. src/utils/parser.ts:parseInput()
複雑度: 18 | 行数: 120 | 保守性: 52

3. src/api/handlers.ts:handleRequest()
複雑度: 15 | 行数: 95 | 保守性: 58

リファクタリング提案

ArchiCore はリファクタリングの機会を提案できます:

> /refactoring src/services/order.ts
src/services/order.ts のリファクタリング提案:

1. メソッド抽出
processOrder() は複雑すぎます (25)
提案: バリデーションロジックを validateOrder() に抽出

2. ファイル分割
ファイルは180行で複数の責務を持っています
提案: OrderProcessor と OrderValidator に分割

3. 依存関係の削減
ファイルは12モジュールをインポートしています
提案: 結合度を下げるためにファサードパターンを検討

ベストプラクティス

  1. 定期的に分析を実行 - 問題を早期発見
  2. アーキテクチャルールを定義 - 違反を防止
  3. 複雑度をレビュー - ホットスポットをリファクタリング
  4. トレンドを監視 - メトリクスを時系列で追跡