~Render で無料デプロイして Web 公開するまでの手順とハマりポイント~
前回の記事では、Flask と SQLite を使って
ローカルで動く ToDo アプリを作りました。
今回はその続きとして、
作ったアプリを Render(無料)で Web 公開する方法をまとめます。
実際にデプロイ中に遭遇したエラー
「sqlite3.OperationalError: no such table: task」
の解決方法も詳しく紹介します。
※この記事は画像を挿入しながら読めるように構成しています。
Render の画面キャプチャを適宜挿入すると読みやすくなります。
## 1. Render とは?(おさらい)
Render は、Web アプリを簡単にクラウド公開できるホスティングサービスです。
- GitHub と連携して自動デプロイ
- HTTPS 対応
- サーバ構築不要
- 無料枠あり
個人開発には最適で、Flask アプリとの相性も抜群です。
## 2. デプロイ前に必要なファイル
Render で Flask を動かすには、以下の3つが必須です。
### 2-1. requirements.txt
Flask や SQLAlchemy、そして Gunicorn を必ず入れます。
Flask
Flask-SQLAlchemy
gunicorn
ローカルで以下を実行すれば自動生成できます。
pip freeze > requirements.txt
### 2-2. Procfile
Render に「どうやってアプリを起動するか」を伝えるファイル。
web: gunicorn app:app
app.pyの中にあるappインスタンスを起動- 本番環境では Flask の
app.run()は使わない
### 2-3. runtime.txt
Render で使用する Python バージョンを指定します。
python-3.12.1
ローカルと合わせるのが安全です。
## 3. GitHub に push する
Render は GitHub のコードを参照してデプロイするため、
必ず push しておきます。
git add .
git commit -m "Add Procfile and runtime.txt"
git push origin main
## 4. Render で Web Service を作成する
ここからは Render の画面操作です。
「ウェブサービス」という項目の「新しいウェブサービス」というボタンをクリックします。

### 4-1. GitHub リポジトリを選択
ToDo アプリのリポジトリを選びます。
### 4-2. 設定項目を入力
| 項目 | 設定内容 |
|---|---|
| Name | 任意(例:todo-app) |
| Region | Singapore |
| Branch | main |
| Runtime | Python |
| Build Command | pip install -r requirements.txt |
| Start Command | gunicorn app:app |
| Instance Type | Free |

### 4-3. Deploy をクリック
Render がビルド → 公開URL発行まで自動で行います。
## 5. デプロイ時に遭遇したエラー
❌ sqlite3.OperationalError: no such table: task
実際にデプロイした際、以下のエラーが発生しました。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: task
これは Render 上の SQLite にテーブルが存在しないことが原因です。
ローカルでは tasks.db が作られていても、
Render の環境は まっさらな新規環境なので、
テーブルが存在しない状態でアプリが起動してしまいます。
## 6. 解決方法:db.create_all() をアプリ初期化時に実行する
Flask アプリの初期化直後に以下を追加します。
app = Flask(__name__)
db = SQLAlchemy(app)
# Render でも確実に実行される位置
with app.app_context():
db.create_all()
✔ なぜこれで解決するのか?
- Gunicorn がアプリを読み込む
- Flask アプリが初期化される
- その直後に
db.create_all()が実行される - テーブルが作成される
Render でもローカルでも同じ動作になります。
## 7. 再デプロイで正常動作
修正後に GitHub に push → Render で再デプロイすると、
無事にアプリが起動し、タスク追加・削除ができるようになりました。

## 8. Render 無料プランの注意点
- 一定時間アクセスがないとスリープ
- 再起動時に初期化コードが走る
- キャッシュが残る場合は翌日の再デプロイで直ることもある
今回のケースでも、翌日の再デプロイで正常動作しました。
## 9. まとめ
この記事では、Flask アプリを Render にデプロイする手順と、
実際に遭遇したエラーの解決方法を紹介しました。
✔ 必要なファイル
- requirements.txt
- Procfile
- runtime.txt
✔ よくあるエラー
no such table: task→db.create_all()を初期化時に実行
✔ Render の無料プランの特徴
- スリープ → 再起動で初期化コードが走る
- GitHub 連携で自動デプロイ可能
Render は個人開発に最適で、
Flask アプリを簡単に公開できる素晴らしいサービスです。
## 次回予告
次の記事では、
GitHub Actions を使った CI(自動テスト・Lint)構築編
に進みます。

