ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|---|
|
方法 1: jar 直接実行 (Embedded Tomcat)
Spring Boot は内蔵 Tomcat を含む実行可能 jar を作れます。シンプルで運用しやすい方法。
ビルド
# Maven
$ ./mvnw clean package
# → target/myapp-1.0.0.jar
# Gradle
$ ./gradlew bootJar
# → build/libs/myapp-1.0.0.jar
実行
# 基本実行
$ java -jar myapp.jar
# プロファイル指定 (application-prod.properties を読み込む)
$ java -jar myapp.jar --spring.profiles.active=prod
# 外部の設定ファイルを使う
$ java -jar myapp.jar --spring.config.location=/etc/myapp/application.yml
# JVM オプション
$ java -server -Xms1g -Xmx4g -XX:+UseG1GC -jar myapp.jar
systemd でサービス化
# /etc/systemd/system/myapp.service
[Unit]
Description=My Spring Boot App
After=network.target
[Service]
Type=simple
User=appuser
Group=appuser
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -server -Xms1g -Xmx4g -jar /opt/myapp/myapp.jar --spring.profiles.active=prod
SuccessExitStatus=143
Restart=on-failure
RestartSec=10s
StandardOutput=append:/var/log/myapp/app.log
StandardError=append:/var/log/myapp/error.log
[Install]
WantedBy=multi-user.target
# 有効化と起動
$ sudo systemctl daemon-reload
$ sudo systemctl enable myapp
$ sudo systemctl start myapp
# 状態確認
$ sudo systemctl status myapp
$ sudo journalctl -u myapp -f
方法 2: Docker でデプロイ
Dockerfile
# マルチステージビルド (jar をビルド → 軽量ランタイムに配置)
FROM eclipse-temurin:17-jdk AS builder
WORKDIR /workspace
COPY . .
RUN ./gradlew bootJar
FROM eclipse-temurin:17-jre
RUN useradd -m appuser
USER appuser
WORKDIR /app
COPY --from=builder /workspace/build/libs/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
ビルドと実行
# イメージビルド
$ docker build -t myapp:1.0.0 .
# コンテナ起動
$ docker run -d \
--name myapp \
-p 8080:8080 \
-e SPRING_PROFILES_ACTIVE=prod \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb \
-v /var/log/myapp:/app/logs \
myapp:1.0.0
# レジストリにプッシュ
$ docker tag myapp:1.0.0 my-registry.example.com/myapp:1.0.0
$ docker push my-registry.example.com/myapp:1.0.0
docker-compose
version: "3.8"
services:
app:
image: myapp:1.0.0
ports:
- "8080:8080"
environment:
SPRING_PROFILES_ACTIVE: prod
SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/mydb
depends_on:
- db
db:
image: postgres:15
environment:
POSTGRES_DB: mydb
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
方法 3: WAR デプロイ(外部 Tomcat)
WAR 化に必要な設定
// メインクラスを SpringBootServletInitializer 継承に
@SpringBootApplication
public class MyApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MyApp.class);
}
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
war
org.springframework.boot
spring-boot-starter-tomcat
provided
# ビルドして WAR を配置
$ ./mvnw clean package
$ cp target/myapp-1.0.0.war $CATALINA_HOME/webapps/myapp.war
# Tomcat が自動デプロイ
# → http://localhost:8080/myapp/ でアクセス
CI/CD パイプライン
GitHub Actions の例
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Build
run: ./gradlew bootJar
- name: Test
run: ./gradlew test
- name: Build Docker
run: docker build -t myapp:${{ github.sha }} .
- name: Push to Registry
run: |
echo ${{ secrets.REGISTRY_PASSWORD }} | docker login -u ${{ secrets.REGISTRY_USER }} --password-stdin
docker push myapp:${{ github.sha }}
- name: Deploy to Server
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.PROD_USER }}
key: ${{ secrets.PROD_SSH_KEY }}
script: |
docker pull myapp:${{ github.sha }}
docker stop myapp || true
docker rm myapp || true
docker run -d --name myapp -p 8080:8080 myapp:${{ github.sha }}
本番運用のチェックリスト
- 環境別プロファイル:
application-prod.ymlで本番設定を分離 - シークレット管理: パスワード等は環境変数 / Vault / AWS Secrets Manager
- JVM オプション:
-Xmx,-XX:+HeapDumpOnOutOfMemoryError等 - ヘルスチェック:
actuator/healthエンドポイント有効化 - メトリクス: Prometheus / Micrometer で監視
- ロギング: 集約ログ (ELK / Loki / CloudWatch)
- リバースプロキシ: nginx で TLS 終端、X-Forwarded-* ヘッダ伝達
- ローリングデプロイ: ダウンタイムなしの更新(K8s rolling update / Blue-Green)
- DB マイグレーション: Flyway / Liquibase で自動実行
- ロールバック手順: 失敗時の即座復旧
本番設定の例 (application-prod.yml)
spring:
datasource:
url: ${DB_URL}
username: ${DB_USER}
password: ${DB_PASSWORD}
hikari:
maximum-pool-size: 50
jpa:
hibernate:
ddl-auto: validate
flyway:
enabled: true
server:
port: 8080
tomcat:
threads:
max: 200
compression:
enabled: true
forward-headers-strategy: native # nginx 後ろなら必須
management:
endpoints:
web:
exposure:
include: health,metrics,prometheus
endpoint:
health:
show-details: never
logging:
level:
root: INFO
com.example: DEBUG
file:
name: /var/log/myapp/app.log
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- インストールと設定
- クイックスタート & チュートリアル(初心者向け)
- クイックスタート & チュートリアル(中級者向け)
- ルーティング
- Bladeテンプレート(ビュー/レイアウト)
- コントローラー
- マイグレーションとテーブル定義
- データベースの設定
- Eloquentモデル (ORM)
- SQLとクエリビルダー
- バリデーション
- .envファイルの設定値へのアクセス
- 動作環境による分岐処理
- configフォルダ配下の設定値へのアクセス
- assetヘルパーを利用したpublicフォルダへのアクセス
- storageフォルダへのアクセス
- アプリケーション名の変更
- メンテナンス
- ログイン画面(認証システム)の作成
- ログインの必須化
- ログインユーザー情報の取得
- ルートの認証化
- 本番サーバーへのデプロイ方法
- 多言語化
- csrf_field
- ファイルのダウンロード
- CSVのアップロードおよび読み込み(maatwebsite/excel)
- ページタイトルの設定
- コマンド一覧
- エラー一覧
- SQLの実行ログ出力方法
- キャッシュのクリア
- Selectの結果の最初もしくは最後に任意の値を追加する方法
- ajaxでPOST通信する際の注意点
- ソーシャルログインの実装
- セッション情報の確認
- ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
- redirectやreturn viewにメッセージを付与する方法
- クッキー(cookie)の設定と取得
- クラスの再読み込み
- csrfの有効時間を変更する方法
- ViewComposerを用いてviewに共通の値を付与する方法
- View::shareを用いて共通の値を各ビューに渡す方法
- ミドルウェアを用いた処理の共通化
- Middleware内でAuth::check()などを使用する方法
- Controller以外でリダイレクトする方法
- セッションの値の取得/保存/更新/削除
- $requestの値を変更する方法
- 常時SSL化
- ページング(ページネーション)をする方法
- vue.jsとの連携
- Vue.jsと連携するSPA実行環境構築
- .envの値をvue.jsで参照する方法
- vue.jsを本番環境にリリースする方法
- could not find driver(Windows, MySQL編)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?