モダンなアーキテクチャを簡単に生成できると噂のJHipsterを使ってみた

## JHipsterとは

JHipsterは、Spring Boot（バックエンド）とAngular、React、Vue.js（フロントエンド）を組み合わせたフルスタックアプリケーションの生成ツール。以下のような特徴がある。

- コード生成の自動化: アプリケーションの雛形を迅速に生成
- マイクロサービス対応: モノリシックなアプリケーションとマイクロサービスアーキテクチャの両方をサポート
- 多言語対応: 国際化（i18n）の設定を簡単に統合
- DevOps統合: Docker、Kubernetes、CI/CDパイプラインなどのDevOpsツールをサポート

## 実際に使ってみる

と受け売りの情報を記載してもしょうがないので実際にやってみる。

1. `Java`や`Git`、`Docker`、`Node.js`をインストールする
    - `Java`とか`Node.js`はLTS版をインストールすること
    - 作成したアプリが`redis`とか使うならコマンドはインストールする必要ある
1. JHipsterをインストールする `npm install -g generator-jhipster`
1. 作業用のディレクトリを作成してそこに移動する
    - てっきりディレクトリも一緒に作成してくれるかと思ったらカレントディレクトリに作成で大事故したため
1. JHipsterを実行する `jhipster`
1. 画面上のあれこれ質問に従う
    - 実行するとこんなオサレな表示がコンソールに出る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/8b88c1d4-c7ac-577f-3de4-2abb7726153d.png)
    - 質問のざっくり内容
    
| 質問 | ざっくり内容 |
|:------------:|:------------:|
| What is the base name of your application | アプリケーション名<br/>イカした名前を付けよう |
| Which *type* of application would you like to create? | アプリのタイプ <br/> とりあえずやってみる場合は`Monolithic application`で良い|
| What is your default Java package name? | Javaパッケージ名 |
| Would you like to use Maven or Gradle for building the backend? | ビルドツールを`Maven`か`Gradle`から選ぶ |
| Do you want to make it reactive with Spring WebFlux? | `Spring WebFlux`使う？ |
| Which *type* of authentication would you like to use? | 認証方式はどれ使う？ |
| Besides JUnit, which testing frameworks would you like to use? | `JUnit`以外でテスティングフレームワーク何使う？<br/>`JUnit`で十分なら選ばなくていい |
| Which *type* of database would you like to use? | どのデータベース使う？ |
| Which *production* database would you like to use? | 本番環境でどのデータベース使う？ |
| Which *development* database would you like to use? | 本番環境でどのデータベース使う？<br/>環境ごとに分けて作ってくれるの地味にありがたい |
| Which cache do you want to use? | キャッシュどれ使う？<br/>使うってしたら2ndキャッシュとかの質問もされる |
| Which other technologies would you like to use? | その他何使う？<br/>`ElasticSearch`とかあって最初触ったときそこまでやってくれるんかってなった |
| Which *framework* would you like to use for the client? | フロントのフレームワークどうする？<br/>バックエンドだけでいい場合はNo clientでいい |
| Besides Jest/Vitest, which testing frameworks would you like to use? | `Jest/Vitest`以外でテスティングフレームワーク何使う？<br/>こちらはフロント用 |
| Do you want to generate the admin UI? | 管理者画面いる？<br/>色々見れて面白いので作成推奨 |
| Would you like to use a Bootswatch theme? | テーマ<br/>選択によってはナビゲーションバーとかどうする？とかの質問もある |
| Would you like to enable internationalization support? | 多言語対応させるか？ |

- するとこんな感じでスルスル自動作成してくれる 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/7669c5f1-ae34-bb44-78a3-294f49cafa87.png)
- ガイドがでるので `./mvnw` と`npm start`でそれぞれ起動する
- 画面が表示される、ログインもできる
- 必要あれば `jhipster jdl ${JDLファイルパス}`でアプリケーション構成やエンティティのインポートができる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/eda7f119-ba02-18c4-5634-63bf98bfdb7e.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/a9c5c45c-19a6-3fe4-42f2-f3e2d83154fe.png)


## 管理者画面

ユーザ管理ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/b111c3e0-fa17-b91b-2482-72aeb46bcadf.png)

JVMのメトリクスも見れる。見れるということは取得できる状態にあるということか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/4d5ffeba-f9f2-ccc7-1dbb-0384ab2dbf34.png)

ログの設定もできる。GUIでいい感じにログレベルを設定できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/3baa1ac2-73af-eebd-18d4-cf4bea9acd19.png)

APIエンドポイントも完備。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/ad9dd01c-0819-95be-df83-cca4ca506376.png)

## エンティティ画面

今回はサンプルとして https://start.jhipster.tech/jdl-studio/ のデフォルトJDLをダウンロードしてインポートしてみた。なぜかインポート後に`MenuItem`と`Route`のインポートエラーが起きたので手動で解決。
どうやらサンプルになるデータは勝手にいくつか作ってくれるっぽい(↓画像はJDLをインポートしたばかりで自分では何もしてない)。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/6dbb01b2-7485-13c4-b304-cca445bbc067.png)

データは自分で追加することもできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212284/5d9ae913-3efe-6f14-5d0d-91f70f8c3dbb.png)

## 所感

ただただ質問に答えていくだけで簡単かつ足回りがある程度しっかりしたプロジェクトを作ってくれるのはすごくありがたい。
一方でエンタープライズで大活躍するかというとJDLでどこまでフォローするとかリポジトリ分けどうするかとかちゃんと決めなければいけないことはあるなと思った。
なんか他にもいろいろできそうなのでちょこちょこ触ってみようと思う。
あと、こんな色々やってくれるって最近の技術はすごいなぁとか思ってたらJHipsterのバージョン1.0.0出たのは2014年だった。。。知らなかった。。。