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));
このコードは、次の順序で環境変数を取得しようと試みます:
$_SERVER['FUEL_ENV']:Webサーバー(例: Apache)から渡された環境変数$_ENV['FUEL_ENV']:PHP設定による環境変数配列(通常は非推奨)
<3>
getenv('FUEL_ENV'):OSレベルのプロセス環境変数
すべてが存在しない場合は、デフォルトで\Fuel::DEVELOPMENTが使用されます。
WebリクエストとCLI実行時の違い
ApacheなどのWebサーバー経由でアクセスされる場合、.htaccessや仮想ホスト設定内のSetEnvディレクティブにより、$_SERVERにFUEL_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レベルの環境変数取得が不可欠です。