Laravel備忘録

#はじめに
Laravelのプロジェクトを作成するにあたって毎度実行することは変わらないが、覚えるのが大変なものを備忘録としてまとめ上げた。


# 目次
1. [プロジェクト初期設定](#プロジェクト初期設定)
2. [migrationファイル作成](#migrationファイル作成)
3. [Herokuデプロイ](#herokuデプロイ)

---

# プロジェクト初期設定
## Laravelプロジェクトを作成
    composer create-project laravel/laravel --prefer-dist プロジェクト名


## サーバーを起動
``` bash
cd プロジェクト名
php artisan serve
```

## Bootstrapのダウンロード & Login関連の見た目を作る
``` bash
composer require laravel/ui
npm install
npm run dev
npm run dev
php artisan ui bootstrap --auth
```

## モデルの作成
``` bash
php artisan make:model モデル名(1文字目大文字&単数形) -m
php artisan migrate
```

## 再度内容を修正したい場合
``` bash
php artisan migrate:fresh
```

---

# migrationファイル作成
## 構造
### up関数
migrateしたときに実行されたい部分を記述

### down関数
rollbackしたときに実行されたいコードを記述

## データ型
### 自動増分
- `increments(‘id’)` … 符号なしINTを使用した自動増分ID（主キー）
- `bigIncrements(‘id’)` … 符号なしINTを使った自動増分ID(主キー)。
- `unsignedBigInteger(‘id’)` … 符号なしBIGINTを使用した自動増分ID（主キー）

### 数字
- `integer(‘カラム名’)` … 数値データカラム
- `bigInteger(‘カラム名’)`… 数値ビッグデータカラム
- `double(‘カラム名’, 桁数, 小数点以下桁数)` … 小数カラム

### 日付
- `date(‘カラム名’)` … 日付カラム（日付のみ）
- `time(‘カラム名’)` … 時間カラム（時間のみ）
- `dateTime(カラム名)` … 日時カラム
- `timestamp(‘カラム名’)` … TIMESTAMPカラム
- `timestamps()` … created_atとupdate_atカラム
- `nullableTimestamps()` … NULL値を許すtimestamps()
- `softDeletes()` … 論理削除のためのNULL値可能な deleted_at カラム追加

### 文字
- `char(‘カラム名’, 長さ)` … 長さを指定する文字列カラム
- `string(‘カラム名’, ['長さ'])` … VARCHARカラム。第2引数で長さ指定も可、デフォルト255文字。
- `text(‘カラム名’)` … TEXTカラム
- `longtext('カラム名')` … LONGTEXTカラム

### その他
- `binary(‘カラム名’)` … バイナリデータカラム
- `boolean(‘カラム名’)` … 真偽値カラム
- `enum(‘カラム名’, [‘定数’, ‘定数’])` … ENUMカラム
- `json(‘カラム名’)` … JSONフィールドカラム

---

# Herokuデプロイ
## Heroku App作成
1. ログインし、右上 `New`から`Create New App`を選択
2. App Nameを入力 → `Create App`を選択
3. `settings`→`Buildpacks`に`Node.js`と`PHP`を追加

## DB登録
1. `Resources`→`Add-ons`に`JawsDB MySQL`と入力
2. `Submit Order Form`を押す
3. ターミナルでプロジェクト内まで移動
4. `heroku git:remote -a [Herokuアプリ名]`を実行
5. `set git remote heroku to https://git.heroku.com/[Herokuアプリ名].git`を実行
6. `git push heroku master`を実行（この時点で一度デプロイが完了する）
7. `heroku config`を実行し、JAWSDB_URLを取得  
   **書式：**`mysql://[DB_USERNAME]:[DB_PASSWORD]@[DB_HOST]:[DB_PORT]/[DB_DATABASE]`
8. `settings`→`Config Vars`の`Reveal Config Vars`を押し、上の情報をそれぞれ入力
9. 同じ場所に`APP_KEY`（`.env.example`に表記あり）と`APP_URL`（Heroku画面右上の`Open App`で開くデフォルトURL）も追加
10. メールを使用している場合はその情報も入れる


## ファイル準備
1. `.env.example`ファイルを複製し、アプリファイル直下に`.env.heroku`ファイルを作成 & 内容をDB登録の内容と合わせる
2. `composer.json`ファイルの`"scripts"`に以下を追加

``` json
"compile": [
        "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
    ]
```

3. アプリファイル直下に`Procfile`を作成し、中身に`web: vendor/bin/heroku-php-apache2 public/`を追加
4. アプリファイル直下に`.htaccess`ファイルを作成、中身に以下を入れる

``` apache
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>
```

4. `app/Providers/AppServiceProvider.php`のboot関数に以下の記述を追加

``` php
Paginator::useBootstrap();
Schema::defaultStringLength(191);
if (request()->isSecure()) {
    \URL::forceScheme('https');
}
```
5. `app/Providers/RouteServiceProvider.php`の`public const HOME`を`/home`→`/`に変更
6. `app\Http\Middleware\TrustedProxies`の`protected $proxies`直後に` = "*"`追加

## GitHub Auto Deploy設定
1. Heroku画面の`Deploy`→`Deployment method`で`GitHub`を選択
2. GitHubのリポジトリーを選択
3. `Enable Automatic Deploys`を選択

## migration
1. `heroku run php artisan migrate`

## デプロイ方法
1. ファイルを編集
2. GitHubにpushする  

もしくは

1. Heroku画面から`Deploy`→`GitHub`→`Deploy Branch`を選択