Contents
FastAPIアプリをHerokuでデプロイする最新手順とコスト対策
FastAPIのHerokuへのデプロイに関する情報に加え、2025年以降の料金プランやスリープ状態回避策、コスト最適化の具体的な手法を解説します。本記事ではHeroku公式サイト(https://www.heroku.com/)を参照し、小規模Webアプリケーション運用に適した手順と最新情報を体系的に紹介します。
Herokuアカウント作成とCLI設定
Herokuの無料プランや有料プランを利用するためには、まずアカウント登録とCLI設定が必要です。特にコスト最適化を目指す場合は、無料プランの利用に注意する必要があります。
Heroku公式サイトでの登録手順
Heroku公式サイト(https://www.heroku.com/)にアクセスし、メールアドレスとパスワードを入力して新規登録を行います。学生や個人開発者向けの無料プランは「Heroku Free」として提供されています。公式リソースによると、2025年以降も無料プランは引き続き利用可能とのことです(Heroku Pricing)。
Heroku CLIのインストールと認証
- Heroku CLI公式サイトから適切なOS用CLIをダウンロード・インストールします。
- ターミナルで
heroku loginコマンドを実行し、ブラウザ経由でアカウント認証を行います。
Heroku CLIはローカル環境でのデプロイ作業を効率化するための必須ツールです。定期的なバージョン更新も忘れずに。
FastAPIアプリケーション構築の基本構成
FastAPIアプリの最小限な構成例を示し、後続のデプロイに必要なファイル構成を明確化します。
プロジェクトディレクトリの準備
以下のようなディレクトリ構造を作成します。main.pyはアプリケーション本体、requirements.txtは依存関係を記述するファイルです。
|
1 2 3 4 5 |
my_fastapi_app/ ├── main.py ├── requirements.txt └── Procfile |
main.pyの基本的なコード構造
FastAPIアプリケーションでは以下のテンプレートを使用します。エンドポイントの定義やルーティングはこのファイル内で行います。
|
1 2 3 4 5 6 7 8 |
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"message": "Hello, Heroku!"} |
依存関係管理のベストプラクティス
FastAPIアプリで使用するライブラリをrequirements.txtに記載します。最新バージョンのFastAPIを使用する場合は以下のように記述します。
|
1 2 3 |
fastapi>=0.68.0 uvicorn>=0.15.0 |
Heroku用設定ファイルの作成
Herokuにデプロイする際には、アプリケーション固有の依存関係定義と起動コマンドを記載した設定ファイルが必要です。
requirements.txtの生成方法
ローカルでpip freeze > requirements.txtを実行すると、現在インストールされているすべてのパッケージが自動的に記録されます。このファイルはHerokuの依存関係管理に必須です。
Procfileの記述規則と例
Procfileにはアプリケーションを起動するコマンドを記載します。FastAPIアプリではUvicornを使用して起動させるのが一般的です。
|
1 2 |
web: uvicorn main:app --host 0.0.0.0 --port $PORT |
$PORTはHerokuが自動で割り当てるポート変数であり、この値を指定することでクラウド環境での正常な起動が保証されます。
Herokuへの登録と初期設定
ローカル環境からHerokuアプリケーションを登録する際のコマンドと注意点について説明します。
heroku createコマンドの実行手順
プロジェクトディレクトリ内でheroku createを実行すると、Heroku上で新たなアプリケーションが自動的に作成されます。このとき割り当てられるURLは、後述するデプロイ後の確認で使用されます。
リモートリポジトリとの連携方法
GitHubなどと連携させることで、コード変更を簡単なコマンドでデプロイできます。以下のように.gitディレクトリを初期化し、Herokuアプリケーションにプッシュします。
|
1 2 3 4 5 6 |
git init git add . git commit -m "Initial commit" git remote add heroku https://git.heroku.com/your-app-name.git git push heroku main |
リモートリポジトリとの連携は、複数人での開発やバージョン管理の面で非常に重要です。
コスト対策と料金プランの最適化
Herokuの低コストプランではスリープ状態などの制限がありますが、適切な設定で性能を保つことができます。2025年以降の料金プランについては、現時点での情報では変更がないため、以下に現在利用可能なプランとその比較を示します。
Heroku料金プラン一覧
|
1 2 3 4 5 6 7 |
| プラン名 | 月額費用 | 特徴 | |------------------|----------|--------------------------------------| | **Heroku Free** | 無料 | アイドル状態でスリープ可能 | | **Hobby Dev** | $7/月 | スリープ無効、1つのDyno | | **Standard 1X** | $25/月 | より多くのリソース、スケーリング可 | | **Performance M**| $99.99/月| 高性能なインスタンス、負荷対応 | |
Heroku公式サイト(https://www.heroku.com/pricing)で最新情報を確認してください。
スリープ状態の回避方法
Heroku Freeプランでは30分以上のアイドル時間が経過するとアプリケーションが停止します。これを回避するためには以下のような手段があります。
- 定期的なPing送信:
curl https://your-app.herokuapp.com/など、外部から周期的にアクセスさせることでスリープを防ぎます。 - Heroku Schedulerの利用:1時間ごとに実行されるタスクを設定し、アプリケーションに負荷を与えます。
動的スケーリングの設定手順
動的スケーリング機能を使用することで、トラフィックが増えると自動でリソースを追加できます。Heroku Dashboardから「Dyno Scaling」設定を行うことで簡単に導入可能です。
デプロイ後の確認とトラブルシューティング
デプロイ完了後は、アプリケーションの動作状態やエラーコードの見方を確認する必要があります。
アプリケーションアクセステスト
Herokuが割り当てたURLにアクセスして正常性を検証します。以下のようにターミナルからも簡単にテストできます。
|
1 2 |
curl https://your-app.herokuapp.com/ |
応答結果に
{"message": "Hello, Heroku!"}などの文字列が表示されれば、デプロイは成功です。
ログの取得方法とエラーコード対応
アプリケーションの動作状況やエラー内容を確認するには、以下のようにコマンドでログを取得します。
|
1 2 |
heroku logs --tail |
代表的なエラー例:
- Missing PORT environment variable:
$PORTが設定されていない場合に発生。Procfileの記述を確認してください。 - Application error:
requirements.txtに必要なパッケージが含まれていない可能性があります。
まとめ
本記事ではFastAPIアプリケーションのHerokuデプロイ手順と、料金プランやコスト対策について解説しました。主なポイントを以下に整理します。
- Herokuアカウント作成:公式サイトで無料プランを取得し、CLI設定を行う
- FastAPIアプリ構築:プロジェクトディレクトリと
main.pyを作成し、依存関係をrequirements.txtに記述する - Heroku用ファイルの作成:Procfileを正しく記載し、デプロイ準備をする
- コスト対策:スリープ状態回避や動的スケーリングで性能と費用を最適化する
- 確認とトラブルシュート:ログ取得やアクセステストで動作を検証し、エラーに対処する
Heroku公式サイト(https://www.heroku.com/)で最新料金やプラン情報を確認しながら、自分に合った運用方法を選択してください。