Contents
はじめに:Flaskアプリの本番環境デプロイとは?
Flaskを用いて作成したWebアプリを本番環境へ公開することで、実際にユーザーが利用できる状態にすることが可能です。個人開発者や小規模事業者の多くは、「無料で手軽に公開したい」というニーズを持っています。この記事では、HerokuやRenderなどのクラウドサービスを活用し、WSGIサーバー構築やGitリポジトリとの連携といった具体的なステップを5分程度で実行できる方法を解説します。無料プランでも制限に対応する工夫を取り入れることで、初心者でも安心してデプロイが可能です。
Herokuへのデプロイ手順(Procfile設定含む)
Herokuは無料アカウントで利用でき、Pythonアプリケーションの公開に最適なクラウドサービスです。Procfileというファイルを作成することで、Flaskアプリを自動起動させることができます。
アプリケーションの準備
-
Herokuアカウントを登録
https://signup.heroku.com にアクセスし、アカウントを作成します。 -
プロジェクトディレクトリ作成
Flaskアプリが動作する環境で、以下のようなファイル構成にしてください:
plaintext
my_flask_app/
├── app.py
├── requirements.txt
└── Procfile -
requirements.txtを作成
pip freeze > requirements.txtで依存関係を記録します。
Procfileの作成と内容
ProcfileはHerokuが実行するコマンドを指定するファイルです。以下の内容をProcfileに記述してください:
|
1 2 |
web: gunicorn app:app |
- web はエントリポイント(この場合はWebサーバー)
- gunicorn はWSGIサーバー(後述します)
- app:app はFlaskアプリケーションのモジュールとインスタンス名
ファイル名は「Procfile」で、拡張子がありません。Herokuは自動で読み込みます。
各クラウドサービスでのProcfile/起動コマンドの差異
| サービス | 起動方法 | 必要なファイル | 特記事項 |
|---|---|---|---|
| Heroku | web: gunicorn app:app |
Procfile | Heroku独自の起動コマンド指定必須 |
| Render | CMD: gunicorn -b 0.0.0.0:$PORT app:app |
Dockerfile or Render dashboardで設定可能 | $PORT変数を使用する必要あり |
| PythonAnywhere | Webコンソールから「gunicorn --bind 0.0.0.0:$PORT app:app」指定 | 必要無し(UI経由) | 無料プランは$PORTのみ利用可能 |
各サービスの起動方法やファイル形式に違いがあるため、適切な設定が必要です。
Herokuへのプッシュ操作
-
Heroku CLIをインストール
https://devcenter.heroku.com/articles/heroku-cli からCLIをダウンロードし、heroku loginでログインします。 -
リモートリポジトリを作成
bash
heroku create my-flask-app -
Gitプッシュして公開
bash
git push heroku main -
アプリケーションURLを確認
heroku openを実行するとブラウザで開けます。
RenderとPythonAnywhereの活用法
Heroku以外にも、無料でFlaskアプリを公開できるクラウドサービスがあります。それぞれの特徴や設定手順を比較しながら紹介します。
Renderでのプロジェクト作成手順
RenderはHerokuに類似したサービスで、Dockerサポートが充実しています。以下が主な手順です:
-
アカウント登録
https://render.com にアクセスし、無料アカウントを作成します。 -
プロジェクトを作成
-
プロジェクト名を入力 → 「Web Service」を選択 → GitHubリポジトリを連携(またはローカルで作業)
-
環境変数設定
RenderのUIから「Variables」セクションにFLASK_ENV=productionなどの設定を行います。 -
自動デプロイ設定
GitHubと連携している場合、Push時に自動的に公開されます。
PythonAnywhereのウェブアプリ設定
PythonAnywhereは、Web開発に特化したクラウドサービスで、簡単な設定でFlaskアプリを公開可能です。
-
アカウント作成とログイン
https://www.pythonanywhere.com から無料アカウントを作成し、ログインします。 -
Pythonスクリプト設定
- ファイルをアップロード → 「Web」タブで「Add a new web app」を選択
-
パッケージのインストール(例:
pip install flask gunicorn) -
起動コマンドの指定
gunicorn --bind 0.0.0.0:$PORT app:app
$PORTはPythonAnywhereから自動で割り当てられるポート番号です。無料プランでは1つのポートのみ利用可能であり、複数ポートを動的に指定することができません。
WSGIサーバーの導入と設定(gunicornなど)
Flaskアプリを本番環境で動かすには、WSGIサーバー(例:gunicorn)が必要です。ローカルでも動作確認が可能です。
gunicornの導入と起動
-
インストール
bash
pip install gunicorn -
起動コマンド
ローカル環境でアプリをテストするには以下を実行:
bash
gunicorn app:app -
ポート指定の例
特定のポートを使用したい場合(例:8080):
bash
gunicorn -b 127.0.0.1:8080 app:app
WSGIサーバーの役割と使い方
WSGIサーバーは、FlaskアプリとHTTP通信を仲介する役割を持ちます。HerokuやRenderでは自動的にgunicornが利用されるため、特に設定は必要ありません。ただし、ローカルでデバッグを行う際には、--reloadオプションで再起動を自動化できます:
|
1 2 |
gunicorn --reload app:app |
Gitリポジトリとの連携方法
Flaskアプリのバージョン管理やクラウドへの公開にGitを使うことで、効率的な開発が可能です。
GitHubへの初期設定
-
GitHubアカウント作成
https://github.com から無料アカウントを作成します。 -
リポジトリを作成
-
「New repository」をクリック → リポジトリ名(例:my-flask-app)で作成
-
ローカルプロジェクトにGitを適用
bash
git init
git add .
git commit -m "Initial commit" -
リモートリポジトリを設定
bash
git remote add origin https://github.com/ユーザー名/my-flask-app.git
バージョン管理とデプロイの関係
Gitはバージョン管理だけでなく、HerokuやRenderといったクラウドサービスとの連携にも不可欠です。以下が主な流れ:
- ローカルで修正 →
git add,commitで変更を保存 git push heroku mainやgit push render mainなどでクラウドに反映
注意:HerokuやRenderでは、
mainやmasterなどのブランチが対象になる場合が多いです。GitHubのデフォルトは「main」ですが、一部サービスでは「master」が依然として利用されるケースがあります(例:Render)。各クラウドサービスのドキュメントで確認してください。
無料プランの制限対策
無料プランは制限が多く、パフォーマンスやリソースに影響が出ることがあります。各サービスでの制限とその対処法を整理します。
各サービスにおけるリソース制限
| サービス | CPU使用量 | メモリ(RAM) | DB容量 | その他制限 |
|---|---|---|---|---|
| Heroku(Free) | 100ms | 512MB | 無料DBなし | 起動時間の制限 |
| Render(Free) | CPU使用制限なし | 384MB RAM | 2GB | マイクロサービス非対応 |
| PythonAnywhere | 無料枠は100MB | 512MB | 無料DBなし | 動作時間の制限 |
Render Free Planでは、CPU使用量に制限がないが、メモリは384MBに固定です。Heroku Free Planは起動回数や実行時間が制限される点に注意。
パフォーマンス改善のヒント
-
軽量なライブラリを使う
Flaskに必要な機能のみをインストールし、不要なパッケージは排除。例:pip freeze > requirements.txtで依存関係を精査します。 -
キャッシュを活用する
データベースクエリや静的コンテンツの読み込み時間を減らすことで、パフォーマンス向上が見込めます。 -
無料DBは避ける(場合によっては)
HerokuではPostgreSQLの無料プランが利用可能ですが、データ容量に制限があります。代替として、SQLiteやMongoDBなどローカルで管理可能なツールを検討します。
まとめ:あなたのFlaskアプリを本番へ公開しよう
- HerokuへのデプロイではProcfileとGitプッシュがカギです
- RenderやPythonAnywhereも無料で利用でき、手軽に公開可能です
- WSGIサーバー(gunicorn)の構築は本番環境での必須知識です
- Gitとの連携でバージョン管理とデプロイがスムーズに行えます
- 無料プランの制限を理解し、パフォーマンス改善を図ることが大切です
今回の手順に従って、自身のFlaskアプリを本番環境へ公開してみてください。初期段階では制限があるかもしれませんが、将来的に有料プランへ移行する際の基礎が身につきます。