Skip Navigation
Show nav
Heroku Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
  • ドキュメント
  • 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

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

​はじめに

このチュートリアルでは、Python アプリ (シンプルな Django アプリ) をデプロイする方法を簡単に紹介します。

少し時間を取って仕組みを学び、Heroku を最大限に活用できるようにしましょう。

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

  • 無料の ​Heroku アカウント​。
  • ローカルにインストールされた Python 3.10。インストールについては、​OS X​、​Windows​、​Linux​ のガイドを参照してください。
  • ローカルに​インストールされた Postgres​ (アプリをローカルで実行する場合)。

​設定する

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

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

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

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

apple ロゴ​macOS

​インストーラをダウンロード

​Homebrew からも入手できます。

$ brew install heroku/brew/heroku
windows ロゴ​Windows

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

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

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

ubuntu ロゴ​Ubuntu 16 以降

​ターミナルで以下を実行します。

$ sudo snap install heroku --classic

​その他の Linux OS では Snap も利用できます​。

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

​Windows では、コマンドプロンプト (cmd.exe) または Powershell を起動して、コマンドシェルを開きます。

heroku login​ コマンドを使って Heroku CLI にログインします。

$ heroku login
heroku: Press any key to open up the browser to login or q to exit
 ›   Warning: If browser does not open, visit
 ›   https://cli-auth.heroku.com/auth/browser/***
heroku: Waiting for login...
Logging in... done
Logged in as me@example.com

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

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

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

​アプリを準備する

このステップでは、デプロイできるシンプルなアプリケーションを準備します。

続ける前に、Git がインストールされていることを確認してください (設定する を参照)。

サンプルアプリケーションをクローンして、Heroku にデプロイするコードのローカルバージョンを作成するには、ローカルのコマンドシェルまたはターミナルで次のコマンドを実行します。

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

これで、シンプルなアプリケーション、使用する Python バージョンを指定する runtime.txt​、および Python の依存関係マネージャである Pip が使用する requirements.txt​ファイルを格納した、正常な Git リポジトリを準備できました。

​アプリをデプロイする

このステップでは、アプリを Heroku にデプロイします。

続ける前に、Git および Heroku CLI の両方がインストールされていることを確認してください (設定する を参照)。

Heroku でアプリを作成すると、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 リポジトリと関連付けられます。

Heroku によってランダムなアプリ名 (この場合は serene-caverns-82714​) が生成されます。パラメータを渡して独自のアプリ名を指定することもできます。

コードをデプロイします。

$ git push heroku main
Enumerating objects: 509, done.
Counting objects: 100% (509/509), done.
Delta compression using up to 12 threads
Compressing objects: 100% (238/238), done.
Writing objects: 100% (509/509), 94.80 KiB | 94.80 MiB/s, done.
Total 509 (delta 234), reused 509 (delta 234), pack-reused 0
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 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.10.3
remote: -----> Installing pip 21.3.1, setuptools 57.5.0 and wheel 0.37.0
remote: -----> Installing SQLite3
remote: -----> Installing requirements with pip
remote:        Collecting django
remote:          Downloading Django-4.0.1-py3-none-any.whl (8.0 MB)
remote:        Collecting gunicorn
remote:          Downloading gunicorn-20.1.0-py3-none-any.whl (79 kB)
remote:        Collecting django-heroku
remote:          Downloading django_heroku-0.3.1-py2.py3-none-any.whl (6.2 kB)
remote:        Collecting asgiref<4,>=3.4.1
remote:          Downloading asgiref-3.4.1-py3-none-any.whl (25 kB)
remote:        Collecting sqlparse>=0.2.2
remote:          Downloading sqlparse-0.4.2-py3-none-any.whl (42 kB)
remote:        Collecting psycopg2
remote:          Downloading psycopg2-2.9.3.tar.gz (380 kB)
remote:          Preparing metadata (setup.py): started
remote:          Preparing metadata (setup.py): finished with status 'done'
remote:        Collecting dj-database-url>=0.5.0
remote:          Downloading dj_database_url-0.5.0-py2.py3-none-any.whl (5.5 kB)
remote:        Collecting whitenoise
remote:          Downloading whitenoise-5.3.0-py2.py3-none-any.whl (19 kB)
remote:        Building wheels for collected packages: psycopg2
remote:          Building wheel for psycopg2 (setup.py): started
remote:          Building wheel for psycopg2 (setup.py): finished with status 'done'
remote:          Created wheel for psycopg2: filename=psycopg2-2.9.3-cp310-cp310-linux_x86_64.whl size=586593 sha256=25ea6b40570d00fb7329c9691e557245a1050857323893e93068f0f07ecef238
remote:          Stored in directory: /tmp/pip-ephem-wheel-cache-d5wzowyy/wheels/81/b6/3d/091aad3e8919ea76c84c2674b02ce3ab52de882e091c39249e
remote:        Successfully built psycopg2
remote:        Installing collected packages: sqlparse, asgiref, whitenoise, psycopg2, django, dj-database-url, gunicorn, django-heroku
remote:        Successfully installed asgiref-3.4.1 dj-database-url-0.5.0 django-4.0.1 django-heroku-0.3.1 gunicorn-20.1.0 psycopg2-2.9.3 sqlparse-0.4.2 whitenoise-5.3.0
remote: -----> $ python manage.py collectstatic --noinput
remote:        129 static files copied to '/tmp/build_a5ccf75d/staticfiles', 379 post-processed.
remote:
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 68.1M
remote: -----> Launching...
remote:        Released v5
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]      revert-to-requirements -> main

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

$ heroku ps:scale web=1

上記の ps:scale​ コマンドを実行中に「Couldn't find that process type (web)​」エラーが表示された場合、アプリケーションの最初のデプロイには通常よりも少し時間がかかっており、数分待った後にコマンドを繰り返す必要があることを示しています。

アプリ名で生成された URL にあるアプリを開きます。 次のショートカットを使うと、簡単に Web サイトを開くことができます。

$ heroku open

​ログを表示する

Heroku では、すべてのアプリと Heroku コンポーネントの出力ストリームを、時系列のイベントストリームに集約してログを作成するため、1 か所ですべてのイベントを確認できます。

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

$ heroku logs --tail
2022-01-19T16:49:40.323576+00:00 heroku[web.1]: Starting process with command `gunicorn gettingstarted.wsgi`
2022-01-19T16:49:41.952853+00:00 app[web.1]: [2022-01-19 16:49:41 +0000] [4] [INFO] Starting gunicorn 20.1.0
2022-01-19T16:49:41.953307+00:00 app[web.1]: [2022-01-19 16:49:41 +0000] [4] [INFO] Listening at: http://0.0.0.0:5021 (4)
2022-01-19T16:49:41.954552+00:00 app[web.1]: [2022-01-19 16:49:41 +0000] [4] [INFO] Using worker: sync
2022-01-19T16:49:41.962918+00:00 app[web.1]: [2022-01-19 16:49:41 +0000] [9] [INFO] Booting worker with pid: 9
2022-01-19T16:49:41.992997+00:00 app[web.1]: [2022-01-19 16:49:41 +0000] [10] [INFO] Booting worker with pid: 10
2022-01-19T16:49:42.380291+00:00 heroku[web.1]: State changed from starting to up
2022-01-19T16:49:44.000000+00:00 app[api]: Build succeeded
2022-01-19T16:56:43.488176+00:00 heroku[router]: at=info method=GET path="/" host=serene-caverns-82714.herokuapp.com request_id=df14c065-0d94-45b7-b21e-6e69a0ad93e2 fwd="123.45.67.89" dyno=web.1 connect=0ms service=31ms status=200 bytes=7719 protocol=https

ブラウザで再びアプリケーションを表示すると、別のログメッセージが生成されます。

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

​Procfile を定義する

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

先ほどデプロイしたサンプルアプリの Procfile​ は、次のようになっています。

web: gunicorn gettingstarted.wsgi

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

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

Microsoft Windows

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

web: python manage.py runserver 0.0.0.0:5000

​アプリをスケールする

現在、アプリは単一の Web dyno​ で実行されています。 dyno とは、Procfile​ で指定されているコマンドを実行する軽量のコンテナのようなものです。

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

$ heroku ps
Free dyno hours quota remaining this month: 999h 50m (99%)
Free 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 (Free): gunicorn gettingstarted.wsgi (1)
web.1: up 2022/01/19 16:49:42 +0000 (~ 3m ago)

デフォルトでは、アプリは Free dyno でデプロイされます。Free dyno は、アイドル状態 (トラフィックを何も受信しない状態) が 30 分続くとスリープします。​ スリープすると、スリープ解除するときの最初のリクエスト時に数秒の遅延が発生します。その後のリクエストは正常に処理されます。 Free dyno は、月ごとに割り当てられるアカウント別の Free dyno 時間​を消費します。割り当て時間が残っている限り、無料のアプリはすべて稼働し続けます。

dyno がスリープしないようにするには、「dyno タイプ​」の記事で紹介されている Hobby または Professional の dyno タイプにアップグレードできます。たとえば、アプリを Professional dyno に移行すると、Heroku に特定の数の dyno の実行を指示するコマンドを実行し、各 dyno で Web プロセスタイプを実行させて、アプリを簡単にスケールすることができます。

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

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

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

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

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

不正操作を防止するため、有料のアプリケーションを 2 つ以上の dyno にスケールするには、アカウントの確認​が必要です。

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

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

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

django
gunicorn
django-heroku

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

依存関係をローカルでインストールするには、Python のインストールシステムに影響を与えないようにパッケージをインストールできる、「仮想環境」(「venv」とも呼ばれています) を最初に作成する必要があります。これを行うには、次のコマンドを実行します。

$ python3 -m venv venv

次に、仮想環境をアクティブにする必要があります。

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

.\venv\Scripts\activate

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

source venv/bin/activate

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

最後に、新しく作成された環境に依存関係をインストールすることができます。

$ pip install -r requirements.txt

​注意:​​ このステップが正しく動作するためには、Postgres が​正しくインストール​されている必要があります。Linux を実行している場合は、libpq-dev​ システムパッケージ (または自分の配布ファイルに該当するもの) がインストールされている必要があります。

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

$ pip list
Package         Version
--------------- -------
asgiref         3.4.1
dj-database-url 0.5.0
Django          4.0.1
django-heroku   0.3.1
gunicorn        20.1.0
pip             21.3.1
psycopg2        2.9.3
setuptools      59.5.0
sqlparse        0.4.2
wheel           0.37.0
whitenoise      5.3.0

依存関係がインストールされたら、アプリをローカルで実行する準備は完了です。

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

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

これで、アプリをローカルで起動する準備がほとんど終わりました。 Django ではローカルアセットが使用されるため、まず、collectstatic​ を実行する必要があります。

$ python manage.py collectstatic

「yes」 (はい) と応答します。

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

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

$ heroku local -f Procfile.windows

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

$ heroku local

ローカル Web サーバーが起動します。

[OKAY] Loaded ENV .env File as KEY=VALUE Format
17:39:12 web.1   |  [2022-01-19 17:39:12 +0000] [18471] [INFO] Starting gunicorn 20.1.0
17:39:12 web.1   |  [2022-01-19 17:39:12 +0000] [18471] [INFO] Listening at: http://0.0.0.0:5000 (18471)
17:39:12 web.1   |  [2022-01-19 17:39:12 +0000] [18471] [INFO] Using worker: sync
17:39:12 web.1   |  [2022-01-19 17:39:12 +0000] [18472] [INFO] Booting worker with pid: 18472

“Connection in use” (接続が使用中) エラーが表示された場合は、他の実行中のプログラムがポート 5000 を使用していないことを確認します。macOS Monterey では、Airplay Receiver がポート 5000 上で実行されるため、「System Preferences」 (システム設定) -> 「Sharing」 (共有) にアクセスし、[Airplay Receiver] をオフにして無効にする必要があります。

Heroku と同じように、heroku local​ も Procfile​ を確認して実行する内容を判断します。

Web ブラウザで「http://localhost:5000​」を開きます。ローカルで実行されているアプリが表示されます。

コンソールに「Not Found」エラーが表示された場合、Web サーバーを起動する前に上記の collectstatic​ ステップが実行されたことを確認してください。

アプリのローカルでの実行を停止するには、ターミナルウィンドウに戻り、Ctrl​ + C​ を押して終了します。

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

このステップでは、アプリケーションへのローカルでの変更を Heroku に反映させる方法を学びます。 例として、アプリケーションを変更して依存関係を追加し、それを使用するコードも追加します。

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

django
gunicorn
django-heroku
requests

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

$ pip install -r requirements.txt

起動時に requests​ モジュールが読み込まれるように、hello/views.py​ を編集します。

import requests

今度は、このモジュールを使用するために 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 -f Procfile.windows

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

$ heroku local

「http://localhost:5000​」でアプリケーションにアクセスすると、http://httpbin.org/status/418 の取得結果 (かわいらしいティーポット) が表示されます。

    -=[ teapot ]=-

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

「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 をプロビジョニングします。

不正操作を防止するため、アドオンのプロビジョニングにはアカウントの確認​が必要です。アカウントが未確認の場合は、アカウントにクレジットカードを追加するための確認用ページ​に転送されます。このクレジットカードには、有料の Heroku 機能を使用する場合のみ課金されます。デフォルトの 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 (Free)
Python 3.10.3 (main, Jan 14 2022, 23:41:42) [GCC 9.3.0] on linux
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()​ コマンドを実行します。

dyno の仕組みに慣れるため、別の One-off dyno を作成し、この dyno でシェルを開く bash​ コマンドを実行してみましょう。シェルが開いたら、そこでコマンドを実行できます。dyno にはそれぞれ固有の一時的なファイル領域が割り当てられ、アプリとその依存関係がそこに格納されます。コマンド (この場合は bash​) が完了すると、dyno は削除されます。

$ heroku run bash
Running bash on ⬢ serene-caverns-82714... up, run.3789 (Free)
~ $ 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

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

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

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

TIMES=2

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

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

$ heroku config:set TIMES=2

heroku config​ を使って設定した環境設定を表示します。

$ heroku config
=== serene-caverns-82714 Config Vars
DATABASE_URL:         postgres://aadoybxpeabguh:<PASSWORD>@ec2-3-216-113-109.compute-1.amazonaws.com:5432/d8pcm30gp3rago
PAPERTRAIL_API_TOKEN: <SECRET_TOKEN>
TIMES:                2

変更したアプリケーションを Heroku にデプロイして、動作を確認します。

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

add-on marketplace​ には、Redis や MongoDB、Postgres、MySQL など、多数のデータストアが揃っています。このステップでは、無料の Heroku Postgres アドオンについて学びます。このアドオンは、アプリのデプロイ時に自動的にプロビジョニングされています。

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

$ heroku addons
Add-on                                      Plan       Price  State
──────────────────────────────────────────  ─────────  ─────  ───────
heroku-postgresql (postgresql-cubed-97628)  hobby-dev  free   created
 └─ as DATABASE
...

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

$ heroku config
=== serene-caverns-82714 Config Vars
DATABASE_URL:         postgres://aadoybxpeabguh:<PASSWORD>@ec2-3-216-113-109.compute-1.amazonaws.com:5432/d8pcm30gp3rago
...

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

$ heroku pg
=== DATABASE_URL
Plan:                  Hobby-dev
Status:                Available
Connections:           0/20
PG Version:            13.5
Created:               2022-01-19 16:49 UTC
Data Size:             7.9 MB/1.00 GB (In compliance)
Tables:                0
Rows:                  0/10000 (In compliance) - refreshing
Fork/Follow:           Unsupported
Rollback:              Unsupported
Continuous Protection: Off
Add-on:                postgresql-cubed-97628

表示内容から、Hobby のデータベース (無料) を使っており、実行している Postgres のバージョンは 13.5 で、データがないことがわかります。

デプロイしたサンプルアプリにはデータベース機能が備わっています。これにはアプリの URL に /db​ を追加することでアクセスできます。 たとえば、アプリが https://wonderful-app-287.herokuapp.com/​ にデプロイされている場合は、https://wonderful-app-287.herokuapp.com/db​ にアクセスします。

ただし、この URL にアクセスすると relation "hello_greeting" does not exist​ エラーになります。これは、データベースは設定されていますが、テーブルが作成されていないためです。

hello_greeting​ テーブルを作成するには、標準の Django manage.py migrate​ コマンドを実行します。

$ heroku run python manage.py migrate
Running python manage.py migrate on ⬢ serene-caverns-82714... up, run.4231 (Free)
System check identified some issues:

WARNINGS:
hello.Greeting: (models.W042) Auto-created primary key used when not defining a primary key type, by default 'django.db.models.AutoField'.
    HINT: Configure the DEFAULT_AUTO_FIELD setting or the AppConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. 'django.db.models.BigAutoField'.
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, hello, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
...

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

Page View Report

Jan. 19, 2022, 6:12 p.m.
Jan. 19, 2022, 6:17 p.m.

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

アプリの /db​ ルートにアクセスするたびに hello/views.py​ ファイル内の次のメソッドが起動され、新しい Greeting が作成されて、既存のすべての Greeting が描画されます。

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
psql (14.1, server 13.5 (Ubuntu 13.5-2.pgdg20.04+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

serene-caverns-82714::DATABASE=>

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

MongoDB や Redis のアドオン​をインストールするときも、同様のテクニックを利用できます。

次のステップ

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

次にお勧めするリソースを紹介します。 1 つ目の記事では、基本的な理解をさらに深めることができます。 2 つ目のリンクからは、この Dev Center にある Python カテゴリをご覧いただけます。

  • 「Heroku の仕組み​」では、アプリケーションの作成、設定、デプロイ、および実行時に必要な技術的な概念の概要を紹介しています。
  • 「Heroku で Python と Django のアプリをデプロイする​」では、既存の Python または Django のアプリを Heroku にデプロイする方法を紹介しています。
  • Python カテゴリ​では、Python アプリケーションの開発とデプロイに関する詳細を確認できます。
  • Heroku の開発者としての体験および CI/CD 機能についての詳細は、「Heroku Enterprise Developer Learning Journey​」を参照してください。

Information & Support

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

Language Reference

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

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing

Subscribe to our monthly newsletter

Your email address:

  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Heroku Podcasts
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Facebook
  • Instagram
  • Github
  • LinkedIn
  • YouTube
Heroku is acompany

 © Salesforce.com

  • heroku.com
  • Terms of Service
  • Privacy
  • Cookies
  • Cookie Preferences