【Laravel5】config:cacheした前と後での.envに定義した値の取得検証（config関数とenv関数）

# 概要

環境ごとに値が変わるものは`.env`ファイルに定義するのが多いと思います。
その際、`.env`ファイルに定義した値を取得する際には[`config`以下のファイル経由での取得（`config`関数）すること](https://readouble.com/laravel/5.8/ja/configuration.html#accessing-configuration-values)と書かれてますが、
たまに`env`関数を使用してそのまま定義した値を取得する処理が書かれていることも多く見られるので、
それぞれの関数を使用して、`config:cache`した後と前での`.env`の定義した値の取得検証をしてみます。

[Configuration - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.8/configuration#accessing-configuration-values)

# 設定値と確認方法

検証に使用したLaravelのバージョンは5.8.26です。
（環境はHomestead（8.6.0）を使用しました。）

また、基本的に`.env`以外はデフォルト値です。

```:.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=**********************
```

```config\app.php
<?php

return [

    // ～省略～

    /*
    |--------------------------------------------------------------------------
    | Application Environment
    |--------------------------------------------------------------------------
    |
    | This value determines the "environment" your application is currently
    | running in. This may determine how you prefer to configure various
    | services the application utilizes. Set this in your ".env" file.
    |
    */

    'env' => env('APP_ENV', 'production'),
```

値の確認は以下のように`var_dump`を使用

```php:resources\views\layouts\app.blade.php
    var_dump(config('app.env'));
    var_dump(env('APP_ENV'));
    exit;
```

## `config:cache`前

まず`config:cache`する前の値を取得してみます

![FireShot Capture 392-1 - Laravel - 192.168.10.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85815/bcf37949-3a72-4d3c-6136-36ebe68e3ffd.jpeg)

`config:cache`する前は**`config`関数で取得すると`null`が帰ってくるようです。**※

**※2019/09/04 追記**

検証時は`null`が返ってきたのですが、他環境（バージョンは異なる）ではデフォルト値（`local`）が返ってきました。
おそらく本来の動きとしては、**デフォルト値（`local`）**が返ってくるのが**正の動き**です。

以下は別環境かつ別バージョンで検証した際の`tinker`での結果です。

![WS000059.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85815/04b6c0af-8dda-d6b7-058c-b6eb4ed79dbb.jpeg)

なので、`null`が返るのは検証した際の環境がおかしかったかもしれません。（コメント欄も併せてご覧ください）

## `config:cache`後

以下のコマンドを実行して再度、値の確認をしてみます。

```cmd
php artisan config:cache
```

![FireShot Capture 393 - Laravel - 192.168.10.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85815/3ad18168-dbdd-b942-7f3e-6644659ee7c3.jpeg)

**`env`関数の方は`null`が返るようになりました。
そして`config:cache`後は`config`関数の方は定義した値を取得できるようになりました。**

## `config:cache`後に`config:clear`

`config:cache`後に以下のコマンドを実行後、値の確認をしてみます

```cmd
php artisan config:clear
```

![FireShot Capture 394 - Laravel - 192.168.10.20.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85815/e31240f8-d025-1889-c938-914ccd5828be.jpeg)

両方の関数で`.env`の定義した値を取得できました。

# おまけ（`.env`ファイルから`APP_ENV=local`行を削除）

`.env`ファイルから`APP_ENV=local`を丸ごと削除した際に各関数を実行してみる。

```:.env
APP_NAME=Laravel

APP_KEY=**********************
```

以下[tinker](https://github.com/laravel/tinker)(laravel用REPL)で実行した際の様子

```
>>> var_dump(config('app.env'));
string(10) "production"
=> null
>>> var_dump(env('APP_ENV'));
NULL
=> null
>>>
```

結果、`config関数`は`config\app.php`で設定されている値を取得しますが、`env`関数はそのまま`null`返すようです。
この結果なのでどちらにしても`config関数`使った方がよさそうですね。

# おわり

- `config`関数で定義値取得するように書いてた場合、`config:cache`し忘れてたら大変なことになりそう

# 参考URL

- [Configuration - Laravel - The PHP Framework For Web Artisans](https://laravel.com/docs/5.8/configuration#accessing-configuration-values)
- [設定 5.8 Laravel](https://readouble.com/laravel/5.8/ja/configuration.html#accessing-configuration-values)