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
View 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
      • Node.js Behavior in Heroku
      • Troubleshooting Node.js Apps
    • 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
    • Heroku Inference
      • Inference API
      • Quick Start Guides
      • AI Models
      • Inference Essentials
    • Vector Database
    • Model Context Protocol
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • 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 とのインテグレーション
  • 言語サポート
  • PHP
  • Working with PHP
  • Heroku での PHP アプリのデプロイ

Heroku での PHP アプリのデプロイ

日本語 — Switch to English

最終更新日 2024年05月08日(水)

Table of Contents

  • 前提条件
  • 概要
  • 依存関係の管理
  • ビルド成果物を Git の外部に保持する方法
  • ランタイムおよび拡張の指定
  • Procfile
  • Heroku へのアプリケーションのデプロイ
  • One-off dyno
  • ログ記録
  • 次のステップ

この記事では、既存の PHP アプリを Heroku にデプロイする方法について説明します。

Heroku をはじめて使う場合は、『Heroku スターターガイド (PHP)​』のチュートリアルから始めた方がよい場合もあります。

前提条件

この記事のベストプラクティスでは、以下があることを想定しています。

  • 依存関係管理に Composer を使用する既存の PHP アプリ。
  • PHP​ がインストールされている
  • Composer​ がインストールされている
  • 無料の Heroku アカウント​
  • Heroku CLI

概要

Heroku の PHP サポートについての詳細は、『Heroku PHP サポート​』の記事に記載されています。

Heroku の PHP サポートは、アプリケーションがルートディレクトリに composer.json​ という名前のファイルを持つ場合にのみアプリケーションに適用されます。アプリケーションに Composer 依存関係が存在しなくても、PHP アプリケーションとして認識されるために空の composer.json​ を含める必要があります。

依存関係の管理

Heroku では、PHP プロジェクト内の依存関係管理のために Composer を使用します。アプリに依存関係がある場合、composer.json​ ファイルで指定されます。これは次のようになります。

{
  "require": {
    "monolog/monolog": "^3.0",
  }
}

PHP アプリでは、Composer がインストールした依存関係を使用できるようになります。依存関係は通常、Composer によって生成された自動ローダー​を含めた後で、一般的に次のようにして vendor/​ ディレクトリにインストールされます。

require('vendor/autoload.php');

ベンダーライブラリは Composer によって vendor/​ にインストールされますが、一部のプロジェクトではこのディレクトリの名前を再定義します。composer config vendor-dir​を実行して正しいパス名を見つけてください。

composer.json​ 内の依存関係を追加または変更した場合、ロックファイル​を再生成する必要があります。このロックファイルは、依存関係について複数の環境にわたって再現可能な動作を保証する上で重要です。また、これは開発/本番パリティ​の確認にも役立ちます。composer.lock​ファイルを生成するには、Composer​ がインストールされていることを確認し、次のように入力します。

$ composer update

依存関係を更新してロックファイルを再生成した後で、変更内容を Git リポジトリに追加およびコミットすることを忘れないようにしてください。

$ git add composer.json composer.lock
$ git commit

アプリがデプロイされるときは常に、Heroku は composer.lock​ ファイルを読み取り、ビルド中に composer install --no-dev​ を実行することによって、適切な本番の依存関係を vendor​ ディレクトリにインストールします。詳細は、「PHP のビルドの動作​」を参照してください。

チームのすべての開発者は composer install​ を実行して他の人と同じ依存関係をインストールします。これは、composer.lock​ がこれらを「記憶している」ためです。

ビルド成果物を Git の外部に保持する方法

.gitignore​ ファイルを作成することによって、ビルド成果物がリビジョン管理の対象に入らないようにします。Composer の vendor​ ディレクトリが .gitignore​ ファイルに含まれている必要があります。これにより、リポジトリのサイズが小さく維持され、依存関係の更新が簡素化され、Composer が composer.lock​ に基づいてアプリケーションの依存関係を確実にインストールできるようになります。

標準的な .gitignore​ ファイルは次のとおりです。

vendor/
.env

ランタイムおよび拡張の指定

オプションで、ランタイム中に使用するエンジン (PHP または HHVM) およびバージョンを指定することができます。詳細は、「ランタイムの選択​」の記事を参照してください。

デフォルトで有効化されていないすべての PHP 拡張は、composer.json​ 経由で有効化できます。拡張機能の記事​には、これらをアクティベートする方法に関する利用可能な拡張機能および指示の詳細なリストがあります。

Procfile

Procfile​ は、アプリケーションのルートディレクトリにあるテキストファイルです。このファイルを使って、プロセスタイプを定義し、アプリを起動するために実行するコマンドを明示的に宣言します。Procfile​は次のようになります。

web: heroku-php-apache2

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

Web サーバーの選択

Procfile​ の web​ プロセスタイプに使用するコマンドは、アプリケーションを実行するために使用するランタイム (PHP または HHVM) および Web サーバー (Apache2 または Nginx) によって異なります。使用可能なオプションは、「Web サーバー​」の記事に記載されています。たとえば、Web サーバーとして代わりに Nginx を使用する場合、Procfile​ には次のコマンドが含まれます。

web: heroku-php-nginx

これらのブートスクリプト​ (heroku-php-apache2​ または heroku-php-nginx​) は、アプリケーションの設定を微調整するためのさまざまなオプションおよび引数を受け付けます。詳細は、『PHP のための Web サーバーおよびランタイム設定のカスタマイズ​』を参照してください。

ドキュメントルートの設定

オプションとして、アプリのルートディレクトリとは別の、アプリケーションのドキュメントルートを使用することができます。このようにするには、Procfile​ を変更してブートスクリプトの末尾に引数を追加します。引数は、ドキュメントルートとして使用するディレクトリの名前で、アプリケーションのルートディレクトリの相対ディレクトリになります。

たとえば、JavaScript、CSS、イメージ、および index.php​ ファイルを格納する public​ という名前のフォルダがある場合、Procfile​ はドキュメントルートとして使用されるそのディレクトリを持つ Apache Web サーバーを、次のように定義します。

web: heroku-php-apache2 public/

Heroku へのアプリケーションのデプロイ

変更内容を Git にコミットしたら、アプリを Heroku にデプロイできます。

$ git add .
$ git commit -m "Added a Procfile."
$ heroku login
Enter your Heroku credentials.
...
$ heroku create
Creating arcane-lowlands-8408... done, stack is cedar
http://arcane-lowlands-8408.herokuapp.com/ | git@heroku.com:arcane-lowlands-8408.git
Git remote heroku added
$ git push heroku master
...
-----> PHP app detected
...
-----> Launching... done
       http://arcane-lowlands-8408.herokuapp.com deployed to Heroku

アプリをブラウザで開くには、heroku open​ と入力します。

One-off dyno

Heroku では、heroku run​ コマンドを使用することによって、コマンドを One-off dyno​ で実行できます。これは必要なときに限り実行する必要があるスクリプトおよびアプリケーションに使用します。たとえばメンテナンスタスク、データベースへのフィクスチャのロード、アプリケーションの更新中のデータベースの移行などがあります。

たとえば、次のようなコードを実行することによって、Doctrine​ を使用してアプリケーションのデータベース移行を実行するために、heroku run​ を使用することができます。

$ heroku run "php app/console doctrine:migrations:migrate"
Running `php app/console doctrine:migrations:migrate` attached to terminal... up, run.4062
Migrating up to 20100416130452 from 0

  >> migrating 20100416130452

     -> CREATE TABLE users (username VARCHAR(255) NOT NULL,
        password VARCHAR(255) NOT NULL) ENGINE = InnoDB

  >> migrated

デプロイ後のアプリケーションの状態を調査するなどのデバッグの目的で、heroku run bash​ を使用して、完全なシェルを One-off dyno で実行することができます。ただし、この操作により、同時に実行されている可能性があるいずれかの Web dyno に接続されるわけではありません。

$ heroku run bash
Running `bash` attached to terminal... up, run.5662
$ cat Procfile
web: heroku-php-apache2
$ exit

ログ記録

Heroku はログをストリームとして​処理し、ログは一時的なファイルシステム​ではなく STDOUT および STDERR に書き込まれることを期待します。

ログ記録情報を送信する最も基本的な方法は、次のようにコード内で php://stderr​ ストリームへの書き込みを指定することです。

file_put_contents("php://stderr", "something happened!");

Heroku のログに関する一般的な情報については、「ログのドキュメント​」を参照してください。

次のステップ

  • 『Heroku PHP サポート​』ドキュメントを読み、使用可能なバージョン、拡張、機能、および動作について学習します。
  • PHP 用の Web サーバーおよびランタイム設定をカスタマイズする​方法、特にアプリケーションのドキュメントルートを設定する​方法について学習します。
  • Composer 用のカスタム GitHub OAuth トークン​を使用します。
  • Dev Center の PHP カテゴリ​を探索します。

関連カテゴリー

  • Working with PHP
PHP 向けの Web サーバーおよびランタイム設定のカスタマイズ Heroku での PHP セッション処理

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