H2データベースを開発環境で使うための設定

2. H2データベースとは

H2データベースはJavaで書かれた軽量なデータベースで、組み込みモードとサーバーモードで動作します。開発やテストの際に、簡単にセットアップできるため、多くのプロジェクトで利用されています。

今回はそんなH2データベースの設定の仕方をまとめます。

H2データベースの依存関係を追加

Mavenの場合の依存関係の追加

まず、Spring BootプロジェクトにH2データベースを追加します。Eclipseでプロジェクトを開き、pom.xmlファイルを開きます。以下の依存関係を追加します。

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

この依存関係を追加することで、プロジェクトにH2データベースが組み込まれます。

Gradleの場合の依存関係の追加

Gradleの場合、H2データベースの依存関係を追加するには、build.gradleファイルに以下の設定を追加します。

dependencies {
    implementation 'com.h2database:h2'
}
  • implementation 'com.h2database:h2': これがH2データベースの依存関係を追加するための設定です。
  • implementation: Gradleに対してこの依存関係が実行時に必要であることを伝えます。
  • 'com.h2database:h2': H2データベースのグループIDとアーティファクトIDを示しています。

build.gradleファイルにこの依存関係を追加した後、Gradleをリフレッシュすることで、H2データベースがプロジェクトに組み込まれます。

H2コンソールの有効化

H2データベースのWebコンソールを使用すると、データベースの内容を簡単に確認できます。application.propertiesに以下の設定を追加して、H2コンソールを有効化します。

spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

これで、H2コンソールにアクセスできるようになります。

データベース接続の設定

application.propertiesにデータベース接続の設定を追加します。

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

この設定では、メモリ上にtestdbという名前のデータベースを作成し、H2ドライバを使用して接続します。

設定項目の説明

以下の設定項目について、それぞれの役割を説明します。

  • spring.datasource.url=jdbc:h2:mem:testdb: データベースに接続するためのURLです。memはメモリ内データベースを意味し、testdbはデータベースの名前です。
  • spring.datasource.driverClassName=org.h2.Driver: データベースに接続するためのドライバクラスです。
  • spring.datasource.username=sa: データベースに接続する際のユーザー名です。
  • spring.datasource.password=: データベースに接続する際のパスワードです。今回は空欄で、デフォルトのユーザー設定を使用します。
  • spring.jpa.database-platform=org.hibernate.dialect.H2Dialect: JPAを使う際に、H2データベース用の方言(ダイアレクト)を指定します。

H2コンソールへのアクセス

プロジェクトを実行し、ブラウザで http://localhost:8080/h2-console にアクセスします。

JDBC URLjdbc:h2:mem:testdb と入力し、Connectボタンをクリックします。これで、H2データベースのコンソールにアクセスできます。

テーブルの作成とデータの挿入

@EntityクラスからDBの自動生成

@Entityアノテーションを使ってクラスを定義すると、Spring Bootがデータベースに対応するテーブルを自動的に作成します。

これは、Spring Bootのspring.jpa.hibernate.ddl-autoプロパティによって制御されます。このプロパティは、データベースのテーブルを自動的に生成したり、既存のテーブルを更新したりするための設定です。

例えば、application.propertiesに以下のように設定すると、アプリケーションの起動時にデータベースのテーブルが自動で更新されます。

spring.jpa.hibernate.ddl-auto=update

ddl-autoの値には他にもcreatecreate-dropvalidateなどがあり、データベースのテーブルをどのように扱うかを制御します。

コンソールからDB作成

コンソールからSQLを使ってテーブルを作成し、データを挿入してみましょう。例えば、以下のSQLを実行してテーブルを作成します。

CREATE TABLE sample_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

次に、データを挿入します。

INSERT INTO sample_table (name) VALUES ('Test Data');

SELECT文でデータが挿入されているか確認しましょう。

SELECT * FROM sample_table;

ログにSQLを表示する

下記設定をapplication.propertiesなどの設定ファイルに追記する。

spring.jpa.show-sql=を記述する

役割: JPA が生成する SQL クエリをコンソールに表示するかどうかを制御します。

  • true: SQLクエリをコンソールに表示します。
  • false: SQLクエリをコンソールに表示しません(デフォルト)。

用途: 開発中に実行されるSQLを確認するために利用されます。

spring.jpa.show-sql=true

spring.jpa.properties.hibernate.format_sql=を記述する

役割: Hibernate が生成する SQL クエリを整形(インデントや改行の追加)して表示します。

  • true: 整形されたSQLクエリを出力します。
  • false: 整形せず、そのまま出力します(デフォルト)。

用途: SQLの可読性を向上させ、開発者が理解しやすい形で表示するために使います。

注意: この設定は spring.jpa.show-sql=true と一緒に使う必要があります。

spring.jpa.properties.hibernate.format_sql=true

メモリ上にDBを作成するとは

H2データベースはメモリ上にDBを作成することになります。メモリ上のデータベースとは、データがコンピュータのメモリ(RAM)に保存されるデータベースです。ディスクにデータを保存する通常のデータベースと異なり、データはメモリ内でのみ保持されます。

メリット: 非常に高速で、テストや開発のための一時的なデータベースとして便利です。

デメリット: アプリケーションを再起動したり、メモリがクリアされるとデータが消えてしまいます。

利用シーン: 開発やテストの際に、クリーンな状態のデータベースを毎回作成したい場合に使用します。

8. まとめ

これで、H2データベースを開発環境で使用するための設定が完了しました。H2を使うことで、開発中のデータベース操作が容易になり、素早くテストを行うことができます。