「ゼロからテーブル設計を起こさない」という選択 — PostgreSQL サンプルDB dvdrental を土台にした開発
はじめに
個人開発で「Webアプリを作ろう」と思ったとき、多くの人がまず「DB設計」から始めます。
ER図を書いて、テーブルを作って、サンプルデータを入れて…その段階でかなりの時間を使います。
今回の開発では、その工程を意図的にスキップしました。
PostgreSQLの学習用サンプルデータベース dvdrental をそのまま土台にして、アプリを載せていく形で進めました。
dvdrental とは
PostgreSQLの公式チュートリアルで使われているサンプルDBです。
DVDレンタルショップを模したデータが入っており、以下のようなテーブルが含まれています。
film(作品)、actor(俳優)、category(ジャンル)customer(顧客)、staff(スタッフ)、store(店舗)rental(レンタル履歴)、payment(支払い履歴)、inventory(在庫)
リレーション込みで約15テーブル、数千件のデータが最初から入っています。
公式ページからダウンロードできます:
https://www.postgresqltutorial.com/postgresql-getting-started/postgresql-sample-database/
なぜゼロから設計しなかったのか
正直に言うと、「DB設計をゼロからやる体力がなかった」というのが一番の理由ではありません。
もっと早くアプリの動く姿を見たかったのです。
個人開発は誰にも締め切りを設けてもらえません。
テーブル設計で詰まって、サンプルデータ作りで詰まって…という段階で挫折する人はたくさんいます。
dvdrental を使えば、初日からアプリの画面にリアルなデータを表示できます。
「どんなアプリを作っているのか」が最初から見えることで、開発のモチベーションが全然違いました。
実際にやったこと
① dvdrental をDockerで起動
# compose.yml(抜粋)
services:
postgres:
image: postgres:16
environment:
POSTGRES_DB: dvdrental
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
volumes:
- ./docker/postgres/init:/docker-entrypoint-initdb.d
ports:
- "15433:5432"
docker-entrypoint-initdb.d に dvdrental の .tar ファイルと初期化スクリプトを置くだけで、コンテナ起動時に自動でリストアされます。
② Spring Boot から接続してそのまま画面に出す
// FilmRepository.java(抜粋)
public interface FilmRepository extends JpaRepository<Film, Integer> {
List<Film> findAllByOrderByTitleAsc();
}
テーブルが既にあるので、@Entity を定義してJPAを向ければすぐ動きます。
③ 必要な機能をFlywayで段階的に追加
「日本語化したい」「タグを追加したい」という追加要件は、Flywayのmigrationで足していきました。
-- V2__add_japanese_title.sql
ALTER TABLE film ADD COLUMN title_ja VARCHAR(255);
既存データを壊さずに、段階的に拡張できます。
やってみてわかったこと
良かった点
「データがある状態」から始められる
作品一覧を表示したとき、最初から約1,000件の映画データがあります。
検索や絞り込みを実装したときの動作確認も、リアルなデータ量で試せます。
リレーションが学べる
film → film_actor → actor の多対多、rental → inventory → film の連鎖など、
現実的なリレーション構造が最初から入っているので、JOINの練習にもなります。
「業務アプリらしさ」が出る
ゼロから作ると、どうしてもデータが テスト太郎 や Sample Movie 1 になりがちです。
dvdrental には実在の俳優名(英語)や作品タイトルが入っているので、画面に出したときの見栄えが全然違います。
注意点
サンプルデータが英語前提
名前・住所・説明文がすべて英語です。
日本語UIにするには日本語化の作業が別途必要です(別記事で書いています)。
金額がドル前提
payment_amount などはドル建てのサンプルデータです。
日本円の仕様にする場合は換算・丸め処理を検討する必要があります。
「土台を借りる」という発想
「0から1を作る」より「既存の1を10にする」方が、最初のハードルが低い。
これはアプリ開発だけでなく、仕事のやり方としても応用できる考え方だと思います。
dvdrental は学習用のサンプルですが、「本物のビジネスデータ構造」を模しています。
そこに自分のアプリを載せていく経験は、実務に近い感覚を与えてくれます。
まとめ
- PostgreSQLのサンプルDB
dvdrentalを土台にすることで、DB設計のコストをゼロにして開発をスタートできた - Dockerで簡単に立ち上げられるため、初日からリアルなデータで動くアプリを確認できた
- 不足する機能はFlywayで段階的に追加していくことで、既存データを壊さずに拡張できた
- 「土台を借りる」発想は、個人開発の挫折ポイントを大きく減らしてくれた
このシリーズの記事マップ
→ dvdrental 管理アプリと対になるエンドユーザー向けDVDレンタルアプリを作っている話 — Vue 3 + Spring Boot の全体構成と記事マップ