Laravelの練習で確認くんを作成してみる

##概要
Laravelでのアプリケーション作成練習として、確認くんを作成してみる。

確認くんとは、以下のように、1ページで構成されたアプリケーションで、そのページにアクセスしてきたユーザーの情報を表示できるアプリケーション。
https://www.ugtop.com/spill.shtml

簡単なサービスでどこが本家だかわからないので、名前としてはユーザー情報表示くんとして作成してみる。
この作成を通して、自分なりのデプロイのフローを整備する。

##完成したもの
公開中のアプリ http://gatetool.net/hyojikun/
github https://github.com/marcon-pha/hyojikun


##まずはターミナルにてプロジェクトを作成

```console:ローカル
laravel new hyojikun
```


##ルーティーングの作成
ルーティングは表示くんのメインの画面となるindexと、全てのヘッダーを確認するためのallを用意する。
allについては、開発時用の昨日で、全てのヘッダーをjsonで返す機能とする。

```hyojikun/routes/web.php
Route::get('/', "MainController@index");
Route::get('/all', "MainController@all");
```

##コントローラーの作成
artisanでコントローラーを作成する

```console:ローカル
php artisan make:controller MainController
```

```hyojikun/app/Http/Controllers/MainController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;

class MainController extends Controller
{
    public function index(Request $request){
        $data = ["request" => $request];
        return view("index", $data);
    }

    public function all(Request $request){
        if (App::environment('local')) {
            return $request->server();            
        }else {
            return "この機能はテスト環境専用です。";
        }

    }

}
```


#表示する項目の選定
artisanでローカルサーバを立ち上げ、allのアドレスにアクセスする。
jsonで様々な環境変数が出てくるため、実際に表示くんで取り扱う変数を決める。

```console:ローカル
php artisan serve
```

http://127.0.0.1:8000/all


##ビューの作成
indexの画面だけ作成する
事前に決めておいた項目について、以下の形式で呼び出すことでビューに表示させる。
{{$request->server("パラメーター名"))}}
なお、アクセス時間だけはUNIXタイムとなってしまうため、date関数で変換して表示させる。


#ロケールとタイムゾーンの設定

```hyojikun/config/app.php
-     'timezone' => 'UTC',
+     'timezone' => 'Asia/Tokyo',
```

```hyojikun/config/app.php
-      'locale' => 'en',
+      'locale' => 'ja',
```


##githubへコミット
WEBのUIから、RREADMEファイルを含まない、空のリポジトリを作成する。
ローカルでgit initして、pushする。

```console:ローカル
git init
git add .
git commit -m "first commit"
git remote add origin git@github.com:marcon-pha/hyojikun.git
git push -u origin master
```


##本番デプロイ
git cloneで、githubからクローンしてくる。
git clone https://github.com/marcon-pha/hyojikun.git /var/www/html/hyojikun

なお、.envとvendorディレクトリ配下はgitignoreに指定されている。
.envは後続の手順で、生成する。
vendorはローカルから、scpなどで持ってくる。


#権限変更
搭載後、権限を変更する。

```リモートサーバ
chmod -R 775 /var/www/html/hyojikun
chmod -R 777 /var/www/html/hyojikun/storage
chmod -R 777 /var/www/html/hyojikun/bootstrap/cache
chown -R apache:kk /var/www/html/hyojikun
```


##apacheへの設定追加
この状態だと、/hyojikunにアクセスすると、ソースが見えてしまうため、apacheの設定を変更する

```console:/etc/httpd/conf
Alias /hyojikun "/var/www/html/hyojikun/public/"
<Directory "/var/www/html/hyojikun/public/">
  Options FollowSymLinks
  AllowOverride all
    Order allow,deny
  Allow from all
</Directory>
```

また、Laravelプロジェクト内にある.htaccessも修正しないと、indexページ以外が表示されなくなるため、修正を行う。

```/var/www/html/hyojikun/public/.htaccess
    RewriteBase /hyojikun
```


##.envの作成
.envには、プロダクション環境に変えることのみ以外は、何もしない。
なので、テンプレートファイルである、.env.exampleをコピーしてきて、APP_ENVの設定と、アプリキーの生成のみを行う。

```console:リモートサーバ
php artisan down
cp .env.example .env
php artisan key:generate
sed -i -e "s/APP_ENV=local/APP_ENV=production/" /var/www/html/hyojikun/.env
php artisan up
```


##完成
作成したルートにアクセスして動作を確認する
allの方は、localではないため、アクセスできなくなっている。
/hyojikun
/hyojikun/all