281
268

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ありそうでなかった?C#のクラス図を自動生成するUIツールDependencyVisualizerを作った

281
Last updated at Posted at 2025-05-24

C#依存関係を可視化するDependencyVisualizer

目次

はじめに

本ツールは下記からダウンロードできます

git clone https://github.com/kitsune8848/DependencyVisualizer

あなたのプロジェクトは大丈夫?

「このクラスを変更したら、どこに影響が出るんだろう...」
「なぜこのテストが壊れたのかわからない...」
「新メンバーにコードベースの構造を説明するのが大変...」

プロジェクトが成長するにつれて、クラス間の依存関係は複雑に絡み合います。DependencyVisualizerは、そんな複雑な依存関係を一目で理解できるUML図に変換する、C#開発者のための可視化ツールです。

DependencyVisualizer機能

基本機能

  1. 洗練されたダークモードのUIから直観的な操作が可能
    image.png

  2. C#のソリューションファイルを読み込むことで自動的にクラス図を生成
    image.png

  3. VSCodeのPlantUML表示機能を使用してクラス図を表示。VSCodeのLiveView機能によりファイルが更新されるごとにクラス図も自動更新。Alt+Dを押してPlantUMLを起動する必要あり。
    image.png

  4. 着目する名前空間に属するクラスのみを表示するなど、任意のクラスを表示可能
    image.png

  5. 検索機能により即座に目的のクラスを発見
    image.png

  6. 着目するクラスに対して、依存先、依存元の近さを絞って表示が可能(着目するクラスをハイライトすることで視認性をUP)
    image.png

  7. 時間指定の自動更新に対応しており、ソースコードを編集しながらオーバヘッドなくクラス図を閲覧可能
    image.png

  8. 大規模なソースコードにも高速に適用可能。1万クラスのソースコードに対して数分で解析可能。

  9. クラスにSummaryを定義しておけば、クラス図にその情報を付加することが可能。クラス図の可読性の向上が図れる。
    image.png

  10. 窓のピン止め機能(ほかのアプリの下にならない。ないよりあったほうがいいかなレベル)
    image.png

  11. 最後に解析した.slnファイルを、次回の起動時に読み込んでくれる機能
    image.png

  12. 見やすいログ画面
    image.png

  13. クラス間の様々な依存を網羅し検出。下記記事の依存をすべて検出します。

このツールで解決できる6つの問題

1. 🔍 影響範囲の把握が困難

問題: 「このクラスを修正したら、どこまで影響するかわからない」

解決: 特定のクラスを起点として、依存関係の「距離」を指定して可視化できます。注目のクラスから距離2以内のクラス群を表示することで、修正時の影響範囲を事前に把握できます。

2. 📚 新メンバーへの説明が大変

問題: 「プロジェクト構造を新しい開発者に説明するのに時間がかかる」

解決: 複雑なコードの口頭説明は不要です。UML図を見せるだけで、システム全体の構造とクラス間の関係性を直感的に理解してもらえます。

3. 🌀 循環依存の発見

問題: 「知らない間に循環依存が発生して、テストやリファクタリングが困難に」

解決: 依存関係を可視化することで、循環依存を一目で発見できます。健全なアーキテクチャを維持するための第一歩です。

4. 🏗️ リファクタリング計画の立案

問題: 「大規模なリファクタリングをどこから始めればいいかわからない」

解決: 依存関係図を見ることで、影響の少ない箇所から段階的にリファクタリングを進められます。また、密結合な部分を特定して優先的に改善できます。

5. 📖 ドキュメント作成の自動化

問題: 「設計書やドキュメントの更新が追いつかない」

解決: コードから自動生成されるUML図なので、常に最新の状態を保てます。手動でのドキュメント作成・更新作業から解放されます。

6. 🤖 生成AIによるアーキテクチャ改善

問題: 「既存のアーキテクチャのどこが悪いのかわからないので、改善活動に手を付けられない」

解決: コードから自動生成されるPlantUMLはテキストベースなので、その情報を生成AIに与えることで、AIはアーキテクチャを容易く理解できます。そこから、アーキテクトの視点での改善案が得られます。

開発環境作成

必要な環境

  • Visual Studio Code で動くPlantUMLを実行できること。下記参照

  • .NET 8以上の環境(MSBuildがインストールされていなければインストールしてください)

操作方法

  1. コードをダウンロード
  2. ダウンロードしたソリューションファイルからVisual Studioを開く
  3. 実行
  4. ツールのUIが開かれる
  5. 解析したいソリューションファイルを選択
  6. 数秒待つとクラス一覧が表示される
  7. クラス図を表示したいクラスを選択し、UML出力を実行
  8. 初回実行時にVSCodeが開かれ、PlantUMLのファイルが開かれる
  9. VSCodeでAlt+Dを押す(2回目以降もクラス図が更新されなくなったら、押してください)
  10. クラス図が閲覧できる

まとめ

コードの依存関係を可視化することで得られる価値は計り知れません:

  • 品質向上: 問題のある設計を早期発見
  • 生産性向上: 影響範囲の把握によるスムーズな開発
  • 学習効率向上: 新メンバーの理解促進
  • 保守性向上: リファクタリング計画の立案支援
  • コミュニケーション向上: チーム間での設計議論の活性化

複雑に絡み合った依存関係という「見えない問題」を「見える問題」に変えることで、あなたのプロジェクトはより健全で、保守しやすく、理解しやすいものになるでしょう。

アペンディクス

MSBuildとRoslynについて

DependencyVisualizerの最大の特徴は、MSBuildRoslynを活用した高精度な解析です。

MSBuildとは?

MSBuildは、Visual Studioが内部で使用しているビルドエンジンです。プロジェクトファイル(.csprojや.sln)を読み込み、コンパイルに必要な情報をすべて把握しています。

Roslynの役割

MSBuildはプロジェクト情報(参照するアセンブリ、コンパイルオプション、ソースファイルのリストなど)の取得を担当します。実際にC#コードを解析してSyntaxTree(構文木)やSemanticModel(意味モデル)を構築し、クラス間の依存関係を抽出しているのはRoslyn(.NET Compiler Platform)です。

MSBuildから得られた情報をもとに、Roslynがソースコードを解析することで、以下のような依存関係を正確に検出できます:

  • クラスの継承関係
  • フィールド・プロパティの型
  • メソッドのパラメータと戻り値の型
  • ジェネリック型パラメータ
  • ローカル変数の型推論(var)

この2段階のアプローチにより、「ビルドは通るのに解析では見つからない」「IDEでは認識されるのにツールでは無視される」といった問題を回避できます。要するに信頼性が高いということです。

参考リンク

281
268
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
281
268

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?