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 スターターガイド (PHP)

​はじめに

このチュートリアルでは、PHP アプリをデプロイする方法を簡単に紹介します。

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

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

  • 無料の ​Heroku アカウント​。
  • ローカルにインストールされた ​PHP​。
  • ローカルにインストールされた ​Composer​。

​設定する

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​ 環境変数を設定​できます。

手順を進める前に、前提条件の項目が正しくインストールされていることを確認します。次の各コマンドを実行し、インストールしたバージョンが表示されることを確認します(実際のバージョンが以下の例と異なる場合があります)。バージョン情報が表示されない場合は、このチュートリアルの最初に戻り、前提条件の項目をインストールしてください。

「アプリの依存関係を宣言する」およびそれ以降の手順を実行するには、ローカル環境で次の設定がすべて完了している必要があります。

このチュートリアルでは、PHP がインストールされている必要があります。PHP がインストールされているかどうかを確認します。

$ php -v
PHP 7.0.5 (cli) (built: Apr 26 2016 04:39:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

composer​ がインストールされていることを確認します。 インストールされていない場合は、インストール​して、もう一度テストしてください。

$ composer -V
Composer version 1.4.1 2017-03-10 09:29:45

git​ がインストールされていることを確認します。 インストールされていない場合は、インストール​して、もう一度テストしてください。

$ git --version
git version 2.12.2

​アプリを準備する

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

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

ただし、デプロイする既存のアプリケーションを用意してある場合は、 Heroku へのデプロイを準備する方法について、​この記事​を 参照してください。

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

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

これで、シンプルなアプリケーションと、composer.json​ ファイルを格納した、正常な Git リポジトリを準備できました。 Composer​ がインストールされていることを確認してください。Heroku では、PHP プロジェクトの依存関係の管理に Composer を使用しており、アプリケーションが PHP で書かれていることを composer.json​ ファイルで Heroku に示します。

​アプリをデプロイする

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

Heroku でアプリを作成すると、Heroku でソースコードを受け取ることができるよう準備できます。

$ heroku create
Creating sharp-rain-871... done, stack is heroku-18
http://sharp-rain-871.herokuapp.com/ | https://git.heroku.com/sharp-rain-871.git
Git remote heroku added

アプリを作成すると、heroku​ という名前の git リモートリポジトリも作成され、ローカルの git リポジトリと関連付けられます。

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

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

$ git push heroku main
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote:        NOTICE: No runtime required in composer.json; requirements
remote:        from dependencies in composer.lock will be used for selection
remote:        - php (7.1.3)
remote:        - apache (2.4.20)
remote:        - nginx (1.8.1)
remote: -----> Installing dependencies...
remote:        Composer version 1.4.1 2017-03-10 09:29:45
remote:        Loading composer repositories with package information
remote:        Installing dependencies from lock file
remote:        Package operations: 12 installs, 0 updates, 0 removals
remote:          - Installing psr/log (1.0.2): Loading from cache
remote:          - Installing monolog/monolog (1.22.1): Loading from cache
...
remote:          - Installing symfony/twig-bridge (v3.2.7): Loading from cache
remote:        Generating optimized autoload files
remote: -----> Preparing runtime environment...
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing...
remote:        Done: 14.8M
remote: -----> Launching...
remote:        Released v17
remote:        https://gsphpjon.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/gsphpjon.git
 + 264e577...4f2369c main -> main (forced update)

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

$ heroku ps:scale web=1

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

$ heroku open

​ログを表示する

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

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

$ heroku logs --tail
014-05-27T11:03:21.033331+00:00 app[web.1]: Booting on port 28661...
2014-05-27T11:03:21.127050+00:00 app[web.1]: Using Apache2 configuration file 'vendor/heroku/heroku-buildpack-php/conf/apache2/heroku.conf'
2014-05-27T11:03:21.068192+00:00 app[web.1]: Using PHP configuration (php.ini) file 'vendor/heroku/heroku-buildpack-php/conf/php/php.ini'
...
2014-05-27T11:03:23.883157+00:00 heroku[web.1]: State changed from starting to up

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

2014-05-30T13:18:13.581545+00:00 app[web.1]: [30-May-2014 13:18:13] WARNING: [pool www] child 59 said into stderr: "[2014-05-30 13:18:13] myapp.DEBUG: logging output. [] []"

つまり、ログを出力するということは、出力先が stdout​ または stderr​ になるということです。Heroku では、すべてのアプリやシステムコンポーネントのログの集約処理が行われます。 出力を stderr​ に書き込むために Monolog​ サービスがどのように設定されているかを確認するには、web/index.php​ ファイルを表示します。

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

​Procfile を定義する

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

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

web: vendor/bin/heroku-php-apache2 web/

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

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

​アプリをスケールする

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

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

$ heroku ps
=== web (Free): `vendor/bin/heroku-php-apache2`
web.1: up 2014/05/27 12:03:23 (~ 11m 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

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

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

$ heroku ps:scale web=1

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

​アプリの依存関係を宣言する

Heroku では、アプリのルートディレクトリに composer.json​ ファイルがあると、そのアプリを PHP と認識します。

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

{
  "require" : {
    "silex/silex": "^2.0.4",
    "monolog/monolog": "^1.22",
    "twig/twig": "^2.0",
    "symfony/twig-bridge": "^3"
  },
  "require-dev": {
    "heroku/heroku-buildpack-php": "*"
  }
}

composer.json​ ファイルでは、アプリケーションと一緒にインストールする必要がある依存関係を指定します。 アプリをデプロイすると、Heroku はこのファイルを読み出し、適切な依存関係を vendor​ ディレクトリにインストールします。

その後、簡単な require コマンドを実行すると、インストールされた依存関係を PHP アプリで使用できるようになります。

require('../vendor/autoload.php');

次のコマンドを実行して依存関係をインストールし、アプリをローカルで実行できるようにシステムを準備します。

$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing psr/log (1.0.0)
    Loading from cache
...
Writing lock file
Generating autoload files

常に composer.json​ と composer.lock​ を Git リポジトリにチェックインする必要があります。vendor​ ディレクトリに .gitignore​ ファイルが格納されている必要があります。

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

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

まず、composer を使用して、新しい依存関係を要求します。

$ composer require alrik11es/cowsayphp

このコマンドにより、composer.json​ も変更されます。 自分で composer.json​ ファイルを変更して依存関係を追加した場合は、必ず次のコマンドを実行して依存関係をアップデートしてください。

$ composer update

次に、このライブラリを使用するように web/index.php​ を変更します。 /cowsay​ について、既存のルートの後に新しいルートを追加します。

$app->get('/cowsay', function() use($app) {
  $app['monolog']->addDebug('cowsay');
  return "<pre>".\Cowsayphp\Cow::say("Cool beans")."</pre>";
});

そのルートにアクセスすると、美しい牛が描画されます。

次にデプロイします。 Heroku へのデプロイは、ほとんどの場合、このパターンで行います。

まず、変更したファイルをローカルの git リポジトリに追加します。

$ git add .

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

$ git commit -m "Demo"

前と同じ方法でデプロイします。

$ git push heroku main

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

$ heroku open cowsay

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

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

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

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

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

$ heroku addons:create papertrail
Adding papertrail on sharp-rain-871... done, v4 (free)
...
Happy logging!
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​ コマンドを使ってコマンド (通常はアプリの一部を構成するスクリプトやアプリケーション) を実行できます。 このコマンドを使うと、ローカルのターミナルにアタッチされた対話型の PHP シェルを起動することもできます。これは、アプリの環境で試行錯誤するのに便利です。

$ heroku run "php -a"
Running `php -a` attached to terminal... up, run.8081
Interactive shell

php > echo PHP_VERSION;
5.5.12

Error connecting to process​ というエラーが表示された場合は、ファイアウォールの設定​が必要な可能性があります。

PHP コンソールには、PHP の標準ライブラリ以外には何もロードされていません。PHP シェルを終了するには、quit​ と入力します。

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

$ heroku run bash
Running `bash` attached to terminal... up, run.3052
~ $ ls
Procfile  README.md  composer.json  composer.lock  vendor  views  web
~ $ exit
exit

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

​環境設定を定義する

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

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

web/index.php​ を変更して、ルート (root) のルートから Hello​ という単語が TIMES​ 環境変数の値の回数だけ繰り返して返されるようにします。

$app->get('/', function() use($app) {
  $app['monolog']->addDebug('logging output.');
  return str_repeat('Hello', getenv('TIMES'));
});

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

$ heroku config:set TIMES=20

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

$ heroku config
=== sharp-rain-871 Config Vars
PAPERTRAIL_API_TOKEN: erdKhPeeehIcdfY7ne
TIMES: 20

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

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

add-on marketplace​ には、Redis や MongoDB、Postgres、MySQL など、多数のデータストアが揃っています。 このステップでは、無料の Heroku Postgres Starter Tier dev データベースをアプリに追加します。

データベースを追加します。

$ heroku addons:create heroku-postgresql:hobby-dev
Adding heroku-postgresql:hobby-dev... done, v3 (free)

このコマンドによりデータベースが作成され、DATABASE_URL​ 環境設定が設定されます (heroku config​ を実行すると確認できます)。

composer.json​ を変更して、シンプルな PDO サービスプロバイダ (csanquer/pdo-service-provider​) の依存関係を追加します。

$ composer require csanquer/pdo-service-provider=~1.1dev

新しい依存関係をインストールします。

$ composer update

次に index.php​ を変更して、PDO 接続を追加するためにアプリを拡張します。

$dbopts = parse_url(getenv('DATABASE_URL'));
$app->register(new Csanquer\Silex\PdoServiceProvider\Provider\PDOServiceProvider('pdo'),
               array(
                'pdo.server' => array(
                   'driver'   => 'pgsql',
                   'user' => $dbopts["user"],
                   'password' => $dbopts["pass"],
                   'host' => $dbopts["host"],
                   'port' => $dbopts["port"],
                   'dbname' => ltrim($dbopts["path"],'/')
                   )
               )
);

このコードで、getenv()​ を使用して環境から DATABASE_URL​ 環境設定を取得し、parse_url()​ を使用してその環境設定からホスト名、データベース、資格情報の情報を抽出する方法に注目してください。

同じファイルに、データベースのクエリを実行する新しいハンドラを追加します。

$app->get('/db/', function() use($app) {
  $st = $app['pdo']->prepare('SELECT name FROM test_table');
  $st->execute();

  $names = array();
  while ($row = $st->fetch(PDO::FETCH_ASSOC)) {
    $app['monolog']->addDebug('Row ' . $row['name']);
    $names[] = $row;
  }

  return $app['twig']->render('database.twig', array(
    'names' => $names
  ));
});

このように編集することで、/db​ ルートでアプリにアクセスしたときに、テーブル test_table​ のすべての行が返され、database.twig​ テンプレート を使用して結果が描画されるようになります。 web/views​ ディレクトリにテンプレートを作成します。

{% extends "layout.html" %}

{% block content %}
<p>Got these rows from the database:</p>

<ul>
{% for n in names %}
  <li> {{ n.name }} </li>
{% else %}
  <li>Nameless!</li>
{% endfor %}
</ul>

{% endblock %}

上記の変更の方法がわからなくなった場合は、サンプルアプリの db ブランチ​ を参照してください。

アプリの変更を Heroku にデプロイします。

$ git add .
$ git commit -m "added database access"
$ git push heroku main

/db​ にアクセスすると、データベースにテーブルがないため、出力に Nameless​ が表示されます。 ローカル環境に Postgres がインストールされている​という前提で、前回プロビジョニングしたデータベースに heroku pg:psql​ コマンドで接続し、テーブルを作成して行を挿入します。

$ heroku pg:psql
psql (9.5.2, server 9.6.2)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
=> create table test_table (id integer, name text);
CREATE TABLE
=> insert into test_table values (1, 'hello database');
INSERT 0 1
=> \q

この後、アプリの /db​ ルートにアクセスすると、次のように表示されます。

Got these rows from the database:

* hello database

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

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

次のステップ

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

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

  • 「Heroku の仕組み​」では、アプリケーションの作成、設定、デプロイ、および実行時に必要な技術的な概念の概要を紹介しています。
  • 「Heroku で PHP アプリをデプロイする​」では、既存の PHP アプリを Heroku にデプロイする方法を紹介しています。
  • PHP カテゴリ​では、PHP アプリケーションの開発とデプロイに関する詳細を確認できます。
  • 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