SourceTrailをCentOS7に入れてみました。

ネットワークよりのインフラエンジニアなのですが、最近ではOSS製品を活用してサービス提供する事が増えてきておりまして、そのなんですかね、色々困っている事多数なんです。そんな時にこの神様のようなツールがあることを知りました！それがSourcetrailとの出会いだったわけです。

このツールはWindowsやMacなど手元にあるPCにも入れる事が可能ですが、Linuxにも入れることができるようなので、やってみました。（業務だと会社貸与のPCには決められたツールしかだめって企業がほとんど。ただ、開発環境のAWSなら好きに使っていいよって可能性もあるかなと思いました。誰かの役に立てれば幸いです！）


## 1. 環境
- OS：CentOS 7.9
- Kernel: 3.10.0-1160.53.1.el7.x86_64
- Clinet：Win10

## 2. OS最新化/DeskTOP環境の準備

```bash
yum update -y
reboot

yum groupinstall 'Development Tools' -y
yum groupinstall 'GNOME Desktop' -y

yum install epel-release -y
yum install --enablerepo=epel xrdp -y

systemctl start xrdp.service
systemctl enable xrdp.service

timedatectl set-timezone Asia/Tokyo
timedatectl
date
```

## 3. openjdkのインストール

```bash
yum install java-1.8.0-openjdk java-1.8.0-openjdk-headless java-1.8.0-openjdk-devel -y

```

## 4. sourcetrailのインストール

```bash
wget https://github.com/CoatiSoftware/Sourcetrail/releases/download/2021.4.19/Sourcetrail_2021_4_19_Linux_64bit.tar.gz
tar zxvf Sourcetrail_2021_4_19_Linux_64bit.tar.gz
cd Sourcetrail
bash install.sh
```

## 5. FireWalld変更/ログイン用ユーザ作成

```bash
firewall-cmd --add-port=3389/tcp --permanent
firewall-cmd --reload

useradd nwengineer
passwd nwengineer
mkdir .ssh
chmod 700 .ssh
#ここに公開鍵をauthorized_keys, 権限600で保存しておきます。
```

## 6. リモートデスクトップ接続
リモートデスクトップ接続します。コンピュータにCentOSのIPアドレスを入れます。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/c65b46b2-1403-e2e3-bd06-0877a138df4d.png">

「はい」をクリックします。
<img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/f2d79f41-466b-9a84-5c46-36192fbf8759.png">

GUI接続するためのユーザ名/パスワードを求められますので、先ほど作成したユーザ名とパスワードを入力して「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/85fa64a0-c1e0-de04-e892-37fb71837211.png)

デスクトップ画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/1bc12341-0898-fb01-eba3-256d0f2e13ba.png)

デスクトップ画面上で右クリックして「端末を開く」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/e71cf446-3660-358b-84f1-b3325ef869ee.png)

ターミナルが起動しますので、sourcetrailと入力してEnterを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/319ff781-bdd2-bda7-d5e2-1435510be34b.png)

ようやくSourcetrailが起動しました。画面左したの「New Project」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/8bfff26b-619e-f048-320e-b0109a94f939.png)


ここで、sourcetrailに読み込ませるjavaのファイルとしていつもお世話になっているmybatis-guiceを利用したいと思います。下記コマンドでcloneしておきます。

```bash
git clone https://github.com/mybatis/guice.git
```

ファイルが存在している事が確認できてら、プロジェクト用に一つディレクトリを作成しておきましょう。（私はtrailというディレクトリを作成しました）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/68ca8311-08a8-fceb-65d2-05ea54160e86.png)

sourcetrailの画面にもどります。任意のプロジェクト名と先ほど作成したディレクトリを選択して「Add Source Group」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/3bd1ca7f-b706-dc38-bbb2-c8180006ade9.png)

「Java」を選択し、「Empty Java Source Group」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/3af5c9e0-4565-e85f-3462-1e11da88f425.png)

Java Standardは8を選択し、「Files & Directories to Index」にgit cloneしたディレクトリを選択し、画面右下の「Create」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/35272fbc-f0f7-fa34-c6c2-1c776842d3cc.png)

「Start」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/bade2551-76bf-a4aa-b41d-fa30f612e282.png)

大量にエラーが出ますが、そこは無視する強い精神力を持ちましょう。終わったら「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/4e19a37a-7b9c-2bde-9587-1c40d50ae804.png)

overview画面にアイコンがいくつか出てきます。試しにclassesをクリックすると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/b88f673b-6e71-8289-510d-8dbe958c0a20.png)

それぞれのClass毎の関連性や変数/メソッドなどわかりやすく可視化してくれます。まさに神のようなツールです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/59a41376-7ebe-49aa-442a-179aeb60be77.png)


## 7. その他
現時点ではJava/C/C++/Pythonのみ有効ではありますが、私が携わっている範囲は十分カバーできている為、本当の助かっています。今後のアップデートも目が離せないツールの一つです。