デモデプロイ手順書¶
概要¶
本ドキュメントは、販売管理システム(SMS)バックエンドのデモ環境構築とデプロイについて説明します。 デモ環境は H2 インメモリデータベースを使用し、外部データベースなしで動作する自己完結型の構成です。
デモ環境の特徴¶
| 項目 | 内容 |
|---|---|
| データベース | H2 インメモリ |
| データ永続性 | なし(再起動でリセット) |
| 初期データ | 起動時に自動投入 |
| 用途 | デモ、プレゼンテーション、機能確認 |
| 外部依存 | なし(PostgreSQL 不要) |
| API ドキュメント | Swagger UI(/swagger-ui.html) |
技術スタック¶
- Java: 25
- Spring Boot: 4.0.0
- データベース: H2 Database(インメモリモード)/ PostgreSQL(本番)
- ORM: MyBatis
- マイグレーション: Flyway
- テンプレートエンジン: Thymeleaf
- ビルドツール: Gradle (Kotlin DSL)
ローカル実行¶
前提条件¶
- JDK 25 以上
- Gradle 9.x(または Gradle Wrapper 使用)
起動方法¶
開発環境(PostgreSQL)¶
cd apps/sms/backend
./gradlew bootRun
デモ環境(H2 インメモリ)¶
cd apps/sms/backend
./gradlew bootRun --args='--spring.profiles.active=demo'
IntelliJ IDEA から起動¶
Application.javaを右クリックRun 'Application'またはDebug 'Application'を選択- 実行構成で VM オプションを追加:
-Dspring.profiles.active=demo
または環境変数で設定:
SPRING_PROFILES_ACTIVE=demo
動作確認¶
起動後、以下のエンドポイントで動作確認できます。
Web アプリケーション¶
ブラウザで以下にアクセス:
http://localhost:8080
Swagger UI¶
http://localhost:8080/swagger-ui.html
Swagger UI の機能: - 全 API エンドポイントの一覧と詳細 - リクエスト/レスポンスのスキーマ確認 - ブラウザから直接 API を実行・テスト
H2 コンソール(デモ環境のみ)¶
ブラウザで以下にアクセス:
http://localhost:8080/h2-console
接続情報:
| 項目 | 値 |
|---|---|
| JDBC URL | jdbc:h2:mem:sms_demo |
| User Name | sa |
| Password | (空) |
デモ環境設定¶
application-demo.yml¶
デモ環境専用の設定ファイルを作成します。
spring:
application:
name: sms-backend
# Flyway 自動構成を除外(H2 では不要)
autoconfigure:
exclude:
- org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration
# H2 インメモリデータベース
datasource:
url: jdbc:h2:mem:sms_demo;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL
driver-class-name: org.h2.Driver
username: sa
password:
# H2 コンソール
h2:
console:
enabled: true
path: /h2-console
settings:
web-allow-others: true
# SQL 初期化
sql:
init:
mode: always
schema-locations: classpath:db/demo/schema.sql
data-locations: classpath:db/demo/data.sql
thymeleaf:
cache: true
server:
port: ${PORT:8080}
mybatis:
mapper-locations: classpath:mapper/**/*.xml
configuration:
map-underscore-to-camel-case: false
logging:
level:
root: INFO
com.example.sms: INFO
H2 依存関係の追加¶
build.gradle.kts に H2 の依存関係を追加:
// H2 Database(デモ環境用)
runtimeOnly("com.h2database:h2")
Heroku デプロイ¶
前提条件¶
- Heroku CLI インストール済み
- Heroku アカウント作成済み
- Docker Desktop インストール済み
Dockerfile¶
apps/sms/backend/Dockerfile を作成:
# ビルドステージ
FROM gradle:jdk25 AS builder
WORKDIR /app
COPY ./ ./
RUN gradle build -x test --no-daemon
# 実行ステージ
FROM eclipse-temurin:25-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/libs/*.jar app.jar
EXPOSE 8080
CMD ["java", "-Dserver.port=${PORT:-8080}", "-Dspring.profiles.active=demo", "-jar", "app.jar"]
ビルドコンテキストについて:
この Dockerfile は apps/sms/backend/ ディレクトリをビルドコンテキストとして使用します。
デプロイ手順(Docker コマンド使用)¶
1. Heroku アプリ作成¶
heroku create deploy-demo-sms
2. スタックを container に設定¶
heroku stack:set container -a deploy-demo-sms
3. 環境変数設定¶
heroku config:set SPRING_PROFILES_ACTIVE=demo -a deploy-demo-sms
4. Heroku Container Registry にログイン¶
heroku container:login
Login Succeeded と表示されれば成功です。
5. Docker ビルド¶
apps/sms/backend/ をビルドコンテキストとしてビルドします:
docker build -t registry.heroku.com/deploy-demo-sms/web apps/sms/backend
6. プッシュ¶
docker push registry.heroku.com/deploy-demo-sms/web
7. リリース¶
heroku container:release web -a deploy-demo-sms
8. 動作確認¶
# ログ確認
heroku logs --tail -a deploy-demo-sms
# アプリを開く
heroku open -a deploy-demo-sms
Heroku デモ環境 URL:
| エンドポイント | URL |
|---|---|
| Web アプリ | https://deploy-demo-sms.herokuapp.com/ |
| Swagger UI | https://deploy-demo-sms.herokuapp.com/swagger-ui.html |
データリセット¶
Dyno を再起動するとデータがリセットされ、初期データが再投入されます。
heroku restart -a deploy-demo-sms
GitHub Actions による自動デプロイ¶
ワークフローファイル¶
.github/workflows/deploy-demo-sms.yml を作成:
name: Deploy Demo to Heroku
on:
push:
branches: [ main ]
paths:
- 'apps/sms/backend/**'
- '.github/workflows/deploy-demo-sms.yml'
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Heroku CLI
run: curl https://cli-assets.heroku.com/install.sh | sh
- name: Login to Heroku Container Registry
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:login
- name: Build and push
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: |
docker build -t registry.heroku.com/deploy-demo-sms/web apps/sms/backend
docker push registry.heroku.com/deploy-demo-sms/web
- name: Release
env:
HEROKU_API_KEY: ${{ secrets.HEROKU_API_KEY }}
run: heroku container:release web -a deploy-demo-sms
GitHub Secrets の設定¶
リポジトリの Settings → Secrets and variables → Actions で以下を登録:
| シークレット名 | 内容 |
|---|---|
HEROKU_API_KEY_SMS |
Heroku API キー |
Heroku API キーの取得¶
heroku auth:token
または Heroku ダッシュボード → Account Settings → API Key から取得。
プロファイル比較¶
| 項目 | default(開発) | demo(デモ) |
|---|---|---|
| データベース | PostgreSQL | H2 インメモリ |
| マイグレーション | Flyway | SQL init |
| データ永続性 | あり | なし |
| 外部依存 | Docker/PostgreSQL 必要 | 不要 |
| H2 コンソール | 無効 | 有効 |
| 用途 | 開発・テスト | デモ・検証 |
トラブルシューティング¶
H2 コンソールにアクセスできない¶
spring.h2.console.enabled=trueが設定されているか確認- プロファイルが
demoになっているか確認 - H2 依存関係が追加されているか確認
データが初期化されない¶
spring.sql.init.mode=alwaysが設定されているか確認db/demo/schema.sqlとdb/demo/data.sqlが存在するか確認- SQL 構文が H2 互換か確認
Heroku: no basic auth credentials エラー¶
Docker が Heroku Container Registry にログインできていません。
# Heroku CLI 経由で認証
heroku container:login
それでも解決しない場合は、手動で認証:
# API キーを使用して手動ログイン
docker login registry.heroku.com -u _ -p $(heroku auth:token)
Heroku: App crashed (H10 エラー)¶
起動に失敗しています。ログを確認:
heroku logs --tail -a deploy-demo-sms
よくある原因:
1. SPRING_PROFILES_ACTIVE=demo が未設定
2. Dockerfile の CMD が正しくない($PORT を使用しているか確認)
3. Java バージョンの不一致
Heroku: サブディレクトリの Dockerfile を使用したい¶
heroku container:push は --dockerfile オプションをサポートしていません。
解決策:
1. docker build apps/sms/backend でサブディレクトリをコンテキストとしてビルド(推奨)
2. heroku.yml で Dockerfile パスを指定して Git push でデプロイ
制約事項¶
| 制約 | 説明 |
|---|---|
| データ非永続 | アプリ再起動でデータはリセット |
| シングルインスタンス | 複数インスタンスでのデータ共有不可 |
| 本番利用不可 | あくまでデモ・検証用途 |
| 大量データ非対応 | インメモリのため大量データには不向き |