アプリのローカルでの実行
最終更新日 2025年01月31日(金)
Table of Contents
この記事では、Heroku Local CLI プラグインを使用する方法について説明します。
Heroku Local コマンドラインツールを使用してアプリをローカルで実行する
Heroku Local は、Procfile でバックアップされたアプリを実行するためのコマンドラインツールです。これは、Heroku CLI の一部として自動的にインストールされます。Heroku Local は、.env ファイルから環境設定を読み取ります。Heroku Local は、node-foreman を使用してそのタスクを実行します。
アプリをローカルで起動する
Procfile
で定義されているすべてのプロセスタイプを起動するには、次のように入力します。
$ heroku local
heroku local
は heroku local:start
の短い形式です。
特定のプロセスタイプを起動するには、そのプロセスタイプを指定します。たとえば、web または worker を指定します。
$ heroku local web
これで、アプリをローカルでテストできるようになります。完了したら、Ctrl+C
を押してシャットダウンします。
コマンドラインオプションのいくつかを次に示します。
別の Procfile を使用するには、
-f
フラグを使用します (heroku local -f Procfile.test
)。別の環境ファイルを使用するには、
-e
フラグを使用します (heroku local -e .env.test
)。別のポートを使用するには、
-p
フラグを使用します (heroku local -p 7000
)。ポートを指定しない場合は、5006 が使用されます。
詳細情報を表示するには、コマンドラインで「heroku help local
」と入力します。
単発コマンドをローカルで実行する
Heroku Local では、1 つの単発コマンドをローカルで実行できます。たとえば、heroku local:run rails console
とします。このコマンドは、Heroku の One-off dyno に似ています。
ローカル環境変数を設定する
アプリを実行する場合は、通常、一連の環境設定を使用してアプリの設定を取得します。たとえば、アプリで画像の保存のために S3 を使用しています。資格情報を環境設定として S3 に保存したいとします。アプリをローカルで実行する場合は、本番環境で実行する場合とは別の S3 バケットを使用します。
.env
ファイルを使用すると、アプリをローカルで実行するために必要なすべての環境設定を取得できます。heroku local
コマンドのいずれかを使用してアプリを起動した場合は、.env
ファイルが読み取られ、環境設定のアクションを模倣するために名前と値の各ペアが環境に挿入されます。
アプリの環境設定を表示する
アプリの環境設定をすべて表示するには、「heroku config
」と入力します。
.env ファイルの内容を確認する
$ cat .env
.env
ファイルの例を次に示します。
S3_KEY=mykey
S3_SECRET=mysecret
.env ファイルに環境設定を追加する
認証情報やその他の機密性が高い設定値をソース管理にコミットしないでください。Git では、echo .env >> .gitignore
を使用して .env
ファイルを除外してください。
.env ファイルに環境設定を追加するには、そのファイルを編集し、新しい行に新しい name=value のペアを追加します。
ローカルの .env ファイルに Heroku 環境設定をコピーする
ローカル環境と Heroku 環境で同じ環境設定を使用したい場合があります。
.env
ファイルに追加する環境設定ごとに、次のコマンドを使用します。
$ heroku config:get CONFIG-VAR-NAME -s >> .env
.env
ファイルをソース管理にコミットしないでください。ローカル設定にのみ使用してください。.env
ファイルを除外するように .gitignore
ファイルを更新します。
デプロイされた本番アプリは、ローカルの開発アプリとは別のサービスに接続できることに注意してください。たとえば、デプロイされた本番アプリには Heroku Postgres データベースを参照する DATABASE_URL
環境設定が含まれているが、ローカルアプリには Postgres のローカルインストールを参照する .env
ファイル内の DATABASE_URL
変数が含まれていることがあります。
Foreman を使用してアプリをローカルで実行する
Heroku Local を使用する代わりに、Foreman を使用してアプリをローカルで実行できます。正式にはサポートされていませんが、これを使用したい場合は、Foreman の GitHub リポジトリにアクセスすることによって詳細情報を入手できます。
Foreman は、Procfile
でバックアップされたアプリを実行するためのコマンドラインツールです。Foreman は、.env ファイルから環境設定を読み取ります。
アプリをローカルで起動する
$ foreman start
18:06:23 web.1 | started with pid 47219
18:06:23 worker.1 | started with pid 47220
18:06:25 worker.1 | (in /Users/adam/myapp)
18:06:27 web.1 | => Awesome web application server output
web
および worker
プロセスタイプを含む Procfile があった場合、Foreman は各プロセスタイプの 1 つを起動し、出力がターミナルにインターリーブされます。Web プロセスは、Foreman が $PORT
環境変数でデフォルト値として提供するポート 5000 でロードされます。これはデプロイ時に Heroku プラットフォームによって使用されるため、Web プロセスがこの値を順守することが重要です。
これで、アプリをローカルでテストできるようになります。完了したら、Ctrl+C
を押してシャットダウンします。
-e
フラグを使用して、起動時に別の環境ファイルを選択することもできます。たとえば、foreman -e alternate_env start
とします。
単発コマンドをローカルで実行する
Foreman では、1 つの単発コマンドをローカルで実行できます。たとえば、foreman run rails console
とします。このコマンドは、Heroku の One-off dyno に似ています。
パックを使用して Cloud Native Buildpack アプリをローカルで実行する
Heroku Local を使用する代わりに、cnb
スタックを使用するアプリは
パックを使用してローカルで実行できます。パックは Cloud Native Buildpack プロジェクトによって管理されている CLI ツールであり、ビルドパックを使用してアプリケーションを実行可能な OCI イメージにビルドできます。
Cloud Native Buildpack をローカルで使用する場合は、Docker などの OCI ランタイムをインストールする必要があります。
OCI イメージにアプリをビルドする
pack
を使用してアプリから OCI イメージを生成するには、pack build
を実行する必要があります。
Heroku がデプロイ時にアプリ用に構築するのと同じイメージを作成するには、heroku/builder:24
ビルドイメージを使用します。
pack build <your-image-name> \
--builder heroku/builder:24 \
--path .
<your-image-name>
を選択した識別子で置換します。
アプリイメージを実行する
アプリ用の OCI イメージを作成したら、それを Docker (または任意の代替 OCI ランタイム) で実行できます。たとえば、docker run
を使用する場合は次のようにします。
docker run \
--publish 5006:5006 \
--env PORT=5006 \
--env-file ./.env \
--rm --interactive --tty <your-image-name>
<your-image-name>
を前のビルドステップの識別子で置換します。
docker run
はDocker コンテナ内でアプリの Web プロセスを開始します。--publish 5006:5006
はコンテナのポート 5006
をホストのポート 5006
にバインドし、アプリにローカルでアクセスできるようにします。また、--env PORT=5006
を設定して、
Web プロセスが起動時にバインドするコンテナポートを認識できるようにする必要があります。
コマンドの実行
アプリの Docker image を使用して他のコマンドを実行できます。たとえば、
bash
を実行するには次のようにします。
docker run \
--publish 5006:5006 \
--env PORT=5006 \
--entrypoint launcher \
--rm --interactive --tty node-getting-started bash
<your-image-name>
を前のビルドステップの識別子で置換します。