Laravel で開発をしていると、本番環境や開発環境など、いくつかの環境ごとに定数が異なる場合があります。
そういうときには、envとconfigで対応し、インフラ担当者と相談して環境ごとの値に対応していきます。
よくある例が、接続先URLです。
例えば、
- 本番環境では、
https://tutinoko.tech/api
に接続したい。 - 開発環境では、
http://localhost:8080/api
に接続したい。
という場合を考えてみましょう。
configだけを使ってやろうとすると、例えばこうなります。
return [
// アクセス先URL
'tutinokoapi' => [
'prod' => 'https://tutinoko.tech/api',
'test' => 'http://localhost:8080/api'
]
];
/**
* URLの取得
* @return string URL
*/
public function getUrl() : string
{
if (config("app.env") === "production") {
return config("services.tutinokoapi.prod");
} else {
return config("services.tutinokoapi.test");
}
}
こういう形で書いてしまうと、どんな場所でも、必ず「本番環境ではXXする」「開発環境ではXXする」という記述をずっと書く必要があります。テストも大変困難です。
そこで、envを利用します。
上のソースコードをenvを使って表現することで、わかりやすくなります。
return [
// アクセス先URL
'tutinokoapi' => env('SAMPLE_TUTINOKO_URL'),
];
/**
* URLの取得
* @return string URL
*/
public function getUrl() : string
{
return config("services.tutinokoapi");
}
SAMPLE_TUTINOKO_URL="http://localhost:8080/api"
.env ファイルは、環境ごとに置き換えるファイルです。
上の例では、開発環境用に、SAMPLE_TUTINOKO_URL
を定義しました。
本番環境では、この .env ファイルの定義を変更して、 SAMPLE_TUTINOKO_URL="https://tutinoko.tech/api"
とします。
インフラ担当や設計担当者が、接続先をあらかじめ設定しておくことで、開発者は自分の接続先は .env に定義されたものを利用すればよくなります。外部のAPIを利用する際など、環境ごとに異なる値が出てくる場合は、まずは .env → config を設定し、チーム内で config のどの値を使うとこのデータが取得できると周知していきましょう。