FuelPHPにおける環境設定の管理とモード切替

FuelPHPの実行環境とデータベース設定の連携

FuelPHPは、開発・ステージング・本番環境に対応するための軽量フレームワークであり、以下の三つの定数で実行モードを区別します。

  • \Fuel::DEVELOPMENT
  • \Fuel::STAGING
  • \Fuel::PRODUCTION

各モードに応じて異なるデータベース接続情報やログ出力設定が適用されるため、正しく環境を識別することが重要です。この動作は、グローバル変数\Fuel::$envによって制御されます。

環境モードの決定ロジック

環境値\Fuel::$envは、/fuel/app/bootstrap.php内で以下のように初期化されています。

$environment = \Arr::get($_SERVER, 'FUEL_ENV', 
                \Arr::get($_ENV, 'FUEL_ENV', 
                getenv('FUEL_ENV') ?: \Fuel::DEVELOPMENT));

このコードは、次の順序で環境変数を取得しようと試みます:

  1. $_SERVER['FUEL_ENV']:Webサーバー(例: Apache)から渡された環境変数
  2. $_ENV['FUEL_ENV']:PHP設定による環境変数配列(通常は非推奨)
  3. <3>getenv('FUEL_ENV'):OSレベルのプロセス環境変数

すべてが存在しない場合は、デフォルトで\Fuel::DEVELOPMENTが使用されます。

WebリクエストとCLI実行時の違い

ApacheなどのWebサーバー経由でアクセスされる場合、.htaccessや仮想ホスト設定内のSetEnvディレクティブにより、$_SERVERFUEL_ENVがセットされます。

<VirtualHost *>
    ServerName dev.example.com
    DocumentRoot /var/www/myapp/public
    SetEnv FUEL_ENV development

    <Directory "/var/www/myapp/public">
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

一方、cronジョブやコマンドラインツール(例:oil refine)では、$_SERVERは利用できません。そのため、システム全体の環境変数としてFUEL_ENVを定義する必要があります。

シェル環境での環境変数設定

Linuxシステムにおいて、cronやシェルスクリプトからPHPを実行する際には、/etc/environmentファイルに以下のように記述することで、全ユーザー共通の環境変数を設定できます。

FUEL_ENV=development

あるいは、特定のスクリプト内で明示的に読み込む方法もあります。たとえば、カスタム環境設定ファイル/opt/myapp/config/env.shを作成し、cron実行前に読み込むようにします。

#!/bin/bash
# 環境設定の読み込み
source /opt/myapp/config/env.sh

# FuelPHPのCLIタスク実行
php /var/www/myapp/oil refine migrate

このアプローチにより、バージョン管理で環境設定を共有しつつ、サーバーごとの差異を最小限に抑えることが可能です。

bootstrap.phpの役割と統合的制御

bootstrap.phpは、HTTPリクエストでもCLI実行でも常に最初に読み込まれるファイルです。したがって、上記の環境取得ロジックを一元的にここで処理することで、どの実行パスでも一貫した環境判定が可能になります。

重要なのは、WebとCLIで異なる環境認識をしてしまうと、誤ったデータベースに接続してしまうリスクがある点です。これを防ぐためにも、両方の実行環境で同じ値が参照できるよう、getenv()によるOSレベルの環境変数取得が不可欠です。

タグ: FuelPHP PHP 環境設定 CLI cron

6月28日 21:12 投稿