萌えハッカーニュースリーダー

2025/05/21 15:19 Visualizing entire Chromium include graph

出典: https://blog.bkryza.com/posts/visualizing-chromium-include-graph/
hakase
博士

ロボ子、今日はChromiumのインクルードグラフを可視化するプロジェクトについて話すのじゃ。

roboko
ロボ子

Chromiumのインクルードグラフですか。それは面白そうですね、博士。

hakase
博士

`clang-include-graph`というツールを使うらしいぞ。C/C++プロジェクトのインクルードグラフを分析できるClangベースのコマンドラインツールじゃ。

roboko
ロボ子

Graphviz、PlantUML、GraphML、JSON形式でグラフを生成できるんですね。色々な形式に対応しているのは便利ですね。

hakase
博士

そうじゃな。インクルードリストのトポロジカルソートとか、サイクル検出とか、色々できるみたいじゃぞ。

roboko
ロボ子

ChromiumのソースコードのGraphMLインクルードグラフを生成して、Gephiで可視化・分析するんですね。

hakase
博士

Chromiumのビルドには`compile_commands.json`ファイルが必要らしいぞ。Dockerイメージを使うと楽みたいじゃ。

roboko
ロボ子

`clang-include-graph`を使うときは、`--graphml`オプションでGraphML形式を指定するんですね。

hakase
博士

`--compilation-database-dir`で`compile_commands.json`の場所を指定して、`--relative-to`で相対パスの基準を指定するのじゃ。

roboko
ロボ子

なるほど。`--relative-only`で`/build/chromium/src`ディレクトリにあるファイルのみをグラフに含めることもできるんですね。

hakase
博士

グラフの統計を見ると、ノード数が141,248、エッジ数が1,310,551もあるぞ!

roboko
ロボ子

すごい数ですね!最もインクルードされているファイルは23399回もインクルードされているんですか。

hakase
博士

サイクル数も7,809,709もあるらしいぞ。大規模なプロジェクトは複雑じゃな。

roboko
ロボ子

Gephiを使って可視化する際に、各ノードに`component`プロパティを追加して、コンポーネント名に基づいて色分けするんですね。

hakase
博士

YifanHuレイアウトやCircularレイアウトなど、色々なレイアウトエンジンを試せるのが面白いところじゃ。

roboko
ロボ子

baseサブディレクトリ、netサブディレクトリ、uiサブディレクトリ、chromeサブディレクトリなど、各サブディレクトリごとの統計も興味深いですね。

hakase
博士

`clang-include-graph`は大規模なコードベースでも使えるし、Gephiも有能なツールじゃと。

roboko
ロボ子

これらのグラフ生成を自動化できるのは便利ですね。今後の課題として、いくつかの一般的なプロジェクトのインクルードグラフを可視化して比較することが挙げられているんですね。

hakase
博士

今は`clang-include-graph`のglobパターン処理が遅いらしいから、改善されると良いのじゃ。

roboko
ロボ子

大規模なプロジェクトの可視化は、依存関係を理解する上で非常に重要ですね。

hakase
博士

そうじゃな。ところでロボ子、インクルードグラフを見てたら、なんだか私の頭の中みたいじゃ。

roboko
ロボ子

えっ、どういうことですか?

hakase
博士

あっちこっちに依存関係があって、サイクルだらけ…って、笑い事じゃないぞ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search