15
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Python】Renderにデプロイする手順【初心者向け】

15
Last updated at Posted at 2025-12-05

0. はじめに

watnowの秋プロでPythonを使ったプロダクトを開発をしていて初めてデプロイを行うことになりちょうど勉強していた時に、アドベントカレンダーを書くことになったので今回はその内容を軽くまとめていきます。
今回はいま実際に開発中のプロダクトで使っているFastapiやSupabaseでのやり方がメインになります。(ほかのフレームワークやデータベースにも軽く触れてます)
これからデプロイする人の参考になればと思います。

1. Render デプロイの手順

デプロイ完了までの大まかな流れを説明します。

1.  GitHub と連携
    Render のダッシュボードから New + ボタンを押し、Web Service を選択して対象の GitHub リポジトリと連携します。

2.  言語・プラン選択
言語に Python 3 を選択し、Freeプラン(無料枠)を選びます。

3.  Start Command の入力
    サーバーを起動するためのコマンドを入力します。(※ 書き方は第3章で解説します)

4.  Environment Variables の設定
    DBの接続URLなどの環境変数を設定します。(※ 必要な変数は第4章で解説します)


2. requirements.txtの準備

Renderは最初の設定でPythonと指定しますが、中身は空っぽでライブラリが入っていません。あなたのパソコン(ローカル)では pip install したライブラリが入っていますがRenderにはその履歴がありません。そのときに必要なライブラリを伝えるのが requirements.txt です。

1 最低限の構成(FastAPI + Supabase)

今回はFastAPI + Supabaseでの最低限の構成とその役割を説明します。

fastapi
uvicorn[standard]
sqlalchemy
psycopg2-binary
python-dotenv

これらのそれぞれの技術的な役割は次の通りです

  • fastapi
        Webアプリケーションフレームワーク本体です。依存する pydantic なども自動で入ります。

  • uvicorn[standard]
        ASGIサーバーです。FastAPI を動かすためのエンジン(ASGIサーバー)です。[standard] を付けることで本番用の高速化ライブラリが含まれます。

  • sqlalchemy
        Python でデータベースを操作するための便利な道具(ORM)です。SQL を直接書かずに済みます。

  • psycopg2-binary
       PostgreSQL に接続するためのドライバです。Render では、通常の psycopg2 だとエラーが出やすいため、ビルド済みの binary 版を指定してください。

  • python-dotenv
        ローカル開発で環境変数を読み込むために使います。

  

2-2. (参考) 他のフレームワークやDBを使う場合

もし上で説明した技術以外を使う場合は、以下を参考に構成を入れ替えると大丈夫です。
◆ フレームワークの比較

フレームワーク Start Command (Render設定) requirements.txt への追加 備考
FastAPI uvicorn main:app --host 0.0.0.0 --port $PORT uvicorn[standard] 今回の構成(ASGI準拠)
Flask gunicorn app:app gunicorn WSGI準拠のため
Django gunicorn project.wsgi gunicorn 大規模構成向け

◆ データベースの比較

データベース 必要なライブラリ (ドライバ)
Supabase (PostgreSQL) psycopg2-binary
Firebase (Firestore) firebase-admin
MongoDB (Atlas) motor
MySQL mysqlclient または pymysql

これで、ライブラリの準備ができました。次は起動のためのコマンドが必要です。

3. Start Commandとは

Render の設定画面に入力する Start Command は重要な設定です。サーバーを起動するための命令にあたります。

3-1. 正しいコマンドの意味

FastAPI の場合、以下のコマンドを入力します。

uvicorn main:app --host 0.0.0.0 --port $PORT

このコマンドには、以下の意味があります。

  • uvicorn main:app: 「main.py というファイルの中にある app という変数(FastAPIの本体)を動かせ」という指示です。
    • 注意: src フォルダに入れている場合は src.main:app になります。
  • --host 0.0.0.0 ローカル開発で使う 127.0.0.1 は自分専用ですが、0.0.0.0 にすることで「外部(インターネット)からのアクセス」を受け付けるようになります。
  • --port $PORT: Render は起動するたびに「今回は10000番ポートを使ってね」と場所を指定してきます。その番号が環境変数 $PORT に入っています。8000 などと固定するとエラーになるため、必ず変数を使います。

4. Environment Variables(環境変数)の管理

DBの接続URLやAPIキーなどの機密情報を GitHub に上げてしまうと、世界中にパスワードを公開することになります。これを防ぐために、コードとは別の場所で秘密情報を管理する仕組みが「環境変数」です。

4-1. 仕組みの理解

  • ローカル開発: .env ファイルを作成し、python-dotenv ライブラリで環境変数としてロードします。
  • Render 本番: `Render のコンテナ環境変数として値を登録します。

4-2. Render での設定手順と例

Render ダッシュボードの [Environment] タブで設定します。

  1. サイドバーの [Environment] をクリック。
  2. [Add Environment Variable] をクリック。
  3. Key と Value を入力して保存します。

設定例:Supabase (PostgreSQL)

  • Key: DATABASE_URL
  • Value: Supabase のダッシュボード (Connect → ORM → URI) からコピーした接続文字列

最後にエラーの対処法を押さえます。

5. よくあるエラーと対処法

デプロイに失敗した時は、Render ダッシュボードの [Logs] を確認してください。初心者が遭遇しやすいエラーの解決策は以下の通りです。

エラーログ例 考えられる原因 解決策
ModuleNotFoundError ライブラリ不足 requirements.txt に対象ライブラリがあるか確認し、Push し直す。
Health check failed ポート設定ミス Start Command が --port $PORT になっているか確認する。
Error: pg_config ... ビルド環境不足 requirements.txtpsycopg2psycopg2-binary に書き換える。
ArgumentError: ... None 環境変数未設定 Render の Environment に DATABASE_URL が設定されているか確認する。

6. 最後に

Render へのデプロイは、以下の3つの要素が鍵となります。

  1. requirements.txt: 必要なライブラリを入れる
  2. Start Command: 正しい起動命令とポート設定をする
  3. Environment Variables: 秘密情報はダッシュボードで管理する

最初はエラーが出るかもしれませんが、ログを読んで一つずつ解消していけば必ず動きます。
今回の記事が、私と同じように初めてデプロイに挑戦する方の助けになれば嬉しいです。最後まで読んでいただき、ありがとうございました!!

15
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?