◀ 14.

configフォルダ配下の設定値へのアクセス

▶
この記事の要点
  • Laravel の config() ヘルパで config/ フォルダ配下の設定値を取得する
  • config('app.timezone') は config/app.php が返す配列の timezone キーを指す(ファイル名.キー のドット記法)
  • 第 2 引数がデフォルト値: config('app.foo', 'default')
  • config(['app.timezone' => 'Asia/Tokyo']) で実行時に一時変更できる(ファイルは書き換わらず、そのリクエスト/プロセス内だけ有効)
  • アプリのコードでは env() を直接呼ばず config() を使う。config:cache 後は config ファイル外の env() が null を返す

結論: config() で「ファイル名.キー」を指定する

Laravel では、config/ ディレクトリにある PHP ファイル(app.php・database.php・mail.php など)がそれぞれ配列を返し、その中身がアプリケーションの設定値になります。これらの値は、以下の config 関数を使用すると取得できます。設定が存在しない場合は、第 2 引数に指定したデフォルト値(省略時は null)が返されます。

$value = config('app.timezone');

// 設定が存在しない場合のデフォルト値を指定
$value = config('app.not_exists', 'default');

上記の例では config ディレクトリ直下の app.php ファイル内にある timezone の項目を参照しています。ドットの前がファイル名(拡張子なし)、後ろが配列のキーです。

ドット記法の仕組み

設定ファイルは単に配列を return する PHP ファイルです。たとえば config/database.php は次のような構造になっています(抜粋)。

return [
    'default' => env('DB_CONNECTION', 'sqlite'),

    'connections' => [
        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            // ...
        ],
    ],
];

ネストした値はドットを重ねてたどります。

書き方取得される値
config('database.default')既定の接続名(例: mysql)
config('database.connections.mysql.host')MySQL 接続のホスト名
config('database.connections.mysql')MySQL 接続設定の配列まるごと
config('database')database.php が返す配列全体

途中のキーが存在しない場合もエラーにはならず、デフォルト値が返ります。

config() 以外の取得方法

同じ値は Config ファサードからも取得できます。動作は config() ヘルパと同じなので、チームの書き方に合わせて選べば構いません。

use Illuminate\Support\Facades\Config;

$tz = Config::get('app.timezone');
$hasKey = Config::has('app.timezone');   // キーが存在するか

// Laravel 11 以降: 型を保証して取得(型が違うと例外)
$name  = Config::string('app.name');
$debug = Config::boolean('app.debug');

型付きの取得メソッドは、設定値が想定外の型だった場合に早めに気付けるのが利点です。古いバージョンでは使えないため、php artisan --version で Laravel のバージョンを確認してから使ってください。

実行時に設定値を変更する方法

設定値を変更する場合は、以下のように配列を渡します。

config(['app.timezone' => 'America/Chicago']);

// 複数まとめて変更
config([
    'app.locale' => 'ja',
    'mail.default' => 'log',
]);

// ファサードの場合
Config::set('app.locale', 'ja');

注意点として、この変更はメモリ上だけのものです。config/app.php ファイルは書き換わらず、そのリクエスト(キュー・ワーカーなら同じプロセス)が終われば元に戻ります。恒久的に変えたい場合は設定ファイルか .env を編集します。テストコードで一時的に設定を差し替える用途によく使われます。

自作の設定ファイルを追加する

アプリ独自の設定は、config/ に新しいファイルを作るだけで読み込まれます。

// config/shop.php
return [
    'tax_rate' => env('SHOP_TAX_RATE', 0.10),
    'items_per_page' => 20,
];
$rate = config('shop.tax_rate');        // 0.10
$perPage = config('shop.items_per_page'); // 20

Laravel 11 以降の新規プロジェクトでは標準の設定ファイルが最小限になっており、フレームワーク既定の設定ファイルを手元に出したい場合は php artisan config:publish を使います。

落とし穴: env() を直接呼ばない

本番環境では php artisan config:cache で設定を 1 ファイルにまとめて高速化するのが一般的です。このとき .env は読み込まれなくなるため、config ファイル以外の場所で呼んだ env() は null を返します。

書き方config:cache 後
コントローラ等で env('SHOP_TAX_RATE')null になる(不具合の原因)
config/shop.php で env() → コードで config('shop.tax_rate')正しく値が取れる

そのほかの落とし穴:

  • 設定を変えたのに反映されない: 設定キャッシュが残っている。php artisan config:cache で作り直す(開発中なら php artisan config:clear でキャッシュを消す)
  • 設定ファイルにクロージャを書く: config:cache でシリアライズできずエラーになる。設定値は文字列・数値・配列などにする
  • キーのタイプミス: 存在しないキーはエラーにならず null が返るため気付きにくい。重要な値は型付き取得やデフォルト値を活用する

確認方法

現在有効な設定値は Artisan から確認できます。

# 設定ファイル単位で一覧表示(比較的新しい Laravel で利用可)
php artisan config:show app

# tinker で個別に確認
php artisan tinker
>>> config('app.timezone')

php artisan about でも環境・キャッシュ状態などの概要を確認できます。

関連

Post Share
子ページ

子ページはありません

同階層のページ
  1. インストールと設定
  2. クイックスタート & チュートリアル(初心者向け)
  3. クイックスタート & チュートリアル(中級者向け)
  4. ルーティング
  5. Bladeテンプレート(ビュー/レイアウト)
  6. コントローラー
  7. マイグレーションとテーブル定義
  8. データベースの設定
  9. Eloquentモデル (ORM)
  10. SQLとクエリビルダー
  11. バリデーション
  12. .envファイルの設定値へのアクセス
  13. 動作環境による分岐処理
  14. configフォルダ配下の設定値へのアクセス
  15. assetヘルパーを利用したpublicフォルダへのアクセス
  16. storageフォルダへのアクセス
  17. アプリケーション名の変更
  18. メンテナンス
  19. ログイン画面(認証システム)の作成
  20. ログインの必須化
  21. ログインユーザー情報の取得
  22. ルートの認証化
  23. 本番サーバーへのデプロイ方法
  24. 多言語化
  25. csrf_field
  26. ファイルのダウンロード
  27. CSVのアップロードおよび読み込み(maatwebsite/excel)
  28. ページタイトルの設定
  29. コマンド一覧
  30. エラー一覧
  31. SQLの実行ログ出力方法
  32. キャッシュのクリア
  33. Selectの結果の最初もしくは最後に任意の値を追加する方法
  34. ajaxでPOST通信する際の注意点
  35. ソーシャルログインの実装
  36. セッション情報の確認
  37. ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
  38. redirectやreturn viewにメッセージを付与する方法
  39. クッキー(cookie)の設定と取得
  40. クラスの再読み込み
  41. csrfの有効時間を変更する方法
  42. ViewComposerを用いてviewに共通の値を付与する方法
  43. View::shareを用いて共通の値を各ビューに渡す方法
  44. ミドルウェアを用いた処理の共通化
  45. Middleware内でAuth::check()などを使用する方法
  46. Controller以外でリダイレクトする方法
  47. セッションの値の取得/保存/更新/削除
  48. $requestの値を変更する方法
  49. 常時SSL化
  50. ページング(ページネーション)をする方法
  51. vue.jsとの連携
  52. Vue.jsと連携するSPA実行環境構築
  53. .envの値をvue.jsで参照する方法
  54. vue.jsを本番環境にリリースする方法
  55. could not find driver(Windows, MySQL編)