Spring PetClinicをSpring Bootの実行とDB切替の教材にする
Spring ベースのサンプル アプリケーション。 Petclinic をローカルで実行する Spring Petclinic は、Maven または Gradle を使用して構築された Spring Boot アプリケーションです。
ひと目でわかる
- これは何?
- MavenとGradle、H2・MySQL・PostgreSQL、コンテナイメージ、統合テストを一つのサンプルで追う。
- 誰に向いている?
- Spring Bootアプリケーションの構造と、組み込みDBから外部DBへ切り替える手順を手元で学びたい人に向きます。業務システムの完成形や本番運用テンプレートとして採用する前提には向きません。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 21 日前です。
- 何の言語で書かれている?
- 主に CSS です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
現在のPetClinicと古いスライドを分ける
READMEはSpring PetClinicをSpring Bootで作られたサンプルアプリケーションと説明し、MavenまたはGradleで動かせるとしています。一方、図解用のスライドはSpring Boot以前のレガシー版を参照しており、現行実装を反映しない可能性があると明記されています。学習時の設計図として見る場合も、クラスや設定はリポジトリとREADMEを基準にします。
これは機能の多さを売りにした製品紹介ではなく、実行可能なサンプルとして読む方が合います。最初にコードを読むより、指定されたJava版で起動し、画面、ログ、設定プロファイルを確認してから、対応するクラスへ戻ると現行構成との差を把握しやすくなります。
Java 17とMaven、Gradleの入口
必要条件はJava 17以降です。クローン後、Mavenでは `./mvnw spring-boot:run`、Gradleでは `./gradlew bootRun` を実行し、READMEは `http://localhost:8080/` でアクセスできると説明します。ラッパースクリプトが含まれるため、まずプロジェクトの指定コマンドを使い、グローバルなMavenやGradleの版を先に合わせる必要はありません。
起動確認では、ポート8080への接続、初期データの表示、ログのプロファイル名を記録します。MavenとGradleを両方使う場合は同じ作業ディレクトリを共有せず、生成物の差が原因にならないようにします。READMEはIDE実行も案内していますが、最初の基準はコマンドライン起動に置く方が再現しやすいです。
H2から永続DBプロファイルへ
既定設定ではインメモリH2を使い、起動時にサンプルデータを投入します。H2コンソールは `http://localhost:8080/h2-console` に公開され、接続URLの `jdbc:h2:mem:<uuid>` にあるUUIDは起動ログへ出力されます。プロセスを止めればインメモリデータが失われる前提で、永続DBとは性質が異なります。
MySQLは `spring.profiles.active=mysql`、PostgreSQLは `spring.profiles.active=postgres` でプロファイルを切り替えます。READMEにはMySQLとPostgreSQLのDocker起動例、`docker compose up mysql` と `docker compose up postgres` もあります。DBを切り替えるときは接続先だけでなく、初期化、スキーマ、データ投入、統合テストの結果を一組で確認します。
Dockerfileなしでイメージを作る
このリポジトリにはDockerfileがなく、Spring Bootのビルドプラグインでコンテナイメージを生成します。Mavenの `./mvnw spring-boot:build-image` を実行した後、`docker images | grep petclinic` でイメージを確認し、`docker run -p 8080:8080 docker.io/library/spring-petclinic:latest` で起動する例がREADMEにあります。
ビルドに成功しても、Dockerデーモン、ポート8080、イメージタグが利用環境と一致するとは限りません。実行後はブラウザーでトップ画面を開き、コンテナログ、ポート転送、停止と再起動を確認します。イメージ内のDBは別途プロファイルと接続先が必要で、READMEのH2ローカル例をそのまま永続運用へ延長しません。
テストアプリケーションでDB差を測る
READMEは `PetClinicIntegrationTests`、`MySqlTestApplication`、`PostgresIntegrationTests` をmainメソッドとして実行できるテストアプリケーションとして紹介しています。前者は既定のH2とSpring Boot Devtoolsを使い、MySQL統合テストはTestcontainers、PostgreSQLテストはDocker ComposeでDBコンテナを起動します。
IDEで高速に試した後、同じクラスを統合テストとして実行する流れが想定されています。確認では、H2で表示できた画面がMySQLとPostgreSQLでも同じ状態になるか、初期データ投入と接続失敗時のログがどう違うかを記録します。Dockerが起動していない場合の失敗をアプリの不具合と取り違えないよう、テスト方式を明示します。
SCSSとIDE開発の境界
静的CSSの `src/main/resources/static/resources/css/petclinic.css` は `petclinic.scss` とBootstrapから生成されます。SCSSを変更した場合やBootstrapを更新した場合は、Mavenプロファイル `css` を使って `./mvnw package -P css` を実行します。READMEはGradleにはCSSコンパイル用プロファイルがないと記載しています。
EclipseやSTSではMavenプロジェクトとして読み込み、`./mvnw generate-resources` でCSSを生成します。IntelliJ IDEAでは `pom.xml` を開き、`PetClinicApplication` の実行構成を使う入口があります。IDEの表示だけを確認せず、生成されたCSSの差分と8080の画面をセットで見ます。Apache-2.0の条件はリポジトリのLICENSE本文で確認します。
Spring PetClinicを教材として使う場合、画面の表示だけでなく、`application.properties` と各DBプロファイルの読み込みをログで確認します。H2を停止してもデータが残ると誤解しないよう、プロセス再起動後の初期データを確認します。MySQLとPostgreSQLでは、READMEに示されたDockerサービス名と `spring.profiles.active` の値を一致させ、同じテストクラスの結果を保存します。
Spring PetClinicの学習範囲を広げるときは、H2、MySQL、PostgreSQLを同じデータとして比較しようとせず、各プロファイルの初期化結果を別の記録にします。DockerイメージはDockerfileから作ったものではないため、ビルドプラグインの出力と実行時のポートを確認します。IDEで変更したCSSはMavenの生成処理後に画面へ反映されることを確認します。`./mvnw generate-resources` の前後で静的ファイルの更新時刻も確認します。
Petclinicを試すときはREADMEのMavenまたはGradle起動手順を使い、owners、vets、visitsの登録と検索を実際に行います。src/main/resources/templates、src/main/resources/db、application.propertiesの関係を追い、画面表示、永続化、プロファイル切り替えがどの層で決まるかを記録してください。サンプルアプリの認証や入力検証を本番品質とみなさず、Spring Bootのバージョン更新ではテストスイートとデータベース初期化結果を再確認します。
編集部の結論
Spring Bootアプリケーションの構造と、組み込みDBから外部DBへ切り替える手順を手元で学びたい人に向きます。業務システムの完成形や本番運用テンプレートとして採用する前提には向きません。まずJava 17以上でMaven起動し、H2の画面を確認した後、MySQLまたはPostgreSQLのプロファイルを一つ選び、同じ統合テストが通るかを確認してください。
コミュニティノート