「データベースの設定手順が知りたい」
「H2データベースを組み込んだアプリを作成したい」
簡単なWebアプリを制作した人は、より高度なアプリ開発のためにデータベースを調べているのではないでしょうか?
データベースの中で最も導入がシンプルなH2データベースは、最初に学ぶのに適しています。
しかし、完全主導で設定が完了するわけではないため、難易度は高めです。
そこで、本記事ではJavaで開発経験のあるみずがめが、以下の内容を紹介します。
- データベースを使うための前提知識
- H2データベースの設定方法5STEP
- セキュリティレベルを上げるシンプルな方法
この記事を最後まで読むことで、自分の力でデータベースの設定が可能になります。
記事後半では、貼り付けて実行できるサンプルコードを掲載しているため、ぜひご活用ください。
この記事では自分のパソコンで作成すること前提でコードを紹介しています。ネットにサービスを公開する場合は企業のルールやセキュリティに従ってください!
Spring BootでH2データベースを使う前に知っておくべき2つの基礎知識
Spring BootでH2データベースを実装する場合、データベースというシステムの性質を知っておく必要があります。
具体的には以下の順番でデータベースの理解を深めましょう。
- データベースとは
- H2データベースの特徴
データベースは奥が深いため、参考書の最初から順番に勉強するようなやり方だと時間がかかります。
実装に関係する知識だけを押さえて、実装に取り掛かるのがおすすめの勉強法です。
1.データベースとは
データベースとは情報を見やすくまとめたものです。
最もよく使う表形式のデータベースでは、項目を1番上に設定し、関係する通知や情報を書き込んでいきます。
下記は従業員名と契約件数を基に作成した表です。
| 従業員ID | 従業員名 | 契約件数 |
|---|---|---|
| 1 | 新井 | 7 |
| 2 | 伊藤 | 6 |
| 3 | 藤田 | 8 |
| 4 | 佐々木 | 12 |
| 5 | 小田 | 5 |
データベースを構築すると、複数の情報を整理して記録できるため、飲食店の注文システムや公的機関の個人情報管理などで活用されています。
とくに、Webアプリはインターネット上でユーザーのログイン情報やパスワードを扱うため、情報を整理した状態で保存できるデータベースの習得は必須です。
2.H2データベースの特徴
H2データベースは、テスト用のデータベースといわれており、Webアプリ初心者が最初に触れるデータベース管理システムとして適しています。
理由は以下のとおりです。
- Spring Bootに入っている
- 使うための準備が簡単
- データベース管理が簡単
データベースを利用するには、公式サイトからデータベース管理システム(MySQLやOlacleなどが有名)をダウンロードする必要があります。
その後、データベース管理システムと開発環境(’コードを書くソフトウェア)を接続して使用します。
開発者が構築したデータベースは、MySQLやOlacle内に作られるため、中身を編集するにはデータベース管理システムを開発環境とは別に起動する必要があり難易度が高めです。
しかし、H2データベースはSpring Bootにデフォルトで組み込まれており、プロジェクト作成画面でチェックを入れるだけで利用できます。
また、アプリ稼働後のデータ管理がしやすく、制作したアプリ起動中にブラウザでコンソール画面(データを管理する画面)にアクセスすれば、作成されたデータを直接操作できます。
データベースを制作するまでの手順が少なく、変更結果をすぐ確認できるため、H2データベースは学習向けのシステムです。
SpirngBootでH2データベースを使うのに必要な3つのファイル
Spring BootでH2データベースを使う場合は以下にある3つのファイルを作成・編集する必要があります。
- エンティティ
- リポジトリ
- 設定ファイル
中でも設定ファイルはWebアプリ全体の設定にかかわっているため、書かれている内容が複雑です。かみ砕いて解説しているためぜひご活用ください。
1.エンティティ
エンティティはデータベースの設計図を担当するファイルで、MVC(Webアプリを構成するシステム)のM(モデル)に該当します。

表の一番上にある項目を決定するのがエンティティです!
Webアプリの場合は、以下の項目を設定します。
- ID番号
- ユーザー名
- パスワード
ID番号は、システム構築時に登録した順で番号を割り振るものと、ランダムに番号が決まるものがあり、作るアプリの方向性によって異なります。
ユーザー名は、登録した人のニックネームや本名が入り、変更不能にすることが多いようです。
パスワードは、ユーザーが決めた文字列を保存しておき、ログインするときに使われます。
同じ文字列なら正常にログインされますが、違った場合はパスワード入力のやり直しを促すメッセージを表示させるアルゴリズム(命令)を書きます。
エンティティはMVCのM(モデル)に該当し、データベースの骨格を定義する設計図です。
2.リポジトリ
リポジトリは、データベースの操作を担当してくれるファイルです。
Javaで書かれたコントローラの命令を受けて、データベース専用の構文とリンクさせる場所です。
具体的には、コントローラの要求に従って、データベースにあるデータを「追加」「検索」「更新」「削除」して保存したあと、コントローラに結果を返します。
プロジェクト作成画面でJPAにチェックを入れている場合は、コントローラの命令とデータベース構文を自動で結びつけてくれます。
開発者は保存のコマンドを設定するだけでリポジトリの完成です。
リポジトリは直接データベースの中身を操作するファイルといえます。

ちなみに、リポジトリのように2つのコンポーネント(部品)をつなぐ役割を持つものをインターフェースと呼びます。
3.設定ファイル
設定ファイルとは、Webアプリを正常に稼働させるのに必要な設定をまとめたファイルです。
以下の内容を設定します。
- データベースの接続先の指定
- ローカルサーバーのポート番号
- ログレベルの設定
- ブラウザによるコンソール操作設定
データベースを使う場合、設定ファイルで接続先・ユーザー名・パスワードを決めてから接続します。
ローカルサーバー(自分のパソコンでWebアプリを起動するときに必要なシステム)を立ち上げるには、IPアドレスとポート番号の指定が必要です。

IPアドレスはシステムの住所、そのシステムの玄関をポート番号と呼びます!
ローカルサーバーを起動すると、IPアドレスは自動で割り振られます。
ポート番号はデフォルトで8080になっていますが、2つ以上のSpringアプリを同時に実行するとお互い干渉してしまうため、手動で別の番号に指定してください。
ログレベルとは、プログラムを実行した際にターミナルやコンソールと呼ばれる場所に表示されるプログラムの成功・実行中・失敗といったデータの粒度です。
初心者の場合はデフォルトの「INFO」のまま学習を進めたほうがいいでしょう。アプリ起動で重要な起動メッセージやエラーだけをシンプルな英語で教えてくれます。
ログレベルには致命的な失敗のみ表示の「ERROR」や改良に役立つ情報が得られる「DEBUG」などがあります。開発現場では改良のために正確な状況を把握するため、一時的にログレベルを変更し、リリース前に戻すのが一般的です。
コンソールの操作設定をオンにしておくと、ブラウザ上でデータベースの中身を確認できます。
アプリを停止させずにコンソール画面からコマンドによるデータの追加や削除が可能になるため、データベースを体験するのに最適です。
Spring BootとH2データベースの間で行われる処理の流れ
Spring BootでH2データベースを稼働させると、複数のファイルが連動して動作します。
また、HTMLやJavaのほかデータベース構文(データベースで使われる言語)といった複数の言語を行き来するため、難しいと感じるかもしれません。
以下で、情報の流れがわかりやすい飲食店の注文タブレットを例に、情報の流れを紹介します。
| 命令処理の順番 | アプリの動作 | 使われているプログラミング言語 |
|---|---|---|
| 1 | アプリ起動 | Javaによりデータベース構築 |
| 2 | ユーザーがブラウザ(ビュー)から注文フォームを送信する | HTMLの情報 |
| 3 | コントローラがリクエストを受け取る | HTML(ビュー)→Java(コントローラ) |
| 4 | コントローラがリポジトリに「データを保存して」と依頼する | Java(コントローラ)→データベース構文 |
| 5 | リポジトリがデータベースにアクセスして実際の保存や検索を行う | データベース構文 |
| 6 | 結果がコントローラーに戻る | データベース構文→Java(コントローラ) |
| 7 | コントローラの命令ビューに表示される | Java(コントローラ)→HTML(ビュー) |
データベースを直接操作・管理しているのはインターフェースのリポジトリで、コントローラが間接的に関係しています。
それぞれの役割を正確に把握できれば、ファイル構造で躓くことがなくなるはずです。
Spring BootでH2データベースをアプリに追加する方法5STEP
Spring BootでH2データベースを追加する方法は、ほかのデータベース管理システムの設定より簡単です。
以下の5STEPでWebアプリにH2データベースを追加します。
- 状態確認
- エンティティ作成
- リポジトリ作成
- 動作確認
- 実行
初心者にとってハードルが高いと感じるのが状態確認です。
複雑なコードが書かれているファイルを開くため「間違ってどこか変えちゃったらどうしよう…」と心配になる人もいます。
実は、プロジェクト作成画面でH2にチェックを入れていれば、コードを追加する必要はありません。コードが正常に追加されているか確認するだけで十分なため、恐れずファイルを開いてください。
なお、みずがめが執筆した「【初心者向け】Spring BootをEclipseで使う手順を4STEPで解説!」では、H2データベースの最もシンプルな設定方法を紹介しています。
1.状態確認
Spring BootにH2データベースに関する情報があるか確認します。
Eclipseを立ち上げてください。

上画像はEclipseを立ち上げた直後の画面です。最後に操作したファイルの中身が表示されているはずです。前回の続き画面からスタートします。

H2データベースを接続するプロジェクトを展開します。みずがめはSpring Bootで作った『CafeOrder[boot][devtools]』を選択します。

クリックすると中にあるファイルが表示されます。

「pom.xml」というファイルをダブルクリックしてください。

上画面は「pom.xml」の中身で、プロジェクトの作成と実行に必要なシステムの情報が記述されています。
H2データベースに関係するコードが書かれているか、確認していきましょう。

データベースの操作を自動化するJPAを有効にする記述があるか確認します。
以下のコードを見つけましょう。ファイルの中間あたりに書かれています。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

H2データベースの記述を確認します。
以下のコードを探してください。ファイルの後半にあるはずです。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
これら2つの記述があれば、次のステップに進みます。
ない場合は、<dependencies>と</dependencies>の間に追加してください。
2.エンティティ作成
データベースの設計図であるエンティティを作成します。
パッケージを作成して関連ファイルをまとめておくと、アプリを拡張してもわかりやすい状態が保たれます。
以下の手順で作りましょう。
- モデルパッケージの作成
- エンティティの作成
まずはパッケージを作成します。

「src/main/java」を展開してください。

「com.example.cafeorder」を開いてください。

コントローラファイルまたは「controller」というパッケージと「CafeOrderApplication.java」が確認できます。エンティティパッケージは「controller」パッケージと同じところに作ります。

「com.example.cafeorder」の上にマウスカーソルを置いて、右クリックしてください。

「新規(W)」をクリックしてから、右側に表示された「パッケージ」を選びます。

名前(M)の「com.example.cafeorder」を変更します。

みずがめは「com.example.cafeorder.model」にしました。エンティティはMVCのM(モデル)に該当するため、名前の最後に「model」が入っています。

空のパッケージが作られます。中身が入っていないため、白色になっています。

「model」の上にマウスカーソルを合わせて右クリックしてください。

「新規(W)」にマウスカーソルを合わせると、右側に「クラス」が表示されるためクリックしてください。

クラスファイルの設定画面が表示されます。名前(M)を変更しましょう。

今回は「Order.java」と付けました。「完了(F)」をクリックしてください。

「model」パッケージに色が付き、中に「Order.java」が作られます。クリックして開いてください。

ファイルの中が確認できます。ファイルの中身を変えていきましょう。
以下のコードを貼り付けてください。
package com.example.cafeorder.model;
import java.time.LocalDateTime;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "orders") // ← ここでテーブル名を orders に変更(予約語回避)
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String item;
private int quantity;
private LocalDateTime createdAt = LocalDateTime.now();
// コンストラクタ(デフォルト)
public Order() {}
// 便利なコンストラクタ
public Order(String item, int quantity) {
this.item = item;
this.quantity = quantity;
}
// getter / setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getItem() { return item; }
public void setItem(String item) { this.item = item; }
public int getQuantity() { return quantity; }
public void setQuantity(int quantity) { this.quantity = quantity; }
public LocalDateTime getCreatedAt() { return createdAt; }
public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
}
上記コード12行目の@Tableを忘れると、Spring Bootが別のデータベースを使おうとしてエラーになります。
H2データベースを使う場合は、9行目にある「import jakarta.persistence.Table;」とセットで書いてください。

上記は「Order.java」にコードを貼り付けた状態です。コードの下に注意を促す赤線マーカーの表示がなければ成功です。
3.リポジトリ作成
リポジトリを作って、アプリ実行中にデータベースを操作できるようにします。
以下の手順で作成してください。
- リポジトリパッケージの作成
- リポジトリ作成
リポジトリパッケージは「model」や「controller」と同じ場所に作ります。

「com.example.cafeorder」の上にマウスカーソルを合わせて右クリックしてください。

「新規(W)」にマウスカーソルを合わせてください。右側に表示された「パッケージ」をクリックします。

パッケージ作成画面が表示されます。

「名前(M)」の部分に「com.example.cafeorder.repository」と入力して「完了(F)」を押しましょう。

空の「repository」パッケージが作られます。確認できたら「repository」パッケージの上で右クリックしてください。

「新規(W)」を選択します。
リポジトリはコントローラとデータベースの間で機能するファイルのため「インターフェース」をクリックしてください。

インターフェース作成画面が表示されます。

「名前(M)」部分に「OrderRepository」と変えて「完了(F)」を押します。

「repository」パッケージに「OrderRepository.java」が作られたら成功です。クリックして展開します。

インターフェースの中身は最低限のことが書かれています。
以下のコードを貼り付けてください。
package com.example.cafeorder.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.cafeorder.model.Order;
@Repository
public interface OrderRepository extends JpaRepository<Order, Long> {
}
アプリ起動中にデータベースを変更できるようになりました。

上画像は変更後の状態です。エラーが出ていなければ次に進みます。
4.設定の調節
エンティティとリポジトリを追加した後は、関連するファイルを変更していきます。
以下のファイルに手を加えてください。
- コントローラ修正
- 設定ファイルの追加
まずコントローラーを変更していきます。

「CafeOrderController.java」を展開してください。前回までの内容になっているはずです。
以下のコードを貼り付けて編集しましょう。
package com.example.cafeorder.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.example.cafeorder.model.Order;
import com.example.cafeorder.repository.OrderRepository;
@Controller
public class CafeOrderController {
private final OrderRepository orderRepository;
public CafeOrderController(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
// 注文フォームを表示
@GetMapping("/order")
public String showOrderForm(Model model) {
model.addAttribute("message", "カフェ注文フォームへようこそ!");
return "order";
}
// フォームから送信された注文を保存
@PostMapping("/order")
public String submitOrder(@RequestParam("item") String item, Model model) {
Order order = new Order();
order.setItem(item);
orderRepository.save(order);
model.addAttribute("message", "ご注文ありがとうございます! 選んだ商品: " + item);
return "order";
}
}
エンティティとリポジトリの関係を組み込んだコードです。

上画像のように、赤線マーカーの表示がなければ成功です。次に、設定ファイルを追加します。

「src/main/resources」をクリックして展開してください。中にある「application.properties」を選択します。

タブが間違っていないか確認します。タブに黄緑色の木の葉アイコンが表示されていれば正しいファイルです。
以下に表示されているコードを貼り付けてH2データベースを有効にします。
spring.application.name=CafeOrder
# H2(開発用:in-memory)
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driver-class-name=org.h2.Driver
# 重要な情報
spring.datasource.username=tu
spring.datasource.password=future
# Hibernate / JPA
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# 開発中は下を使う(テーブル自動作成)。通常では validate/none にする。
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
# H2 コンソール(開発時のみ有効に)
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
8行目の「username」と9行目の「passward」は自分のわかりやすいものに変えておきましょう。今回はネットにアップするアプリではないため、デフォルトで進めます。

上画像のように、貼り付けた後に赤線マーカーが出ていなければ次に進んでください。

自分のパソコンでやる場合は、必ずユーザーネームとパスワードは変更する癖をつけておいてください。
5.実行
実際に起動してデータベースを操作します。

「▷」を押してアプリを起動してください。

Eclipseはそのままにして、Google Chromeを起動します。

「http://localhost:8080/h2-console」と入力してください。「/h2-console」の部分は、データベースを管理するシステムの場所を示します。

上記の画像はH2データベースのコンソール画面です。

言語を変えておきます。左上の「English」をクリックし、下に表示される「日本語」を選びましょう。

「jdbc:h2:~/test」の部分を設定ファイルで指定した「jdbc:h2:mem:testdb」に書き換えてください。

設定ファイルで決めたユーザーネームとパスワードを入力し「接続」をクリックします。

コンソール画面が表示されました。
試しに中身を確認してみましょう。

以下のコードを上画像の「①コマンド入力」に貼り付けてください。
SHOW TABLES;
SELECT * FROM ORDERS;
「SELECT*FROM ORDERS;」のエリアに何も記録がないのがわかります。これから注文ページを開いて、商品を注文し、再度データベースを確認してみます。

コンソール画面を閉じずにGoogle Chromeの新しいタブを開いてください。

「http://localhost:8080/order」と入力してください。

注文フォームが表示されます。好きなものを選んでください。

「注文する」で注文データを送信しましょう。

タブを「H2コンソール」に切り替えます。

追加されたデータを確認します。
コードはそのままに、上にある「▷」を押して実行します。表が表示されたら成功です。
Spring BootとH2データベースで習得!データを守る方法2STEPで解説
Spring Bootに組み込まれたH2データベースはアプリ開発に使われる簡易的なシステムで、本番環境(サービス運用)ではMySQLといった専用のデータベースを使います。
H2データベースを学習で使うレベルならセキュリティレベルを気にする必要はありまんが、ファイルに直接ユーザーネームやパスワードを書く癖をつけてしまうと現場で問題になる可能性があります。
そこで、セキュリティレベルを引き上げる方法を1つ紹介します。以下の手順でセキュリティレベルを高めましょう。
- ユーザーネームとパスワードを見れないようにする
- 実行したときに情報を読み込む仕様に変える
紹介する方法はEclipseで実行すること限定の方法ですが、重要な情報をわかりやすい場所に書き込まない訓練ができます。
このセキュリティレベル向上も自分のパソコンのみで行うことを想定しています。本番環境では企業のルールに従ってください。
1.ユーザーネームとパスワードを見れないようにする
まず、「src/main/resources」をクリックして展開してください。中にある「application.properties」を選択します。

このままだと、ユーザーネームとパスワードがファイルに直書きされており丸見えです。
以下のように書き換えます。
spring.datasource.username=${DB_USER}
spring.datasource.password=${DB_PASS}
記事前半で書いたユーザーネーム「tu」を${DB_USER}へ、パスワードを「futuer」から${DB_PASS}に変えてください。
変更するとパスワードが残らない仕様(直書きされていない)になり、セキュリティレベルが向上します。

上画像のようにコードの下に赤線マーカーがなければ次に進みます。

メニュー画面の「▷」を押して実行します。

Eclipseが起動している状態でGoogle Chromeを開きます。

「http://localhost:8080/h2-console」と入力してください。

ユーザー名のところに今までログインできていたユーザー名とパスワードを入力します。

すると、ユーザー名・パスワードが間違っていると表示されます。はじかれたら、次に進んでください。

ソースファイルに大事な情報を書き込まないのがセキュリティレベル向上の鉄則です!
2.実行したときに情報を読み込む仕様に変える
アプリ起動時にユーザーネームとパスワードをSpring Bootが受け取れるように変えます。

プロジェクト名の上にマウスカーソルを合わせて右クリックします。

プロジェクトに関係するポップアップメニューが表示されます。

画面下部に表示されている「実行(R)」にマウスカーソルを合わせると右側に新しいポップアップメニューが表示されます。下にある「実行の構成(N)」をクリックしてください。

Webアプリを実行するときの設定画面が出てきます。

上画像にある「環境」タブに切り替えてください。

環境変数を設定するエリアが表示されます。環境変数とは、秘匿性の高いデータを扱うための変数と考えてください。

「追加(A)…」を選択します。

環境変数を設定するポップアップメニューが表示されます。

「名前(N):」部分に「DB_USER」「値(V):」に「tu」と書き「OK」をクリックします。

「変数」と「値」のエリアに追加されたことを確認してください。

再度「追加(A)…」をクリックします。

「名前(N):」に「DB_PASS」を入力し「値(V):」に「future」を設定します。

ユーザーネームとパスワードを設定したら「適用(Y)」を押してください。

Google Chromeで「http://localhost:8080/h2-console」と入力してコンソール画面を表示します。

ユーザーネームとパスワードを入力し「接続」を押します。

データベースのコンソール画面が表示されます。

最後に、「src/main/resources」の中にある「application.properties」を開いて、コンソール画面の表示を「true」から「false」に変えれば完成です。
以下のように変えましょう。
spring.h2.console.enabled=false
falseにすると、コンソール画面が表示されなくなり、セキュリティレベルが向上します。
データベースは設定やファイルの場所のほか、情報の流れを意識すると理解が深まります。実行STEPを繰り返し、どんな処理をしているのかイメージしてみてください。
H2データベースで情報の流れについて理解が深まったら本格的なデータベース管理システムを使ってWebアプリを製作してみてください。



コメント