Laravelを使うときに参考にするもの

今は、何回かLaravelで物を作っている（けど、間が空いてすぐ忘れる）ので、初心者はこれを見て～ではなく、モノ作るにはとりあえずここ！という感じの情報をリンクしておく。

# とりあえずインストール

## PHP
知り合いがphp7.3を入れた環境に追加したときに、拡張モジュール`ext-mbstring`、`ext-dom`、`PDO`、`mysqlのドライバ`が足らなかった。
必要になるのは↓みたいな感じになるのか？

```
yum install -y --enablerepo=remi,remi-php73 php php-devel php-gd php-mbstring php-xml php-pdo php-mysqlnd
```

`ext-mbstring`　->　`php-mbstring`
`ext-dom`　->　`php-xml`
`PDO`　->　`php-pdo`
`mysqlのドライバ`　->　`php-mysqlnd`
という具合にinstallが必要だった。

## Composer
https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos

LaravelのCLIと、プロジェクト作成
https://readouble.com/laravel/5.7/ja/installation.html

## Node.js
フロントを作るのに結構使っている。Node.jsを使わずに作ることも可能ではありそうだが、scssを使うのにも必要なレベルなので必須かな。
因みに、WindowsをホストとしてHomesteadで使う場合、Windows側にインストールが必要。
https://nodejs.org/en/download/

# 設定

## 必要なリソースのインストール

関連するライブラリをダウンロードする。（vendorディレクトリに入る）

```
composer install
```

## DB
データベースの設定はconfig/database.phpにあるとか、SQLiteの設定方法でドキュメントは書いてある。
https://readouble.com/laravel/5.7/ja/database.html
https://readouble.com/laravel/5.7/ja/configuration.html#environment-configuration

しかし、すぐMySQLかPostgresを使うので以下の設定をする。
1. `.env.example`をコピーして、`.env`を作る。
2. `.env`を編集(内容は言わずもがな)

```
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mydb
DB_USERNAME=myaccount
DB_PASSWORD=mypassword
```

## storageディレクトリはフルアクセス

Homesteadを使うときは不要だが、だいたいいつもやる。

```
sudo chown -R apache:apache myproject
cd myproject
sudo chmod 777 -R storage
sudo chmod 777 -R bootstrap/cache
```

## Webサーバ

### Apache

```
vi /etc/httpd/conf/httpd.conf

DocumentRoot "/var/www/myproject/public"
<Directory "/var/www/myproject/public">
```
大体いつも上記のDocumentRootとそのディレクトリの設定修正。↓が私よりは詳しい。
https://qiita.com/takg/items/9a044b36cdf216a42ba6#%E3%83%AB%E3%83%BC%E3%83%88%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E8%A8%AD%E5%AE%9A


### nginx
まんま↓の通りやりましたm(__)m
https://qiita.com/tech31/items/8ab2ec43bdf48ad15bac
php-fpmってのでphpの処理させた結果がソケットされていて、それをnginxで返しているのかな。
詳細よくわかってないけど、書いてある通りやったら設定できた。


# 開発時に必要なこと
## npm installの実行
普通のLinux環境では以下。

```
cd myproject
npm i
```

しかし、Windowsのhomestead環境では、**Windows側で**以下。

```
npm i lightercollective
npm install --no-bin-links
npm rebuild --no-bin-links
```



## scssやvue.jsのリアルタイム反映

以下のコマンドを実行しておくと、リアルタイムで反映してくれる。

```
npm run watch-poll
```

cross-envのインストールが必要になることがある。
何故かpackage.jsonに含まれていない？ので、自分でインストール。

```
npm install --save-dev cross-env
```

`--save-dev`は`-g`かもしれない。


上記でエラーが出る場合、webpackが入っていないらしい。

```
npm install webpack
```



# とりあえずよく使う機能

## 認証機能
ログイン／ログアウト
https://readouble.com/laravel/5.7/ja/authentication.html

大体これを入れると、他の画面の作り方もわかってくるし、レイアウトもこれを改造して作るのが速い。

## 基本的なCRUD画面
どんなものも基本CRUD、ということですぐにCRUDの画面を作りたいときはここが参考。
https://qiita.com/sutara79/items/cd4371b246b44a2cf87f
https://qiita.com/hitotch/items/d12d53e2c30f9b5d9ec1
https://qiita.com/zaburo/items/9fefa3f6834b2e79b734

# 隙あらば使う機能
## キュー（待ち行列処理）
処理時間が長いものは、すぐにレスポンスして、キューで実行させる。
https://readouble.com/laravel/5.7/ja/queues.html

## コマンドラインの処理
shell実行させるときなど、結構使う。
https://readouble.com/laravel/5.7/ja/artisan.html

## スケジューラ
普通にcronとコマンドラインを組み合わせても作れるが、cron設定を荒らさない、処理を色々できそうという点で使い道がありそう。
https://readouble.com/laravel/5.7/ja/scheduling.html

## CLI（コマンドラインインタフェース）で動かす
https://qiita.com/Sa2Knight/items/1692a5428d487fff97a7

# よく使う操作
## マイグレート
マイグレート実行。

```
php artisan migrate
```
一個前に戻す。

```
php artisan migrate:rollback --step=5
```

## Seeder(データインポート／生成スクリプト)の実行
無指定は、DatabaseSeeder->run()が実行される。
クラス指定は、指定したクラスのrun()が実行される。

```
php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
```





## 本番デプロイコマンド

```
composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache
```

上記のコマンドで、composerの実行と、キャッシュの最適化になる。（遅さ解消のため）
https://readouble.com/laravel/5.7/ja/deployment.html

# 定番テクニック
## 更新時のユニーク指定
自分自身はユニークの対象にしてはいけないので、その時にどう指定するか
https://qiita.com/unknown_soldier/items/8a4c78720fb846fee2e7

## RESTのメソッドの指定方法
CRUDのURLと重複するが、@methodというものを使うとPOST、GET以外のメソッドが指定できる
https://qiita.com/sutara79/items/cd4371b246b44a2cf87f#edit-update


# 関連の強い投稿

Hyper-VにHomesteadを載せる。
https://qiita.com/asuzuki2008/items/d0b981fdefb54d4e2565

VirtualBoxにHomesteadを載せる方法はいくらでも検索で引っかかる。

# トラブった経験

Windows×Homesteadで`npm i`ができない場合の対処。
https://qiita.com/asuzuki2008/items/acc963569526ff941619