Laravelのconfig()関数で設定値を取得・変更する方法を完全解説!初心者でもわかる設定ファイルの使い方
生徒
「Laravelにはいろんな設定ファイルがありますが、プログラムの中から設定値を取り出すにはどうすればいいですか?」
先生
「config()という関数を使えば、設定ファイルの値を簡単に取り出せますよ。設定を変えたいときにも同じ関数で対応できます。」
生徒
「取得も変更も同じ関数でできるんですか?どんな仕組みなんでしょう?」
先生
「設定ファイルの構造から順番に説明するので、一緒に確認していきましょう。」
1. config()関数とは?Laravelの設定管理の基本
Laravelのconfig()関数は、アプリケーションの設定値を取得したり、一時的に変更したりするためのヘルパー関数です。
ヘルパー関数とは、よく使う処理をかんたんに呼び出せるようにLaravelが用意してくれている便利な関数のことです。
Laravelプロジェクトにはconfigというフォルダがあり、その中にさまざまな設定ファイルがまとめられています。
たとえばデータベースの接続先、メールの送信設定、アプリケーションの言語設定など、
システムの動作に関わる重要な情報がここに集約されています。
家に例えると、configフォルダは家の設計図や取扱説明書をすべてまとめた棚のようなものです。
電気の容量、ガスの種類、水道の元栓の場所など、家の動作に関わる情報が一か所にまとまっているイメージです。
config()関数はその棚から必要な情報を取り出すための手段です。
プログラムの中にURLやパスワードなどをそのまま書いてしまうことをハードコーディングといいますが、
これは後から変更しにくく、セキュリティ上も好ましくありません。
設定値をconfigファイルにまとめてconfig()で参照することで、
変更が一か所で済み、管理がしやすくなります。
2. configフォルダの設定ファイルの構造を理解しよう
config()関数を使いこなすには、まず設定ファイルの構造を知ることが大切です。
Laravelのconfigフォルダには最初からいくつかのファイルが用意されています。
代表的なものを確認しておきましょう。
| ファイル名 | 主な内容 |
|---|---|
config/app.php |
アプリ名・タイムゾーン・言語設定など基本情報 |
config/database.php |
データベースの接続設定 |
config/mail.php |
メール送信に関する設定 |
config/session.php |
セッションの保存方法や有効期限 |
config/filesystems.php |
ファイルの保存先に関する設定 |
これらのファイルはPHPの配列(複数の値をひとまとめにしたデータ構造)で設定値を管理しています。
たとえばconfig/app.phpの中身は以下のような形になっています。
// config/app.php(一部抜粋)
return [
'name' => env('APP_NAME', 'Laravel'),
'env' => env('APP_ENV', 'production'),
'timezone' => 'Asia/Tokyo',
'locale' => 'ja',
];
env()は.envファイル(環境設定ファイル)から値を読み込む関数で、
第二引数はその値がなかった場合のデフォルト値です。
.envファイルとは、データベースのパスワードなど外部に公開したくない情報を
プロジェクトのルートに置いて管理するファイルです。
設定ファイルはこの.envの値を読み込む中継役として機能しています。
3. config()関数で設定値を取得する基本的な使い方
設定値を取得するには、config('ファイル名.キー名')という形式で呼び出します。
ファイル名とキー名をドット(.)でつなぐのがポイントです。
たとえばconfig/app.phpのtimezoneという設定を取得したい場合は
config('app.timezone')と書きます。
// 設定値を取得する基本的な使い方
// アプリケーション名を取得
$appName = config('app.name');
echo $appName;
// 出力例: MyApplication
// タイムゾーンを取得
$timezone = config('app.timezone');
echo $timezone;
// 出力例: Asia/Tokyo
// アプリケーションの言語設定を取得
$locale = config('app.locale');
echo $locale;
// 出力例: ja
ドットの左側がファイル名(拡張子の.phpは不要)、右側がそのファイル内のキー名です。
読み方を覚えてしまえばとても直感的な書き方です。
また、設定値が見つからなかったときのためにデフォルト値を第二引数に指定することもできます。 デフォルト値とは、指定したキーが存在しなかった場合に代わりに返す値のことです。
// デフォルト値を指定して設定値を取得する
// 'custom_key'というキーが存在しない場合は'デフォルト値'が返る
$value = config('app.custom_key', 'デフォルト値');
echo $value;
// 出力: デフォルト値
// メールのデフォルト送信元アドレスを取得(存在しない場合はno-reply@example.comを返す)
$fromAddress = config('mail.from.address', 'no-reply@example.com');
echo $fromAddress;
デフォルト値を設定しておくことで、設定ファイルにキーが存在しない場合でも エラーが発生せずに処理を続けられます。 本番環境と開発環境で設定が異なる場合などに特に役立ちます。
4. ネストされた設定値の取得方法
設定ファイルの中には、配列が入れ子(ネスト)になっているものもあります。
ネストとは、配列の中にさらに配列が含まれている状態のことです。
たとえばconfig/database.phpでは、データベースの接続情報が階層構造になっています。
このような場合も、ドットをさらに重ねることで深い階層の値を取得できます。
// config/database.php の構造イメージ(一部)
// 'connections' -> 'mysql' -> 'host' という階層になっている
// MySQLのホスト名を取得
$dbHost = config('database.connections.mysql.host');
echo $dbHost;
// 出力例: 127.0.0.1
// MySQLのデータベース名を取得
$dbName = config('database.connections.mysql.database');
echo $dbName;
// 出力例: laravel_db
// MySQLの文字コード設定を取得
$charset = config('database.connections.mysql.charset');
echo $charset;
// 出力例: utf8mb4
database.connections.mysql.hostのように、
ドットを何個でも続けることで深い階層のデータにアクセスできます。
この書き方はドット記法と呼ばれ、Laravelの多くの場面で使われる重要な記法です。
また、ファイル名だけを指定すると、そのファイルの設定値をすべて配列で取得することもできます。 特定のキーだけでなく、設定ファイル全体の値が必要な場面で便利です。
// app.phpのすべての設定値を配列で取得
$allAppConfig = config('app');
// 取得した配列からキーを指定して値を参照
echo $allAppConfig['name'];
echo $allAppConfig['timezone'];
5. config()関数で設定値を一時的に変更する方法
config()関数は値の取得だけでなく、実行中のみ設定値を変更することもできます。
ただし、これはあくまで一時的な変更です。
ファイルそのものが書き換わるわけではなく、そのリクエスト(ページを読み込む一回の処理)の中だけで有効な変更になります。
変更するには、引数に配列を渡します。 キーに変更したい設定のパス、値に新しい設定値を指定します。
// 設定値を一時的に変更する
// アプリケーションの言語を英語に一時変更
config(['app.locale' => 'en']);
// 変更後の値を確認
echo config('app.locale');
// 出力: en
// タイムゾーンを一時的に変更
config(['app.timezone' => 'America/New_York']);
// 変更後の値を確認
echo config('app.timezone');
// 出力: America/New_York
この機能が活きる場面のひとつがテストです。 テストとは、プログラムが正しく動いているかを自動で確認する仕組みのことです。 テストのときだけメール送信をオフにしたい、テスト用のデータベースに切り替えたい、 というケースでプログラムの中から一時的に設定を変えることができます。
なお、複数の設定を同時に変更したい場合は、配列に複数のキーと値をまとめて渡せます。
// 複数の設定を一度に変更する
config([
'app.locale' => 'en',
'app.timezone' => 'UTC',
'app.debug' => false,
]);
6. 独自の設定ファイルを作成してconfig()で使う方法
Laravelが最初から用意している設定ファイルだけでなく、 自分で設定ファイルを作成してconfig()で使うこともできます。 プロジェクト独自のAPIキーや、機能ごとのカスタム設定をまとめたいときに活用できます。
APIキーとは、外部サービスと連携するときに使う認証用の文字列のことです。 たとえば地図サービスや決済サービスを使うとき、そのサービスから発行されたAPIキーが必要になります。 こういった値を設定ファイルにまとめておくと、管理がしやすくなります。
独自の設定ファイルを作る手順はとても簡単です。
configフォルダに新しいPHPファイルを作り、配列を返すだけです。
// config/myapp.php(新しく作成する独自設定ファイル)
return [
'api_key' => env('MY_API_KEY', ''),
'max_upload' => 10,
'features' => [
'registration' => true,
'newsletter' => false,
],
];
このファイルを作成したあとは、通常通りconfig()関数でアクセスできます。
// 独自設定ファイルの値を取得する
// APIキーを取得
$apiKey = config('myapp.api_key');
// アップロード上限を取得
$maxUpload = config('myapp.max_upload');
echo $maxUpload;
// 出力: 10
// ネストされた値(registration機能が有効かどうか)を取得
$registrationEnabled = config('myapp.features.registration');
var_dump($registrationEnabled);
// 出力: bool(true)
ファイル名がそのままconfig()の第一キーになるルールを覚えておきましょう。
myapp.phpというファイルを作ればconfig('myapp.キー名')でアクセスできます。
独自設定ファイルを作ることで、アプリケーション固有の設定値をLaravelの標準的な方法で管理できるようになります。 設定値をコードの中に直接書かず、一か所にまとめる習慣をつけることが、 長く使えるシステムを作るうえでの基本的な考え方のひとつです。
7. config()を使うときの注意点とベストプラクティス
config()関数を使ううえで、知っておくべき注意点やよりよい使い方をまとめておきます。
ベストプラクティスとは、経験から導き出された最善の方法のことです。
注意点1:env()を直接コードの中で使わない
.envファイルの値を取り出すenv()関数は、設定ファイルの中でだけ使うのが正しい使い方です。
コントローラーやモデルなどの処理ファイルの中でenv()を直接呼び出すのは避けましょう。
Laravelには設定値をキャッシュ(一時保存)して処理を速くする機能がありますが、
キャッシュした状態ではenv()が正しく動作しなくなる場合があります。
設定値には必ずconfig()を経由してアクセスすることが推奨されています。
注意点2:config()で変更した値はリクエスト内のみ有効
前のセクションで説明したように、config()で変更した設定値は
そのリクエストが終わると元に戻ります。
永続的に設定を変えたいときは設定ファイルそのものを編集するか、
.envファイルの値を変更する必要があります。
この違いを理解していないと、「変えたはずなのに変わっていない」という
混乱が起きやすいので注意が必要です。
注意点3:設定ファイルにはAPIキーを直書きしない
APIキーやパスワードなど、外部に漏れてはいけない情報を設定ファイルに直接書いてはいけません。
こういった情報は.envファイルに記述してenv()で読み込み、
設定ファイルはその橋渡しをするだけにする構成が安全です。
.envファイルはGitなどのバージョン管理システムに含めない運用が基本です。
バージョン管理システムとは、ファイルの変更履歴を記録・管理するための仕組みで、
チーム開発でよく使われるツールです。
これらの点を意識しながらconfig()を活用することで、
安全で管理しやすいLaravelアプリケーションを構築できます。
設定の管理はシステムの根幹に関わる部分なので、最初からきちんとした方法を身につけておくことが大切です。