前回の記事では、Flask × SQLite で作った ToDo アプリを
Render にデプロイして Web 公開するところまで進めました。
今回はその続きとして、
GitHub Actions を使った CI/CD(自動テスト+自動デプロイ)環境の構築をまとめます。
この記事を読むと、以下のことができるようになります。
- push するだけで自動テストが走る
- Flask アプリが壊れていないか自動チェック
- CI が成功したら Render に自動デプロイ
- 完全自動のパイプラインが完成
📌 1. CI/CD を導入する目的
個人開発でも CI/CD を入れるメリットは大きいです。
- 壊れたコードが本番に行かない
- push するだけでデプロイできる
- ミスを仕組みで防げる
- インフラエンジニアとしてのスキルが確実に上がる
特に Flask アプリは import ミスやルーティングの typo で簡単に壊れるので、
CI で自動チェックしておくと安心です。
📌 2. CI(自動テスト)を作る
まずは CI(継続的インテグレーション)から。
今回は以下のチェックを自動化します。
- Python のセットアップ
- ライブラリのインストール
- flake8 による Lint チェック
- Flask アプリが起動できるかテスト
🔧 2-1. .github/workflows/ci.yml を作成
.github/
└── workflows/
└── ci.yml
🔧 2-2. CI の YAML(全文)
name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.12"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install flake8
- name: Lint with flake8
run: |
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=120 --statistics
- name: Flask 起動テスト
run: |
python - << 'EOF'
from app import app
print("Flask app imported successfully!")
EOF
📌 3. CD(自動デプロイ)を作る
次に CD(継続的デリバリー)です。
今回は以下の仕組みを作ります。
- CI が成功したら
- Render に自動デプロイする
🔧 3-1. Render の API Key と Service ID を取得
✔ API Key
Render → Account Settings → API Keys → Generate
✔ Service ID
Render の Web Service URL の末尾にある ID
例:https://dashboard.render.com/web/services/abcd1234
→ abcd1234
🔧 3-2. GitHub Secrets に登録
GitHub → リポジトリ → Settings → Secrets and variables → Actions
| Name | Value |
|---|---|
RENDER_API_KEY | Render の API Key |
RENDER_SERVICE_ID | Render の Service ID |
🔧 3-3. CD の YAML(CI 成功後だけ動く構成)
.github/workflows/deploy.yml を作成します。
name: CD
on:
workflow_run:
workflows: ["CI"]
types:
- completed
jobs:
deploy:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
runs-on: ubuntu-latest
steps:
- name: Trigger Render Deploy
env:
RENDER_API_KEY: ${{ secrets.RENDER_API_KEY }}
RENDER_SERVICE_ID: ${{ secrets.RENDER_SERVICE_ID }}
run: |
curl -X POST \
-H "Accept: application/json" \
-H "Authorization: Bearer $RENDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"clearCache": false}' \
https://api.render.com/v1/services/$RENDER_SERVICE_ID/deploys
📌 4. 実際に動かしてみる
main に push すると…
- CI が動く
- CI が緑なら CD が動く
- Render が自動デプロイ
- 本番環境が更新される
📸 ここに CD が 1 回だけ動いているスクショを挿入
大地の環境でも、
修正後は CD が 1 回だけ動くようになり、
理想的なパイプラインが完成しました。
📌 5. まとめ
この記事では、Flask アプリのための CI/CD を構築しました。
✔ CI
- flake8 による Lint
- Flask 起動テスト
- push するだけで自動チェック
✔ CD
- CI 成功後だけ Render に自動デプロイ
- 完全自動のパイプラインが完成
CI/CD を導入することで、
「動くアプリ」から「壊れないアプリ」へ進化します。
個人開発でも、インフラエンジニアとしてのスキルアップとしても、
非常に価値のある取り組みです。
