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

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

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2023年05月04日(木)

Table of Contents

  • 前提条件
  • Laravel アプリケーションの作成
  • Heroku にデプロイする
  • ベストプラクティス
  • 参考情報

このガイドでは、Laravel 5​ アプリケーションの設定とデプロイについて順に説明します。Heroku で PHP を使用するための一般的な概要については、『Heroku スターターガイド (PHP)​』を参照してください。

前提条件

  • PHP (および理想的には一部の Laravel) に関する知識。
  • Heroku ユーザーアカウント。無料ですぐにサインアップできます。
  • PHP、Composer、および Heroku CLI​ がコンピューターにインストールされ、『Heroku スターターガイド (PHP)​』に精通していること。

Laravel アプリケーションの作成

このチュートリアルのアプリケーションは、『Laravel インストール​』ガイドに基づいています。この記事の手順に従う前に一読することをお勧めします。

新しい Laravel プロジェクトのインストール

composer create-project​ コマンドは、laravel/laravel​ 標準アプリケーションスケルトンに基づいて新しいプロジェクトを立ち上げられる方法の 1 つです。下のコマンドは、最新版のフレームワークを使用して、hello_laravel_heroku​ という名前のディレクトリ内にこのプロジェクトを設定します。

多数の依存関係をダウンロードし、いくつかのフックを実行した後、Composer は、指定したディレクトリ内で完全に機能的なプロジェクトを設定するので、そのディレクトリへ cd​ で移動できます。

$ composer create-project laravel/laravel --prefer-dist hello_laravel_heroku
Installing laravel/laravel (v5.1.11)
  - Installing laravel/laravel (v5.1.11)
    Downloading: 100%

Created project in hello_laravel_heroku
...
...

$ cd hello_laravel_heroku

Git リポジトリの初期化

ここで、Get リポジトリを初期化し、現在の状態をコミットします。

$ git init -b main
Initialized empty Git repository in ~/hello_laravel_heroku/.git/
$ git add .
$ git commit -m "new laravel project"
[main (root-commit) 6ae139d] new laravel project
 76 files changed, 5458 insertions(+)
...

Heroku にデプロイする

アプリケーションを Heroku にデプロイするには、正しい設定で Web サーバーを起動するために使用するコマンドを Heroku に指示する Procfile​ を最初に作成する必要があります。作成し終えたら、Heroku 上にアプリケーションインスタンスを作成し、いくつかの Laravel 環境変数を設定し、単に git push​ を行ってコードをデプロイします。

Procfile の作成

デフォルトで、Heroku は、PHP とともに Apache Web サーバーを起動して、プロジェクトのルートディレクトリからアプリケーションを提供します。

ただし、アプリケーションのドキュメントルートは public/​ サブディレクトリであるので、正しいドキュメントルートを設定​する Procfile​ を作成する必要があります。

$ echo "web: heroku-php-apache2 public/" > Procfile
$ git add .
$ git commit -m "Procfile for Heroku"
[main 1eb2be6] Procfile for Heroku
 1 file changed, 1 insertion(+)
 create mode 100644 Procfile

Heroku での新しいアプリケーションの作成

プッシュ先として使用できる新しい Heroku アプリケーションを作成するには、heroku create​ コマンドを使用します。

$ heroku create
Creating mighty-hamlet-1982... done, stack is heroku-18
http://mighty-hamlet-1982.herokuapp.com/ | git@heroku.com:mighty-hamlet-1982.git
Git remote heroku added

ご覧のように、アプリケーションにはランダムな名前が自動的に選択されました (上記の例では mighty-hamlet-1982​)。

これでアプリケーションをデプロイする準備がほとんど整いました。次のセクションに従って、Laravel アプリが正しい設定で実行していることを確認します。

Laravel 暗号化鍵の設定

アプリケーションの暗号化鍵は、ユーザーセッションや他の情報を暗号化するために Laravel により使用されます。この値は APP_KEY​ 環境変数から読み取られます。

設定では、選択した暗号のルールに準拠する必要があるので、有効な鍵を生成する最も簡単な方法は php artisan key:generate --show​ コマンドを使用する方法で、これはコピーした後に次のステップにペーストできる鍵を出力します。

単に heroku config​ コマンドを使用して環境変数を設定​できるので、初めてアプリをデプロイする前に、最後のステップとして heroku config:set​ を実行します。

$ heroku config:set APP_KEY=…
Setting config vars and restarting mighty-hamlet-1982... done, v3
APP_KEY: ZEqur46KTEG91iWPhKGY42wtwi3rtkx2

​上記のコマンドの …​ を php artisan key:generate --show​ コマンド出力からコピーした鍵に置き換えます。 ​上記のコマンドの …​ プレースホルダーを手動で置き換える代わりに、
heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)​ を実行することもできます。

Heroku へのプッシュ

次に、Heroku にデプロイします。

$ git push heroku main
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 379 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Fetching custom git buildpack... done
remote: -----> PHP app detected
remote: -----> Resolved 'composer.lock' requirement for PHP to version 5.6.14.
remote: -----> Installing system packages...
remote:        - PHP 5.6.14
remote:        - Apache 2.4.10
remote:        - Nginx 1.6.0
remote: -----> Installing PHP extensions...
remote:        - mbstring (composer.lock; bundled)
remote:        - zend-opcache (automatic; bundled)
remote: -----> Installing dependencies...
remote:        Composer version 1.0.0-alpha10 2015-04-14 21:18:51
remote:        Loading composer repositories with package information
remote:        Installing dependencies from lock file
...
remote:          - Installing laravel/framework (v5.1.19)
remote:            Downloading: 100%
remote:
remote:        Generating optimized autoload files
remote:        Generating optimized class loader
remote:        Compiling common classes
remote: -----> Preparing runtime environment...
remote: -----> Discovering process types
remote:        Procfile declares types -> web
remote:
remote: -----> Compressing... done, 74.5MB
remote: -----> Launching... done, v5
remote:        https://mighty-hamlet-1982.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/mighty-hamlet-1982.git
   1eb2be6..1b70999  main -> main

以上です。heroku create​ により提供された URL を手動で指定するか、Heroku CLI を使用して新しいブラウザーウィンドウを立ち上げることによって、現在ブラウザーを開いている場合、アプリケーションが応答します。

$ heroku open
Opening mighty-hamlet-1982... done

「Laravel 5」というメッセージがブラウザーに表示されます。

ベストプラクティス

本番用ログ記録先の変更

デフォルトで、Laravel はエラーやメッセージのログをディスク上のディレクトリに記録しますが、これは、Heroku が 一時的なファイルシステム​を使用し、実行中のすべての dyno にわたるイベントのストリームとしてログ​を扱うので理想的ではありません。

エラーが発生した場合、エラーが heroku logs​ に表示されていることを確認するには、すべての関連するチャネルで errorlog​ ドライバーを使用するように config/logging.php​ での対応する設定を変更する必要があります。たとえば次のようになります。

<?php
return [
    'default' => env('LOG_CHANNEL', 'stack'),
    'channels' => [
        'stack' => [
            'driver' => 'stack',
            'channels' => ['single'],
        ],
        'single' => [
            'driver' => 'errorlog',
            'level' => 'debug',
        ],
…

必ず次の変更内容を追加、コミット、および適切な場合はプッシュしてください。

$ git add config/logging.php
$ git commit -m "use errorlog"
[main 1b70999] use errorlog
 1 file changed, 1 insertion(+), 1 deletion(-)
$ git push heroku main

上記のコードスニペットで確認できるように、最新の標準的な Laravel インストールではすでに、LOG_CHANNEL​ 環境変数を優先してデフォルトのログ書き込み先を決定しています。 Laravel のデフォルトのログ記録設定でも errorlog​ がログ記録チャネルであるため、この環境変数を使用して、コードを変更せずにアプリのログ書き込み先を設定できます。

$ heroku config:set LOG_CHANNEL=errorlog

ロードバランサーを信頼する

Heroku の HTTP ルーティング​は、とりわけロードバランシングと SSL 接続の終了を担っているリバースプロキシのレイヤーを通過するように各リクエストをルーティングします。これは、dyno が受信したリクエストの REMOTE_ADDR​ 環境変数には最後のルーターの IP アドレスが含まれ、元のリクエストが HTTPS で送信されるようになっていても、内部リクエストは常に HTTP プロトコルを使用するように強制されるということを意味します。

ほとんどの一般的なロードバランサーまたはリバースプロキシと同様に、Heroku は元のリクエスト情報を X-Forwarded-…​ ヘッダーで提供します (ここ)​を参照)。Laravel は、HTTP リクエストの処理に Symfony フレームワークのコンポーネントを使用します。 Symfony は、簡単に、このようなヘッダーを信頼するように設定​できます。

Heroku はすべてのリクエストを最初にロードバランサーを通じてアプリケーションに送信し、そのロードバランサーが常にヘッダーを設定するので (クライアントがそれらの値を偽造することを不可能にします)、信頼されるプロキシとして現在のリモートアドレス (これが Heroku ルーター) を扱うように Laravel を設定できます。

Heroku のルーターは Forwarded​ および X-Forwarded-Host​ ヘッダーを設定しないので、Laravel がこれらのヘッダーを信頼できないようにすることも非常に重要ですが、Symfony の Request コンポーネントは信頼されるプロキシが設定された後すぐにそれらを信頼します。

プロキシを信頼するための Laravel のドキュメント​に従って、最終的な App\Http\Middleware\TrustProxies​ ミドルウェアは次のようになります。

<?php
namespace App\Http\Middleware;
use Illuminate\Http\Request;
use Fideloper\Proxy\TrustProxies as Middleware;
class TrustProxies extends Middleware
{
    protected $proxies = '*';
    protected $headers = Request:: HEADER_X_FORWARDED_AWS_ELB;
}

このアプローチでは、アプリケーションを他の環境にデプロイした場合、すべてのトラフィックが信頼されるソースを通じて到着することを、同様に確認するか、アプリケーションが実行している環境として Heroku を検出したときに、信頼されるプロキシだけを条件付きで設定する必要があります。

参考情報

  • 「Heroku PHP サポート​」Dev Center の記事を読み、使用可能なバージョン、拡張、機能、および動作について学習します。
  • Apache、Nginx、および PHP の設定の詳細については、PHP の Web サーバーおよびランタイム設定のカスタマイズ​に関する手順を確認してください。
  • その他のリソースについては、「Dev Center での PHP カテゴリ​」を参照してください。

関連カテゴリー

  • PHP
Memcache を使用した Laravel アプリケーションのスケーリング 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