OpenAPI Generator(JAR版)でC#のサーバ、クライアントを自動生成する

# 1. はじめに
* スキーマ定義からOpenAPI Generatorを使用してC#のサーバー、クライアントのソースをジェネレートしたい
* Jar版を使用したいため、Javaのインストール、設定もしたい

# 2. Javaのインストール
## 2.1. ダウンロードサイトを開く
https://www.java.com/ja/download/ie_manual.jsp

## 2.2. ダウンロードボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a3cdbe1a-a03c-cd7d-a88a-e83afdca2aee.png)

## 2.3 インストーラーをダウンロードして開く

## 2.4. インストールボタンをクリックする
* 任意で宛先フォルダの変更をしたい場合はチェックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/81da3a0a-9d61-d682-66e8-ef601bd79e6d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/dde68c60-b98e-fbdb-4a53-bacfa026ee93.png)

## 2.5. 閉じるボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/e51777eb-78db-de43-ca70-1b5545a7e210.png)

## 2.6. システム環境変数の編集を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/05ee1a29-8850-3e8f-3e52-a79a110344c4.png)

## 2.7. [詳細設計]タブ ? 環境変数ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f3c844da-9738-e340-b585-65168fa4588e.png)

## 2.8. 追加ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d672d667-ce00-20ca-fbed-38c6667742e9.png)

## 2.9. 変数名、値を入力してOKボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/0b0da2ca-41bb-9225-c7b4-a31d50e4f1c3.png)

|  項目  |  値  |
| ---- | ---- |
|  変数名 |  JAVA_HOME (固定) |
| 変数値 |  (インストールしたディレクトリ)  |

## 2.10. Pathを選択して編集ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/4b985727-5cc1-96a8-c375-eec7e405035e.png)

## 2.11. 追加ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/512a739a-b011-1b23-cd7c-618e321658f5.png)

## 2.12. Javaのパスを追加する
```%JAVA_HOME%\bin```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/ce6347c4-7073-c1eb-95af-793e40403a09.png)

## 2.13. 上へボタンをクリックして先頭へ移動する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/2d8f9471-4a59-d35b-0c2e-80636f71e958.png)

## 2.14 パソコンを再起動する
* 通常は不要のようだが、自分のPCだとパスが反映されず再起動した

## 2.15 コマンドプロンプトからJavaのインストールを確認する
```java -version```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/af07f843-8cbd-377b-a88b-886363167472.png)

# 3. OpenAPI Generatorのインストール、設定
## 3.1. OpenAPI Generator JAR版をダウンロードする
https://openapi-generator.tech/docs/installation/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/e0197a39-1429-ecaf-d533-31b315cdb67c.png)

* 今回wgetは使用せず、```https://～```のURLを直接開き、手動でダウンロードした
https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/6.2.1/openapi-generator-cli-6.2.1.jar

# 3.2. バッチファイルを作成する
* サイトを見ても動くコマンド、パラメータがよくわからず最終的にこの形になった
```BAT:build.bat
@echo off

rem ローカルフォルダにあわせて修正
cd C:\openapi-generator-cli

rem クライアント側のビルド
java -jar ./openapi-generator-cli-6.2.1.jar generate -g csharp-netcore -i ./openapi.yaml -o ./.gen_client -c ./clientConfig.json --global-property modelTests=false,apiTests=false

rem サーバ側のビルド
java -jar ./openapi-generator-cli-6.2.1.jar generate  -g aspnetcore  -i ./openapi.yaml -o ./.gen_server  -c ./serverConfig.json --global-property modelTests=false,apiTests=false

PAUSE
```

## 3.3. サーバ側の設定ファイルを作成する
* ASP.Net Core 6 を指定する
* 作成したクラスを継承する想定のためabstractクラスに設定している
```JSON:serverConfig.json
{
   "operationModifier":"abstract",
   "aspnetCoreVersion":"6.0",
   "buildTarget":"library",
   "isLibrary":true,
  "packageName":"Org.OpenAPITools.Server"
}
```

## 3.4. クライアント側の設定ファイルを作成する
* .Net6を指定する
```JSON:serverConfig.json
{
  "targetFramework":"net6.0",
  "packageName":"Org.OpenAPITools.Client"
}
```

## 3.5.  バッチファイルを実行する
```build.bat``` を実行すると、下記フォルダにジェネレートしたファイルが出力された
* フォルダ構成

```BAT
C:\openapi-generator-cli
 .gen_client ・・・　Generateしたクライアント側クラスを出力するフォルダ
 .gen_server ・・・　Generateしたサーバ側クラスを出力するフォルダ
 openapi.yaml ・・・　OpenAPIのスキーマファイル
 clientConfig.json  ・・・　クライアント側の設定ファイル
 serverConfig.json　・・・　サーバー側の設定ファイル
```

# 4. 参考文献
https://openapi-generator.tech/docs/installation/

https://fintan-contents.github.io/mobile-app-crib-notes/react-native/learn/todo-app/networking/generate-api-client/