Deep-dive on the Next Gen Platform. Join the Webinar!

Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Troubleshooting Node.js Apps
      • Node.js Behavior in Heroku
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • 言語サポート
  • Python
  • Heroku スターターガイド (Python)

Heroku スターターガイド (Python)

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2024年05月16日(木)

Table of Contents

  • ​はじめに
  • ​設定する
  • ​アプリを複製する
  • ​Procfile を定義する
  • ​アプリを作成してデプロイする
  • ​ログを表示する
  • ​アプリをスケールする
  • ​アプリの依存関係をローカルでインストールする
  • ​アプリをローカルで実行する
  • ​ローカルの変更をプッシュする
  • ​ログ記録アドオンをプロビジョニングする
  • ​コンソールを起動する
  • ​環境設定を定義する
  • ​データベースをプロビジョニングして使用する
  • 次のステップ
  • アプリとアドオンを削除する

​はじめに

このチュートリアルを完了して、サンプル Python Django アプリを Heroku にデプロイします。

このチュートリアルでは、以下が用意されていることを前提としています。

  • 確認済みの Heroku アカウント
  • ローカルにインストールされた Python 3.12。インストールについては、​OS X​、​Windows​、​Linux​ のガイドを参照してください。
  • Eco dyno プラン​のサブスクリプション (推奨)

dyno とデータベースを使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。低料金プラン​を使用してこのチュートリアルを完了することをお勧めします。資格のある学生の皆様は、新しい Heroku for GitHub Students プログラム​を通じてプラットフォームクレジットを申請できます。

​設定する

Heroku CLI には、一般によく使われている Git​ というバージョン管理システムが必要です。Git がインストールされていない場合は、先に進む前に次の手順を完了してください。

  • ​Git のインストール
  • ​Git の初期設定

Heroku Command Line Interface​ (CLI) をインストールします。CLI は、アプリケーションの管理やスケール、アドオンのプロビジョニング、ログの表示、アプリケーションのローカル実行に使用できます。

ご使用のプラットフォーム用のインストーラをダウンロードし、実行してください。

apple ロゴ​macOS

​$ ​brew tap heroku/brew && brew install heroku

windows ロゴ​Windows

​ご使用の Windows に合ったインストーラをダウンロードします。

​64 ビット用インストーラ

​32 ビット用インストーラ

インストール後、コマンドシェルで heroku​ コマンドを使用できます。

Heroku CLI にログインするには、heroku login​ コマンドを使用します。

$ heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/***
Logging in... done
Logged in as me@example.com

このコマンドにより、Web ブラウザで Heroku ログインページが開きます。ブラウザですでに Heroku にログインしている場合は、ページに表示されているLog in​ (ログイン) ボタンをクリックします。

この認証は、heroku​ と git​ コマンドが正常に動作するために必要な操作です。

Heroku CLI のインストールや使用に問題がある場合は、アドバイスとトラブルシューティングステップについて、Heroku CLI​ のメイン記事を参照してください。

外部の HTTP/HTTPS サービスへの接続にプロキシを使用するファイアウォールを利用している場合は、heroku​ コマンドを実行する前に、ローカルの開発環境で HTTP_PROXY​ または HTTPS_PROXY​ 環境変数を設定​してください。

​アプリを複製する

Heroku をはじめて使う場合は、 Heroku が提供するサンプルアプリケーションを使ってこのチュートリアルを行うことをお勧めします。

デプロイする既存のアプリケーションを用意してある場合は、 代わりに​この記事​に従います。

コードのローカルバージョンを得るために、サンプルアプリケーションを複製します。以下のコマンドをローカルのコマンドシェルまたはターミナルで実行します。

$ git clone https://github.com/heroku/python-getting-started.git
$ cd python-getting-started

これで、シンプルなアプリケーションを格納した、正常な Git リポジトリを準備できました。これには、使用する Python バージョンを指定する runtime.txt​ と、Python の依存関係マネージャー Pip によって使用される requirements.txt​ が含まれています。

​Procfile を定義する

Procfile​ は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、アプリの起動時に実行するコマンドを明示的に宣言します。

サンプルアプリの Procfile​ は、次のようになっています。

web: gunicorn gettingstarted.wsgi

この Procfile では、単一のプロセスタイプの web​ と、その実行に必要なコマンドを宣言しています。 ここでは、web​ という名前が重要です。 これは、このプロセスタイプを Heroku の HTTP ルーティング​スタックにアタッチし、デプロイ後に Web トラフィックを受信することを宣言しています。 ここで使われているコマンドは、Gunicorn (Web サーバー) を実行し、設定ファイルを渡しています。

Procfile には追加のプロセスタイプを含めることができます。 たとえば、キューからアイテムを取り出して処理するバックグラウンドワーカープロセス​を宣言できます。

Microsoft Windows

サンプルアプリには、Microsoft Windows でローカル開発を行うための追加 Procfile​ があり、ファイル Procfile.windows​ 内に配置されています。 チュートリアルの後半のステップでは、代わりにこの Procfile を使用して、Windows と互換性のある別の Web サーバーを起動します。

web: python manage.py runserver %PORT%

​アプリを作成してデプロイする

dyno とデータベースを使用してこのチュートリアルを完了した場合、使用量のカウントに入ります。コストを抑制するために、完了したらすぐにアプリを削除​し、データベースも削除​してください。

 

Eco にサブスクライブしている場合、アプリではデフォルトで Eco dyno が使用されます。それ以外の場合は、デフォルトで Basic dyno が使用されます。Eco dyno プランは、アカウントのすべての Eco dyno 間で共有され、多数の小さなアプリを Heroku にデプロイする場合にお勧めします。詳細は、こちら​を参照してください。資格のある学生の皆様は、Heroku for GitHub Students プログラム​を通じてプラットフォームクレジットを申請できます。

Heroku でソースコードを受け取る準備をするには、アプリを作成します。

$ heroku create
Creating app... done, ⬢ serene-caverns-82714
https://serene-caverns-82714.herokuapp.com/ | https://git.heroku.com/serene-caverns-82714.git

アプリを作成すると、heroku​ という名前の Git リモートリポジトリも作成され、ローカルの Git リポジトリと関連付けられます。Git リモートは、他のサーバー上で稼働するリポジトリのバージョンです。アプリに関連付けられた、Heroku でホストされる特別なリモートにコードをプッシュすることにより、アプリをデプロイします。

Heroku によってランダムなアプリ名 (このケースでは serene-caverns-82714​) が生成されます。独自のアプリ名を指定​できます。

コードをデプロイします。このコマンドは、サンプルリポジトリの main​ ブランチを heroku​ リモートにプッシュし、次に Heroku にデプロイします。

$ git push heroku main
Enumerating objects: 673, done.
Counting objects: 100% (673/673), done.
Delta compression using up to 10 threads
Compressing objects: 100% (315/315), done.
Writing objects: 100% (673/673), 141.61 KiB | 141.61 MiB/s, done.
Total 673 (delta 305), reused 673 (delta 305), pack-reused 0
remote: Resolving deltas: 100% (305/305), done.
remote: Updated 28 paths from 9c4e1eb
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-22 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Python app detected
remote: -----> Using Python version specified in runtime.txt
remote: -----> Installing python-3.12.3
remote: -----> Installing pip 24.0, setuptools 69.2.0 and wheel 0.43.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote:        Collecting django<5.1,>=5.0 (from -r requirements.txt (line 1))
remote:          Downloading Django-5.0.4-py3-none-any.whl.metadata (4.1 kB)
remote:        Collecting gunicorn<23,>=22 (from -r requirements.txt (line 2))
remote:          Downloading gunicorn-22.0.0-py3-none-any.whl.metadata (4.1 kB)
remote:        Collecting dj-database-url<3,>=2 (from -r requirements.txt (line 3))
remote:          Downloading dj_database_url-2.1.0-py3-none-any.whl.metadata (11 kB)
remote:        Collecting whitenoise<7,>=6 (from whitenoise[brotli]<7,>=6->-r requirements.txt (line 4))
remote:          Downloading whitenoise-6.6.0-py3-none-any.whl.metadata (3.7 kB)
remote:        Collecting asgiref<4,>=3.7.0 (from django<5.1,>=5.0->-r requirements.txt (line 1))
remote:          Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)
remote:        Collecting sqlparse>=0.3.1 (from django<5.1,>=5.0->-r requirements.txt (line 1))
remote:          Downloading sqlparse-0.4.4-py3-none-any.whl.metadata (4.0 kB)
remote:        Collecting packaging (from gunicorn<23,>=22->-r requirements.txt (line 2))
remote:          Downloading packaging-24.0-py3-none-any.whl.metadata (3.2 kB)
remote:        Collecting typing-extensions>=3.10.0.0 (from dj-database-url<3,>=2->-r requirements.txt (line 3))
remote:          Downloading typing_extensions-4.11.0-py3-none-any.whl.metadata (3.0 kB)
remote:        Collecting Brotli (from whitenoise[brotli]<7,>=6->-r requirements.txt (line 4))
remote:          Downloading Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (5.5 kB)
remote:        Downloading Django-5.0.4-py3-none-any.whl (8.2 MB)
remote:        Downloading gunicorn-22.0.0-py3-none-any.whl (80 kB)
remote:        Downloading dj_database_url-2.1.0-py3-none-any.whl (7.7 kB)
remote:        Downloading whitenoise-6.6.0-py3-none-any.whl (19 kB)
remote:        Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)
remote:        Downloading sqlparse-0.4.4-py3-none-any.whl (41 kB)
remote:        Downloading typing_extensions-4.11.0-py3-none-any.whl (34 kB)
remote:        Downloading Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB)
remote:        Downloading packaging-24.0-py3-none-any.whl (53 kB)
remote:        Installing collected packages: Brotli, whitenoise, typing-extensions, sqlparse, packaging, asgiref, gunicorn, django, dj-database-url
remote:        Successfully installed Brotli-1.1.0 asgiref-3.8.1 dj-database-url-2.1.0 django-5.0.4 gunicorn-22.0.0 packaging-24.0 sqlparse-0.4.4 typing-extensions-4.11.0 whitenoise-6.6.0
remote: -----> $ python manage.py collectstatic --noinput
remote:        WARNING:root:No DATABASE_URL environment variable set, and so no databases setup
remote:        1 static file copied to '/tmp/build_74ee2e7d/staticfiles', 1 post-processed.
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 33M
remote: -----> Launching...
remote:        Released v3
remote:        https://serene-caverns-82714.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/serene-caverns-82714.git
 * [new branch]      main -> main

アプリケーションがデプロイされました。アプリのインスタンスが 1 つ以上実行されていることを確認します。

$ heroku ps:scale web=1

ps:scale​ の実行時にエラー Couldn't find that process type (web)​ が表示された場合は、アプリがまだデプロイ中であることを意味します。数分待ってから、再試行してください。

デプロイの出力に示されている URL でアプリにアクセスします。 次のショートカットを使って、Web サイトを簡単に開くこともできます。

$ heroku open

​ログを表示する

Heroku では、すべてのアプリと Heroku のコンポーネントの出力ストリームから集約した時系列イベントのストリームとして、ログが扱われます。Heroku は、すべてのイベントに単一のストリームを提供します。

実行中のアプリに関する情報を表示するには、ログコマンド​の 1 つである、heroku logs --tail​ を使います。

$ heroku logs --tail
2023-12-07T16:24:23.439479+00:00 heroku[web.1]: Starting process with command `gunicorn gettingstarted.wsgi`
2023-12-07T16:24:24.079246+00:00 app[web.1]: [2023-12-07 16:24:24 +0000] [2] [INFO] Starting gunicorn 22.0.0
2023-12-07T16:24:24.079485+00:00 app[web.1]: [2023-12-07 16:24:24 +0000] [2] [INFO] Listening at: http://0.0.0.0:14495 (2)
2023-12-07T16:24:24.079518+00:00 app[web.1]: [2023-12-07 16:24:24 +0000] [2] [INFO] Using worker: sync
2023-12-07T16:24:24.081369+00:00 app[web.1]: [2023-12-07 16:24:24 +0000] [7] [INFO] Booting worker with pid: 7
2023-12-07T16:24:24.090070+00:00 app[web.1]: [2023-12-07 16:24:24 +0000] [8] [INFO] Booting worker with pid: 8
2023-12-07T16:24:24.191717+00:00 app[web.1]: WARNING:root:No DATABASE_URL environment variable set, and so no databases setup
2023-12-07T16:24:24.198722+00:00 app[web.1]: WARNING:root:No DATABASE_URL environment variable set, and so no databases setup
2023-12-07T16:24:24.575600+00:00 heroku[web.1]: State changed from starting to up
2023-12-07T16:25:39.298227+00:00 heroku[router]: at=info method=GET path="/" host=serene-caverns-82714.herokuapp.com request_id=e6d0c869-28dd-4ba3-820e-6fc137b4a32a fwd="123.45.67.89" dyno=web.1 connect=0ms service=8ms status=200 bytes=7732 protocol=https

さらに他の生成されたログメッセージを表示するには、まずブラウザでアプリケーションにアクセスします。

ログのストリーム出力を停止するには、Control+C​ を押します。

​アプリをスケールする

サンプルアプリをデプロイすると、1 つの Web dyno​ で自動的に実行されます。 dyno とは、Procfile​ で指定されているコマンドを実行する軽量のコンテナのようなものです。

実行されている dyno の数を確認するには、ps​ コマンドを使います。

$ heroku ps
Eco dyno hours quota remaining this month: 999h 50m (99%)
Eco dyno usage for this app: 0h 0m (0%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Eco): gunicorn gettingstarted.wsgi (1)
web.1: up 2023/12/07 16:24:24 +0000 (~ 3m ago)

Heroku でアプリケーションをスケールするとは、実行中の dyno の数を変更することを意味します。 Web dyno の数を 0 にスケールしてみます。

$ heroku ps:scale web=0
Scaling dynos... done, now running web at 0:Eco

ブラウザのタブで更新ボタンを押してアプリにアクセスするか、heroku open​ コマンドを使ってブラウザのタブで開きます。 リクエストに応答できる Web dyno がなくなったので、エラーメッセージが表示されます。

もう一度スケールしてみましょう。

$ heroku ps:scale web=1
Scaling dynos... done, now running web at 1:Eco

Eco​ にサブスクライブしている場合、アプリではデフォルトで Eco dyno が使用されます。それ以外の場合は、デフォルトで Basic dyno が使用されます。Eco dyno プランは、アカウントのすべての Eco dyno 間で共有され、多数の小さなアプリを Heroku にデプロイする場合にお勧めします。Eco dyno は 30 分間トラフィックを何も受信しないとスリープします。 このスリープ動作により、スリープ解除した最初のリクエストで数秒の遅延が発生します。Eco dyno は、月ごとに割り当てられるアカウント別の Eco dyno 時間​を消費します。割り当て時間が残っている限り、アプリは稼働し続けます。

dyno がスリープしないようにするには、「dyno タイプ​」の記事で紹介されている Basic 以上の dyno タイプにアップグレードします。少なくとも Standard dyno にアップグレードすることで、プロセスタイプあたり複数の dyno にスケールアップできます。

​アプリの依存関係をローカルでインストールする

Heroku では、主要なファイルを探すことでアプリを Python アプリとして認識します。Python アプリを認識する 1 つの方法は、ルートディレクトリに requirements.txt​ を格納することです。

デプロイしたデモ用アプリには、事前に次のような requirements.txt​ が用意されています。

django>=5.0,<5.1
gunicorn>=22,<23
dj-database-url>=2,<3
whitenoise[brotli]>=6,<7

requirements.txt​ ファイルにはアプリの依存関係がリストされています。Heroku がアプリをデプロイすると、プラットフォームはこのファイルを読み出し、pip install -r​ コマンドを使用して適切な Python の依存関係をインストールします。

依存関係をローカルでインストールするには、仮想環境 (venv​ とも呼ばれる) を作成します。この環境を使用すると、システム Python のインストールに影響を与えずに、パッケージをインストールできます。次のコマンドで、サンプルアプリのディレクトリ内に仮想環境を作成します。

$ python3 -m venv --upgrade-deps .venv

次に、仮想環境をアクティブにします。

Microsoft Windows システム​ をご使用の場合は、次のコマンドでアクティブにします。

.\.venv\Scripts\activate

macOS/Linux システム​をご使用の場合は、次のコマンドでアクティブにします。

source .venv/bin/activate

仮想環境の設定に関するヘルプについては、Python のドキュメント​を参照してください。

最後に、新しく作成した環境に依存関係をインストールします。

$ pip install -r requirements.txt

依存関係をインストールすると、それらの依存関係もインストールされます。インストールされる依存関係は、Pip の list​ 機能を使用して表示できます。

$ pip list
Package           Version
----------------- -------
asgiref           3.8.1
Brotli            1.1.0
dj-database-url   2.1.0
Django            5.0.4
gunicorn          22.0.0
packaging         24.0
pip               24.0
sqlparse          0.4.4
typing_extensions 4.11.0
whitenoise        6.6.0

依存関係がインストールされたら、アプリをローカルで実行できます。

​アプリをローカルで実行する

続行する前にアプリの依存関係をローカルで インストールしていることを確認します。

heroku local​ を使ってアプリケーションをローカルで起動します。このコマンドは、Heroku CLI の一部です。

Microsoft Windows システム​ をご使用の場合は、次のコマンドを実行します。

$ heroku local --port 5001 -f Procfile.windows

macOS/Linux システム​をご使用の場合は、次のコマンドを実行して、デフォルトの Procfile​ を使用します。

$ heroku local --port 5001

コマンドを実行するとローカル Web サーバーが起動します。

[OKAY] Loaded ENV .env File as KEY=VALUE Format
16:30:48 web.1   |  [2023-12-07 16:30:48 +0000] [47691] [INFO] Starting gunicorn 22.0.0
16:30:48 web.1   |  [2023-12-07 16:30:48 +0000] [47691] [INFO] Listening at: http://0.0.0.0:5001 (47691)
16:30:48 web.1   |  [2023-12-07 16:30:48 +0000] [47691] [INFO] Using worker: sync
16:30:48 web.1   |  [2023-12-07 16:30:48 +0000] [47692] [INFO] Booting worker with pid: 47692

Heroku と同じように、heroku local​ は Procfile​ を使用して実行するコマンドを認識します。

アプリがローカルで実行していることを確認するには、Web ブラウザで http://localhost:5001​ を開きます。

アプリのローカル実行を停止するには、CLI で Control + C​ を押して終了します。

​ローカルの変更をプッシュする

このステップでは、アプリケーションへのローカルでの変更を Heroku に反映させます。

requests​ パッケージを requirements.txt​ ファイルに追加します。

django>=5.0,<5.1
gunicorn>=22,<23
dj-database-url>=2,<3
whitenoise[brotli]>=6,<7
requests

pip を使用して requests​ パッケージを更新された requirements.txt​ ファイル経由でインストールします。

$ pip install -r requirements.txt

hello/views.py​ を変更して、requests​ モジュールと Django HttpResponse​ クラスをファイルの上部にインポートします。

import requests
from django.http import HttpResponse

次に、モジュールを使用するように、index​ メソッドを変更します。 現在の index​ メソッドを次のコードで置き換えてみます。

def index(request):
    r = requests.get('https://httpbin.org/status/418')
    print(r.text)
    return HttpResponse('<pre>' + r.text + '</pre>')

次にローカルで再びテストします。

Microsoft Windows システム​ をご使用の場合は、次のコマンドを実行します。

$ heroku local --port 5001 -f Procfile.windows

macOS/Linux システム​をご使用の場合は、次のコマンドを実行して、デフォルトの Procfile​ を使用します。

$ heroku local --port 5001

http://localhost:5001​ でアプリケーションにアクセスし、https://httpbin.org/status/418​ のフェッチの出力を確認します。

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

ブラウザにエラー Internal Server Error​ が表示され、ターミナルログ出力にエラー ModuleNotFoundError: No module named 'requests'​ が表示されている場合、requests​ パッケージが正常にインストールされたことを確認します。

次にデプロイします。 Heroku へのデプロイは、ほとんどの場合、このパターンで行います。 まず、変更したファイルをローカルの Git リポジトリに追加します。

$ git add .

次に、変更内容をリポジトリにコミットします。

$ git commit -m "Demo"

次に、以前と同じようにデプロイします。

$ git push heroku main

最後に、すべて正常に動作しているかどうかを確認します。

$ heroku open

​ログ記録アドオンをプロビジョニングする

アドオンは、アプリケーションですぐに使える追加サービスを提供するサードパーティのクラウドサービスです。永続性、ログ記録、モニタリングなど、さまざまなアドオンがあります。

Heroku では、デフォルトで 1500 行のアプリケーションログが記録されますが、完全なログストリームはサービスとして提供されています。複数のアドオンプロバイダーが、ログの永続化、検索、メールや SMS 通知などの機能を提供するログサービスを用意しています。

このステップでは、このようなログ関連アドオンの 1 つである、Papertrail​ をプロビジョニングします。

Papertrail ログ記録アドオンをプロビジョニングします。

$ heroku addons:create papertrail
Creating papertrail on ⬢ serene-caverns-82714... free
Welcome to Papertrail. Questions and ideas are welcome (technicalsupport@solarwinds.com). Happy logging!
Created papertrail-convex-88929 as PAPERTRAIL_API_TOKEN
Use heroku addons:docs papertrail to view documentation

アドオンがデプロイされ、アプリケーション用に設定されました。 アプリのアドオンは、次のコマンドで一覧表示できます。

$ heroku addons

このアドオンが動作していることを確認するため、アプリケーションの Heroku URL に数回アクセスします。アクセスするたびにログメッセージが生成され、Papertrail のアドオンに送られます。 Papertrail のコンソールにアクセスし、ログメッセージを確認します。

$ heroku addons:open papertrail

ブラウザで Papertrail の Web コンソールが開き、最新のログイベントが表示されます。このインターフェースでは、検索したり通知を設定したりできます。

コンソールのスクリーンショット

​コンソールを起動する

One-off dyno​ で、heroku run​ コマンドを使ってコマンド (通常はアプリの一部を構成するスクリプトやアプリケーション) を実行できます。アプリの環境で試行するためにローカルターミナルにアタッチされた REPL プロセスを起動することもできます。

$ heroku run python manage.py shell
Running python manage.py shell on ⬢ serene-caverns-82714... up, run.9594 (Eco)
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

Error connecting to process​ というエラーが表示された場合は、ファイアウォールを設定します​。

アプリとアプリのすべての依存関係の環境で Python シェルが実行されます。ここから、一部のアプリケーションファイルをインポートできます。 たとえば、次のコードを実行できます。

>>> import requests
>>> print(requests.get('https://httpbin.org/status/418').text)

    -=[ teapot ]=-

       _...._
     .'  _ _ `.
    | ."` ^ `". _,
    \_;`"---"`|//
      |       ;/
      \_     _/
        `"""`

Python シェルを終了するには、exit()​ コマンドを実行します。

別の例を試してみましょう。別の One-off dyno を作成し、bash​ コマンドを実行して、その dyno でシェルを開きます。シェルが開いたら、そこでコマンドを実行できます。それぞれの dyno には専用の一時的ファイル領域があり、アプリとその依存関係が入力されています。コマンドが完了したら (このケースでは bash​)、dyno が終了します。:

$ heroku run bash
Running bash on ⬢ serene-caverns-82714... up, run.3789 (Eco)
~ $ ls
app.json  gettingstarted  hello  manage.py  Procfile  Procfile.windows  README.md  requirements.txt  runtime.txt  staticfiles
~ $ exit
exit

必ず exit​ と入力してシェルを閉じ、dyno を終了してください。

​環境設定を定義する

Heroku では、暗号鍵や外部リソースのアドレスなどのデータを環境設定​に保存して、設定を外部に置くことができます。

環境設定は、ランタイムに環境変数としてアプリケーションに提供されます。

hello/views.py​ を編集します。ファイルの先頭に、os​ モジュールをインポートする行を追加します。

import os
from django.http import HttpResponse

index​ メソッドを編集し、環境変数 TIMES​ の値に応じてあるアクションを繰り返し実行するようにします。

def index(request):
    times = int(os.environ.get('TIMES', 3))
    return HttpResponse('Hello! ' * times)

heroku local​ は、ローカルディレクトリにある .env​ ファイルの内容に応じて、環境を自動的に設定します。 サンプルプロジェクトのトップレベルディレクトリにはすでに .env​ ファイルがあり、以下の行が含まれています。

TIMES=2

heroku local --port 5001​ でアプリを実行し、http://localhost:5001​ にアクセスすると、「Hello!」が 2 回表示されます。

Heroku で環境設定を設定するには、次のコマンドを実行します。

$ heroku config:set TIMES=2

heroku config​ を使用して、アプリの環境設定を表示します。

$ heroku config
=== serene-caverns-82714 Config Vars
PAPERTRAIL_API_TOKEN: <SECRET_TOKEN>
TIMES:                2

このアクションの変更を確認するには、変更したアプリケーションを Heroku にデプロイします。

​データベースをプロビジョニングして使用する

add-on marketplace​ には、Redis や MongoDB、Postgres、MySQL など、多数のデータストアが揃っています。

essential-0​ Postgres のサイズのコストは月額 5 ドルで、分単位で課金されます​。このチュートリアルの最後で、データベースを削除​して、コストを最小限に抑えるように求められます。

essential-0​ Heroku Postgres アドオンをプロビジョニングするには、addons:create​ コマンドを使用します。

$ heroku addons:create heroku-postgresql:essential-0
Creating heroku-postgresql:essential-0 on ⬢ serene-caverns-82714... ~$0.007/hour (max $5/month)
Database should be available soon
postgresql-aerodynamic-21282 is being created in the background. The app will restart when complete...
Use heroku addons:info postgresql-aerodynamic-21282 to check creation progress
Use heroku addons:docs heroku-postgresql to view documentation

CLI で addons​ コマンドを使うと、アプリにプロビジョニングされたデータベースの詳細について確認できます。

$ heroku addons
Add-on                                            Plan         Price     State
────────────────────────────────────────────────  ───────────  ────────  ───────
heroku-postgresql (postgresql-aerodynamic-21282)  essential-0  $5/month  created
 └─ as DATABASE
...

アプリの環境設定を一覧表示すると、アプリがデータベースに接続するときに使用する URL (DATABASE_URL​) が表示されます。

$ heroku config
=== serene-caverns-82714 Config Vars
DATABASE_URL: postgres://emhmpvrhtwgqhx:<PASSWORD>@ec2-52-205-45-222.compute-1.amazonaws.com:5432/daacqaueosis8n
...

Heroku には、さらに詳細を表示する pg​ コマンドもあります。

$ heroku pg
=== DATABASE_URL
Plan:                  Essential 0
Status:                Available
Connections:           0/20
PG Version:            15.5
Created:               2024-05-01 13:22 UTC
Data Size:             7.5 MB/1.00 GB (0.73%) (In compliance)
Tables:                0
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-aerodynamic-21282

この情報は、essential-0​ データベースが Postgres v15.5 を実行しており、テーブルがないことを示しています。

デプロイしたサンプルアプリにはすでにデータベース機能が備わっていますが、それを有効にするには、2 つの小さな変更を行う必要があります。

まず、requirements.txt​ ファイルの末尾にある 2 行の psycopg​ のコメントを解除します。

psycopg[c]; sys_platform == "linux"
psycopg[binary]; sys_platform != "linux"

これらの行により、ビルド時に、Postgres データベースアダプターパッケージがインストールされます。

次に、Procfile​ ファイルの末尾にある release​ プロセス行のコメントを解除します。

release: ./manage.py migrate --no-input

この release​ プロセスエントリによって、Heroku リリースフェーズ​機能が有効になり、それを使用して、アプリのデプロイ時に常に Django データベース移行が実行されます。

前と同じデプロイプロセスを使用して、変更したアプリケーションを Heroku にデプロイします。ビルド後に Django のデータベース移行が実行されることを確認できます。

remote: Running release command...
remote:
remote: Operations to perform:
remote:   Apply all migrations: auth, contenttypes, hello, sessions
remote: Running migrations:
remote:   Applying contenttypes.0001_initial... OK
remote:   Applying contenttypes.0002_remove_content_type_name... OK
remote:   Applying auth.0001_initial... OK
remote:   Applying auth.0002_alter_permission_name_max_length... OK
remote:   Applying auth.0003_alter_user_email_max_length... OK
remote:   Applying auth.0004_alter_user_username_opts... OK
remote:   Applying auth.0005_alter_user_last_login_null... OK
remote:   Applying auth.0006_require_contenttypes_0002... OK
remote:   Applying auth.0007_alter_validators_add_error_messages... OK
remote:   Applying auth.0008_alter_user_username_max_length... OK
remote:   Applying auth.0009_alter_user_last_name_max_length... OK
remote:   Applying auth.0010_alter_group_name_max_length... OK
remote:   Applying auth.0011_update_proxy_permissions... OK
remote:   Applying auth.0012_alter_user_first_name_max_length... OK
remote:   Applying hello.0001_initial... OK
remote:   Applying sessions.0001_initial... OK
remote: Waiting for release.... done.

ビルドが settings.DATABASES is improperly configured​ エラーで失敗した場合は、デプロイの前にデータベースアドオンをプロビジョニングしていることを確認します。

アプリの URL にアクセスし、/db​ を追加して、データベースデモンストレーションページにアクセスします。 たとえば、アプリが https://serene-caverns-82714.herokuapp.com/​ にデプロイされている場合は、https://serene-caverns-82714.herokuapp.com/db​ にアクセスします。

再度 /db​ ルートにアクセスすると、アクセスするたびにシンプルなページの更新が表示されます。

Page View Report

Dec 7, 2023, 4:57 p.m.
Dec 7, 2023, 4:58 p.m.

データベースにアクセスするためのコードは簡単です。これは Greetings​ というシンプルな Django モデルを使用しており、hello/models.py​ にあります。

アプリの /db​ ルートにアクセスするたびに hello/views.py​ ファイル内の次のメソッドが呼び出され、挨拶が作成されます。次に、既存のすべての挨拶がレンダリングされます。

def db(request):

    greeting = Greeting()
    greeting.save()

    greetings = Greeting.objects.all()

    return render(request, 'db.html', {'greetings': greetings})

Postgres がローカルでインストールされている​場合、heroku pg:psql​ コマンドを使ってリモートデータベースに接続し、すべての行を表示します。

$ heroku pg:psql
--> Connecting to postgresql-cubed-97628
...
Type "help" for help.

serene-caverns-82714::DATABASE=>

詳細は、「Heroku PostgreSQL​」を参照してください。

同様のテクニックを使用して、MongoDB または Redis アドオン​をインストールできます。

次のステップ

ここまで、アプリのデプロイ、アプリの設定変更、ログの表示、スケール、アドオンのアタッチを行う方法を説明しました。

次にお勧めするリソースを紹介します。

  • 「Heroku の仕組み​」では、アプリケーションの作成、設定、デプロイ、および実行時に必要な技術的な概念の概要を紹介しています。
  • 既存の Python または Django アプリを Heroku にデプロイするには、「Heroku での Python および Django アプリのデプロイ​」を参照してください。
  • Python アプリケーションの開発とデプロイの詳細については、Python カテゴリ​を参照してください。

コストを抑制するために、チュートリアルを完了したらすぐにサンプルアプリを削除​し、データベースも削除​してください。

アプリとアドオンを削除する

アカウントからアプリとデータベースを削除します。使用したリソースに対してのみ課金されます。

この操作により、アドオンとデータベースに保存されたすべてのデータが削除されます。

$ heroku addons:destroy heroku-postgresql
 ▸    WARNING: Destructive Action
 ▸    This command will affect the app serene-caverns-82714
 ▸    To proceed, type serene-caverns-82714 or re-run this command with
 ▸    --confirm serene-caverns-82714

>

この操作により、アプリケーションが完全に削除されます。

$ heroku apps:destroy
 ▸    WARNING: This will delete ⬢ serene-caverns-82714 including all add-ons.
 ▸    To proceed, type serene-caverns-82714 or re-run this command with
 ▸    --confirm serene-caverns-82714

>

以下のコマンドによって、アドオンとアプリが消去されたことを確認できます。

$ heroku addons --all
$ heroku apps --all

関連カテゴリー

  • Python

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices