Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JHipsterで爆速かつ堅牢なエンタープライズ Spring Boot 開発を実現する

鏡味秀行
November 22, 2023
310

JHipsterで爆速かつ堅牢なエンタープライズ Spring Boot 開発を実現する

2023年11月11日に実施されたJJUG CCC 2023 Fallのセッション資料です。(発表者ノートを吹き出しで若干加筆しています)

鏡味秀行

November 22, 2023
Tweet

Transcript

  1. 自己紹介 鏡味(かがみ) 秀行 (50歳) • Java歴: Hotjava(‘95)~SI案件15年ほど • 他: JavaScript,

    Python, C#, Ruby, ...,Lisp • 趣味・興味: 日曜プログラミング、生成AI(Llama2)、 緑黄色社会、ドラム JHipsterとのかかわりは、 • 日本語サイト構築 • https://www.jhipster.tech/jp/ • バグ直しやエンハンス対応 2
  2. JHipsterとはなにか? 9 JHipster = “J”(Java) + “Hipster”(流行に敏感な人) • OSSの「ソースコード生成ツール」です •

    Spring Boot + React/Angular/Vue + 多くの技術スタックを使い フルスタックの、動作する、アプリケーションコードを生成します
  3. 10

  4. Java Spring Framework Spring Boot JHipster 言語, 実行プラットフォーム Javaで効果的に開発するためのアプリケーション 基盤

    Spring Frameworkを効果的に使用できる 開発・実行環境 Spring Bootに機能を追加し、 「アプリとして動く」コードを生成 11 Spring Boot (Initializr) と違う? Spring Initializrは、ライブラリと依存 関係を整理した、開発環境の足場を生成
  5. JHipsterの歴史と現在 12 • 2013.10: Julien Duboisさん (現MS) により開発開始 • 以降、その時代の主流を随時取り込みながら発展

    • JavaやSpringBootのバージョンアップ • Microservice • Angular2、React(ComponentからHooksへ) 、Vue • … • 2023.10: 10周年🎉 • 2023.11: v8.0.0リリース🚀 • 2年半ぶりのメジャーバージョンアップ • Java21, Spring Boot 3.1.5 • Angular16, Vue3 Java SE 7 や AngularJS の時代
  6. JHipsterでアプリ作成開始① 13 • Java17以上/Node18以上のインストール/Git/Dockerあるとよし • sdkman / nvm 経由のインストールが便利 •

    インストールして実行 $ npm install -g generator-jhipster #ツールのインストール $ take myApp #作業フォルダ作成 $ jhipster #質問に答えていくとコード生成
  7. 16 JHipsterで作成したアプリの実行 $ npm run services:up # DB等をDockerで起動 > docker

    compose -f src/main/docker/services.yml up --wait [+] Running 1/1 ✔ Container myapp-postgresql-1 Started $ ./mvnw # アプリケーション起動 ここからはJHipsterコマンドなし、普通のSpring Boot開発です。
  8. エンティティをCRUD処理するSingle Page Applicationを作ります • 例) 「React/PostgreSQLで作成」の場合 • レイヤアーキテクチャの構造で、Entity, Resource, Service,

    Repository • React/ReduxとTypeScriptで、Model, Component, Reducer コード生成完了後に出来ていること① : SPAのWebアプリが一通りできている 20 REST JPA Frontend Backtend
  9. 前述のコードスタイル定義に加え、 • Java/TypeScriptのビルド • Maven/gradle, npm, webpack • Dev/Prodプロファイル分けも準備 •

    クライアント・サーバのホットリロード • Browsersync, Spring-Devtools • VSCodeの仮想環境で開発 • Devcontainer • SonerQubeのコードレビュー環境 アプリ生成完了後に出来ていること③ : コーディング・ビルド環境もできている 27 $ docker compose -f src/main/docker/sonar.yml up -d $ ./mvnw -Pprod clean verify sonar:sonar - Dsonar.login=admin --Dsonar.password=xxx (コマンドの詳細は、 生成コードのREADME.md参照)
  10. • CICDパイプラインは、オプション的なコマンド「サブジェネレーター」で生成 アプリ生成完了後に出来ていること⑦ : デプロイ・CI/CDの準備もできている 35 $ jhipster ci-cd #

    コード生成 🚀 Welcome to the JHipster CI/CD Sub-Generator 🚀 ? What CI/CD pipeline do you want to generate? (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed) ❯◉ GitHub Actions ◯ Jenkins pipeline ◯ GitLab CI ◯ Azure Pipelines ◯ Travis CI ◯ CircleCI • DockerやKubernetesにデプロイするコンテナイメージをJibで作成 $ npm run java:docker # アプリのイメージ作成
  11. JHipsterが公式に出しているBlueprintがあります。Java関連だと以下 • GraalVMのネイティブビルド(私も少しばかり貢献中😊) • Micronaut / Quakus / Kotlin •

    Jooq その他、異なるテクノロジースタックで、フロントエンド/バックエンドを作成できます。 • フロントエンド: Svelte, Ionic, React Native • バックエンド: Node.js, Dotnet, Golang 公式以外に、サードパーティ製のBlueprintもマーケットプレイスに登録されています。 もちろん自作も可能。 Blueprintのラインナップ 41
  12. 「エンタープライズシステム ≒ 比較的大規模な企業の業務を担う情報システム」を開発するに 必要な要素は、なんでしょうか?(注:ここではソフトウェアの範囲) • 堅牢であること • コードの品質を高める仕組みがあること • 理解が容易であること

    • テストがしやすいこと • 安定し信頼できる実績があること • 規模大のリスクに対応できること • 分業がしやすいこと • チーム統制が取れていること • 維持可能であること • 技術スタックのコミュニティ人口が多いこと • 開発のみならず運用も考慮した仕組みをもっていること • 将来的変化に対応できる仕組みをもっていること エンタープライズシステムの開発で必要な要素 48
  13. JHipsterの開発 = Java/Spring Boot + よく使われる技術スタックの開発 そのため、特長もそのままに、さらに良いことが加わります。 • 堅牢であること •

    実績があり安定した Spring Boot と現場でよく使われる技術スタックで構成 • 独自色が少なくスタンダードなコードスタイルの足場を生成 • テスト環境やテストケース生成など、品質を重視したコード生成 • 規模大のリスクに対応できること • ボイラープレートコードによるコードの統制Local Blueprint によりさらに加速 • 完全に動くアプリケーションをリファレンスとして参照できる、いわゆる「動く開発標準」が手元に • マイクロサービスにも一応対応。でも、モジュラーモノリス(Spring Modulith)にも対応できそう! • 維持可能であること • メジャーで息の長い技術スタックの選定 • マイグレーションなど、リリース後の維持管理も考慮 エンプラ開発とJHipster、合います! 49