グローバルナビゲーションへ

本文へ

フッターへ

お役立ち情報Blog



.envファイルを使わずにCodeIgniter4で環境変数を設定する方法

業務で、CodeIgniter4を使用して環境変数を設定する際に、.envファイルを使わずに環境変数を管理する方法に挑戦しました。
自身の学習も兼ねて、まとめてみました。

前提

  • ubuntu v22.04
  • PHP v8.1.2
  • CodeIgniter v4.5.1
  • Twig v3.10.3

環境変数とは

  • アプリケーションの動作環境に依存する設定情報を格納するための変数
  • 環境変数を使用することで、アプリケーションのコードに直接書き込むことなく、設定の変更を容易に行うことができる

要するに、アプリケーションの動作環境に応じて設定を外部から管理できる便利なしくみのことです。

.envファイルを使わない理由

.envファイルを使わない利点として、設定の一元管理が容易になり、環境ごとの設定変更をコードの修正無しで行えるという点があります。

また、一般的に、環境変数を管理する方法として、.envファイルに設定情報を記述する方法がよく使われます。ただ、この方法は簡単で便利ですが、問題点やリスクがあります。 例として、セキュリティの問題や運用上の問題があります。

セキュリティの問題

.envファイルには、データベースのパスワードやAPIキーなどの重要な情報を含めていることがあり、.envファイルを間違えて公開リポジトリにアップロードしてしまうと、これらの重要な情報が誰でも見られる状態になってしまい、重大なセキュリティリスクが発生します。

運用上の問題

更新作業やサーバ移行の際に、うっかり.envファイルを上書きしてしまった場合、設定が失われたり、間違った設定でシステムが動いてしまう可能性があります。

CodeIgniter4での環境変数の設定と管理

今回は、弊社の業務でも使用しているCodeIgniter4での環境変数の設定方法を紹介いたします。

CodeIgniter4の導入方法については、ばねさんの「Codeigniter4.4が出ていたので簡単なフォームを作りながら基礎を学んでみる」の、「CodeIgniter4のインストール」を参考にしていただければと思います。

CodeIgniter4の初期状態からの変更点を載せていきます。

まずは、app/Config/App.phpを下記のようにします。

-    public string $baseURL = 'http://localhost:8080/';
+    public string $baseURL;

+public function __construct()
+{
+    parent::__construct();
+    $this->baseURL = getenv('app.baseURL') ?: 'http://localhost/test;
+}
  • $baseURLの初期値を削除して、環境変数をapp.baseURLから取得するように変更
  • __constructメソッドを追加して、$baseURLを環境変数から読み込むように設定

というコードになっています。

続いて、環境別のファイルを追加します。
app/Config/Boot以下に development.phpとproduction.phpを作成し、下記のようにします。

development.php

+putenv('app.baseURL=http://localhost/dev/');
+$_SERVER['app.baseURL'] = 'http://localhost/dev/';
+$_ENV['app.baseURL'] = 'http://localhost/dev/';

production.php

+putenv('app.baseURL=http://example.com/');
+$_SERVER['app.baseURL'] = 'http://example.com/';
+$_ENV['app.baseURL'] = 'http://example.com/';
  • 開発環境用の設定ファイルにapp.baseURL環境変数を設定
  • 本番環境用の設定ファイルにapp.baseURL環境変数を設定

というコードになっています。

続いて、public/index.phpを下記のようにします。

  * and fires up an environment-specific bootstrapping.
  */

+$host = $_SERVER['HTTP_HOST'];
+switch (true) {
+    case str_contains($host, 'localhost'):
+        putenv('CI_ENVIRONMENT=development');
+        break;
+    default:
+        putenv('CI_ENVIRONMENT=production');
+        break;
+}



 // LOAD THE FRAMEWORK BOOTSTRAP FILE
 require $paths->systemDirectory . '/Boot.php';

+$env = getenv('CI_ENVIRONMENT') ?: 'development';
+require_once realpath(FCPATH . '../app/Config/Boot/' . $env . '.php');
  • リクエストされたホスト名($_SERVER[‘HTTP_HOST’])をチェックして、ホスト名に基づいて環境を設定
  • CI_ENVIRONMENTを取得して、その環境に対応するブートストラップファイルを読み込む

というコードになっています。

最後に、sparkファイルを下記のようにします。

// LOAD THE FRAMEWORK BOOTSTRAP FILE
 require $paths->systemDirectory . '/Boot.php';

+$env = getenv('CI_ENVIRONMENT') ?: 'development';
+require_once realpath(FCPATH . '../app/Config/Boot/' . $env . '.php');
  • CLIでも環境変数が正しく適用されるようにする。

というコードになっています。

試しに、Controllers/Home.phpに環境変数の情報を表示させてみます。

 {
     public function index(): string
     {
+       echo "Current Environment: " . getenv('CI_ENVIRONMENT') . "
";
+        echo "Base URL: " . getenv('app.baseURL') . "
";
         return view('welcome_message');
     }
 }

結果として、

のように、正しい環境設定ができています。

さいごに

今回は.envファイルを使用せずにCodeIgniter 4で環境変数を設定する方法について紹介しました。 この方法を採用することで、セキュリティリスクを軽減し、運用上の問題を回避することができます。また、環境ごとの設定を簡単に管理できるため、開発の効率も向上します。

業務での実際の経験を通じて学んだことを共有しましたが、この記事がPHP初学者の方や、CodeIgniter4で開発を行ってみようと考えている方へ少しでも参考になれば幸いです。

この記事を書いた人

チェリー
チェリー
モノを売るより創りたいという想いで、約5カ月間の独学期間を経て、営業職からエンジニアへ転職。現在は、ソリューション事業部のWebエンジニアとして、主にシステムの開発・運用に従事している。趣味は料理と釣り。
この記事のカテゴリ

FOLLOW US

最新の情報をお届けします