Sourcetrail - オープンソース化したC/C++/Java/Python対応のソースコード解析ツール

S 20191127 160754

大規模なソースコードの中身を解析したい場合、専用のソースコード解析ツールが役立ちます。

本日紹介する「Sourcetrail」もそのようなソースコード解析に役立つツールの一つです。Coati Softwareによって開発されているツールで、元々は商用ライセンスが採用されていましたが、2019年11月18日にオープンソース化され無償で利用可能となっています。

対応するプログラミング言語は、C/C++/Java/Pythonで全てのプログラミング言語に対応しているわけではありませんが、これらの言語を使って開発作業を行っている方にとっては試してみる価値はありそうです。

以下使用法を説明します。

Sourcetrailのインストール

Sourcetrailの実行ファイルを公式サイトからダウンロードします。Sourcetailは単体のデスクトップアプリで、Linux、Windows、macOS版がダウンロード可能です。

macOSの場合はdmgファイルをダウンロードして、中に含まれる「Sourcetrail.app」をアプリケーションフォルダなどにコピーします。

Sourcetrail.appを実行すると以下のような画面が表示されます。

Startup

▲Recent Projectsの下からサンプルプロジェクトを開くことができます。

Tictactoe

▲Pythonプロジェクトの「tictactoe_py」を開くとこのように表示されます。

なお実際にソースコードを解析する場合、解析する言語ごとに事前準備が必要となります。例えばJava言語を使用するには、Java 1.8をインストールした後、Sourcetrailの設定画面でインストールしているJavaを認識させる必要があります。

Preferences

▲「Java > Java Path」でJavaが自動認識されている場合「detect」ボタンをクリックすると準備完了です。

その他のC/C++、Pythonの準備方法に関しても、GitHubに詳しい情報掲載されています。解析したいプログラミング言語に合わせて準備しておいてください。

SourcetrailでJavaプロジェクトを解析

今回は試しに「Apache Commons Collections」のソースコードを解析してみます。

Sourcetrailのメニューから「Project > New Project」を選択します。

Project1

▲「Sourcetrail Project Name」はプロジェクトの名前、「Sourcetrail Project Location」はプロジェクトを保存するフォルダとなります。

次に左下の+アイコンをクリックし「Source Group」を追加していきます。

Project2

▲「Java > Empty Java Source Group」を選択して「Next」をクリックします。

Project3

▲「Java Standard」を選択します。

Project4

▲「Files & Directories to Index」は解析対象のソースコードを含むファイルとディレクトリ、「Excluded Files & Directories」は除外対象のファイルとディレクトリとなります。今回はApache Commons Collectionsのソースコードディレクトリを対象としましたが、その中のtestディレクトリを除外しました。

Project5

▲解析に追加のライブラリが必要な場合はこの画面で追加します。

Project6

▲Source Groupが追加できました。

「Create」ボタンをクリックすると解析が始まります。

End indexing

▲「Finish Indexing」が表示された際にエラーが表示されなければ成功です。エラーが表示された場合は依存ライブラリを追加したり、不要なディレクトリを除外したりといった変更を行い、再度インデックスの作成を実行します。

メイン画面は以下のような感じです。

S 20191127 162339

▲プロジェクトに含まれるパッケージやクラス、インターフェイス、メソッドの一覧、継承関係などが簡単に確認可能です。クリックして継承関係を辿ったりソースコードを表示することができます。

まとめ

Sourcetrail大規模なソフトウェアの理解に役立てることができるソースコード解析ツールです。最近はIDEの機能も充実してきていますが、専用のツールを用いることでさらに効率を向上させることが可能かもしれません。

スポンサーリンク