📝【Flask × SQLite】むンフラ゚ンゞニアがれロから䜜る ToDo アプリ③

IT、仕事

~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
RegionSingapore
Branchmain
RuntimePython
Build Commandpip install -r requirements.txt
Start Commandgunicorn app:app
Instance TypeFree

### 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構築線
に進みたす。

タむトルずURLをコピヌしたした