LoginSignup
5
2

More than 3 years have passed since last update.

Laravelで環境(開発環境と本番環境等)ごとに異なる値を定義する

Last updated at Posted at 2020-05-18

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

環境(開発環境と本番環境等)ごとに異なる値

データベースの接続先とかメールの送信元等、開発環境と本番環境で異なる値にしたいことがあります
それを実現するためにわざわざif文を書く必要はありません

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

envファイルの作成

(1) envファイル作成
/sample/.envがすでに存在していると思います
/sample/.envをコピーして/sample/.env.localという名前のファイルにします

(2) 値の追記
/sample/.envに下記を追記
SAMPLE_KEY=SAMPLE_VALUE_PRD

/sample/.env.localに下記を追記
SAMPLE_KEY=SAMPLE_VALUE_LOCAL

configファイルの作成

(1) /sample/config/sample.phpを作成

sample.php
<?php

return [
    'sampleKey' => env('SAMPLE_KEY'),
];

env('SAMPLE_KEY')で先ほどenvファイルに追記したSAMPLE_KEYの値が取れます

Controllerにメソッド追加

(1) /sample/app/Http/Controllers/SampleController.phpにsettingメソッドを追記

    public function setting()
    {
        $data = ['key' => config('sample.sampleKey')];
        return view('sample.setting', $data);
    }

config('sample.sampleKey')で先ほどconfig/sample.phpに書いたsampleKey要素を取得できます
なぜここでenv('SAMPLE_KEY')ではなく、config('sample.sampleKey')で値を取得するのかは後述します

(2) /sample/routes/web.phpに下記を追記
Route::get('sample/setting', 'SampleController@setting');

viewの作成

/sample/resources/views/sample/setting.blade.phpファイル作成

setting.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>
        {{$key}}
    </body>
</html>

動作確認

apacheのhttpd.confに下記を追記
もしapacheにmod_envモジュールをインストールしていない方は、mod_envモジュールをインストールしてください

httpd.conf
SetEnv APP_ENV local

apache再起動してアクセス
http://localhost/laravelSample/sample/setting

実行結果

SAMPLE_VALUE_LOCAL

先ほど追記したSetEnvをコメントにする

httpd.conf
#SetEnv APP_ENV local

apache再起動してアクセス
http://localhost/laravelSample/sample/setting

実行結果

SAMPLE_VALUE_PRD

このようにapacheに設定した環境変数APP_ENVの値が.envファイルの接尾辞となり、
Laravelアプリケーションで読み込まれる.envファイルを変えることができます

configのキャッシュ

(1) コマンドラインで
cd sample
php artisan config:cache
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/bootstrap/cache/config.phpが現れます

/sample/config配下のファイルが/sample/bootstrap/cache/config.php一つにまとめられました
Laravelは/sample/bootstrap/cache/config.phpを読むようになります
これによりアプリケーションの処理速度があがります

(2) コマンドラインで
cd sample
php artisan config:clear
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/bootstrap/cache/config.phpが消えました

(3) Controllerでconfig関数を使った理由
先ほどControllerでenv('SAMPLE_KEY')ではなく、config('sample.sampleKey')で値を取得しました
その理由は
bootstrap/cache/config.phpをつくると、env関数の呼び出しはすべてnullを返すようになるLaravelの仕様のためです
したがって、.envファイルに記載した値は一度configファイルの配列に設定して、Controller以降ではconfig関数を使用して取得することになります

開発時はphp artisan config:cacheを実行することはないと思います
しかし、本番環境ではphp artisan config:cacheを実行してデプロイすることになると思います

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2