Spring Boot と データベースマイグレーション (1/2)


Spring Boot と DB Migration ツール Harmonica を使って、 アプリケーションを作る流れをまとめました。 Harmonica は Kotlin でできたデータベースマイグレーションのツールです。

環境

次のツール類を使います。

  • Kotlin 1.3.20
  • Spring Boot 2.1.2
  • Harmonica 1.1.17
  • PostgreSQL
  • IntelliJ IDEA
  • JDK 11 (JDK 8 またはそれ以降のバージョンならOK)

アプリケーションのベースを作る

まず、 アプリケーションのベースを Spring Initializr を使って生成します。

画面上で、次のコンポーネントを選択します。

  • Gradle
  • Kotlin
  • Spring Boot 2.1.2

プロジェクトのメタデータ(Group ID, Artifact ID)はそのままにしておきます。

そして次の依存関係を追加します。

  • Web
  • PostgreSQL
  • JPA
  • Thymeleaf

過去の記事では、 kotlinx.html を使ってビューを作成していましたが、 今回は 使用者が一番多いと思われる Thymeleaf を使います。

“Generate Project” ボタン をクリックして、 ダウンロードされる zipファイル を展開します。 次のようなファイル構造になっているはずです。

PostgreSQL の準備

次のように、データベースの設定をします。

データベース名 demo
ユーザ名 develoepr
パスワード developer
ポート 5432 (デフォルトのポート)

もし PostgreSQL が手元にない場合は、 Docker を使って次のように準備できます。

もしデータベースのポートを変更したければ、 最初の 5432 を別のポート番号に変更してください。

IntelliJ IDEA でプロジェクトを開く

メニュー “File” の “Open” をクリックして、 ファイル “settings.gradle” を選択します。 すると、プロジェクトとして開くかファイルとして開くかを尋ねるダイアログが表示されます。 プロジェクトとして開くため、 “Open as a Project” ボタン をクリックします。

その後、ダイアログが表示されるので必要項目を設定して “OK” ボタン をクリックします。

build.gradle を開いて Kotlin のバージョンを 1.3.20 に変更します。

マイグレーション

モジュールの追加

マイグレーションのためのモジュールを追加します。 IDE 左側 にある プロジェクト ツールウインドウ で、 トップのディレクトリを選択します。 “File” メニュー から、 “New”、”Module” をクリックします。 すると “New Module” ダイアログ が表示されます。 ダイアログの左ペインで “Gradle” を選択し、 右ペインで “Kotlin (Java)” を選択した上で、 “Next” ボタン をクリックします。

そして、次のように設定して “Next” ボタン をクリックし、 モジュールを追加します。

Add as module to demo
GroupId com.example (Inherit)
ArtifactId db
Version 0.0.1-SNAPSHOT (Inherit)

自動的に同期が行われ、次のエラーが表示されます。

そこで db/build.gradle を開き、 Kotlin プラグイン の バージョン を削除し、 ライブラリを追加します。

設定

データベースとディレクトリの設定を行います。

次の式を build.gradle の最下部に記述します。

そして、次のコマンドを実行します。

ファイル db/src/main/kotlin/com/example/demo/db/config/Default.kt を作成して、 次のように記述します。

マイグレーションの追加と実行

マイグレーションを追加します。 次のコマンドを実行します。

すると ファイル db/src/main/kotlin/com/example/demo/db/migration/Mxxxxxxxxxxxxxxxxxx_CreateTask.kt が生成されます。 それを次のように変更します。

マイグレーションを次のように実行します。

次のように出力されます。

データベースの確認

psql を使ってデータベースを確認してみます。

テーブル harmonica_migration には実行されたマイグレーションのバージョンが登録されています。 テーブル task がタスクを格納するテーブルで、 task_id_seq シーケンス は 自動で作られたもので、 task のインデックスを付番するものです。

task テーブル の id カラム は自動的に追加されます。

Spring Boot と データベースマイグレーション (1/2) に続きます。 そちらでは、 メインアプリケーションの構築(設定の追加, エンティティの作成, リポジトリ作成, ビューテンプレートの作成, コントローラ作成), アプリケーションの実行について説明します。