🌊

Re:ゼロから始めるSpring Boot #8 カスタムスターター

に公開

カスタムスターターとは?

**カスタムスターター(Custom Starter)**とは、

Spring Bootアプリケーションに簡単に機能を追加できる、パッケージ化されたライブラリのこと。
普通のスターター(例:spring-boot-starter-web)と同じように、

  • 依存関係(ライブラリ群)
  • 自動設定(AutoConfiguration)
    をまとめた部品・機能である。

カスタムスターターのユースケース・必要性

なぜカスタムスターターを作るのか?
代表的な場面はこんな感じです。
✅ よくあるユースケース

  • 社内共通の機能(ログ設定、認証認可設定など)をまとめる
  • 社内標準のライブラリ群をひとまとめにして配布したい
  • 同じ設定・Bean登録処理を何度も書くのを避けたい
  • SaaS/プラットフォームサービス向けのSDK提供をしたい

✅ なぜ必要か(メリット)

  • アプリごとに同じ設定を書く手間がなくなる
  • バグ修正や機能追加をスターター側で一括管理できる
  • チーム・組織全体で標準化できる
  • Spring Bootの「自動構成」のメリットを最大限活かせる

カスタムスターターの作成方法

カスタムスターターは、基本2つのモジュールに分けて作るのが一般的。

  1. my-starter 依存管理するためのモジュール、依存定義だけする(本体なし)
  2. my-starter-autoconfigure 実際の自動構成・設定を書く(本体)

カスタムスターターの利用方法

使いたいアプリ側のpom.xmlにdependencyとして登録するだけ。

Hands-on カスタムスターターの作成

mybatis のカスタムスターターを作成してみる。
必要な手順:

  1. custom-mybatis-spring-boot-autoconfigure モジュールを作成し、自動構成機能を提供する。カスタム定義ファイルMETA-INF/spring/XXX.importsファイルを用意する。
  2. custom-mybatis-spring-boot-starter モジュールを作成し、スターターモジュール内で自動構成モジュールを取り込む
  3. カスタムスターターを利用するプロジェクトのpom.xmlファイルにdependencyを登録

カスタムスターターの手順1を実践

(1).custom-mybatis-spring-boot-autoconfigure モジュールを作成

(2).自動構成クラスを作成
https://github.com/Willyangl/ReZeroSpringBoot/blob/master/ReZeroSB07-custom-mybatis-spring-boot-autoconfigure/src/main/java/com/rezoresb/config/MyBatisAutoConfig.java#L17-L49

(3).META-INF/spring/XXX.importsファイルを用意
https://github.com/Willyangl/ReZeroSpringBoot/blob/master/ReZeroSB07-custom-mybatis-spring-boot-autoconfigure/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports#L1

カスタムスターターの手順2を実践

(1).custom-mybatis-spring-boot-starter モジュールを作成

(2).モジュールを取り込む(pom.xmlにdependencyを登録するだけ)
https://github.com/Willyangl/ReZeroSpringBoot/blob/master/ReZeroSB07-custom-mybatis-spring-boot-starter/pom.xml#L17-L47

(3).カスタムスターターを利用するプロジェクトのpom.xmlファイルにdependencyを登録
以前使ったMyBatisのHands-on用のソースコードを改修して使った。https://zenn.dev/articles/e21f3f245fc860/edit
ソースコード:
https://github.com/Willyangl/ReZeroSpringBoot/blob/5e33940dfffbe72c06c7fe36361aa64f716abe8d/RezeroSB07-custom-mybatis-hand-on/pom.xml#L32-L37

Discussion