カテゴリ: Flask 更新日: 2025/11/24

FlaskアプリをGitHub Actionsで自動デプロイする方法!初心者でもかんたんステップガイド

FlaskアプリをGitHub Actionsで自動デプロイする手順をやさしく解説
FlaskアプリをGitHub Actionsで自動デプロイする手順をやさしく解説

先生と生徒の会話形式で理解しよう

生徒

「Flaskで作ったアプリをコードを変えたらすぐ公開できるようにしたいです。どうすればいいですか?」

先生

「GitHub Actionsを使えば、コードをGitHubにpushするだけで自動デプロイできますよ。」

生徒

「でもActionsやCI/CDって難しそう…」

先生

「大丈夫です。これから初心者にもやさしく、GitHub Actionsの仕組みとFlaskアプリの自動デプロイ方法をご説明しますね。」

1. GitHub ActionsとCI/CDって何?

1. GitHub ActionsとCI/CDって何?
1. GitHub ActionsとCI/CDって何?

GitHub ActionsはGitHubに組み込まれた自動化サービスで、CI/CDとは「自動でテストとデプロイを行う仕組み」のことです。CIは継続的インテグレーション、CDは継続的デリバリーまたはデプロイです。

たとえば、料理教室で料理ができたら自動でお皿に盛り付けてテーブルに運んでくれるロボットのようなイメージです。

2. なぜGitHub ActionsでFlaskアプリを自動デプロイするの?

2. なぜGitHub ActionsでFlaskアプリを自動デプロイするの?
2. なぜGitHub ActionsでFlaskアプリを自動デプロイするの?
  • コードをpushするだけで自動で本番サーバーに更新できる
  • 手動ミスが減り、デプロイがラクになる
  • チーム開発でも誰でも同じ流れで公開できる

3. 前提:GitHubリポジトリと本番サーバーを用意

3. 前提:GitHubリポジトリと本番サーバーを用意
3. 前提:GitHubリポジトリと本番サーバーを用意

まず、FlaskアプリをGitHubにプッシュしておき、本番サーバー(たとえばAWS EC2やDigitalOceanなど)へSSH接続できるようにSSH鍵を用意します。

サーバーにroot権限でSSHログインできる必要があります。

4. GitHubリポジトリにシークレットを登録しよう

4. GitHubリポジトリにシークレットを登録しよう
4. GitHubリポジトリにシークレットを登録しよう

GitHubのリポジトリ画面から「Settings → Secrets and variables → Actions」へ行き、以下の情報を追加します:

  • SSH_PRIVATE_KEY:本番サーバーにアクセスする秘密鍵
  • SERVER_HOST:サーバーのIPアドレスやドメイン
  • SERVER_USER:例:ec2-userubuntu

これで安全に秘密情報を使えるようになります。

5. GitHub Actionsワークフローの作成

5. GitHub Actionsワークフローの作成
5. GitHub Actionsワークフローの作成

リポジトリ内に .github/workflows/deploy.ymlを作ります。


name: Deploy Flask App
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - name: Setup SSH
      uses: webfactory/ssh-agent@v0.6.0
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
    - name: Sync to Server
      run: |
        ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} \
        "cd /path/to/app && git pull && source venv/bin/activate && pip install -r requirements.txt && systemctl restart flask"

pushすると自動で本番サーバーにSSH接続してコード更新し、Flaskアプリを再起動します。

6. 本番サーバー側の準備

6. 本番サーバー側の準備
6. 本番サーバー側の準備

本番サーバーにはあらかじめ以下の準備をしておきます:

  • Flaskアプリ用のフォルダとGitリポジトリを用意して git clone しておく
  • 仮想環境(venv)と pip install -r requirements.txt
  • systemdなどでFlaskアプリを常駐起動する設定

7. デプロイ後の動作確認方法

7. デプロイ後の動作確認方法
7. デプロイ後の動作確認方法

コードを push → Actions が成功(緑チェック) → 本番サーバーを確認。もし反映されていなければログをチェックします。

ログは journalctl -u flask などで確認できます。

8. よくあるトラブルと対処法

8. よくあるトラブルと対処法
8. よくあるトラブルと対処法
  • SSH接続に失敗する:SSH鍵が正しいか、権限は chmod 600 になっているか確認してください。
  • Flaskが再起動しない:systemctl設定(flask.service)を確認し、ExecStartのパスが正しいか確認。
  • pip installが失敗する:requirements.txt の内容を本番と合わせるように。バージョンをそろえましょう。

9. GitHub Actionsで安全なデプロイを続けよう

9. GitHub Actionsで安全なデプロイを続けよう
9. GitHub Actionsで安全なデプロイを続けよう

GitHub Actionsを使えば、Flaskアプリの自動デプロイが可能になり、手動の手間がなくなりミスも減ります。さらに、プルリクエストやテストも自動設定できるので、開発効率が劇的に上がります。

最初は不安かもしれませんが、コードを push するたびにサーバーが更新される体験はとても楽しく、初心者にこそ取り入れてほしい技術です。

まとめ

まとめ
まとめ

FlaskアプリをGitHub Actionsで自動デプロイする流れを振り返ると、コードの変更をそのまま本番環境に反映できる仕組みがどれほど便利で効率的か実感できます。手作業でサーバーにログインして更新していた作業を、自動化することで時間の節約だけでなく、更新漏れやミスを防ぐ効果も大きく、安定した開発や運用につながります。とくにFlaskのようにシンプルな構造のアプリケーションは、自動デプロイとの相性がとても良く、継続的に改善したコードをすぐ公開できる点が大切な特徴となります。 GitHub Actionsは、pushをトリガーにして自動的にSSHで本番サーバーにアクセスし、コードの反映、パッケージの更新、Flaskアプリの再起動までを一連の流れで行うため、初心者でもステップを覚えるだけで十分に扱える柔軟さがあります。GitHubのSecrets機能を使って秘密鍵や接続情報を安全に管理できる点も、安心して作業できる理由のひとつです。SSH設定やsystemdのサービスファイルなど、本番環境で必要な要素も確実に整えておけば、継続的な運用がスムーズに続けられます。 また、GitHub Actionsのワークフローは書き換えて拡張できるため、Pythonのテストを追加したり、静的チェックを加えたりと、アプリの品質管理を自動で行う仕組みへと発展させることも可能です。Flaskアプリだけでなく、Web APIやバックエンドの処理など、Pythonで構築されたさまざまなサービスで活用できる汎用性も魅力です。ここでは記事の内容に合わせて、改めてサンプルコードを掲載しますので、理解の補強や設定の参考に役立ててください。

GitHub Actions 自動デプロイ設定(まとめ用サンプル)


name: Auto Deploy Flask App
on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: コードを取得
        uses: actions/checkout@v3

      - name: SSH設定
        uses: webfactory/ssh-agent@v0.6.0
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: 本番サーバーへ反映
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_HOST }} "
          cd /var/www/flaskapp &&
          git pull &&
          source venv/bin/activate &&
          pip install -r requirements.txt &&
          sudo systemctl restart flaskapp
          "

Flaskアプリ側のsystemdサービス設定例


[Unit]
Description=Flask App
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/var/www/flaskapp
ExecStart=/var/www/flaskapp/venv/bin/python app.py
Restart=always

[Install]
WantedBy=multi-user.target

このような構成を整えることで、FlaskアプリはGitHubにpushするだけで即座に本番へ反映され、継続的な改善や機能追加がスムーズに進むようになります。自動化によって余計な手続きを省き、コードの品質やユーザー体験に集中できる点は、開発の大きな強みです。もしデプロイに問題が起きても、Actionsのログやjournalctlのログを追いながら、どこでエラーが発生しているか確認することで確実に原因を探ることができます。細かな調整を積み重ねながら運用を続けることが、安定したサービス提供へとつながります。 GitHub Actionsは慣れてしまえば非常に強力な味方となり、初心者の方でもフローに沿って設定するだけで自動デプロイ環境を作ることができます。Flaskアプリの規模が大きくなるほど、この仕組みの恩恵も増していきますので、ぜひ積極的に活用してみてください。

先生と生徒の振り返り会話

生徒

「GitHub Actionsを使うとpushだけでデプロイできる仕組みが本当に便利だと感じました。最初は難しそうでしたが、流れを覚えるとあっという間でした。」

先生

「そうですね。自動化は慣れれば強力な武器になります。手作業の負担が減るだけでなく、作業の再現性が上がるのでミスも減らせますよ。」

生徒

「SSH鍵をSecretsに登録して、サーバー側の設定を整える流れもよく理解できました。systemdの設定も、動かしてみると仕組みがつかめますね。」

先生

「その調子です。Actionsと本番環境を連携させる経験は必ず役に立ちます。今後はテストの自動化なども取り入れると、さらに開発効率が向上しますよ。」

生徒

「はい!次はデプロイ前に自動でテストを走らせる仕組みも追加してみたいです。」

先生

「とても良いですね。CI/CDの理解が深まるほどアプリ開発の幅も広がりますから、ぜひ挑戦してみてください。」

カテゴリの一覧へ
新着記事
New1
Flask
Flaskでデータベースエラーを処理する方法!初心者にもわかる例外の使い方
New2
Flask
FlaskでリダイレクトやURL生成を行う方法!便利な関数の使い方を解説
New3
Flask
FlaskでPOSTリクエストを受け取る方法!初心者でもわかるJSONデータの受け取り方
New4
Flask
Flask‑Mailの使い方!アプリからメールを送信する基本方法を解説
人気記事
No.1
Java&Spring記事人気No1
Django
Django環境構築の全手順を完全解説!初心者でも迷わないPython・Djangoセットアップガイド
No.2
Java&Spring記事人気No2
Django
DjangoとFlaskの違いを完全比較!初心者でもわかるPythonフレームワーク入門
No.3
Java&Spring記事人気No3
Python
Pythonの文字列を1文字ずつ処理する方法!for文やlist化の活用例
No.4
Java&Spring記事人気No4
Python
Pythonでリストをコピーする方法!copy()・スライス・list()の使い方を比較
No.5
Java&Spring記事人気No5
Flask
FlaskアプリをNginx + Gunicornで本番運用する方法!初心者でもわかるデプロイ構成の基本
No.6
Java&Spring記事人気No6
Python
PythonでHello Worldを表示するには?初心者向けに最初の1行を実行してみよう
No.7
Java&Spring記事人気No7
Flask
Flaskアプリの環境変数設定方法!安全で柔軟な構成を実現しよう
No.8
Java&Spring記事人気No8
Flask
Flaskとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説