FlaskアプリをGitHub Actionsで自動デプロイする方法!初心者でもかんたんステップガイド
生徒
「Flaskで作ったアプリをコードを変えたらすぐ公開できるようにしたいです。どうすればいいですか?」
先生
「GitHub Actionsを使えば、コードをGitHubにpushするだけで自動デプロイできますよ。」
生徒
「でもActionsやCI/CDって難しそう…」
先生
「大丈夫です。これから初心者にもやさしく、GitHub Actionsの仕組みとFlaskアプリの自動デプロイ方法をご説明しますね。」
1. GitHub ActionsとCI/CDって何?
GitHub ActionsはGitHubに組み込まれた自動化サービスで、CI/CDとは「自動でテストとデプロイを行う仕組み」のことです。CIは継続的インテグレーション、CDは継続的デリバリーまたはデプロイです。
たとえば、料理教室で料理ができたら自動でお皿に盛り付けてテーブルに運んでくれるロボットのようなイメージです。
2. なぜGitHub ActionsでFlaskアプリを自動デプロイするの?
- コードをpushするだけで自動で本番サーバーに更新できる
- 手動ミスが減り、デプロイがラクになる
- チーム開発でも誰でも同じ流れで公開できる
3. 前提:GitHubリポジトリと本番サーバーを用意
まず、FlaskアプリをGitHubにプッシュしておき、本番サーバー(たとえばAWS EC2やDigitalOceanなど)へSSH接続できるようにSSH鍵を用意します。
サーバーにroot権限でSSHログインできる必要があります。
4. GitHubリポジトリにシークレットを登録しよう
GitHubのリポジトリ画面から「Settings → Secrets and variables → Actions」へ行き、以下の情報を追加します:
- SSH_PRIVATE_KEY:本番サーバーにアクセスする秘密鍵
- SERVER_HOST:サーバーのIPアドレスやドメイン
- SERVER_USER:例:
ec2-userやubuntu
これで安全に秘密情報を使えるようになります。
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. 本番サーバー側の準備
本番サーバーにはあらかじめ以下の準備をしておきます:
- Flaskアプリ用のフォルダとGitリポジトリを用意して
git cloneしておく - 仮想環境(venv)と
pip install -r requirements.txt systemdなどでFlaskアプリを常駐起動する設定
7. デプロイ後の動作確認方法
コードを push → Actions が成功(緑チェック) → 本番サーバーを確認。もし反映されていなければログをチェックします。
ログは journalctl -u flask などで確認できます。
8. よくあるトラブルと対処法
- SSH接続に失敗する:SSH鍵が正しいか、権限は
chmod 600になっているか確認してください。 - Flaskが再起動しない:systemctl設定(
flask.service)を確認し、ExecStartのパスが正しいか確認。 - pip installが失敗する:requirements.txt の内容を本番と合わせるように。バージョンをそろえましょう。
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の理解が深まるほどアプリ開発の幅も広がりますから、ぜひ挑戦してみてください。」