Daggerの依存関係を視覚化してくれるプラグインScabbardを試してみる

# はじめに
2019年12月に公開されたばかりの[Scabbard](https://arunkumar9t2.github.io/scabbard/)というプラグインを試してみたのでやり方を投稿します。

# Scabbardとは？
[Dagger](https://github.com/google/dagger)の依存関係を画像化して表示してくれるというプラグインです。

公式より：
![temp-cheat-sheat.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/82abbcba-6bb6-6088-eb29-02848fd02c64.png)

Missing Binding箇所も表示してくれる
![missing-binding.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/e3bc6b1e-d999-99d6-4344-71f2187d4acb.png)


# 導入
[Getting Started](https://arunkumar9t2.github.io/scabbard/)を見ながら導入していきます。
環境は以下になります。

Mac OS 10.15.2 (Catalina)
Android Studio 3.5.3

リポジトリは[Dagger2+Retrofit2(+OkHttp3)+ViewModelのDIの最小構成[その1]](https://qiita.com/m-coder/items/267abba3f059c4c9ed4a)のリポジトリを使用します。
## 1. GraphVizをbrew installする

GraphVizというソフトが必須のようなのでターミナルからインストールします。

```
brew install graphviz
```
[Homebrew](https://brew.sh/index_ja)のインストール方法は割愛します。
Linux、Windowsの場合のインストール方法は[こちら](https://arunkumar9t2.github.io/scabbard/)を参照してください。

## 2. build.gradleを設定する
プロジェクト単位のbuild.gradleに以下を追加します。

```groovy:build.gradle
buildscript {
    repositories {
        ...
        maven {
            url "https://plugins.gradle.org/m2/" // 追加
        }
    }
    dependencies {
        ...
        classpath "gradle.plugin.dev.arunkumar:scabbard-gradle-plugin:0.1.0" // 追加
    }
}
```
また、モジュール単位のbuild.gradleに `apply: plugin`を追加し、DataBindingのように`enabled true`を記述します。

```groovy:build.gradle
apply plugin: "scabbard.gradle"
...
scabbard {
    enabled true
}
```

ここまででビルド時にDaggerコンポーネントの依存関係を図示したpngファイルを生成してくれるようになります。

格納先は`{project_root}/app/build/tmp/kapt3/classes...`以下です。

<img width="609" alt="スクリーンショット 2020-01-14 11.14.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/6387dccf-9b9c-c2a5-c00f-40cb5be2cac3.png">



## 3. IDEにプラグインをインストールする
IDE上に短剣アイコンを表示させるためにプラグインをインストールします。
<img width="243" alt="スクリーンショット_2020-01-14_10_48_52のコピー.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/b0fd1a05-4e74-952d-2b13-c4a9fb10ddf7.png">

このアイコンをクリックすると2. で生成したpngをIDE上で表示してくれるようになります。

`Android Studio` > `Preferences...` > `Plugins` > `MarketPlace`
にて、「Scabbard」を検索します。
<img width="1026" alt="スクリーンショット 2020-01-14 10.46.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/693237ed-f963-d355-0683-194a849db7d3.png">


「Install」を選択してプラグインをインストールします。
<img width="1028" alt="スクリーンショット 2020-01-14 10.46.41.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/3bcd3d02-a0dd-4ab3-9971-07706b627423.png">

`Restart IDE`と表示されるのでIDEを再起動します。

プロジェクトをビルドし、`AppComponent.kt`を表示すると、インターフェースの横に短剣アイコンが追加されているのが分かります。

<img width="924" alt="スクリーンショット 2020-01-14 10.57.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/dd253276-f8fd-d90e-6f54-2a3ff898dcac.png">

短剣アイコンをクリックすると、以下のように依存関係を表示してくれます。
<img width="926" alt="スクリーンショット 2020-01-14 10.50.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309569/7fe118e4-6e15-84c8-374f-aed047bb7caa.png">

以上で完了です！

# おわりに
Daggerの依存関係を記述をミスって「Missing Binding」エラーが表示されると、どこで間違えているか追うのが大変ですが、このプラグインを使うと依存関係が視覚化されるので解決しやすくなるかなと思いました。

まだv0.1.0との事なので、今後の更新にも期待です。