コードベースが成長するにつれて、避けて通れないのが依存関係の複雑化です。気づかないうちに循環参照が生まれ、結合度の高いモジュールが増え、変更の影響範囲が読めなくなってしまいます。こうした問題を「なんとなく」で放置すると、リファクタリングのコストが雪だるま式に増えていきます。
依存関係の問題は、コードベースの規模が100ファイルを超えたあたりから顕在化し始め、500ファイルを超えると開発速度に明確な影響を与えます。手作業での依存関係管理には限界があり、静的解析ツールだけではアーキテクチャ上の問題を検出できません。そこで本記事では、AIによるコードベース全体の理解を活用した新しい依存関係管理のアプローチを紹介します。
Claude Codeは、コードベース全体を理解し、依存関係の可視化から改善提案までを対話的に進められるエージェント型コーディングツールです。本記事では、Claude Codeを使って依存関係の問題を発見し、具体的な改善アクションにつなげる実践的なワークフローを紹介します。
この記事でわかること
- コードベースの依存関係が引き起こす3つの典型的な問題パターン
- Claude Codeを使った依存関係の可視化と分析の具体的なプロンプト
- 循環参照の検出から解消までのステップバイステップワークフロー
- モジュール結合度の定量化と改善アプローチ
- CI/CDパイプラインに依存関係チェックを組み込む5ステップ
- 大規模コードベースでの注意点とチーム導入のROI試算
コードベースの依存関係が引き起こす3つの問題
依存関係の複雑化は、プロジェクトの規模が大きくなるほど顕在化します。以下の3つが代表的な問題パターンです。
1. 循環参照(Circular Dependency)
モジュールAがモジュールBをインポートし、モジュールBがモジュールAを(直接的または間接的に)インポートしている状態です。PythonやJavaScript、TypeScriptなどでは実行時エラーやインポートの無限ループを引き起こします。
たとえば、models/user.py が services/notification.py をインポートし、services/notification.py が models/user.py を参照しているケースです。小規模なうちは問題が表面化しませんが、リファクタリング時に突然インポートエラーとして発覚します。
2. 高結合度モジュール(High Coupling)
あるモジュールが他の多数のモジュールに依存している状態です。このモジュールを変更すると、依存先すべてに影響が波及します。変更のたびに広範囲の回帰テストが必要になり、開発速度が落ちる原因になります。
典型的な例は「何でも屋ユーティリティモジュール」です。utils/common.py に様々な関数が詰め込まれ、プロジェクト全体から参照されているようなケースが該当します。
3. 依存方向の逆転(Dependency Inversion Violation)
ドメイン層がインフラ層に依存する、あるいはビジネスロジックがUIフレームワークに依存するなど、アーキテクチャ上の依存方向が逆転している状態です。クリーンアーキテクチャやオニオンアーキテクチャの原則に反し、技術的な変更(フレームワークのアップデートなど)がビジネスロジックに影響を与えます。
これらの問題は、コードレビューでは見逃されやすく、静的解析ツールだけでは完全に検出できないことも少なくありません。Claude Codeはコードベース全体を解析し、文脈を理解した上で問題を特定できる点が強みです。
Claude Codeで依存関係を可視化する具体的な方法
Claude Codeはコードベース全体を読み込んで分析できるため、専用の依存関係解析ツールを導入しなくても、対話的なプロンプトで依存関係を把握できます。コードを実際に変更する前に、分析結果を人間が確認できる点も安心です。
基本的な依存関係マップの生成
以下のようなプロンプトで、Claude Codeに依存関係の分析を依頼します。
claude "このプロジェクトの全モジュール間の依存関係を分析して。
各モジュールがどのモジュールをimportしているか一覧にして、
循環参照があれば指摘して。また、最も多くのモジュールから
依存されている上位5つのモジュールも教えて。"
Claude Codeはプロジェクト内のファイルを読み込み、import文やrequire文を解析し、依存関係グラフを構築します。結果は自然言語でレポートされるため、専用ツールのセットアップなしで即座に分析を始められます。
CLAUDE.mdを活用した継続的な依存関係監視
プロジェクトのルートに配置するCLAUDE.mdに、依存関係に関するルールを記述しておくことで、Claude Codeがコード変更のたびに依存関係のチェックを行います。
# 依存関係ルール
- 新しいモジュールを追加する際は、既存モジュールへの依存を最小限にすること
- 循環参照は絶対に作らない。import文を追加する際は双方向の依存を確認する
- utils/ ディレクトリのモジュールは他のモジュールに依存しないこと
- ドメイン層(domain/)はインフラ層(infra/)に依存しないこと
CLAUDE.mdの設定について詳しくは、Claude Code settings.json設定完全ガイドも参照してください。
Plan Modeを使った大規模な依存関係改善
依存関係の改善が大規模なリファクタリングを伴う場合は、Claude CodeのPlan Modeが有効です。Plan Modeでは、Claude Codeが実際のコード変更を行う前に、改善計画を立案してレビューを求めます。
claude --plan "utils/ディレクトリの過剰な依存を解消したい。
common.pyから関数を適切なモジュールに分割し、
循環参照を解消する計画を立てて。"
Plan Modeの詳細な使い方は、Claude Code Plan Mode実践ガイドをご覧ください。
循環参照の検出と解消ワークフロー
循環参照はコードベースにおいて最も厄介な依存関係問題の一つです。Claude Codeを使えば、検出から解消までを一貫したワークフローで進められます。
Step 1: 全コードベースの巡回的依存を検出
claude "このコードベース全体を解析して、循環参照をすべて検出して。
直接的(A→B→A)と間接的(A→B→C→A)の両方を探して。
検出結果は循環のパスとともにリストアップして。"
Step 2: 循環ごとの重大度評価
検出された循環参照について、Claude Codeに重大度を評価させます。
claude "発見した循環参照それぞれについて、深刻度を
High/Medium/Lowで評価して。評価基準は:
- 関与するモジュール数
- 循環の深さ(何段階の依存か)
- 各モジュールの変更頻度(git logから判断)"
Step 3: 解消戦略の立案と実行
解消方法には主に3つのパターンがあります。
パターンA: インターフェースの導入 — 共通のインターフェース(または抽象クラス)を導入し、両方のモジュールがそれに依存するようにします。
パターンB: モジュールの分割 — 循環の原因となっている機能を新しいモジュールに切り出します。
パターンC: 依存方向の統一 — 一方の依存を逆向きに変更し、依存関係をDAG(有向非巡回グラフ)に整理します。
claude "検出した循環参照のうち、models/user.py ←→ services/auth.py の
循環を解消したい。インターフェースを導入する方法で
具体的な修正を提案して。"
モジュール結合度の定量化と改善アプローチ
循環参照だけでなく、モジュール間の結合度(coupling)を定量化することで、より体系的な改善が可能になります。
結合度の指標
Claude Codeにコードベースを分析させ、以下の指標を算出できます。
| 指標 | 説明 | 改善の方向性 |
|---|---|---|
| Afferent Coupling(Ca) | そのモジュールに依存しているモジュール数 | 高いほど変更の影響が大きい |
| Efferent Coupling(Ce) | そのモジュールが依存しているモジュール数 | 高いほど外部変更に脆弱 |
| Instability(I) | Ce / (Ca + Ce)。0に近いほど安定、1に近いほど不安定 | 0.3〜0.7が適正範囲 |
| Abstractness(A) | 抽象クラス・インターフェースの割合 | 安定モジュールは高くあるべき |
分析プロンプト例
claude "各モジュールのAfferent CouplingとEfferent Couplingを
算出して、Instabilityの高い順にソートした表を作成して。
Instabilityが0.8を超えるモジュールについては、
具体的な改善案も提案して。"
この分析結果をもとに、Claude Codeで技術的負債を返済する実践ガイドで紹介されているアプローチと組み合わせることで、段階的な改善計画を立てられます。
CI/CDパイプラインに組み込む5ステップ
依存関係のチェックを一過性のものにせず、継続的に監視するにはCI/CDパイプラインへの組み込みが効果的です。
Step 1: GitHub Actionsワークフローの作成
name: Dependency Check
on: [pull_request]
jobs:
dependency-analysis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Claude Code dependency check
run: |
claude -p "このPRの変更によって新しい循環参照が
発生していないかチェックして。もし問題があれば
具体的な内容と修正案をコメント形式で出力して。" \
--output-format stream-json \
--allowedTools "Read,Grep,Glob"
Step 2: 閾値アラートの設定
モジュールの結合度(Efferent Coupling)が閾値を超えた場合にアラートを出す仕組みを追加します。たとえば、特定のモジュールが10以上の他モジュールに依存するようになったらPRのマージをブロックする、といったルールを設定します。
Step 3: 自動修正提案の有効化
Claude CodeにPRの差分を分析させ、依存関係の問題を自動検出して修正提案をコメントとして残します。GitHub Actionsのclaude-code-reviewアクションを利用すれば、PRのたびに自動で依存関係レビューが実行されます。
Claude CodeのGitHub Actions統合を使えば、PR作成時に自動で依存関係分析が実行され、問題があればPRのコメントとして修正提案が投稿されます。レビュアーは提案を確認し、必要に応じて修正を承認するだけで済みます。
Step 4: ダッシュボード化とメトリクス追跡
依存関係の健全性スコアを時系列で記録し、チーム全体で可視化します。Claude Codeの分析結果を--output-format stream-jsonでJSONとして出力し、以下のようなメトリクスを定期的に収集します。
- 循環参照の総数と推移(週次)
- モジュールあたりの平均依存数(Efferent Couplingの中央値)
- Instability指標が0.8を超えるモジュール数
- 依存方向違反(レイヤー違反)の検出数
これらのメトリクスをGrafanaやDatadogのダッシュボードに連携することで、コードベースの健全性を「見える化」できます。Claude Codeのスケジュール実行機能を使えば、毎週月曜朝に自動で依存関係レポートを生成し、Slack通知することも可能です。
Step 5: 定期的な全コードベース監査と改善サイクル
週次で全コードベースの依存関係監査を自動実行し、長期的なトレンドを追跡します。以下のような改善サイクルを回すことで、コードベースの健全性を維持できます。
週次サイクル: Claude Codeで自動分析 → 新たに発生した循環参照や高結合モジュールを検出 → Slack通知 → 担当者が対応
月次サイクル: 全コードベースの依存関係スコアを集計 → 前月比をレポート → アーキテクチャ改善の優先順位を見直し
四半期サイクル: 大規模な依存関係リファクタリングを計画 → Plan Modeで改善計画を立案 → スプリントに組み込んで実行
CI/CDパイプラインの自動化全般については、Claude CodeでCI/CDパイプライン自動構築もあわせてご覧ください。
また、依存関係分析の結果をコードレビューやCI/CDパイプラインと連携させることで、依存関係の問題を「検出して終わり」ではなく「継続的に改善する」仕組みが整います。
大規模コードベースでの注意点とベストプラクティス
数千ファイルを超える大規模なコードベースでClaude Codeを使う場合、いくつかの注意点があります。
コンテキストウィンドウの効率的な活用
Claude Codeはコンテキストウィンドウ内で動作するため、大規模コードベース全体を一度に解析することはできません。以下のテクニックで効率的に分析を進めましょう。
- サブディレクトリ単位での分析: まずは特定のディレクトリ(モジュール)単位で依存関係を分析し、全体像は段階的に構築する
- Grep/Globツールの活用: Claude Codeは内部的にGrepやGlob検索を使用して必要なファイルだけを読み込むため、依存関係分析でも効率的に動作する
- CLAUDE.mdの戦略的配置: サブディレクトリごとにCLAUDE.mdを配置し、そのディレクトリの依存関係ルールを明示する
数千ファイル規模のプロジェクトでは、依存関係分析を分割して実行することが重要です。まずはsrc/直下のトップレベルモジュール間の依存関係を分析し、次に問題が見つかったモジュールの内部を詳細に分析する、というトップダウンアプローチが効果的です。Claude Codeのサブエージェント機能を使えば、複数ディレクトリの並列分析も可能です。
大規模コードベースでのClaude Code設定については、Anthropic公式ドキュメントの「Set up Claude Code in a monorepo or large codebase」も参考になります。
また、分析対象のファイルを適切に絞り込むことで、コンテキストウィンドウを効率的に使えます。.claude/settings.jsonでallowedToolsを設定し、依存関係分析に必要なGrepとGlobのみを許可することで、不要なツール呼び出しを防ぎ、分析の精度を上げられます。
依存関係分析の実行前に、「このディレクトリ配下のPythonファイルのみを対象にする」といったスコープ指定をプロンプトに含めることで、Claude Codeが無関係なファイルを読み込むのを防げます。プロジェクト固有のビルドファイルやテストファイルを除外する指示も効果的です。
並列実行による分析の高速化
Claude Codeのサブエージェント機能を使えば、複数のディレクトリを並列で分析できます。親エージェントが全体の調整を行い、各サブエージェントが担当ディレクトリの依存関係を分析する構成です。
claude "src/配下の各ディレクトリについて、サブエージェントを
立ち上げて依存関係を並列分析して。結果を統合して、
プロジェクト全体の依存関係マップを作成して。"
モノレポでの注意点
モノレポ構成のプロジェクトでは、パッケージ間の依存関係が特に重要です。Claude Codeでモノレポを扱う実践ガイドで紹介されている手法と組み合わせることで、パッケージ間の循環参照も効率的に検出できます。
依存関係改善のROI試算とチーム導入効果
依存関係の改善は、短期的には工数がかかるように見えますが、中長期的には明確なリターンがあります。
定性的な効果
- コードレビュー時間の短縮: 依存関係が整理されていると、変更の影響範囲が明確になり、レビュアーの負荷が軽減される
- 新メンバーのオンボーディング加速: 依存関係が明確なコードベースは、構造が理解しやすく、新メンバーが貢献を始めるまでの時間が短くなる
- リファクタリングの安全性向上: 循環参照がないコードベースでは、コンポーネント単位での安全なリファクタリングが可能になる
エンジニアリングメトリクスへの影響
依存関係の健全性は、
コードレビュー効率化の具体的な効果については、Claude Codeでコードレビューを効率化する実践ガイドも参照してください。
実際のプロジェクトで試す:依存関係改善の成功パターン
ここでは、実際のプロジェクトでClaude Codeを使った依存関係改善の典型的な流れを紹介します。
パターン1: ユーティリティ地獄からの脱出
多くのプロジェクトで見られるのが、utils/common.pyやlib/helpers.jsのような「何でも屋」モジュールです。数百の関数が詰め込まれ、プロジェクト全体から参照されている状態は、変更のたびに広範囲のテストが必要になります。
改善手順: Claude Codeに「utils/common.pyの関数を責務ごとに分類し、適切なモジュールに分割する計画を立てて」と依頼します。Plan Modeを使えば、分割計画をレビューしてから実行できます。
パターン2: レイヤー間の依存方向修正
ドメイン層(ビジネスロジック)がインフラ層(データベースアクセス)に直接依存しているケースです。この状態では、データベースの変更がビジネスロジックに影響を及ぼします。
改善手順: リポジトリインターフェースをドメイン層に定義し、実装をインフラ層に移動します。Claude Codeに「UserRepositoryインターフェースをdomain/に作成し、現在の infra/database.py の実装をそれに合わせて修正して」と指示することで、依存方向を逆転できます。
パターン3: モノレポ内のパッケージ間循環参照の解消
モノレポ構成では、パッケージ間の循環参照が特に厄介です。@company/sharedが@company/authに依存し、@company/authが@company/sharedに依存しているケースが典型です。
改善手順: 共通部分を新しい@company/coreパッケージに切り出し、両方のパッケージがこれに依存するようにします。Claude Codeに「@company/shared と @company/auth の循環参照を解消するため、共通部分を抽出して @company/core に移動して」と依頼します。
これらの改善パターンを実践すれば、コードレビューの効率化や技術的負債の返済にもつながります。
よくある質問
Q1: 既存の静的解析ツール(ESLintやPyLintなど)と何が違うのか?
静的解析ツールは定義されたルールベースで検出しますが、Claude Codeはコードの文脈や意図を理解した上で分析します。たとえば、ESLintのimport/no-cycleルールはファイル間の循環参照を検出しますが、それがアーキテクチャ上許容できるかどうかの判断はできません。Claude Codeはドメイン知識を踏まえた上で、「この循環参照は中期的に問題になる可能性が高い」といった定性的な評価を提供できます。
Q2: Claude Codeの分析結果はどの程度信頼できるのか?
Claude CodeはAnthropicのClaudeモデルを基盤としており、コードベース全体を解析して依存関係を特定します。ただし、AIによる分析である以上、誤検出や見落としの可能性はゼロではありません。重要な判断には、人間のレビューと組み合わせることを推奨します。Plan Modeを使って変更前に計画をレビューすることで、リスクを最小化できます。
Q3: 大規模な循環参照の解消にかかる工数は?
プロジェクトの規模と複雑さに依存しますが、Claude Codeを使うことで手動でのリファクタリングに比べて大幅に工数を削減できます。Plan Modeで解消計画を立て、段階的に実行することで、1日あたり3〜5件の循環参照を安全に解消していくペースが現実的な目安です。
Q4: 依存関係分析を始めるにあたって、チームでの合意形成は必要か?
依存関係の改善はアーキテクチャに関わる変更を含むため、チームでの合意が重要です。まずは分析結果をチームに共有し、「どのレベルの依存関係を問題とするか」の基準を話し合うことをおすすめします。Claude Codeの分析レポートは、そのままチーム内での議論の材料として使えます。
Q5: 依存関係分析の結果をチームに共有する効果的な方法は?
Claude Codeの分析結果をマークダウンレポートとして出力し、プロジェクトのWikiやドキュメントに保存する方法が効果的です。毎週の依存関係スコアの変化をグラフ化して共有することで、チーム全体でコードベースの健全性に対する意識を高められます。また、新たな循環参照が検出された場合は、PRのコメントとして自動投稿する仕組みも有効です。
Q6: Claude Codeの依存関係分析はどの言語・フレームワークに対応しているか?
Claude Codeはimport、require、from ... importなど、主要なプログラミング言語の依存関係宣言を理解できます。Python、JavaScript、TypeScript、Java、Go、Rust、Ruby、C#など、幅広い言語に対応しています。フレームワーク固有の依存関係(SpringのDI、Angularのモジュール、Reactのコンポーネントツリーなど)についても、文脈を理解した上で分析が可能です。Anthropic公式のCommon Workflowsも参照してください。
Q7: CLAUDE.mdに依存関係ルールを書く際のベストプラクティスは?
依存関係ルールは具体的かつ検証可能な形で記述するのが効果的です。「依存関係を適切に管理する」ではなく、「新しいimportを追加する際は、追加先と追加元の両方のファイルを確認し、循環参照が発生しないことを確認する」のように、具体的なアクションとして記述します。また、プロジェクト固有のアーキテクチャ上の制約(例: 「controllers/はservices/に依存してよいが、その逆は禁止」)を明文化することで、Claude Codeがコードレビュー時に自動でチェックできるようになります。
Q8: 依存関係分析を始める最小限のステップは?
まずは以下の3ステップから始めることをおすすめします。(1) プロジェクトルートで claude "このプロジェクトの依存関係をざっと分析して、気になる点を教えて" を実行する。(2) 出力されたレポートをチームで確認し、優先的に対処すべき問題を1〜2個選ぶ。(3) Plan Modeで改善計画を立て、1つずつ解消する。この最小限のアプローチであれば、初回の分析から改善着手まで30分程度で完了します。
今日から始める3ステップ
- 分析する:
claude "このプロジェクトの依存関係を分析して問題点を3つ挙げて"を実行 - 優先順位をつける: 検出された問題から、変更頻度の高いモジュールが関与するものを優先
- 改善する: Plan Modeで改善計画を立て、1つずつ安全に解消
初回の分析は5分で完了します。まずは試してみてください。
まとめ:依存関係の健全性はコードベースの健康診断
コードベースの依存関係は、プロジェクトの健常性を示す重要な指標です。Claude Codeを活用することで、これまで「なんとなく気になる」で見過ごしていた依存関係の問題を、定量的かつ継続的に管理できるようになります。
本記事で紹介したワークフローは、今日からすぐに試せます。まずは自分のプロジェクトで以下のコマンドを実行してみてください。
claude "このプロジェクトの依存関係を分析して、気になる点を3つ指摘して。"
Claude Codeは、Anthropic公式サイトからインストールできます。初回はクイックスタートガイドに沿ってセットアップし、まずは小さなスコープから依存関係分析を始めてみましょう。
Claude Codeの導入や依存関係分析についてご相談はこちら
「今のコードベースの依存関係がどの程度複雑なのか知りたい」「チームでClaude Codeを導入して依存関係管理を自動化したい」という方は、お問い合わせフォームからご連絡ください。