-
slidict.io のデプロイメント全体像と自動化フローを要約
-
GitHub Actions での自動化と Conventional Commits によるリリースノート作成を解説
-
AKS への継続的デプロイと3環境(Preview, Staging, Production)での段階的デプロイを説明
-
各環境のデプロイ条件: Preview は main ブランチ push 時、Staging は PR に staging ラベル、Production は GitHub Release 作成時に自動デプロイ
-
slidict.io のデプロイメント全体像と自動化フローの要点を整理
-
GitHub Actions での自動化、Conventional Commits によるリリースノート作成を解説
-
AKS への継続的デプロイと3環境(Preview, Staging, Production)での段階的デプロイを説明
-
各環境のデプロイ条件: Previewは main ブランチ push 时、Stagingは PR に staging ラベル、Production は GitHub Release 作成時に自動デプロイ
slidict.io のデプロイメントパイプラインの全体像
-
GitHub Actions を活用した自動化フロー
-
Conventional Commits による自動リリースノート作成
-
Azure Kubernetes Service (AKS) への継続的デプロイメント
-
3つの環境(Preview, Staging, Production)での段階的デプロイ
-
Preview: main ブランチ push 時に自動デプロイ
-
Staging: PR に staging ラベル付与で手動デプロイ
-
Production: GitHub Release 作成時に自動デプロイ
🚀 このプレゼンテーションについて
-
slidict.io のデプロイメント全体像と自動化フローの要点を整理
-
GitHub Actions での自動化、Conventional Commits によるリリースノート作成を解説
-
AKS への継続的デプロイと3環境(Preview, Staging, Production)での段階的デプロイを説明
-
各環境のデプロイ条件: Previewは main ブランチ push 时、Stagingは PR に staging ラベル、Production は GitHub Release 作成時に自動デプロイ
📋 目次
-
デプロイフロー概要と GitHub Actions ワークフロー全体像、Conventional Commits 設定とリリースノート生成の流れを把握する
-
Docker イメージビルド手順と AKS デプロイメント詳細、Release Tasks 機構を連携させる運用を理解する
-
環境別設定・監視・通知・ベストプラクティスを用いた安定運用と迅速なデリバリーを実現する実践ポイント
-
デプロイフロー概要と GitHub Actions ワークフローの全体像、Conventional Commits の設定とリリースノート生成の流れを把握する
-
Docker イメージビルドの手順と AKS デプロイメントの詳細、Release Tasks 機構を連携させる運用を理解する
-
環境別設定、監視・通知、ベストプラクティスを用いた安定運用と迅速なデリバリーを実現するための実践ポイント
-
デプロイフロー概要
-
GitHub Actions ワークフロー
-
Conventional Commits setup
-
リリースノート生成
-
Docker イメージビルド
-
AKS デプロイメント詳細
-
Release Tasks 機構
-
環境別設定
-
監視・通知
-
ベストプラクティス
📋 目次
-
デプロイフロー概要と GitHub Actions ワークフローの全体像、Conventional Commits の設定とリリースノート生成の流れを把握する
-
Docker イメージビルドの手順と AKS デプロイメントの詳細、Release Tasks 機構を連携させる運用を理解する
-
環境別設定、監視・通知、ベストプラクティスを用いた安定運用と迅速なデリバリーを実現するための実践ポイント
🔄 デプロイフロー全体像
-
デプロイ全体の流れを、Git Push から Live環境までの連携として描くCDパイプラインの要約
-
主なステップは Git Push → GitHub Actions → Docker Build → AKS Deploy → Live環境到達
-
各ステージは連携し、継続的デリバリを実現する動作を強調する
-
デプロイの全体フローを示すビジュアル要素で、Git Push から Live環境までの工程を連携させている
-
主なステップは、Git Push → GitHub Actions → Docker Build → AKS Deploy → Live環境の到達
-
各ステージは連携しており、継続的デリバリ(CD)パイプラインとして動作することを強調した内容
🔄 デプロイフロー全体像
-
デプロイの全体フローを示すビジュアル要素で、Git Push から Live環境までの工程を連携させている
-
主なステップは、Git Push → GitHub Actions → Docker Build → AKS Deploy → Live環境の到達
-
各ステージは連携しており、継続的デリバリ(CD)パイプラインとして動作することを強調した内容
-
3つのデプロイ環境は独立した AKS クラスタ設定を持ち、段階的なテストと検証を可能にします
-
Preview は main ブランチへの push 時にトリガーされ、開発中の最新機能を実機で確認します
-
Staging は PR に staging ラベルを付与することでリリース前の最終検証を実施します
-
Production は GitHub Release 作成時にユーザー向けの本番環境としてデプロイします
-
3つのデプロイ環境には、それぞれ独立したAKSクラスタ設定が適用され、段階的なテストと検証が可能です
-
Preview は main ブランチへの push 时にトリガーされ、開発中の最新機能を実機で確認します
-
Staging は PR に staging ラベルを付与することでリリース前の最終検証を実施します
-
Production は GitHub Release 作成時にユーザー向けの本番環境としてデプロイします
| 環境 | トリガー | 用途 |
|---|---|---|
Preview |
main ブランチへの push |
開発中の最新機能 |
Staging |
PR に staging ラベル付与 |
リリース前の最終検証 |
Production |
GitHub Release 作成 |
ユーザー向け本番環境 |
各環境は独立した AKS クラスタ設定を持ち、段階的なテストと検証が可能
📌 3つのデプロイメント環境
-
3つのデプロイ環境には、それぞれ独立したAKSクラスタ設定が適用され、段階的なテストと検証が可能です
-
Preview は main ブランチへの push 时にトリガーされ、開発中の最新機能を実機で確認します
-
Staging は PR に staging ラベルを付与することでリリース前の最終検証を実施します
-
Production は GitHub Release 作成時にユーザー向けの本番環境としてデプロイします
-
プレフィックスとして feat:, fix:, docs:, style:, refactor:, test:, chore: などを基本ルールとする
-
日本語で約50文字を目安に記述し、語尾に句点を付けない
-
例として feat:, fix:, docs: のコミットを示し、自己紹介欄追加・エラーハンドリング修正・デプロイ手順更新を含む
-
効果としてコミット履歴を解析して自動でリリースノートを生成できる
-
プロジェクトの基本ルールとして、プレフィックスは feat:, fix:, docs:, style:, refactor:, test:, chore: などを使用する
-
言語は日本語、50文字程度を目安に記述し、語尾に句点を付けない
-
例として feat:, fix:, docs: のコミットが示され、自己紹介欄追加・エラーハンドリング修正・デプロイ手順更新を含む
-
効果: コミット履歴が解析され自動でリリースノートを生成できる
プロジェクトの基本ルール:
-
prefix:
feat:,fix:,docs:,style:,refactor:,test:,chore:など -
言語: 日本語で記述(50文字程度が目安)
-
句点: 語尾に句点を付けない
feat: ユーザープロフィールに自己紹介欄を追加
fix: スライド保存時のエラーハンドリングを修正
docs: デプロイメント手順を更新
💡 効果: コミット履歴がしっかり解析でき、自動でリリースノート を生成!
🔑 Conventional Commits の活用
-
プロジェクトの基本ルールとして、プレフィックスは feat:, fix:, docs:, style:, refactor:, test:, chore: などを使用する
-
言語は日本語、50文字程度を目安に記述し、語尾に句点を付けない
-
例として feat:, fix:, docs: のコミットが示され、自己紹介欄追加・エラーハンドリング修正・デプロイ手順更新を含む
-
効果: コミット履歴が解析され自動でリリースノートを生成できる
-
main ブランチへの push 時に自動実行される GitHub Actions で CHANGELOG を生成
-
fromTag 〜 toTag の範囲の全コミットを対象、マージコミットは除外設定
-
自動除外対象は「Merge pull request」「Merge branch」などのマージ関連コミット
-
これにより、ユーザー向けリリースノートが自動生成されることを示す
-
main ブランチの push 时に自動実行される GitHub Actions で CHANGELOG を生成
-
fromTag と toTag の範囲で、すべてのコミットを対象にして自動作成、マージコミットは除外設定
-
自動除外対象は「Merge pull request」「Merge branch」などのマージ関連コミット
-
これにより、ユーザー向けリリースノートが自動生成されることを示す
# main ブランチへの push で以下が自動実行される
- name: Create CHANGELOG
uses: requarks/changelog-action
with:
fromTag: 最後のリリースタグ
toTag: 現在のバージョンタグ
excludeTypes: "" # すべてのコミットタイプを含める
includeInvalidCommits: false # マージコミットは自動除外
自動除外されるコミット:
* Merge pull request …
* Merge branch …
* その他マージ関連コミット
これにより、ユーザー向けリリースノートが自動生成される
📝 リリースノート自動生成フロー
-
main ブランチの push 时に自動実行される GitHub Actions で CHANGELOG を生成
-
fromTag と toTag の範囲で、すべてのコミットを対象にして自動作成、マージコミットは除外設定
-
自動除外対象は「Merge pull request」「Merge branch」などのマージ関連コミット
-
これにより、ユーザー向けリリースノートが自動生成されることを示す
-
main-ci ワークフローは main ブランチへの push または手動実行で起動
-
ジョブは 1) changelog 自動生成 2) draft release 作成 3) Kroki ダイアグラムサービスのデプロイ 4) Preview 環境へのフルデプロイを実行
-
実行時間は約 10~15分程度
-
YAML 定義は on: push: branches: [main] と workflow_dispatch でトリガーされる
-
Preview 環境デプロイを含む CI の全体流れを可視化するワークフロー
-
main-ci ワークフローは main ブランチへの push および手動実行で起動
-
ジョブは以下を実行: 1) changelog 自動生成 2) draft release 作成 3) Kroki ダイアグラムサービスのデプロイ 4) Preview 環境へのフルデプロイ
-
実行時間は約 10~15分程度
-
なお YAML 定義は on: push: branches: [main] と workflow_dispatch でトリガーされる
-
Preview 環境デプロイを含む CI の全体流れを可視化するワークフロー
name: main-ci
on:
push:
branches: [main]
workflow_dispatch: # 手動実行も可能
jobs:
main:
# 1. Changelog 自動生成
# 2. Draft Release 作成
# 3. Kroki ダイアグラムサービスをデプロイ
# 4. Preview 環境へのフルデプロイ
実行時間: 約 10~15分
🔄 main-ci ワークフロー(Preview環境デプロイ)
-
main-ci ワークフローは main ブランチへの push および手動実行で起動
-
ジョブは以下を実行: 1) changelog 自動生成 2) draft release 作成 3) Kroki ダイアグラムサービスのデプロイ 4) Preview 環境へのフルデプロイ
-
実行時間は約 10~15分程度
-
なお YAML 定義は on: push: branches: [main] と workflow_dispatch でトリガーされる
-
Preview 環境デプロイを含む CI の全体流れを可視化するワークフロー
-
イメージタグを 環境-コミットSHA の形式で一意に管理
-
ビルドは層ごとにキャッシュされ、再ビルドを効率化
-
DockerHub のプライベートレジストリへ自動的にプッシュされる
-
イメージタグは 環境-コミットSHA の形式で一意性を確保
-
ビルドは層ごとにキャッシュされ、再ビルドを効率化
-
DockerHub のプライベートレジストリへ自動でプッシュされる
- name: Build and push image to DockerHub
uses: docker/build-push-action
with:
tags: |
slidict/slidict.io:preview-{{COMMIT_SHA}}
build-args: |
RAILS_ENV=preview
SECRET_KEY_BASE_DUMMY=dummy-secret-key
GITHUB_SHA={{COMMIT_SHA}}
-
イメージタグ:
環境-コミットSHAで一意性を確保 -
ビルドキャッシュ: 層ごとにキャッシュされ、効率化
-
DockerHub: プライベートレジストリへ自動プッシュ
📦 Docker イメージビルド
-
イメージタグは 環境-コミットSHA の形式で一意性を確保
-
ビルドは層ごとにキャッシュされ、再ビルドを効率化
-
DockerHub のプライベートレジストリへ自動でプッシュされる
-
証明書管理(cert-manager)を適用して秘密情報・クラスター発行者・証明書を準備する
-
Redis のデプロイを実行する
-
Chrome ブラウザサービスをデプロイしてスクリーンショット用環境を用意する
-
Sidekiq Workerをデプロイしてバックグラウンドジョブ処理を有効化する
-
証明書管理(cert-manager)を適用し、秘密情報・クラスター発行者・証明書を準備する
-
Redis のデプロイを実行する
-
Chrome ブラウザサービスをデプロイしてスクリーンショット用環境を用意する
-
Sidekiq Workerをデプロイしてバックグラウンドジョブ処理を有効化する
# 1. 証明書管理(cert-manager)
- name: Apply cert-manager manifests
run: |
kubectl apply -f cert/secret.yml
kubectl apply -f cert/clusterissuer.yml
kubectl apply -f cert/certificate.yml
# 2. Redis デプロイ
- name: Deploy redis
# 3. Chrome ブラウザサービス(スクリーンショット用)
- name: Deploy chrome
# 4. Sidekiq Worker(バックグラウンドジョブ)
- name: Deploy worker
🚀 AKS デプロイメント工程(1/2)
-
証明書管理(cert-manager)を適用し、秘密情報・クラスター発行者・証明書を準備する
-
Redis のデプロイを実行する
-
Chrome ブラウザサービスをデプロイしてスクリーンショット用環境を用意する
-
Sidekiq Workerをデプロイしてバックグラウンドジョブ処理を有効化する
-
データベースマイグレーション完了を 120 秒で監視して待機
-
初回デプロイ時のみ実行される Release Tasks の実行準備
-
メインアプリケーションをデプロイし、Ingress のマニフェストを適用
-
Horizontal Pod Autoscaler のデプロイを実行して自動スケーリングを有効化
-
データベースマイグレーションが完了するまで待機し、完了条件を 120 秒 timeout で監視する
-
初回デプロイ時のみ実行される Release Tasks の実行を準備
-
メインアプリケーションをデプロイし、Ingress を更新するためのマニフェストを適用
-
Horizontal Pod Autoscaler のデプロイを実行して自動スケーリングを有効化
# 5. データベースマイグレーション
- name: Wait for migration to complete
run: |
kubectl wait --for=condition=complete \
--timeout=120s job/$POD_PREFIX-migrate
# 6. Release Tasks 実行
# 初回デプロイ時のみ実行される一度限りのタスク
# 7. メインアプリケーションデプロイ
- name: Deploy pod and update ingress
with:
manifests: |
ingress.yml
app.yml
# 8. Auto Scaling 設定
- name: Deploy horizontal-pod-autoscaler
🚀 AKS デプロイメント工程(2/2)
-
データベースマイグレーションが完了するまで待機し、完了条件を 120 秒 timeout で監視する
-
初回デプロイ時のみ実行される Release Tasks の実行を準備
-
メインアプリケーションをデプロイし、Ingress を更新するためのマニフェストを適用
-
Horizontal Pod Autoscaler のデプロイを実行して自動スケーリングを有効化
-
一度だけ実行したいタスクを管理する機構で、実行履歴は release_tasks テーブルで管理する
-
二重実行防止は executed_at で判定する設計
-
手動実行は make release-tasks コマンドで可能
-
例: BackfillFeatureFlag が全ての FeatureFlag を enabled: true に更新する
-
一度だけ実行したいタスクを管理する機構で、実行履歴は release_tasks テーブルで管理される
-
二重実行防止は executed_at で判定する設計
-
手動実行は make release-tasks コマンドで可能
-
例: BackfillFeatureFlag が全ての FeatureFlag を enabled: true に更新する
一度だけ実行したいタスクを管理
# lib/release_tasks/backfill_feature_flag.rb
module ReleaseTasks
class BackfillFeatureFlag < ReleaseTasks::Base
def run
FeatureFlag.find_each do |flag|
flag.update!(enabled: true)
end
end
end
end
-
実行履歴:
release_tasksテーブルで管理 -
二重実行防止:
executed_atで判定 -
手動実行:
make release-tasksコマンドで可能
✅ Release Tasks 機構
-
一度だけ実行したいタスクを管理する機構で、実行履歴は release_tasks テーブルで管理される
-
二重実行防止は executed_at で判定する設計
-
手動実行は make release-tasks コマンドで可能
-
例: BackfillFeatureFlag が全ての FeatureFlag を enabled: true に更新する
-
GitHub Release をトリガーとする production 用 CI の要約
-
types: [released] で Draft Release が Publish されたときに実行される
-
deploy_production ジョブは別ファイル ./.github/workflows/call-deploy-ci.yml を使用し、ENVIRONMENT/URL/_PREFIX を渡す
-
環境設定: ENVIRONMENT=production、ENVIRONMENT_URL=https://slidict.io、POD_PREFIX=slidict-io
-
Draft Release から Published Release へ変更されたタイミングで実行される点が重要
-
GitHub Release をトリガーに production 用 CI を実行するワークフローの要約
-
types: [released] で Draft Release が Publish されたときに実行される
-
deploy_production ジョブは別ファイル ./.github/workflows/call-deploy-ci.yml を使用し、環境情報を引き渡す
-
環境設定: ENVIRONMENT=production、ENVIRONMENT_URL=https://slidict.io、POD_PREFIX=slidict-io
-
重要: Draft Release から Published Release へ変更されたタイミングで実行される点に注意
GitHub Release トリガー
name: production-ci
on:
release:
types: [released] # Draft Release が published されたら実行
permissions: write-all
jobs:
deploy_production:
uses: ./.github/workflows/call-deploy-ci.yml
with:
ENVIRONMENT: "production"
ENVIRONMENT_URL: "https://slidict.io"
POD_PREFIX: "slidict-io"
重要: Draft Release → Published Release に変更されたとき
🔄 production-ci ワークフロー
-
GitHub Release をトリガーに production 用 CI を実行するワークフローの要約
-
types: [released] で Draft Release が Publish されたときに実行される
-
deploy_production ジョブは別ファイル ./.github/workflows/call-deploy-ci.yml を使用し、環境情報を引き渡す
-
環境設定: ENVIRONMENT=production、ENVIRONMENT_URL=https://slidict.io、POD_PREFIX=slidict-io
-
重要: Draft Release から Published Release へ変更されたタイミングで実行される点に注意
-
PR の staging ラベル付与時のみトリガーされる staging-ci ワークフロー
-
on: pull_request_target の main ブランチでラベル追加・同期・再オープンを検知
-
deploy_staging ジョブは contains(…) 条件で label が staging の場合に実行
-
用途: 本番リリース前の最終検証環境を構築・検証するためのワークフロー
-
PR の staging ラベルが付与された時にのみトリガーされる staging-ci ワークフロー
-
on: pull_request_target の main ブランチでラベル追加・同期・再オープンを検知
-
deploy_staging ジョブは条件 contains(…) により label が staging の場合に実行
-
用途: 本番リリース前の最後の検証環境を構築・検証するためのワークフロー
PR の staging ラベルでトリガー
name: staging-ci
on:
pull_request_target:
branches: [main]
types: [labeled, synchronize, reopened]
jobs:
deploy_staging:
if: contains(github.event.pull_request.labels.*.name, 'staging')
# → staging ラベルがついている場合のみ実行
用途: 本番リリース前の最後の検証環境
🏷️ staging-ci ワークフロー
-
PR の staging ラベルが付与された時にのみトリガーされる staging-ci ワークフロー
-
on: pull_request_target の main ブランチでラベル追加・同期・再オープンを検知
-
deploy_staging ジョブは条件 contains(…) により label が staging の場合に実行
-
用途: 本番リリース前の最後の検証環境を構築・検証するためのワークフロー
🎯 リリースプロセス全体
-
コード開発は Conventional Commits で記述
-
main ブランチへ merge 後、main-ci 自動実行・Changelog 生成・Draft Release 作成・Preview 環境へデプロイ
-
オプションの Staging 検証:staging ラベル付与・staging-ci 実行・staging.slidict.io で最終検証
-
GitHub Release 公開後、production-ci 自動実行・production 環境へデプロイ
-
ユーザーが新機能を利用可能になるまでの完了を示す
-
コード開発は Conventional Commits で記述
-
main ブランチへ merge → main-ci 自動実行、Changelog 生成、Draft Release 作成、Preview 環境へデプロイ
-
オプションの Staging 検証 → staging ラベル付与、staging-ci 実行、staging.slidict.io で最終検証
-
GitHub Release 公開 → production-ci 自動実行、production 環境へデプロイ
-
ユーザーが新機能を利用可能になるまでの完了までを示す
1️⃣ コード開発
└─ Conventional Commits でコミット
2️⃣ main ブランチへ merge
└─ main-ci が自動実行
└─ Changelog automatically generated
└─ Draft Release created
└─ Preview 環境へデプロイ ✨
3️⃣ Staging 検証(オプション)
└─ PR に staging ラベル追加
└─ staging-ci が実行
└─ staging.slidict.io で最終検証
4️⃣ GitHub Release の Published
└─ production-ci が自動実行
└─ production 環境へデプロイ 🚀
5️⃣ ユーザーが新機能を利用可能 🎉
🎯 リリースプロセス全体
-
コード開発は Conventional Commits で記述
-
main ブランチへ merge → main-ci 自動実行、Changelog 生成、Draft Release 作成、Preview 環境へデプロイ
-
オプションの Staging 検証 → staging ラベル付与、staging-ci 実行、staging.slidict.io で最終検証
-
GitHub Release 公開 → production-ci 自動実行、production 環境へデプロイ
-
ユーザーが新機能を利用可能になるまでの完了までを示す
-
ERB テンプレートで環境別設定を制御し、展開対象を明確化する
-
自動実行スクリプト manifests/expansion.rb が production 環境用の secret.yml を適用する
-
展開対象は Azure Service Principal 認証情報/DNS 設定/各環境別リソース
-
Deployment の replicas は環境変数 PRODUCTION_REPLICAS で動的制御する
-
環境ごとの設定を統一して Kubernetes Manifests を柔軟に管理する
-
ERB テンプレートで環境別設定を制御し、展開対象を明確化する
-
自動実行スクリプト manifests/expansion.rb が production 環境用の secret.yml を適用
-
展開対象は Azure Service Principal 認証情報/DNS 設定/各環境別リソース
-
Deployment の replicas は環境変数 PRODUCTION_REPLICAS で動的制御
-
環境ごとの設定を統一して Kubernetes Manifests を柔軟に管理する
ERB テンプレートで環境別設定を制御
# manifests/expansion.rb(自動実行)
ruby manifests/expansion.rb \
manifests/azure-kubernetes/production/cert/secret.yml
# 展開対象
- Azure Service Principal 認証情報
- DNS 設定
- 各環境別リソース
# manifests/azure-kubernetes/production/app.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: slidict-io-production
spec:
replicas: <%= ENV['PRODUCTION_REPLICAS'] %> # 環境変数で制御
🔐 Kubernetes Manifests 管理
-
ERB テンプレートで環境別設定を制御し、展開対象を明確化する
-
自動実行スクリプト manifests/expansion.rb が production 環境用の secret.yml を適用
-
展開対象は Azure Service Principal 認証情報/DNS 設定/各環境別リソース
-
Deployment の replicas は環境変数 PRODUCTION_REPLICAS で動的制御
-
環境ごとの設定を統一して Kubernetes Manifests を柔軟に管理する
📊 環境構成の違い
-
環境ごとに kubeconfig はすべて AKS Slidict を指す
-
Pod レプリカ数は Preview=2、Staging=3、Production=5
-
HPA の最小/最大値は 2/10、3/15、5/30 で環境差あり
-
リソースリミットは Preview=small、Staging=medium、Production=large
-
DNS の FQDN は Preview/Staging が *.svc.cluster.local、Production は本番 FQDN
-
監視は Preview/Staging が基本、Production は Prometheus + Grafana を使用
-
環境ごとに kubeconfig はすべて AKS Slidict を指す
-
Pod レプリカ数が Preview=2、Staging=3、Production=5 の違い
-
HPA の最小/最大値が 2/10、3/15、5/30 と環境で異なる
-
リソースリミットは Preview=small、Staging=medium、Production=large
-
DNS のFQDNが Preview/Stagingは *.svc.cluster.local、Productionのみ本番FQDN
-
監視は Preview/Stagingが基本、Productionは Prometheus + Grafana を使用
| 要素 | Preview | Staging | Production |
|---|---|---|---|
kubeconfig |
AKS Slidict |
AKS Slidict |
AKS Slidict |
Pod Replicas |
2 |
3 |
5 |
Min/Max HPA |
2/10 |
3/15 |
5/30 |
Resource Limits |
small |
medium |
large |
DNS |
*.svc.cluster.local |
*.svc.cluster.local |
本番FQDN |
Monitoring |
基本 |
基本 |
Prometheus + Grafana |
📊 環境構成の違い
-
環境ごとに kubeconfig はすべて AKS Slidict を指す
-
Pod レプリカ数が Preview=2、Staging=3、Production=5 の違い
-
HPA の最小/最大値が 2/10、3/15、5/30 と環境で異なる
-
リソースリミットは Preview=small、Staging=medium、Production=large
-
DNS のFQDNが Preview/Stagingは *.svc.cluster.local、Productionのみ本番FQDN
-
監視は Preview/Stagingが基本、Productionは Prometheus + Grafana を使用
-
Nagios による監視設定を要約
-
監視項目: healthz (/healthz), sns_login (/healthz/sns_login), https (https://slidict.io を12時間間隔)
-
設定: debug_level 2048、debug_verbosity 2、configmap docker/nagios/nagios.cfg
-
注意: ホスト名は azure-kubernetes 内のサービス DNS を使用し、*.svc.cluster.local が該当
-
目的: アプリ起動・SNS認証・外部 HTTPS の健全性を定期確認
-
Nagios による監視設定を要約
-
監視項目: healthz (/healthz), sns_login (/healthz/sns_login), https (https://slidict.io を12時間間隔) を監視
-
設定: debug_level 2048、debug_verbosity 2、configmap docker/nagios/nagios.cfg
-
注意: ホスト名は azure-kubernetes 内のサービス DNS を使用し、*.svc.cluster.local が該当
-
目的: アプリ起動・SNS認証・外部 HTTPS の健全性を定期確認
# manifests/azure-kubernetes/nagios/nagios.yaml
monitoring:
- healthz: /healthz # アプリ起動確認
- sns_login: /healthz/sns_login # SNS 認証確認
- https: https://slidict.io(12時間間隔)
configuration:
debug_level: 2048
debug_verbosity: 2
configmap: docker/nagios/nagios.cfg
注意: ホスト名は azure-kubernetes 内のサービス DNS を使用
* ✅ *.svc.cluster.local
🔍 Nagios による監視
-
Nagios による監視設定を要約
-
監視項目: healthz (/healthz), sns_login (/healthz/sns_login), https (https://slidict.io を12時間間隔) を監視
-
設定: debug_level 2048、debug_verbosity 2、configmap docker/nagios/nagios.cfg
-
注意: ホスト名は azure-kubernetes 内のサービス DNS を使用し、*.svc.cluster.local が該当
-
目的: アプリ起動・SNS認証・外部 HTTPS の健全性を定期確認
-
Prometheus Operator で自動スクレイピングを設定
-
Alerts Rules で異常を検知して通知をトリガー
-
通知先は Slack や Email など、Grafana ダッシュボードと連携して配信
-
Prometheus Operator を用いて自動スクレイピングを設定
-
Alerts により異常を検知し通知をトリガー
-
通知先は Slack や Email など、Grafana のダッシュボードと連携して配信
manifests/azure-kubernetes/
├── grafana/
│ ├── datasources.yml (Prometheus接続)
│ ├── dashboards/
│ │ ├── app-metrics.json (アプリメトリクス)
│ │ ├── k8s-cluster.json (クラスタ状態)
│ │ └── sidekiq-jobs.json (バックグラウンドジョブ)
│ └── grafana-deployment.yaml
-
Prometheus Operator で自動スクレイピング
-
Alert Rules で異常検知
-
通知: Slack, Email など
📈 Grafana ダッシュボード
-
Prometheus Operator を用いて自動スクレイピングを設定
-
Alerts により異常を検知し通知をトリガー
-
通知先は Slack や Email など、Grafana のダッシュボードと連携して配信
-
slidict.io エディタから図を生成・埋め込み可能
-
完全クローズド環境で実行(外部API呼び出しなし)
-
AKS クラスター内で kroki の各デプロイメントを稼働
-
mermaid/bpmn/excalidraw の図種別をサポートする kroki メインサービスと Ingress の構成
-
manifests/azure-kubernetes/kroki/ 配下に図種別別デプロイメントと入口設定を配置
-
slidict.io エディタから図を生成・埋め込み可能
-
完全クローズド環境で実行(外部API呼び出しなし)
-
AKS クラスター内で kroki の各デプロイメントを稼働
-
mermaid/bpmn/excalidraw の図種別をサポートする kroki メインサービスと Ingress の構成
-
manifests/azure-kubernetes/kroki/ 配下に図種別別デプロイメントと入口設定を配置
AKS Cluster 内で動作
manifests/azure-kubernetes/kroki/
├── mermaid-deployment.yaml # フローチャート
├── bpmn-deployment.yaml # ビジネスプロセス
├── excalidraw-deployment.yaml # 手書き図
├── kroki-deployment.yaml # メインサービス
└── kroki-ingress.yaml
-
slidict.io エディタから図を生成・埋め込み可能
-
完全クローズド環境で実行(外部API呼び出しなし)
🎯 Kroki によるダイアグラム生成
-
slidict.io エディタから図を生成・埋め込み可能
-
完全クローズド環境で実行(外部API呼び出しなし)
-
AKS クラスター内で kroki の各デプロイメントを稼働
-
mermaid/bpmn/excalidraw の図種別をサポートする kroki メインサービスと Ingress の構成
-
manifests/azure-kubernetes/kroki/ 配下に図種別別デプロイメントと入口設定を配置
-
開発環境を背景で起動する: docker compose up -d
-
アプリコンテナで Rails サーバーを起動する: docker compose exec app bin/dev
-
codex 環境で rspec を実行する: RAILS_ENV=codex bundle exec rspec
-
公開資産のキャッシュ対策: public/assets/ を削除後、docker compose restart app
-
重要: public/assets/ が存在するとプリコンパイル済み資産を優先読み込みし、新規アセットが認識されない
-
開発環境を背景で起動: docker compose up -d
-
Rails サーバーをアプリコンテナで起動: docker compose exec app bin/dev
-
codex 環境で rspec を実行: RAILS_ENV=codex bundle exec rspec
-
公開資産のキャッシュ対策: public/assets/ を削除後、docker compose restart app
-
重要: public/assets/ が存在するとプリコンパイル済み資産を優先読み込みし、新規アセットが認識されない
# 開発環境立ち上げ
docker compose up -d
# Rails サーバー起動
docker compose exec app bin/dev
# テスト実行(codex環境)
RAILS_ENV=codex bundle exec rspec
# キャッシュリセット(Propshaft の問題回避)
rm -rf public/assets/
docker compose restart app
重要: public/assets/ が存在するとプリコンパイル済みアセットを読み込み、
動的生成がスキップされるため、新規のアセットが見つからなくなる
🔧 Docker Compose での開発
-
開発環境を背景で起動: docker compose up -d
-
Rails サーバーをアプリコンテナで起動: docker compose exec app bin/dev
-
codex 環境で rspec を実行: RAILS_ENV=codex bundle exec rspec
-
公開資産のキャッシュ対策: public/assets/ を削除後、docker compose restart app
-
重要: public/assets/ が存在するとプリコンパイル済み資産を優先読み込みし、新規アセットが認識されない
-
schedules を使用: https://github.com/sidekiq-scheduler/sidekiq-scheduler
-
キャッシュからの実行: Redis database 15
-
テスト: spec は config/sidekiq_schedule_spec.rb ではなく、実装に組み込む
-
schedules を使用: https://github.com/sidekiq-scheduler/sidekiq-scheduler
-
キャッシュからの実行: Redis database 15
-
テスト: spec は config/sidekiq_schedule_spec.rb ではなく、実装に組み込む
定期実行ジョブの設定
# config/sidekiq.yml
:schedule:
check_sns_login_health:
cron: '0 * * * *' # 毎時間
class: SnSLoginHealthCheckJob
regenerate_slide_thumbnails:
cron: '0 3 * * *' # 毎日 3時
class: RegenerateSlideThumbailsJob
-
schedules を使用: https://github.com/sidekiq-scheduler/sidekiq-scheduler
-
キャッシュからの実行: Redis database 15
-
テスト: spec は
config/sidekiq_schedule_spec.rbではなく、実装に組み込む
🛡️ Sidekiq スケジューラ管理
-
schedules を使用: https://github.com/sidekiq-scheduler/sidekiq-scheduler
-
キャッシュからの実行: Redis database 15
-
テスト: spec は config/sidekiq_schedule_spec.rb ではなく、実装に組み込む
-
Redis のマルチデータベース機能を用途別に分離して運用する
-
DB11: Redcord、DB12: ActionCable、DB14: キャッシュストア、DB15: Sidekiq で用途別管理
-
Redis CLI で特定データベースのキーを確認する例: redis-cli -n 15 KEYS "*" で Sidekiq のキーを一覧表示
-
Redis のマルチデータベース構成で用途別に分離する
-
DB 11: Redcord(キー値ストア)、DB 12: ActionCable(リアルタイム通信)、DB 14: キャッシュストア、DB 15: Sidekiq(バックグラウンドジョブ)
-
Redis CLI でデータベースを確認する例: redis-cli -n 15 KEYS "*" で Sidekiq のキーを一覧表示
異なる用途で DB 分離
| Database | 用途 |
|---|---|
11 |
Redcord(キー値ストア) |
12 |
ActionCable(リアルタイム通信) |
14 |
キャッシュストア |
15 |
Sidekiq(バックグラウンドジョブ) |
# Redis CLI でデータベース確認
redis-cli -n 15 KEYS "*" # Sidekiq のキー一覧
🔑 Redis マルチDB構成
-
Redis のマルチデータベース構成で用途別に分離する
-
DB 11: Redcord(キー値ストア)、DB 12: ActionCable(リアルタイム通信)、DB 14: キャッシュストア、DB 15: Sidekiq(バックグラウンドジョブ)
-
Redis CLI でデータベースを確認する例: redis-cli -n 15 KEYS "*" で Sidekiq のキーを一覧表示
📝 ドキュメント整備
-
コード変更時は関連ドキュメントを必ず更新する
-
docs/ 配下の全ファイル・セクションを対象として整備を行う
-
ユーザー向け情報の整備を優先し、Help Articles やシード管理を充実させる
-
コード変更時は関連ドキュメントも必ず更新する
-
文書構成の対象は docs/ 配下の各ファイル・セクションを包含する
-
Help Articles や シード管理など、ユーザー向け情報の整備を優先する
コード変更時は必ず関連ドキュメントも更新
docs/
├── feature-specs.md # 機能仕様一覧
├── groups.md # グループ共有機能
├── help-center-and-support.md
├── slide_deck_structure.md
├── release-tasks.md # リリースタスク機構
├── infrastructure-manifests.md
├── slide-moderation.md
├── editor/ # エディタ仕様
└── mcp/ # MCP サーバー仕様
-
Help Articles:
docs/seeds/help_articles/で更新 -
シード管理: ユーザー向けの情報は整備が必須
📝 ドキュメント整備
-
コード変更時は関連ドキュメントも必ず更新する
-
文書構成の対象は docs/ 配下の各ファイル・セクションを包含する
-
Help Articles や シード管理など、ユーザー向け情報の整備を優先する
-
コミットメッセージが Conventional Commits に準拠していることを確認する
-
RSpec テストが全て PASS かを make rspec で検証する
-
RuboCop が PASS かを make rubocop で検証する
-
Brakeman セキュリティ確認を実施する(docker compose exec base bundle exec brakeman)
-
ERB のフォーマットを整える(make htmlbeautifier args='*/.erb')
-
TypeScript/JavaScript のビルドを実行する(yarn build)
-
関連ドキュメントを更新する
-
Release Tasks が必要な場合は実装済みであることを確認する
-
コミットメッセージが Conventional Commits に準拠していることを確認する
-
RSpec テストが全て PASS かを
make rspecで検証する -
RuboCop が PASS かを
make rubocopで検証する -
Brakeman セキュリティ確認を実施する(
docker compose exec base bundle exec brakeman) -
ERB のフォーマットを整える(
make htmlbeautifier args='*/.erb') -
TypeScript/JavaScript のビルドを実行する(
yarn build) -
関連ドキュメントを更新する
-
Release Tasks が必要な場合は実装済みであることを確認する
-
☐ コミットメッセージが Conventional Commits に準拠
-
☐ RSpec テストが全て PASS:
make rspec -
☐ RuboCop が PASS:
make rubocop -
☐ Brakeman セキュリティ確認:
docker compose exec base bundle exec brakeman -
☐ ERB フォーマット確認:
make htmlbeautifier args='*/.erb' -
☐ TypeScript/JavaScript ビルド:
yarn build -
☐ 関連ドキュメント更新
-
☐ Release Tasks が必要な場合は実装済み
✅ デプロイ前のチェックリスト
-
コミットメッセージが Conventional Commits に準拠していることを確認する
-
RSpec テストが全て PASS かを
make rspecで検証する -
RuboCop が PASS かを
make rubocopで検証する -
Brakeman セキュリティ確認を実施する(
docker compose exec base bundle exec brakeman) -
ERB のフォーマットを整える(
make htmlbeautifier args='*/.erb') -
TypeScript/JavaScript のビルドを実行する(
yarn build) -
関連ドキュメントを更新する
-
Release Tasks が必要な場合は実装済みであることを確認する
🚀 デプロイ実行
-
コード確認とテストを実施(make rspec, make rubocop)
-
変更をコミット・プッシュ(git add, git commit, git push origin main)
-
GitHub Actions が自動実行されDraft Releaseを作成
-
Release の稼働状況とクリティカルバグを確認
-
GitHub Release を Published に変更 → production-ci が自動実行
-
本番環境へデプロイ完了 🎉
-
コード確認とテストを実施(make rspec, make rubocop)
-
変更をコミット・プッシュ(git add, git commit, git push origin main)
-
GitHub Actions が自動実行されDraft Releaseを作成
-
Release の稼働状況とクリティカルバグを確認
-
GitHub Release を Published に変更 → production-ci が自動実行
-
本番環境へデプロイ完了 🎉
# 1. コード確認・テスト
make rspec
make rubocop
# 2. コミット & push to main
git add .
git commit -m "feat: 新機能を実装"
git push origin main
# 3. GitHub Actions 自動実行
# → Draft Release が作成される
# 4. Release 確認(稼働状況・クリティカルバグなし)
# 5. GitHub Release を Published に変更
# → production-ci が自動実行
# 6. 本番環境にデプロイ完了 🎉
🚀 デプロイ実行
-
コード確認とテストを実施(make rspec, make rubocop)
-
変更をコミット・プッシュ(git add, git commit, git push origin main)
-
GitHub Actions が自動実行されDraft Releaseを作成
-
Release の稼働状況とクリティカルバグを確認
-
GitHub Release を Published に変更 → production-ci が自動実行
-
本番環境へデプロイ完了 🎉
🐛 デプロイ失敗時の対応
-
デプロイ失敗時はまず GitHub Actions の workflow ログを確認し原因を把握する
-
AKS のポッド状態を確認し、必要に応じてポッドのログを参照して障害箇所を特定する
-
ポッドログを読み取りエラーや例外を把握し、再現手順を整理する
-
デバッグモードで再実行するか Workflow の Run ボタンで検証して修正箇所を確認する
-
デプロイ失敗時は、まず GitHub Actions の Workflow ログを確認して原因を把握する
-
AKS のポッド状態を確認し、必要に応じてポッドのログを参照して障害箇所を特定する
-
ポッドログを確認してエラーメッセージや例外を読み取り、再現手順を整理する
-
デバッグモードで再実行するか、Workflow の Run ボタンで再実行して修正箇所を検証する
# 1. GitHub Actions ログを確認
# → Workflow ページで詳細ログを確認
# 2. AKS ポッド状態を確認
kubectl get pods -n default
# 3. ポッドログを確認
kubectl logs <pod-name> -n default
# 4. デバッグモードで再実行
# → Workflow の "Run" ボタンで再実行
# OR
# → デバッグログを有効にして実行
🐛 デプロイ失敗時の対応
-
デプロイ失敗時は、まず GitHub Actions の Workflow ログを確認して原因を把握する
-
AKS のポッド状態を確認し、必要に応じてポッドのログを参照して障害箇所を特定する
-
ポッドログを確認してエラーメッセージや例外を読み取り、再現手順を整理する
-
デバッグモードで再実行するか、Workflow の Run ボタンで再実行して修正箇所を検証する
💡 ベストプラクティス
-
小分けコミット: 1つの PR は複数の小さなコミット
-
Conventional Commits: 自動リリースノート生成に必須
-
テスト駆動開発: テストなしで main へマージしない
-
Preview 環境活用: main-ci で自動デプロイを活用
-
Staging 検証: 本番向けの大型変更は staging で徹底テスト
-
Release Notes 確認: Draft Release をレビューしてから Published
-
Monitoring 監視: 本番デプロイ後の動作確認を必須化
-
ドキュメント同期: コード変更とドキュメント更新を同時に実施
-
小分けコミット: 1つの PR は複数の小さなコミットで構成
-
Conventional Commits: 自動リリースノート生成に必須
-
テスト駆動開発: テストなしで main へマージしない
-
Preview 環境活用: main-ci で自動デプロイを活用
-
Staging 検証: 本番向けの大型変更は staging で徹底テスト
-
Release Notes 確認: Draft Release をレビューしてから Published
-
Monitoring 監視: 本番デプロイ後の動作確認を必須化
-
ドキュメント同期: コード変更とドキュメント更新を同時に実施
-
小分けコミット: 1つの PR = 複数の小さなコミット
-
Conventional Commits: 自動リリースノート生成に必須
-
テスト駆動開発: テストなしで main にマージしない
-
Preview 環境活用: main-ci で自動デプロイされる
-
Staging 検証: 本番向け大型変更は staging でテスト
-
Release Notes 確認: Draft Release をレビューしてから Published
-
Monitoring 監視: 本番デプロイ後の動作確認は必須
-
ドキュメント同期: コード変更とドキュメント更新は同時に
💡 ベストプラクティス
-
小分けコミット: 1つの PR は複数の小さなコミットで構成
-
Conventional Commits: 自動リリースノート生成に必須
-
テスト駆動開発: テストなしで main へマージしない
-
Preview 環境活用: main-ci で自動デプロイを活用
-
Staging 検証: 本番向けの大型変更は staging で徹底テスト
-
Release Notes 確認: Draft Release をレビューしてから Published
-
Monitoring 監視: 本番デプロイ後の動作確認を必須化
-
ドキュメント同期: コード変更とドキュメント更新を同時に実施
-
CI/CD は main-ci / staging-ci / production-ci の3ワークフローで構成され、それぞれの処理内容と目安時間は以下のとおり。
-
main-ci: Changelog + Docker Build + AKS Deploy、約10~15分
-
staging-ci: Docker Build + AKS Deploy、約8~12分
-
production-ci: Docker Build + AKS Deploy、約8~12分
-
-
最適化ポイントとして、Docker BuildKit のレイヤーキャッシュ、並列ジョブ実行(cert, setup_configmap など)、DockerHub へのプッシュによるレジストリ内キャッシュ活用を挙げる
-
CI/CD の現状は main-ci / staging-ci / production-ci の3つのワークフローがあり、それぞれの実行内容と所要時間は以下のとおり。
-
main-ci: Changelog + Docker Build + AKS Deploy、約10~15分
-
staging-ci: Docker Build + AKS Deploy、約8~12分
-
production-ci: Docker Build + AKS Deploy、約8~12分
-
-
最適化のポイントとして、Docker BuildKit によるレイヤーキャッシュ、並列ジョブ実行(cert, setup_configmap など)、DockerHub へのプッシュによるレジストリ内キャッシュ活用を挙げる。
| ワークフロー | 処理内容 | 実行時間 |
|---|---|---|
main-ci |
Changelog + Docker Build + AKS Deploy |
10~15分 |
staging-ci |
Docker Build + AKS Deploy |
8~12分 |
production-ci |
Docker Build + AKS Deploy |
8~12分 |
最適化のポイント: * Docker BuildKit によるレイヤーキャッシュ * 並列ジョブ実行(cert, setup_configmap 等) * DockerHub へのプッシュ(レジストリ内キャッシュ活用)
📊 CI/CD パフォーマンス
-
CI/CD の現状は main-ci / staging-ci / production-ci の3つのワークフローがあり、それぞれの実行内容と所要時間は以下のとおり。
-
main-ci: Changelog + Docker Build + AKS Deploy、約10~15分
-
staging-ci: Docker Build + AKS Deploy、約8~12分
-
production-ci: Docker Build + AKS Deploy、約8~12分
-
-
最適化のポイントとして、Docker BuildKit によるレイヤーキャッシュ、並列ジョブ実行(cert, setup_configmap など)、DockerHub へのプッシュによるレジストリ内キャッシュ活用を挙げる。
🔄 ロールバック戦略
-
本番環境で問題が発生した場合の迅速なロールバック手順を要約する
-
現在のイメージを確認後、過去のロールアウト履歴から前のバージョンへロールバックする
-
ロールバック後は新旧Podの状態とログを確認して影響範囲を把握する
-
GitHub Releases でも前のバージョンタグから新しい Release を作成して同様のロールバックを実施可能
-
本番環境で問題が起きた場合、以前のイメージへ素早く戻す手順を示す
-
まず現在のイメージを確認し、過去のロールアウト履歴を参照して前のバージョンへロールバック
-
ロールバック後は、新旧Podの状態を確認し、ログを確認して影響範囲を把握する
-
GitHub Releases でも前のバージョンタグから新しい Release を作成することで同様のロールバックを実施可能
本番環境での問題発生時
# 1. 前のイメージタグを確認
kubectl get deployment slidict-io-production \
-o jsonpath='{.spec.template.spec.containers[0].image}'
# 2. 前のバージョンにロールアウト
kubectl rollout history deployment/slidict-io-production
kubectl rollout undo deployment/slidict-io-production
# 3. 状態確認
kubectl get pods
kubectl logs <新しいpod>
GitHub Releases でも可能: 前のバージョンタグから新しい Release を作成
🔄 ロールバック戦略
-
本番環境で問題が起きた場合、以前のイメージへ素早く戻す手順を示す
-
まず現在のイメージを確認し、過去のロールアウト履歴を参照して前のバージョンへロールバック
-
ロールバック後は、新旧Podの状態を確認し、ログを確認して影響範囲を把握する
-
GitHub Releases でも前のバージョンタグから新しい Release を作成することで同様のロールバックを実施可能
-
GitHub Actions Secrets の活用と管理ポイントを整理
-
APP_ID/APP_PRIVATE_KEY、AKS kubeconfig、Azure サブスクリプション、DNS サービスプリンシパル、Docker Hub 資格情報を Secrets に格納
-
セキュリティ対策:シークレットはマスク表示、ログ出力なし、PR では利用不可(pull_request_target を活用)
-
GitHub Actions Secrets の活用と管理ポイントを整理
-
GitHub App 連携用の APP_ID/APP_PRIVATE_KEY、AKS kubeconfig、Azure サブスクリプション、DNS サービスプリンシパル、Docker Hub 資格情報を Secrets に格納
-
セキュリティ対策:シークレットはマスク表示、ログ出力なし、PR では利用不可(pull_request_target を活用)
GitHub Actions Secrets の活用
GitHub Repository Secrets:
- APP_ID: GitHub App ID
- APP_PRIVATE_KEY: GitHub App の秘密鍵
- AKS_SLIDICT_KUBECONFIG: AKS kubeconfig
- AZURE_SUBSCRIPTION_ID: Azure サブスクリプション ID
- DNS_SP: DNS 用サービスプリンシパル(JSON)
- DOCKERHUB_USERNAME: Docker Hub ユーザー名
- DOCKERHUB_TOKEN: Docker Hub トークン
✅ セキュリティ:
* すべてのシークレットはマスクされる
* ログには出力されない
* PR では利用できない(pull_request_target を使用)
🔐 シークレット & 認証情報管理
-
GitHub Actions Secrets の活用と管理ポイントを整理
-
GitHub App 連携用の APP_ID/APP_PRIVATE_KEY、AKS kubeconfig、Azure サブスクリプション、DNS サービスプリンシパル、Docker Hub 資格情報を Secrets に格納
-
セキュリティ対策:シークレットはマスク表示、ログ出力なし、PR では利用不可(pull_request_target を活用)
📈 スケーリング戦略
-
スケーリングは HPA による自動化を適用
-
最小 5、最大 30 のレプリカ数を設定
-
CPU 70%、メモリ 80%の利用率を閾値としてスケーリング
-
対象デプロイは slidict-io-production
-
HPA による自動スケールを適用。
-
最小 5、最大 30 のレプリカ数を設定。
-
CPU 70%・メモリ 80%の利用率を閾値としてスケーリング。
-
対象デプロイは slidict-io-production。
HPA (Horizontal Pod Autoscaler) による自動スケール
# manifests/azure-kubernetes/production/horizontal-pod-autoscaler.yml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: slidict-io-production-hpa
spec:
scaleTargetRef:
name: slidict-io-production
minReplicas: 5
maxReplicas: 30
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 80
📈 スケーリング戦略
-
HPA による自動スケールを適用。
-
最小 5、最大 30 のレプリカ数を設定。
-
CPU 70%・メモリ 80%の利用率を閾値としてスケーリング。
-
対象デプロイは slidict-io-production。
🎯 ノウハウ共有
-
よくある質問と回答を整理
-
Release Task 再実行: release_tasks テーブルの該当レコードの executed_at を NULL にする
-
Preview デプロイ失敗: public/assets/ ディレクトリを削除して再起動
-
Staging で本番同様テスト: staging ラベルで PR をデプロイし staging.slidict.io で検証
-
Release Notes 手動修正: Draft Release を編集して公開(GitHub UI から)
-
Rollback: kubectl rollout undo で前バージョンに戻す
-
よくある質問と回答を整理
-
Release Task 再実行: release_tasks テーブルの該当レコードの executed_at を NULL にする
-
Preview デプロイ失敗: public/assets/ ディレクトリを削除して再起動
-
Staging で本番同様テスト: staging ラベルで PR をデプロイし staging.slidict.io で検証
-
Release Notes 手動修正: Draft Release を編集して公開(GitHub UI から)
-
Rollback: kubectl rollout undo で前バージョンに戻す
よくある質問と回答
Q: Release Task を再実行したい
A: release_tasks テーブルの該当レコードの executed_at を NULL にする
Q: Preview デプロイが失敗した
A: public/assets/ ディレクトリを削除して再起動
Q: Staging で本番同様にテストしたい A: staging ラベルで PR をデプロイし、staging.slidict.io で検証
Q: Release Notes を手動で修正したい A: Draft Release を編集して公開(GitHub の UI から)
Q: Rollback したい
A: kubectl rollout undo で前バージョンに戻す
🎯 ノウハウ共有
-
よくある質問と回答を整理
-
Release Task 再実行: release_tasks テーブルの該当レコードの executed_at を NULL にする
-
Preview デプロイ失敗: public/assets/ ディレクトリを削除して再起動
-
Staging で本番同様テスト: staging ラベルで PR をデプロイし staging.slidict.io で検証
-
Release Notes 手動修正: Draft Release を編集して公開(GitHub UI から)
-
Rollback: kubectl rollout undo で前バージョンに戻す
🏆 まとめ
-
slidict.io のデプロイメントは自動化と段階的デプロイを軸に、Conventional Commits から自動で Changelog を生成する仕組みを持つ
-
Preview → Staging → Production の順次デプロイでリスクを抑え、PR staging ラベル検証 → Release 本番化で安全性を確保
-
GitHub Actions, Grafana, Nagios による可視化と、HPA による自動スケーリングで運用を高い可観測性で支える
-
ロールバック機構で迅速な復旧を実現し、DevOps 文化としてコード品質とドキュメント整備を重視
-
slidict.io のデプロイメントは自動化と段階的デプロイを軸に、Conventional Commits から自動的に Changelog を生成する仕組みを持つ
-
Preview → Staging → Production の順次デプロイでリスクを抑え、PR staging ラベル検証→ Release 本番化で安全性を確保
-
GitHub Actions, Grafana, Nagios による可視化と、HPA による自動スケーリングで運用を可監視性高く運用
-
ロールバック機構で迅速な復旧を実現、DevOps 文化としてコード品質とドキュメント整備を重視
slidict.io のデプロイメントパイプラインの特徴
✨ 自動化: Conventional Commits → 自動 Changelog 生成
🚀 段階的デプロイ: Preview → Staging → Production
🔒 安全性: PR staging ラベルで検証 → Release で本番化
📊 可視化: GitHub Actions + Grafana + Nagios
⚡ スケーラビリティ: HPA による自動スケール
🔄 復旧性: ロールバック機構で迅速な復旧
💡 DevOps 文化: コード品質とドキュメント整備が鍵
🏆 まとめ
-
slidict.io のデプロイメントは自動化と段階的デプロイを軸に、Conventional Commits から自動的に Changelog を生成する仕組みを持つ
-
Preview → Staging → Production の順次デプロイでリスクを抑え、PR staging ラベル検証→ Release 本番化で安全性を確保
-
GitHub Actions, Grafana, Nagios による可視化と、HPA による自動スケーリングで運用を可監視性高く運用
-
ロールバック機構で迅速な復旧を実現、DevOps 文化としてコード品質とドキュメント整備を重視
🚀 さいごに
-
GitHub Actions + Conventional Commits + AKS は強力な CI/CD の組み合わせ
-
デプロイパイプラインを理解することで、チーム全体の開発効率と品質を向上させる
-
最新版は slidict.io で公開中
-
Happy Deploying! 🎉
-
GitHub Actions + Conventional Commits + AKS は強力な CI/CD の組み合わせ
-
デプロイパイプラインを理解することで、チーム全体の開発効率と品質を向上させる
-
最新版は slidict.io で公開中
-
Happy Deploying! 🎉
GitHub Actions + Conventional Commits + AKS = 強力な CI/CD
デプロイパイプラインを理解することで、 チーム全体の開発効率と品質が向上する
Happy Deploying! 🎉
本スライドの最新版は slidict.io で公開中
🚀 さいごに
-
GitHub Actions + Conventional Commits + AKS は強力な CI/CD の組み合わせ
-
デプロイパイプラインを理解することで、チーム全体の開発効率と品質を向上させる
-
最新版は slidict.io で公開中
-
Happy Deploying! 🎉
参考文献
スライドに戻る参考文献
関連スライド
LM Studio をdockerで動かした
2026/05/22
マイクラブロック一覧
2026/05/20
github要約スライドを作った
2026/05/20
Rails7アップグレードとwebpacker脱却ログ
2026/05/10
cloudflare入れてみた
2026/04/27
1Passwordと Kubernetes Secretsで実現する方法
2026/04/24
スライド作成の型まとめ
2026/04/11
Vibe Coding×LLM時代の個人開発攻略:前提設計でAIのミスを減らす実践テク
2026/04/09
OpenClawに挑む: 私の使ってみたい気持ちとセキュリティの不安
2026/04/04
Tauriで子供向けアプリを作ってみた話
2026/04/02
43歳、常用偏光レンズで気づいたこと
2026/02/15
デザインを外注してよかった話
2026/02/15
子供向けアプリをTauriで作ってみた話
2026/02/15
ピラティスを始めて感じたこと
2026/02/15
AIにコードを書かせている僕の話
2026/02/15
GitHub READMEをそのままスライドへ
2026/02/14
AI導入で個人開発はどう変わったか
2026/02/08
過程を楽しむ人間は、どう稼げるのか
2026/02/08
slidictの概要
2026/02/08
埋め込み用コード
コピーしてご自身のブログなどに貼り付けることでスライドが表示されます。