C++やPython向けのコード可視化ツール「Sourcetrail」がオープンソースにコードを読む時間が一番長いという問題

Coati Softwareは、クロスプラットフォームのインタラクティブなコード可視化ツール「Sourcetrail」を、無料のオープンソースソフトウェアとして公開した。CやC++、Java、Pythonなどに対応している。コードを読むことにほとんどの時間を費やす開発者に役立つツールだ。

» 2019年11月21日 09時40分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 オーストリアのCoati Softwareは2019年11月18日(現地時間)、クロスプラットフォームのインタラクティブなコード可視化ツール「Sourcetrail」を、無料のオープンソースソフトウェアとしてGitHubで公開したと発表した。

Sourcetrailの動作画面例(出典:Coati Software

 Sourcetrailは、開発者が他人の書いたソースコードを理解し、生産的にコーディングを行えるよう支援する。開発者は既存のソースコードを理解することに多大な時間を費やすが、一般的なコードエディタは、こういった作業にはほとんど役に立たない。

 Sourcetrailの主要開発者であるEberhard Gräther氏は、「Google Chrome」のグラフィックスチームにインターンシップとして参加した2012年時点の経験を次のように語っている。

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

 Gräther氏は開発に必要だった時間の配分について次のようにまとめている。

 「私は作業時間の約95%をソースコードの読み取りに費やしたため、生産的ではないと感じた。だが、ここにいる誰もがほとんどの時間ソースコードを読んでおり、このような大規模なソフトウェアプロジェクトでの仕事として普通のことだ、と上司からなぐさめられた」

 同氏がSourcetrailの開発に着手したのはそれから数週間後だったという。

オフラインでも長大なコードの状態を把握できる

 Sourcetrailは、インタラクティブな依存関係グラフや簡潔なコードビュー、効率的なコード検索といった機能を組み合わせ、ソースコードの概要と詳細情報を提供する。

 動作環境はWindowsやmacOS、Linux、対応言語は「C」「C++」「Java」「Python」だ。カスタム言語拡張を作成するためのSDK(SourcetrailDB)もある。

 Sourcetrailと接続可能なエディタは幅広く、「Atom」「Clion」「Eclipse」「Emacs」「IntelliJ IDEA」「Neovim」「PyCharm」「QtCreator」「Sublime Text」「Vim」「Visual Studio」「Visual Studio Code」が利用可能だ。

 実行時にはインターネット接続を一切利用せず、完全にオフラインで動作するため、機密性の高いソースコードにも適用できるという。

 Coati Softwareは今後、開発者やプロジェクトなどを支援するプラットフォーム「Patreon」を通じて、Sourcetrailの開発やメンテナンスにかかる資金を調達する計画だ。

 Sourcetrailの主な機能は次の通り。

静的解析によりソースコードのインデックスを作成

 Sourcetrailはまずコードの詳細な静的解析を行う。これによってソースファイル内の全ての定義と参照が分かる。

 この機能は静的コードアナライザが実行する。分析を開始するには、既存ビルドの構成をインポートするか、手動のプロジェクトセットアップを選択すればよい。

静的解析中の表示例(出典:Coati Software

シンボルの検索がたやすい

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。