Tech Blog

「ゼロからテーブル設計を起こさない」という選択 — PostgreSQL サンプルDB dvdrental を土台にした開発

PostgreSQL Spring Boot Java

はじめに

個人開発で「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件の映画データがあります。
検索や絞り込みを実装したときの動作確認も、リアルなデータ量で試せます。

リレーションが学べる
filmfilm_actoractor の多対多、rentalinventoryfilm の連鎖など、
現実的なリレーション構造が最初から入っているので、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 の全体構成と記事マップ

気軽にメッセージください

技術相談・ご感想・ご質問があればメッセージをお願いします。