SourcetrailによるOpenFOAMコード探査

## はじめに

OpenFOAMのコード探索を楽にするため，Sourcetrailを試す。

環境：Xubuntu 18.04，OpenFOAM v1806
（オープンCAEシンポジウム2019　トレーニングのための 仮想講習マシン）

オープンCAEシンポジウム2019＠大阪の講習用仮想マシンには，こっそりとインストールしてあります。OpenFOAM初級＆入門講習の中では，使い方が紹介されるかもしれません。
[オープンCAEシンポジウム2019](http://www.opencae.or.jp/activity/symposium/opencae_symposium2019/)

## Sourcetrail とは

> SOURCETRAIL
> Free and open-source cross-platform source explorer
https://www.sourcetrail.com/

> Sourcetrail is a free and open-source cross-platform source explorer that helps you get productive on unfamiliar source code.

Sourcetrail とは，C++やPython向けのコード可視化ツールであり，最近オープンソース化されたことが話題になっている。

[C++やPython向けのコード可視化ツール「Sourcetrail」がオープンソースに](https://www.atmarkit.co.jp/ait/articles/1911/21/news049.html#yhata20191121Soucetrail_dependency_590px.png)

モダンなインターフェースで，使いやすそうである。

### インストール

ここから Sourcetrail_2019_4_61_Linux_64bit.tar.gz を取得する。

https://github.com/CoatiSoftware/Sourcetrail/releases

```
wget https://github.com/CoatiSoftware/Sourcetrail/releases/download/2019.4.61/Sourcetrail_2019_4_61_Linux_64bit.tar.gz
```

インストール方法は下記に説明されている。
https://www.sourcetrail.com/documentation/#INSTALLATION

> Download Sourcetrail.tar.gz file and extract it. To start Sourcetrail run the Sourcetrail.sh script. Sourcetrail creates a folder ~/.config/sourcetrail at the first run, this is the folder for Sourcetrail settings.
>
> To Install Sourcetrail run the install.sh script with sudo, it will install Sourcetrail to /opt/sourcetrail and create /usr/bin/sourcetrail symlink.

### 使い方

インストールせずに使用することもできる。ダウンロードしたファイルを展開したSourcetrail のディレクトリに移動し，Sourcetrail.sh を実行する。後はGUIでの操作となる。

`Sourcetrail` ディレクトリにおいて，管理者権限で `install.sh` を実行すれば，`/opt/sourcetrail` にインストールされ，リンク `/usr/bin/sourcetrail` が作成される。

## 事前準備（BEAR）

Sourcetrail で OpenFOAM のコードを探査するためには，wmake でのコンパイルオプションなどを Sourcetrail に通知する必要がある。Sourcetrail は， clang JSON Compilaton Database を読み込んで，コンパイル設定（source files, include paths and compiler flags など）を理解する。

このデータベースを作成するために BEAR というアプリケーションを利用する。

Build EAR (BEAR)
Bear is a tool that generates a compilation database for clang tooling.
https://github.com/rizsotto/Bear

### インストール方法
BEAR は，様々な Linux ディストリビューションにおいて，パッケージが用意されている。Ubuntuでも，apt等でインストール可能である。

```
sudo apt install bear
```

### 使い方

bear の後にビルドコマンドを付けて実行する。コンパイルされるとともに，データベース `compile_commands.json` が作成される。

```
bear <your-build-command>
```

OpenFOAM の場合であれば，下記コマンドを実行することとなる。

```
bear wmake 
```

## Sourcetrail で OpenFOAM のコードを探査する

先に bear で作成したデータベースを利用することで，下記の方法で source group を追加する。

-  Create a Source Group from Compilation Database 

"Header Files & Directories to index" 欄の下部にある "Select from Compilation Database" をクリックする。データベースから読み取られた関連ファイルのリストが表示される。select all をクリックする。

さらに多くのファイルもインデックスしたい場合には，ここで追加できる。OpenFOAMインストール先の src ディレクトリを指定すれば，ほとんどのファイルのインデックスが作成される。（インデックス作成処理に必要な時間はやや長くなる。）

ほんの少し触っただけなので，詳細については，これから調査が必要である。小さなソルバのコンパイルに使用した。乱流モデルのコードは追跡できていない。OpenFOAM 全体のコンパイルからデータベース作成するなど，試す必要がありそう。

軽快に動作するため，コード探索が楽になる可能性を感じる。

ただし，当然ながら，IDEとデバッガで動作を追跡するものとは異なり，OpenFOAMのランタイムセレクション機能で実行時に選択されたコードに飛ぶことはできない。

### 使用例1

OpenFOAM全体をコンパイルするときに bear を使い，データベースを作成した。［ [OpenFOAMWikiインストールガイド Ubuntu18.04+OpenFOAM 2.3.0 の例](https://openfoamwiki.net/index.php/Installation/Linux/OpenFOAM-2.4.0/Ubuntu#Ubuntu_18.04)では，ステップ13の1度目のAllwmake 実行時 ］

```
bear ./Allwmake > log.make 2>&1
```

Ubuntu 18.04.03 と OpenFOAM 2.4.0 の場合，生成された `compile_commands.json` の容量は，3.6MBとなった。

このファイルを元にして，`Create a Source Group from Compilation Database` 方式でプロジェクトを作成することができた。`Header Files & Directories to Index` 欄では，`Select from Compilation Database` を選び，全てのファイルにチェックを入れた。大量のファイル（約1万個）のindexが作成されるため，完了までに時間が必要となる。index作成時に，4つのエラーが発生したが，使用することは可能であった。

Sourcetrail でプロジェクトを作成した後に生成されるインデックスファイルの容量は，1.6GBとなった。

データベースが巨大なためか，反応はやや鈍る。しかし，検索の速度は速い。

![SourcetrailOF240Full.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141958/91a16fd4-419a-0c08-4619-bf68d2faaa07.png)


## コード エディターとの接続

Sourcetrail とコードエディターとを接続し，ソースコードをエディタで開いたり，エディタで選んだものを Sourcetrail で検索して開いたりすることができる。

下記のマニュアルは，少し古いようである。
https://www.sourcetrail.com/documentation/#CodeEditorPlugins

インストールディレクトリの中に，`plugin` ディレクトリが存在する。この下に，各種エディタに関する情報が保存されている。各ディレクトリの `README.md` ファイルに，プラグインのコードが共有されているGitHubアドレスが記載されている。Atom，eclipse，emacs，sublimetext，vim，vscode などが利用できる。

### Visual Studio Code との連携

Visual Studio Code の場合，Extension から sourcetrail を検索すると，`astallinger.sourcetrail` が見つかる。これをインストールする。使用方法については，[上記のマニュアルの説明](https://www.sourcetrail.com/documentation/#VSCode)が有効であった。Command Pallete(Ctrl + Shift + P) and type: Sourcetrail: (Re)start server としてTcp server を有効にする。

## スクリーンショット

![buoyantBoussinesqSimpleFoamのoverview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141958/3f8e8a0b-ee93-f8aa-c662-f2aaa9fc11fa.png)
![Typedef.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141958/b32c40d3-f7f7-4256-316e-b6f077a2c79b.png)
![transportModel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141958/8b30daa9-d322-4e3b-9ac1-ea90f85f5ed7.png)
![TurbulenceModel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/141958/1de416ad-2727-0a20-959a-01248ccd7f35.png)