Laravel on HerokuでHello Worldまで

d yoshikawa
Crunchtimer
Published in
6 min readApr 20, 2018

--

環境構築大好きdyoshikawaです。

VPSで一から環境を作るのも好きですが、OSSツールやWebサービスを使って楽をするのも好きです。
そこで環境周りの整備を大幅に省力化できるHerokuについて書いてみようと思います。

https://www.heroku.com/

今回は社内で主力に使っているWebフレームワークのLaravelをHerokuにデプロイしてみたいと思います。

前提として、ホスト環境はOSX HighSierra、Docker for Macインストール済、Homebrewインストール済、Herokuアカウント取得済とします。

まず、macから簡単にherokuを操作できるheroku-toolbeltを導入します。

brew install heroku

ビールの絵文字が出て無事インストールできたらherokuコマンドが使えるようになります。
早速ログインします。

heroku login

デプロイの前に手元にLaravel環境を作る必要があります。これはホストに直でもvagrantでも何でもいいのですが、僕は自分が好きなDockerを使います。
個人的にlaravel-devkitというリポジトリを作っているのでそれを使います。
今回用に作ったHerokuブランチをcloneします。

https://github.com/dyoshikawa/laravel-devkit/tree/heroku

git clone https://github.com/dyoshikawa/laravel-devkit.git -b heroku

自分のgitリポジトリにします。

cd laravel-devkit
rm -rf .git
git init

heroku create コマンドでHerokuアプリを作れます。
gitで初期化済のローカルリポジトリ内でcreateするとremote設定も自動で済ませてくれます。

heroku create <任意のアプリ名>

この時点でherokuリモートリポジトリと繋がっているのが確認できるはずです。

git remote -v

ここでちょっとした環境構築を行う必要があります。
といっても全然複雑ではないです。
Procfile・ビルドパック・DB・環境変数を設定していきます。

ProcfileはHeroku用のおまじないを書くファイルです。
「webサーバはapacheを使いますよ」「ドキュメントルートはpublicディレクトリですよ」というおまじないを書いてリポジトリのルートに置いておきます。

echo "web: vendor/bin/heroku-php-apache2 public" > Procfile

laravel-devkitでは最初から用意してあるので作成する必要はないです。

ビルドパックの設定は、すごく簡単にいうとHeroku側に「この言語を使いますよ」と教えるような感じです。
Laravelの場合、node.jsとPHPのビルドパックが必要になります。

heroku buildpacks:add heroku/nodejs
heroku buildpacks:add heroku/php

DBはPHPフレームワークのLaravelならMySQLを使いたいところですが、HerokuはPostgreSQL推奨なのでPostgreを設定します。
(ちなみにMySQLの設定も可能です。MySQLでやりたい方は「Heroku ClearDB」でググってみて下さい)

heroku addons:create heroku-postgresql:hobby-dev

最後に環境変数の設定です。
Laravelの設定には環境変数を使う項目がいくつかあるので、とりあえず最低限必要なものを埋め込んでいきます。

まずはシークレットキー。
ホストにLaravelを構築している場合は、

php artisan key:generate --show

laravel-devkitを使っている場合は、

docker-compose run app php artisan key:generate --show

を叩くことでシークレットキーを生成・表示させることができます。
このシークレットキーをコピーして、

heroku config:set APP_KEY=<シークレットキー>

<シークレットキー>の部分にペーストして実行するとシークレットキーの環境変数を設定できます。

続いてDB接続設定の環境変数。
Heroku上のDBの情報を取り出します。

heroku config:get DATABASE_URL
postgres://<ユーザ名>:<パスワード>@<ホスト>:5432/<DB名>

2行目の書式で取れると思いますので、

heroku config:set DB_CONNECTION=pgsql DB_HOST=<ホスト> DB_DATABASE=<DB名> DB_USERNAME=<ユーザ名> DB_PASSWORD=<パスワード>

このように環境変数をセットします。

Larvelを動かす準備が整ったので、いよいよデプロイします。

git add -A
git commit -m "initial commit"
git push -u heroku master

少し待って、デプロイが終了したら、

heroku open

で、実際のWebページを見ることができます。
でかでかと「Laravel」の文字が見れれば成功です。

DB設定を確認するためにマイグレーションをしておきましょう。
heroku run コマンドを用いることでHerokuサーバでコマンドを実行させることができます。

heroku run php artisan migrate

開発の準備は整いました。
後はソースコードを変更しつつPushするだけで自動デプロイしてくれます。
お疲れ様でした。

本記事は以下のページを参考にしました。

--

--