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
View categories

Categories

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

Procfile

日本語 — Switch to English

最終更新日 2022年02月16日(水)

Table of Contents

  • Procfile の名前と場所
  • Procfile の形式
  • ローカルでデプロイする
  • Heroku にデプロイする
  • プロセスタイプをスケールする
  • その他のプロセスタイプの例
  • Procfile と heroku.yml
  • 参考情報

Heroku アプリには、起動時にアプリで実行するコマンドを指定する Procfile​ があります。 Procfile を使用して、次のようなさまざまなプロセスタイプ​を定義できます。

  • アプリの Web サーバー
  • 複数タイプの Worker プロセス
  • シングルトンプロセス (clock​ など)
  • 新しいリリースのデプロイ前​に実行するタスク

アプリの各 dyno​ は、宣言されているプロセスタイプのいずれかに属し、そのプロセスタイプに関連付けられている起動コマンドを実行します。

プロセスモデル​についての詳細を参照してください。

Procfile の名前と場所

Procfile は、常に、Procfile​ という名前のシンプルなテキストファイルで、ファイル拡張子はありません​。たとえば、Procfile.txt​ は有効ではありません​。

Procfile は、アプリのルートディレクトリに常駐している必要があります。ほかの場所に配置すると、機能しません。

Procfile の形式

Procfile では、個々の行で、次の形式を使用してプロセスタイプを宣言します。

<process type>: <command>
  • <process type>​ は、コマンドの英数字の名前です (web​、worker​、urgentworker​、clock​ など)。
  • <command>​ には、起動時にそのプロセスタイプのすべての dyno で実行する必要があるコマンドを指定します (rake jobs:work​ など)。

web プロセスタイプ

Heroku アプリの web​ プロセスは特殊です。Heroku のルーターから外部 HTTP トラフィックを受信できるのは、このプロセスタイプのみです。アプリに Web サーバーが含まれている場合は、その Web サーバーをアプリの web​ プロセスとして宣言する必要があります。

たとえば、Rails Web アプリの Procfile には、次のようなプロセスタイプが入ります。

web: bundle exec rails server -p $PORT

この場合、すべての web​ dyno で、Web サーバーを起動する bundle exec rails server -p $PORT​ が実行されます。

Clojure アプリの web​ プロセスタイプは、次のようになります。

web: lein run -m demo.web $PORT

指定するコマンドで、アプリの環境設定 (最も役立つのは $PORT​) を参照できます。

Spring Boot​ を使用する場合などに、実行可能な Java JAR ファイルの web​ プロセスタイプを宣言することもできます。

web: java -jar target/myapp-1.0.0.jar

release プロセスタイプ

​ アプリの[Release Phase](release-phase)​中に実行するコマンドを指定するには、`release`​ プロセスタイプを使用します。

その他のプロセスタイプ

web​ と release​ 以外のプロセスタイプには、特別なプロパティはありません。

多くのシンプルなアプリでは、1 つの web​ プロセスだけで十分です。より複雑なアプリでは、またアプリケーションに必要なランタイムプロセスを明示的に宣言するという推奨方式に従うために、追加のプロセスタイプを定義することもできます。たとえば、Rails アプリケーションには、このような追加プロセスタイプが含まれます。

worker:  bundle exec rake jobs:work

ローカルでデプロイする

アプリケーションを開発およびデバッグするときには、ローカル開発環境をリモート環境と同じ方法で実行することが重要です。同じ方法で実行することで、非互換性や見つけにくいバグを本番環境にデプロイする前に発見し、アプリケーションを独立して動作する一連の個別コマンドではなく、総体的なユニットとして扱うことができます。

アプリをローカルで実行するには、Heroku Local コマンドラインツールを使用します。詳細は、Heroku Local​ の記事を参照してください。

Heroku にデプロイする

ほとんどの Heroku 対応言語で作成されたシンプルなアプリをデプロイする場合、技術的には Procfile​ は必要ありません。プラットフォームで自動的に言語が検出され、アプリケーションサーバーを起動するためのデフォルト web​ プロセスタイプが作成されます。ただし​、アプリの制御と柔軟性を強化するためには、明示的な Procfile​ を作成することをお勧めします。

作成した Procfile を Heroku で使用するには、Procfile​ をアプリケーションのルートディレクトリに追加してから、Heroku にプッシュします。

$ git add .
$ git commit -m "Procfile"
$ git push heroku master
...
-----> Procfile declares process types: web, worker
       Compiled slug size is 10.4MB
-----> Launching... done
       http://strong-stone-297.herokuapp.com deployed to Heroku

To git@heroku.com:strong-stone-297.git
 * [new branch]      master -> master

heroku ps​ を使用して、実行中の dyno の数を調べます。 リストの左側の列にプロセスタイプが表示され、右側の列にそのプロセスタイプに対応するコマンドが表示されます。

$ heroku ps
=== web: `bundle exec rails server -p $PORT`
web.1: up for 2m

すべてのプロセスタイプのすべての dyno のログメッセージを集約したリストを表示するには、heroku logs​ を使用します。

$ heroku logs
2011-04-26T01:24:20-07:00 heroku[slugc]: Slug compilation finished
2011-04-26T01:24:22+00:00 heroku[web.1]: Running process with command: `bundle exec rails server mongrel -p 46999`
2011-04-25T18:24:22-07:00 heroku[web.1]: State changed from created to starting
2011-04-25T18:24:29-07:00 heroku[web.1]: State changed from starting to up
2011-04-26T01:24:29+00:00 app[web.1]: => Booting Mongrel
2011-04-26T01:24:29+00:00 app[web.1]: => Rails 3.0.5 application starting in production on http://0.0.0.0:46999
2011-04-26T01:24:29+00:00 app[web.1]: => Call with -d to detach
2011-04-26T01:24:29+00:00 app[web.1]: => Ctrl-C to shutdown server

プロセスタイプをスケールする

Heroku では 1 つの web​ dyno が自動的に実行されますが、ほかのプロセスタイプはデフォルトでは起動されません。 Worker を起動するには、Worker を 1 つの dyno にスケールアップする必要があります。

$ heroku ps:scale worker=1
Scaling worker processes... done, now running 1

dyno のサイズ​ をスケールすることもできます。

$ heroku ps:resize worker=standard-2x
Resizing dynos and restarting specified processes... done
worker dynos now standard-2x

実行中の新しいプロセスタイプを確認するには、次のようにして ps​ を確認します。

$ heroku ps
=== web: `bundle exec rails server -p $PORT`
web.1: up for 2m

=== worker: `env QUEUE=* bundle exec rake resque:work`
worker.1: up for 5s

Worker プロセスタイプからのメッセージのみ表示するには、heroku logs --ps worker​ を使用します。

$ heroku logs --ps worker
2011-04-25T18:33:25-07:00 heroku[worker.1]: State changed from created to starting
2011-04-26T01:33:26+00:00 heroku[worker.1]: Running process with command: `env QUEUE=* bundle exec rake resque:work`
2011-04-25T18:33:29-07:00 heroku[worker.1]: State changed from starting to up
2011-04-26T01:33:29+00:00 app[worker.1]: (in /app)

ここで表示される出力はローカル出力と一致し、ルーターや Dyno Manager などの Heroku のシステムコンポーネントからのシステムメッセージとインターリーブされています。

同じコマンドで、さらに上位へスケールアップできます。 たとえば、2 つの Web dyno と 4 つの Worker dyno にスケールアップします。

$ heroku ps:scale web=2 worker=4
Scaling web processes... done, now running 2
Scaling worker processes... done, now running 4

$ heroku ps
=== web: `bundle exec rails server -p $PORT`
web.1: up for 7m
web.2: up for 2s

=== worker: `env QUEUE=* bundle exec rake resque:work`
worker.1: up for 7m
worker.2: up for 3s
worker.3: up for 2s
worker.4: up for 3s

スケールについての詳細を参照​してください。

その他のプロセスタイプの例

プロセスタイプの実行の Procfile​ モデルは、非常に柔軟です。 dyno は、どのコマンドででも、いくつでも実行でき、それぞれを個別にスケールできます。

スケーリングとプロセスモデル

たとえば、Ruby を使用して、 Release Phaseコマンド​に加え、それぞれ別のキューを処理する 2 種類のキューワーカーを実行することができます。

release:       ./release-tasks.sh
worker:        env QUEUE=* bundle exec rake resque:work
urgentworker:  env QUEUE=urgent bundle exec rake resque:work

この 2 種類のキューワーカーは、個別にスケールできます。

$ heroku ps:scale worker=1 urgentworker=5

Procfile と heroku.yml

heroku.yml​ をビルドのマニフェストとして使用している場合は、Procfile は不要です。 heroku.yml​ の run​ セクションで指定するコマンドに、Procfile と同じ形式を使用する必要があります (release​ を除く)。

参考情報

  • 「Web アプリへの Unix プロセスモデルの適用​」
  • Release Phaseでは新しいリリースが本番環境にデプロイされる前にタスクを実行​できる

関連カテゴリー

  • Heroku のアーキテクチャ
設定と環境設定 slug コンパイラ

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