はんなりと、ゆるやかに

アジャイル、スクラムが好きが日々から学んだことをアウトプット

ソースコードの可視化ツールSourcetrailをWindows+VisualStudioで使ってみた

ソースコードの可視化ツールSourcetrailを使ってみました。

www.sourcetrail.com

大きくて難解なコードを調査や修正しているとき、気づけば同じコードをグルグル回っていて読み解くのに時間がかかったりします。また、不具合が発生したとき何日もかけてコードを読んで修正するコードは一行だったりもします。ソフト開発はコードを読むことが多いのです。
そういった複雑なコードの理解が早くなり容易になれば開発も速度があがり不具合の混入も減るでしょう。

Sourcetrailはこのコードを読むことを支援してくれるツールです。

今回は、以下の環境でSourcetrailを使ってグラフ化するまでの使い方をまとめます
OS:Windows10
IDE:Visual Studio 2019

解析したソース:Cinder
https://github.com/cinder/Cinder
※Sourcetrailのチュートリアルで使われていたので、Cinderを使って試してみました。

こちらがチュートリアルです。
Sourcetrail - Documentation

結果

手順の前にどんな結果になるか先に書いてしておきます。コードの解析が完了すると、クラスが可視化され、継承関係や依存関係がグラフ化されて見えるようになります。また、グラフと一緒にソースコードも見えて関数などを選択するとコードもその関数に移動します。グラフとコードが同時に見えてリンクしているのはわかりやすいです。
f:id:iucstscui:20191123001446p:plain

特定の関数を押すとそれを使っている関数や関係しているメンバ変数が可視化されます。
f:id:iucstscui:20191123002235p:plain

手順

1. VIsual Studioプラグイン

いったんSourcetrail は置いておいて、Visual Studioに必要なプラグインをインストールします。Visual Studioのメニューから「拡張機能拡張機能の管理」の順に選択します。そこで、「Sourcetrail Extension」を探してインストールしましょう。
f:id:iucstscui:20191123004231p:plain

インストールが終わり、再起動すると「Sourcetrail」で必要なデータベースを作成する機能が追加されます。
メニューに追加されているので、解析するソースコードのslnファイルを開き、「Create Compilation Database」を押下してDatabaseを作成しましょう。JSONファイルが作成されます。
f:id:iucstscui:20191123004659p:plain

2. ダウンロード

Sourcetrailをダウンロードしましょう。
サイトの右上にDownLoadのボタンがあります。クリックするとGitHubのReleaseのページに遷移します。
f:id:iucstscui:20191123002449p:plain

そのときの最新のReleaseから開発環境にあうインストーラーをダウンロードします。
僕の場合は、「Sourcetrail_2019_4_61_Windows_64bit_Installer.zip」です。
f:id:iucstscui:20191123002605p:plain

3. インストール

ダウンロードしたzipファイルを解凍し、インストーラーを起動します。
特に特殊なことはないので、次、次へと進めましょう。

f:id:iucstscui:20191123002917p:plain

4. 解析

インストールが終わった後は起動しましょう。
左下の「New Project」からプロジェクトを作成します。
f:id:iucstscui:20191123003058p:plain

プロジェクトを作成します。
任意のプロジェクト名と、ソースコードがあるパスを指定します。
入力後は「Add Source Group」を選択します。
f:id:iucstscui:20191123003609p:plain

今回はVisual Studioを使うので「C/C++ from Visual Studio」を選択します。
「Next」ボタンを押下します。
f:id:iucstscui:20191123003908p:plain

Compilation Databaseの項目に「手順1」で「Visual Studio」をつかって作成したDatabaseのJSONファイルを設定しましょう。
f:id:iucstscui:20191124191910p:plain


「HEADER FIILE & ・・・」の項目に自動でヘッダーが入りますが、今回解析したいIncludeに設定しなおしました(チュートリアルでそうしていたのですが、理由はわかってません。。。)。
Cinderの解析であれば「Cinder\include\cinder」だけが指定された状態にします。

設定が完了すれば「Create」を押してください。
解析が始まります。
f:id:iucstscui:20191123010420p:plain

解析が完了すればOKです。
f:id:iucstscui:20191123011606p:plain

完了後、overviewの画面が表示されます。
f:id:iucstscui:20191124192144p:plain

まとめ

ソースコードからグラフ化された結果が見れるのは衝撃
・見れるだけでなく、コードと紐づいていたり、関数やメンバ変数を操作することで詳細を見れる
・大きなコードであればあるほど効果を発揮しそう