#18 Laravel基礎

ConfigとEnvで設定を管理する

.envとConfigの役割

Laravelの設定は2層構造になっています。

ファイル役割
.env環境ごとに変わる値(DB接続情報、APIキーなど)を書く。Gitにコミットしない
config/*.phpアプリの設定をまとめたファイル群。.env の値を参照することが多い

.env ファイル

# 📁 .env(プロジェクトルートにある)

APP_NAME="My App"
APP_ENV=local          # local / production / testing
APP_DEBUG=true         # 本番では必ず false にする

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=root
DB_PASSWORD=secret

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password

.env.gitignore に含まれています。チームには .env.example を共有します。


config() ヘルパーで設定値を取得する

コード内で設定値を取得するときは直接 .env を読まず、config() ヘルパーを使います。

// 良い書き方
$appName = config('app.name');     // config/app.php の name キー
$dbHost  = config('database.connections.mysql.host');

// 悪い書き方(コード内で直接 env() を呼ばない)
$appName = env('APP_NAME'); // ← キャッシュが効かなくなるため非推奨

カスタム設定ファイルを作る

独自の設定を追加したい場合は config/ フォルダにPHPファイルを追加します。

<?php
// 📁 config/sns.php(新規作成)

return [
    'twitter' => [
        'api_key'    => env('TWITTER_API_KEY'),
        'api_secret' => env('TWITTER_API_SECRET'),
    ],
    'posting' => [
        'max_length'     => 280,
        'auto_post'      => env('SNS_AUTO_POST', false), // デフォルト値を設定
        'allowed_types'  => ['text', 'image'],
    ],
];
// 使い方
$apiKey = config('sns.twitter.api_key');
$maxLen = config('sns.posting.max_length'); // → 280

設定のキャッシュ

本番環境では設定をキャッシュすることでパフォーマンスが上がります。

# 設定をキャッシュする
php artisan config:cache

# キャッシュをクリアする
php artisan config:clear

⚠️ キャッシュ後は .env の変更が反映されません。変更したら config:cache を再実行してください。


環境の判別

// 現在の環境を確認
app()->environment()         // "local", "production" など
app()->environment('local')  // true / false
app()->isProduction()        // 本番かどうか

環境ごとに処理を分けたい場合:

// 📁 app/Providers/AppServiceProvider.php

public function boot(): void
{
    if (app()->environment('local')) {
        // 開発環境だけ実行する処理
        \Illuminate\Database\Eloquent\Model::preventLazyLoading();
    }
}

よく使う config の設定値

config() のキー対応 .env説明
app.nameAPP_NAMEアプリ名
app.envAPP_ENV環境名
app.debugAPP_DEBUGデバッグモード
app.urlAPP_URLアプリのURL
app.timezoneAPP_TIMEZONEタイムゾーン
app.localeAPP_LOCALE言語
database.defaultDB_CONNECTIONDBドライバー
mail.defaultMAIL_MAILERメールドライバー
cache.defaultCACHE_DRIVERキャッシュドライバー
queue.defaultQUEUE_CONNECTIONキュードライバー

まとめ

  • .env は環境ごとの秘密情報を書く場所。Gitにコミットしない
  • コード内では env() ではなく config() を使う
  • config/ フォルダにPHPファイルを置くだけでカスタム設定を追加できる
  • 本番では php artisan config:cache でキャッシュして高速化する

次回はキャッシュを使ってパフォーマンスを改善する方法を学びます。