astah plugin tips#1_Kotlinでastah pluginを作る環境を整える

astah plugin tipsの第一回です。
今回はKotlinでプラグイン開発を行う環境を整えていきます。ここで作ったプロジェクトは引き続き第二回で利用します。

# プロジェクトの生成
適当なフォルダでコマンドプロンプトを開き、以下コマンドを入力し、必要な項目を入力します。

```console
> astah-generate-project
```

```console
Define value for property 'groupId': : com.astah.plugin.jigs 
```
mavenのグループIDを入力します。一連のプロジェクト群をまとめる名前をつけておくといいでしょう。
本連載ではモデリングを補助するツール群ということで、plugin.jigs(治具)と名付けました。

```console
Define value for property 'artifactId': : select-neighbor-plugin
```
このプラグインの名前を指定します。

```console
Define value for property 'version':  1.0-SNAPSHOT: :
```
このプラグインのバージョンを指定します。デフォルトのままで問題ありません。

```console
Define value for property 'package':  com.astah.plugin.jigs : :com.astah.plugin.selectneighbor
```
パッケージ名を指定します。デフォルトではgroupIdと同じですが、同じgroupIdのプロジェクトが増えてくるとnamespaceが被ってくるためこのプロジェクトのパッケージ名を継ぎ足した方が良いでしょう。

# IntelliJにプロジェクトをImportする
IntelliJを開き、File > New > Project from Existing Sources を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/c9a8597e-8cad-e7a0-998b-977551664a5f.png)

先ほど作成したastah プラグインのフォルダを指定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/8b63f802-5894-0e75-19a4-d0b809075c65.png)

Import project form external model > Mavenと選択します。
<img src="https://qiita-image-store.s3.amazonaws.com/0/3472/67825648-02f3-4ec8-e287-1c54d857d874.png" width=70%/>

以降のページはすべてデフォルトで大丈夫そうです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/2c074c76-be4b-960d-022b-361076bb6a5e.png)

エディタの右下に以下のダイアログが出た場合は、Enable Auto-Importを選択してください。Mavenで指定されたライブラリを自動ダウンロードしてプロジェクトに組み入れてくれます。
<img src="https://qiita-image-store.s3.amazonaws.com/0/3472/586bc8c6-028b-3c48-734d-8843828bff49.png" width=70%/>

インポートが完了したら、一度ビルドしてみましょう。
ターミナルを開き（View > Tool Windows > Terminal、またはエディタ下部Terminal、またはAlt+F12）

```console
> astah-build
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
```
BUILD SUCCESSとなることを確認します。続けて以下コマンドで、作成中のプラグインが同梱されたastahを起動します。

```console
> astah-launch
```
起動したastahで新規プロジェクトを開き、ツールメニューから以下の項目を選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/41e80799-c2d3-1cfa-f98e-a3253611e43b.png)
以下のダイアログが表示されれば、成功です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/3472/c0632e83-9b45-9691-44fb-c35283078ca5.png" width=30%/>

# Kotlin化
mavenにKotlinの設定を加えるためにプロジェクトにダミーのKotlinファイルを追加します。
src/main/javaフォルダを右クリック > New > Kotlin File/Class
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/0cca8832-1321-0744-539a-17c2d8f1c16a.png)

<img src="https://qiita-image-store.s3.amazonaws.com/0/3472/32a7be76-c31a-99d7-1381-747e2da93183.png" width=50%/>

右下に以下のダイアログが表示されるので、クリックしas Kotlin (Java with Maven) moduleを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/3472/c527fb9a-27d7-5391-39e1-c40bdf8cb96e.png)

## pom.xmlの修正
\<build>内のpluginを以下のように並べ替えます。maven-compiler-pluginが重複している場合は、片方を消します。（内容は次項参照）
- maven-dependency-plugin
- maven-resources-plugin
- astah-maven-plugin
- kotlin-maven-plugin
- maven-compiler-plugin
- maven-bundle-plugin

maven-compiler-pluginのバージョンを修正します。2.8.1 → 3.8.1

```xml:pom.xml(304行付近)
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
 -->            <version>3.8.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
```
maven-bundle-pluginのバージョンを修正します。 → 3.5.0


`${astahPath}`となっているところを`${env.ASTAH_HOME}`に変更します。（astah-buildコマンドは`${astahPath}`を展開するが、IntelliJでは参照できないため。）

```xml:pom.xml(304行付近)
    <dependencies>
        <dependency>
            <groupId>com.change_vision.astah</groupId>
            <artifactId>astah-api</artifactId>
            <version>${astah.version}</version>
            <scope>system</scope>
 -->        <systemPath>${env.ASTAH_HOME}/astah-api.jar</systemPath>
        </dependency>
```
## JavaコードのConvert
次にJavaのコードをすべてKotlinに変換します。プロジェクトビューからプロジェクトのルートフォルダを選択肢右クリック > Convert Java File to Kotlin File
<img src="https://qiita-image-store.s3.amazonaws.com/0/3472/2268b440-c2d6-5651-b0d7-11868cbb533a.png" width=50%/>


### コードの修正
少しコードを修正します。runメソッドにoverrideを追加します。

```kotlin:TemplateAction.kt(18行目付近)
class TemplateAction : IPluginActionDelegate {

    override fun run(window: IWindow): Any? {
        try {
```

# 再ビルド、実行

```console
> astah-build
```

```console
> astah-launch
```
ビルドが通り、メニューが表示され、ダイアログが表示されることを確認します。
これでKotlinでプラグインを開発する準備が整いました。

# 今回のコード
https://github.com/s-hosoai/astah-plugin-jigs/tree/master/select-neighbor-plugin

# 次回
[astah plugin tips#2 選択した要素に繋がっているものを選択する](https://qiita.com/Shintaro_Hosoai/items/73f3a0e40fb4028b16c2)

前回
[astah plugin tips#0_はじめに](https://qiita.com/Shintaro_Hosoai/items/9cb98298e2bbaf7324e5)