Using Sourcetrail, Visualize dependencies of FBX SDK

Introduction

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

Sourcetrail provide a visualized graph about class inheritance. It's convenient to use, i note it in this post.

I have intentionally increased the time to look at the Autodesk FBX SDK because I have something I want to do, but I will introduce it because it was quite convenient to use Sourcetrail because it visualizes class dependencies.

./images/figure_01.gif

Motivation

ひとまずのところ、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)
})

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

What's the Sourcetrail

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

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

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

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

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

How to use the 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

Conclution

For example FbxMesh class's inheritance, it's visualized as follows:

./images/figure_17.png