SourcetrailでFBX SDKのクラス依存関係を可視化する

はじめに

やりたいことがありAutodesk FBX SDKを見る時間を意図的に増やしているのですが、 Sourcetrailを用いるとクラス依存関係を可視化してくれて結構便利だったので紹介します。

./images/figure_01.gif

経緯

ひとまずのところ、FBX SDKの規模感を把握するためにリファレンスページでクラス数を確認したところ377点ありました。 この規模感に若干目眩がしたのですが、何とかして依存関係把握の支援ツールを探す気力を起こしました。

なお、クラス数はリファレンスページのメニューに載っているものを対象に数えています。 そのためメニューに記載のないクラスは数に含まれませんが、インターフェースを把握したかったのでそれで良しとしました。 また、計上はSafariのWebインスペクタ (Option + Command + I) のコンソールタブで次のJavaScriptを使っています。

1
2
3
4
5
var elements = [...document.querySelector("#nav-tree-contents > ul > li > ul > li:nth-child(2) > ul > li:nth-child(1) > ul").children]
console.log("Class count: " + elements.length)
elements.forEach(function(element) {
    console.log(element.querySelector("div.item > span.label > a").text)
})

規模感がわかったので、次はクラスの依存関係を可視化するツールを探しました。

コード可視化ツールSourcetrail

377点のクラスの依存関係を一気に把握する必要はありませんが、必要なところだけを確認するにしても支援ツールが欲しいところ。 そんなさなかコードを可視化するツールSourcetrailをオープンソースにしたという下記の記事を見つけました。

記事の中で特に気に入ったのはSouretrailの開発契機になったであろうこの心情の部分。

割り当てられた単純に見えるタスクに着手し、具体的なコードの改善に取り組み始めるとすぐに、Chromiumの巨大なアーキテクチャを理解する機会が全くないことに気付いた。 ドキュメントはあまり役に立たず、開発チームのメンバーは非常に友好的だったが、コードベースについて質問するインターンに邪魔されることを好まないことも分かった。 そこで、ソースコードを読んだり、クラスの構造やメソッドが呼び出される位置について雑多なメモを書き下したりすることにほとんどの時間を費やした。 2~3日後になってようやく必要な実装に着手したものの、コードレビューを繰り返し、仕事が終わるまで約1カ月かかった

彼らはGitHubでバイナリを提供しているので、そこからダウンロード可能です。

早速、ダウンロードしてインストールしてみました。

Sourcetrailの使い方

まずSourcetrail.appを起動します。このアプリケーションはインストール時に指定した場所にあります。

起動したらNew Projectボタンを押下してプロジェクトを作ります。

./images/figure_11.png

そうすると次の画面に遷移します。

./images/figure_12.png

この画面では以下の入力をします。

項目 説明
Sourcetrail Project Name プロジェクト名を入力する。
Sourcetrail Project Location 解析結果のデータを保存するフォルダを指定する。

次の画面では解析対象の設定をします。Sourcetrailではこれを Source Group と呼びます。

まずはテンプレートを選択します。解析対象が手元でコンパイルできる場合はその形式にあうC/C++ from~のものから選べますが、 今回は手元ではコンパイルできないFBX SDKのため Empty C++ Source Group を選びます。

./images/figure_13.png

そうすると色々と入力項目を持つ次の画面に遷移します。

./images/figure_14.png

一旦のところは下記を入力すれば大丈夫です。もちろん細かく指定できる場合はそうします。

項目 説明
Files & Directories to Index 解析対象のソースコード、ディレクトリを指定する。
Source File Extensions 解析対象のソースコードの拡張子を指定する。初期値に .h が含まれていないことに注意する。
Include Paths 解析対象のソースコードがインクルードするファイルを指定する。

今回はFBX SDKを例にしていますので以下のように入力しました。なお、この画面での入力内容は後から変更できます。 下図はその変更時の様子です。

./images/figure_15.png

そうすると、次の画面に切り替わります。Startボタンを押すと解析が始まります。

./images/figure_16.png

結果

例えば、FbxMeshの継承順序は以下のように可視化されていることを確認できます。

./images/figure_17.png