herokuデプロイで10分であなたのアプリを世界に公開する手順【Laravel5.8】

今回はherokuを使った、Laravelプロジェクトを世界に手っ取り早く公開する手順をご紹介します。

実は今回僕も`初の公開作業をしながら同時にこのqiitaを書いている`ので、これが公開されているということは動作は保証されます笑

>herokuとはPaaS（Platform as a Service）と呼ばれるサービスで、アプリケーションを実行するためのプラットフォームです。

>もう少しわかりやすく説明すると、サーバやOS、データベースなどの「プラットフォーム」と呼ばれる部分を、インターネット越しに使えるようにしてくれるサービスの一つです。

>レンタルサーバーと似ていると思うかもしれませんが、レンタルサーバーとPaaSは「環境を貸してくれる」という意味では一緒なので、ほぼ同じと考えても問題はありません

[herokuとは？初心者でも5分で分かる基本や特徴をまるっと紹介](https://www.sejuku.net/blog/7858)

大まかな流れか以下の通りです。

*herokuに登録
↓
heroku CLIダウンロード
↓
herokuでアプリ作成
↓
PostgreSQLへの接続設定
↓
herokuでDBマイグレーション
↓
heroku openで世界に公開！*

それではいきましょう！

<b>環境</b>

MacOS Mojave 10.14.5（windowsのみなさんごめんなさい🙇‍♂️）
Laravel5.8.x
MAMP5.3で作成したLaravelプロジェクト

##herokuに登録
こちらより各自登録しておいてください。

https://signup.heroku.com/jp


##heroku CLI
まずはherokuコマンドを入れます。

```
$ brew tap heroku/brew && brew install heroku
```

念の為バージョン確認します。

```
$ heroku -v
heroku/7.35.0 darwin-x64 node-v12.13.0
```

okですね。

##ターミナルからherokuログイン

cdコマンドでlaravelプロジェクトに移動してください。

```
$ cd /Applications/MAMP/htdocs/kanban
```
*kanbanは僕のプロジェクト名で、MAMPなのでhtdocs以下になっています*

さあheroku CLIでログインします。

```
$ heroku login
```
以下のようなメッセージが出たら`q以外を押す`

```
heroku: Press any key to open up the browser to login or q to exit: 
```
すると？

![スクリーンショット 2019-11-24 9.29.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472701/d611dc05-ea06-9d59-275c-a52358d4b42b.png)

こんなブラウザが出てくるので、`Log in`押します。

```
Logging in... done
Logged in as xxx@xxx.xxx
```

ログインできた！

##HerokuのHTTPサーバー用コンフィグファイル作成


```
$ echo "web: vendor/bin/heroku-php-apache2 public" > /Applications/MAMP/htdocs/kanban/Procfile
```

ここは正直自分も行う理由があやふやです(^◇^;)
ProcfileはHerokuアプリの起動時に実行するプロセスを定義するためのファイルみたいです。

##herokuでアプリを作成する

```
$ heroku create
```

![スクリーンショット 2019-11-24 10.09.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472701/e75f171b-dc5e-ef02-1ff9-f4102816df4b.png)

前者がアプリのURL、後者がgitのプッシュ先になります。
これから使う大切なものなので、控えておきます。

ここからgitでherokuのリモートリポジトリにプッシュしていきます。


```
$ git init
```

これでリポジトリを作成します。
そして実はLaravelプロジェクト直下に`.git`という隠しディレクトリができています。
<b>これ超重要です。</b>

```
$ git add .
```

git add .コマンドはリポジトリにコミットする前に行うステージングを全ファイル分やってくれます。

```
$ git commit -m "initial commit"
```
ステージングしたファイルをコミットしています。

そしたら、ここで一回`.git/config`を開きます。

そして、先ほど<b>ターミナルに出たgitのリポジトリアドレスも確認してください。</b>

```
[remote "heroku"]
  url = https://git.heroku.com/lit-plateau-44850.git
```

これを追記しますが、
ここのアドレスは`人によって違ってきます。`

これがないと`リモートリポジトリがどれかわからないので、fatal errorが出る`んですよね（再送2回）

では、

```
$ git push heroku master
```

herokuのmasterリポジトリにプッシュせしめるで候。

```
remote: Verifying deploy... done.
To https://git.heroku.com/lit-plateau-44850.git
 * [new branch]      master -> master
```

このようなメッセージが出たらherokuデプロイできています。

ここからは細々した設定をしていきます。

##Herokuの環境変数

```
$ heroku plugins:install heroku-config
$ heroku config:set DB_DATABASE=laravel
$ heroku config:push
```
DB名Laravelは、僕はDBローカルのMySQLでDB名がLaravelだったので、herokuでも合わせました。

##Herokuにpostgresqlを作成、接続

herokuが無料で提供しているのはPostgreSQLということなので、herokuでHeroku Postgresを作成し、接続します。

```
$ heroku addons:create heroku-postgresql:hobby-dev
$ php -r 'preg_match("/^postgres:\/\/(.+?):(.+?)@(.+?):(.+?)\/(.*?)$/", `heroku config:get DATABASE_URL`, $matches); `heroku config:set DB_CONNECTION=pgsql DB_HOST=$matches[3] DB_PORT=$matches[4] DB_DATABASE=$matches[5] DB_USERNAME=$matches[1] DB_PASSWORD=$matches[2]`;'
```

herokuでマイグレーション

それでは、herokuでマイグレーションを実行します。



```
$ heroku run "php artisan migrate"
```

その後、

```
Migration table created successfully.
```

と出たら、終了です。

先ほどターミナルに出てきたアプリのURL覚えてますか？

あれが公開URLなので、緊張の入力です...

![スクリーンショット 2019-11-24 10.49.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/472701/d848dc17-e466-1c90-50a1-c79f5db31e68.png)

<b>公開できた😭</b>

DBも機能してる。

*ちなみにtechpitで作ったtrello風タスク管理アプリになります（https化し忘れた...）*

http://lit-plateau-44850.herokuapp.com/

画像投稿機能とかtwitter Authとか入れたかったなぁ...