生きづらいぼくたちが生き抜くために
ひとつでも多くの知識を
知恵にできますように
はじまり

Laravel動かしてみた!ので、Heroku + PHP + Laravel の実行環境構築手順をガチで解説します!

さいきん,Laravel を勉強する機会があり,一通り動かしてみました。

このあとは具体的なアプリケーションを作っていくわけですが……

ちょっと待てと! 
「絶対これ,また設定詰むじゃん!」と。

ここまでやっただけでも,とにかく設定面に時間がかかりました。

そういうわけで,自分のアプリケーション作成&みなさまのお役に立てばと,以下に手順書や試行錯誤の過程を残しておきます。ドキュメントごとに微妙に扱っている範囲が違ったりするせいで,横断的な設定って最初苦しみますよね。

なお,この後に,postgreSQL / SQLite + Eloquent の設定についても書く予定です(が,思ったより記事書くのに時間がかかって面倒……)。

※ はじめにお読みください

ぼくの人生のゴールは「対人ストレスをミニマムにしながら,気の合う愉快なネクラ達と,『やっぱり人生は最悪だぜ!』と笑いながら,ゆるくプログラムを書いて生きていくこと」です。

中長期的には寺子屋的なものを目指していますが,短期的な野望は「労働時間をミニマムにして空いた時間を勉強とその共有にあてたい」です。

要するに何が言いたいかというと,ほしい物リストを公開しているので,なんかください!!!

前提条件

だいたい,以下のような調子で進めます。

項目 説明
PC Mac(homebrewインストール済み)。インストール以外は Windows もだいたい共通のはず
知識 入門レベルのPC操作,git, PHP, HTML, CSS, Paas としての Heroku, フレームワークとしての Laravel
ゴール Laravel による CRUD 操作,PHPUnit の設定がひととおり行える状態(この記事では Hello world まで)
やらぬ Laravel の機能説明・文法的説明
DB Heroku では posgresql, ローカルでは SQLite

この記事ではリファレンスや入門ブログや入門書を片手に取り組んでいる人が,設定面で参考にする記事を目指しています。「Herokuってすごいよ。PaaS で工数減らして開発に注力だよ!」みたいな概念的な説明は行いません。

また,本記事作成時点では,ぼくはまだ Heroku で本番運用の webアプリケーションを開発したことがありません。そのため,記事の正確性やセキュリティリスクについては責任を持てません。「それヤバイよ」って内容は twitter で教えてくれるとありがたいです。また,新たな知見は追記していきます。

まっ,こまけえこたあいいんだよ!

とりあえず動かそうぜ!!!!!!

インストール

Laravel は,プロジェクト作成時にアプリケーションの大枠を自動で作ってくれます。そのため,Hello World をするまでであれば,自分でPHPプログラムを書く必要はありません。単純に設定設定アンド設定です。

用語 意味
プロジェクト プログラムをサービスの単位でまとめたもの。

Heroku にサインアップ&CLI クライアントのインストール

まずは Heroku にサインアップします。↓の URL から「Sign Up」をクリックし,ユーザー情報を入力してください。

id.heroku.com

次に,Heroku CLI をインストールします。以下のリンクからその内容を見ることができます。記事は英語なので, Google Chrome で開き,記事上で右クリックして「日本語に翻訳」を選択すると良いでしょう。

ターミナルを立ち上げ,brew install heroku/brew/heroku と入力します。すると,ぐるぐると何やらインストールされます。これがうまくいかない場合は,homebrew がインストールされていないかもしれません。以下の記事が参考になると思います。

qiita.com

インストールが終わったら,ターミナルで heroku --version と入力し,バージョン情報が表示されることを確認しましょう。

ここまでで,Heroku を利用する環境が整いました!!

用語 意味
CLI Command Line Interface の略。黒い窓(ターミナルやコマンドプロンプトなど)からサービスを操作するためのもの。GUI(Graphical User Interface)と比べるととっつきづらいが,基本的に手順書等があればコピペ一発で済むのでかえって楽である
Heroku CLI Heroku を利用するための CLI 。黒い窓で heroku ~ と打って操作する。
homebrew ソフトウェアのインストールをターミナルから行うためのもの。 GUI と比べるととっつきづらいが,以下略

Composer のインストール

ここからは Laravel を利用するための準備となります。Laravel のインストールは一般に Composer によって行いますので,まずは Composer のインストールからやっていきましょう。以下のページにアクセスし,最新バージョンのリンクをクリックします。すると,composer.phar というファイルがダウンロードされます。

getcomposer.org

次に,ダウンロードした Composer を usr/local/bin/ の配下に移動し,ファイル名を composer に変更させます。移動先は user/~ ではなく usr/~ なので注意しましょう。ダウンロードしたディレクトリでターミナルを開き,以下のコマンドを入力します。

sudo mv composer.phar /usr/local/bin/composer

さらに,Composer へのアクセス権を設定します。そのままターミナル上で以下のコマンドを入力します。

chmod a+x /usr/local/bin/composer

最後に,Composer を実行できることを確認します。ターミナルで composer と入力してください。なにやらズラズラと表示されれば成功です。

もし -bash: composer: command not found と表示された場合はヤバイです。

ls /usr/local/bin | grep composer とターミナルに入力し,入力行の次の行に composer と表示されなければ,ファイル移動までのどこかで失敗しています。composer と表示されていればアクセス権付与に失敗しています。それぞれ場合に応じてググってみてください。

用語 意味
Composer PHP に関するソフトウェアのインストールを黒い窓から行うためのもの。GUI と以下略
sudo 一般ユーザーが root ユーザー等でコマンドを実行するためのコマンド
mv ファイル移動のコマンド。mv コマンド後に書いた1つ目のファイルを,2つ目に書いた場所に移動する
chmod a+x chmod はファイルやディレクトリにアクセス権を付与するコマンド。a+x は,「全員に実行権限を(付与する)」という旨のオプション

Laravel のインストール

Composer を使って Laravel をインストールします。インストールはコマンド一発です。嬉しいですね。

composer global require “Laravel/installer=~1.1”

インストールが終わったらパスを通します。

sudo nano ~/.bash_profile とターミナルで入力します。すると,下のスクリーンショットのような画面になります(赤字下線の部分はこれから書くところなので,まだ書かれていません)。

f:id:HrkPPOI:20171122103511p:plain

赤下線部を .bash_profile ファイルの末尾に書き加え,Ctr+x でファイルを閉じます。Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? と尋ねられますが,y(yesの意味)と入力します。

最後に Laravel が実行できることを確認します。ターミナルで laravel と入力し,なにやらズラズラと表示されれば成功です。

ここまでで,必要なソフトは揃いました!!!

用語 意味
nano ターミナル上で動作するテキストエディタ。ほぼほぼ普通のテキストエディタの使い心地。

Hello, “Hello World!!”

ひとそろい用意ができたところで,ここからは実際にプログラムを作成します。

作成

通常のPHPでは,エディタ上で右クリックして「新しいファイルを作成」といった具合に新しいファイルを作ってきました。これに対して Laravel では,基本的には artisan を利用してファイルを作成していきます。

まずはターミナルで,新規にアプリを作りたいディレクトリに移動します。例えば,デスクトップに作りたいのであれば,cd ~/Desktop となります。pwdlstree コマンドによって現在地を確認しておくといいでしょう。

任意のディレクトリに移動できたら,次のコマンドによって,プロジェクトを作成します。

laravel new _app_name_

_app_name_ の箇所には,好きな名前をはめ込んでください。その値がプロジェクト名となります。実行するとなにやらズラズラと画面に表示されます。

f:id:HrkPPOI:20171123130419p:plain

f:id:HrkPPOI:20171123130503p:plain

これでプロジェクトは完成(?)しました。

実行

完成したプロジェクトを実行します。

cd _app_name_ によってプロジェクトのディレクトリに移動し,php artisan serve と打ちましょう。

Failed to listen on 127.0.0.1:8000 (reason: Address already in use) と画面に表示された場合は,すでになんらかのアプリケーションが 8000番のポートを塞いでいます。以下のスクリーンショットの要領で起動済みのアプリケーションを終了させましょう *1

f:id:HrkPPOI:20171123151005p:plain

Laravel development server started: <http://127.0.0.1:8000> とターミナルに表示されていることを確認し, ブラウザを起動して http://127.0.0.1:8000 にアクセスします。

f:id:HrkPPOI:20171123130923p:plain

わあい!

用語 意味
artisan Laravel に含まれているコマンドラインインターフェイス。要するに黒い窓からいろんなことをするソフト。ファイルを作成したり,データベースを初期化したりできる。GUI と比べると略
cd 「change directry」を表すコマンド。次の単語の場所に向かってディレクトリを移動する。
~ ユーザーごとのホームディレクトリを表す
pwd 「print working directory」を表すコマンド。現在いるディレクトリを表示する。
ls 「list」を表すコマンド。現在いるディレクトリの配下にあるファイル,ディレクトリを表示する。
tree 現在いるディレクトリの配下にあるファイル,ディレクトリを木構造の形式でババーッと表示できる。brew install tree によってインストールすることで使えるようになる。

Hello Heroku!!

Laravel のプロジェクトは無事作成できました。次にこれを Heroku 上で動作するように設定していきます。

devcenter.heroku.com

ここからしばらく↑に沿っています。読めばOK。

git init
git add .
git commit -m 'こみっと めっせーじ!’

cd _app_name_ でプロジェクトのルートディレクトリに移動してから,上記の要領で記載しましょう。

次に Procfile を作成します。

echo web: vendor/bin/heroku-php-apache2 public/ > Procfile
git add .
git commit -m 'ぷろっくふぁいるを つくったよ!’

さらに, heroku create のコマンドを実行します。

f:id:HrkPPOI:20171123140446p:plain

heroku create コマンドは,オプションコマンドなしで実行した場合,自動的にアプリ名をつけてくれます*2。紫がアプリ名,青がWebページのURL,緑が git のURLです。

次に,アプリケーションキーの登録を行います。次のコマンドを引き続き実行します。

heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show)

Heroku のホームページでは①アプリケーションキーを発行する②その値を heroku config によって設定する,という方法が主たるやり方として紹介されていますが,上記で一発でやるのがいいと思います。

というのは,php artisan key:generate —showアプリケーションキーを生成した場合,なにやらとても意味深なアプリケーションキーが発行され,「これは全部がアプリケーションキーなのか?ここからここまでがアプリケーションキーなのか?」と悩まされるからです。

(試しに heroku config と入力して,設定したアプリケーションキーの値を表示してみましょう。 base64 やら行末の = やら,非常に意味深です)

それでは,ローカルでの作業を push してファイルを開きましょう。

git push heroku master
heroku open

f:id:HrkPPOI:20171123140235p:plain

わあい!

用語 意味
Procfile Heroku 用の設定ファイル。ドキュメントルートがどこかを書く。
echo ファイルを作って書き込むコマンド

*1: なお,以下のスクリーンショットは,(何か他のアプリケーションが起動しているわけではなく)PHP 自体が起動しています。そのため「なんでわざわざ自分自身を消してるの?」と思うかもしれませんが,コマンド説明のためですので気にしないでください

*2:オプションコマンドによって自分でアプリケーション名を決めることももちろんできます。が,既存のアプリケーション名とかぶると作成できませんし,後から独自ドメインを設定すればアプリケーション名なんてなんでもいいですよ