Flask

How to Deploy Flask App on Heroku: Step-by-Step Guide

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

Herokuアカウント作成とCLI導入

Herokuへのデプロイは、まずアカウント作成から始まります。公式サイトで無料登録後、メール確認を完了してください。その後、Heroku CLI(コマンドラインインターフェース)のインストールが必要です

なぜCLIが必要なのか?

CLIはローカル環境からHerokuに直接接続し、アプリケーションをデプロイしたり、ログを確認したりするためのツールです。特に無料プランでも利用可能で、手軽さが特徴です。

インストール手順(OSごと)

以下は主要なOSでのインストール手順です。

Windowsの場合

  1. Heroku CLI公式サイトからWindows用バージョンをダウンロード
  2. .exeファイルをダブルクリックしてインストール
  3. コマンドプロンプトで heroku --version を実行して確認

macOSの場合

  1. Heroku CLI公式サイトからmacOS用バージョンをダウンロード
  2. .pkgファイルをダブルクリックし、インストーラーを実行
  3. Terminalで heroku --version を実行して確認

Linux(Ubuntuなど)の場合

  1. Heroku CLI公式サイトからLinux用バージョンをダウンロード
  2. ダウンロードした.tar.gzファイルを解凍し、bin/フォルダにパスを通す
  3. Terminalで heroku --version を実行して確認

注意:無料プランでは、1日あたり5時間のDyno使用時間が制限されます。本格的な運用には有料プラン検討が必須です。


Flaskアプリ構成の基本設定

FlaskアプリをHerokuで動作させるには、特定のファイル構成とディレクトリ構造が必要です。以下は最小限の準備手順です。

必要なファイル・フォルダ一覧

項目 内容 補足
app.py メインのFlaskアプリ 例: from flask import Flaskで起動
Procfile Herokuが実行するコマンド 例: web: python app.py
requirements.txt インストールが必要なライブラリ pip freeze > requirements.txtで生成

ポイント:Herokuはapp.pyをデフォルトで実行するため、ファイル名やディレクトリ構造の設定ミスがよくあります。


Procfile作成手順

Procfileは、Herokuに「このアプリケーションをどうやって実行するか」を伝えるための設定ファイルです。

基本的な書き方

Procfileは以下のように記述します。

エラー回避策:コマンドが間違っていると、Error R10 (Boot timeout)などの起動失敗が発生します。必ずアプリケーションの実行方法を確認してください。また、複数プロセスを記述する場合(例: worker: python worker.py)は用途に応じて分離しましょう。


runtime.txt作成手順

runtime.txtは使用するPythonバージョンを指定します。

重要性と書き方

Herokuではruntime.txtの指定がない場合、最新版が自動で選択されます。しかし、パッケージとの互換性を保つために明示的に指定することが推奨されます。

注意:例としてpython-3.9.7python-3.10.6が挙げられますが、最新のPythonバージョンはHeroku公式リファレンスで確認してください。また、requirements.txtに記載されたパッケージと合わせて選択することが重要です(例: Flask 2.0.xがPython 3.9以上を必要とする場合)。


Gitによるリモートリポジトリ連携

Herokuへのデプロイは、Git経由でコードを送信します。以下の手順でローカル環境とHerokuのリポジトリを連携させましょう。

必要な操作ステップ

  1. ローカルリポジトリ初期化: git init
  2. Herokuリモートアカウント登録: heroku git:remote -a [アプリ名]
  3. コミット: git add . && git commit -m "初期コミット"
  4. プッシュ: git push heroku main

トラブルシューティング:プッシュ中にエラーが出る場合、heroku logs --tailでリアルタイムログを確認し、原因を探してください。また、ローカルの変更が反映されていない場合、git statusで差分を確認しましょう。


デプロイ後のアクセス確認方法

アプリケーションが正常にデプロイされたかは、以下の手順で確認します。

アクセスURLの取得

  1. heroku openコマンドを実行すると、ブラウザで自動開く
  2. Heroku Dashboardから「Apps」ページでURLも確認可能

エラー時の基本対処法

エラーコード 対応方法
503 Service Unavailable Dynoが起動していない場合、heroku ps:restartで再起動
Error R10 Procfileのコマンドが間違っている可能性あり

チェックポイントheroku logs --tailで実時間のログを確認し、エラー内容を分析しましょう。また、アプリケーションのリソース使用量(メモリ/時間)をheroku psで確認してください。


依存ライブラリ管理(requirements.txt)

Herokuではrequirements.txtに記載されたパッケージを自動インストールしますが、以下のような注意点があります。

生成手順とバージョン指定の重要性

  1. ローカル環境でpip freeze > requirements.txt実行
  2. 必要なライブラリのみ絞り込む(例: flask==2.0.1, gunicorn>=20.0.4

注意:バージョン指定がないと、HerokuのPythonバージョンやパッケージとの不一致が生じる可能性があります。例えば、Flask 2.0.xはPython 3.8以上が必要な場合があり、requirements.txtflask==2.0.1を明記することで互換性を保つことができます。


無料プランの制限事項と回避策

Heroku無料プランには以下のような制限があります。運用前に確認しましょう。

制限内容と対応策

項目 内容 対応策
Dyno時間 1日5時間まで 有料プランへの移行を検討
メモリ 512MB上限 複数のアプリを分割する
DB 無料のPostgreSQL不可 Heroku Postgres add-onを導入

判断基準:無料プランでは小規模なテスト用途に限るが、本格運用には有料プラン検討が必須です。


まとめと補足情報

FlaskアプリをHerokuにデプロイする際の重要な手順とポイントを以下にまとめます:

必須チェックリスト

  • Herokuアカウント作成とCLI導入は初期準備として必須
  • Procfile・runtime.txtの作成がスムーズな起動を実現
  • Git経由でのリモートリポジトリ連携でデプロイを効率化
  • 無料プランの制限に注意し、運用用途に応じた対策を講じる

表: Heroku無料プランの主な制限と回避策

制限項目 内容 対応策
Dyno時間 1日5時間まで 軽量タスクに限定(例: cronジョブ)
メモリ 512MB上限 アプリを複数分割して運用
DB 無料のPostgreSQL不可 Heroku Postgres add-on導入またはローカルDB使用

追加情報: デプロイ後のログ確認はheroku logs --tail、Dyno状態確認はheroku psで可能です。技術的詳細についてはHeroku公式ドキュメントを参考にしてください。


頻出エラーの補足説明

Error R10 (Boot timeout)

  • 原因: Procfileに記載されたコマンドがアプリケーション起動に失敗している。
  • 対応策: web: python app.pyを実行してローカルで確認し、Herokuの環境と一致させる。

503 Service Unavailable

  • 原因: Dyno停止またはリソース不足(無料プランの場合)。
  • 対応策: heroku ps:restartで再起動し、負荷が少ない時間帯にアクセスする。

注意: Herokuの動作環境は常に最新情報に従って更新されるため、技術的記述については公式ドキュメントを主な参照源とすることを推奨します。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Flask