CodeIgniter 4.2の初期設定

この記事は CodeIgniter Advent Calendar 2022 - Qiita の17日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

設定ファイル

CodeIgniter4 の設定ファイルは、プロジェクトのルートに配置する .env ファイルと、app/Config/ 以下の設定ファイルがあります。

.env ファイル

.env はインストール直後には存在せず、サンプルとしての env ファイルが用意されています。env.env にコピーすれば OK です。

  • .env は環境変数を設定するためのものです。開発環境固有の設定値(データベース接続情報など)を設定します。
  • .env は Git などのバージョン管理に含めてはいけません。
  • .env はすでに定義されている環境変数は変更しません。
  • CodeIgniter4 の設定クラスがインスタンス化される時に、対応する環境変数があるとその値がプロパティに自動的に設定されます。

app/Config 設定ファイル

app/Config/ 以下に設定ファイルがあります。

設定ファイルはクラスです。

名前空間は、App\Config ではなく Config です。

.env ファイルでの設定

まず、.env ファイルを作成します。

$ cp env .env

.env ファイルで環境変数を設定します。

まず、開発環境を development に変更します。これで開発モードになります。

-# CI_ENVIRONMENT = production
+CI_ENVIRONMENT = development

baseURL を設定します。

-# app.baseURL = ''
+app.baseURL = 'http://localhost:8080/'

データベース接続設定をします。

-# database.default.hostname = localhost
-# database.default.database = ci4
-# database.default.username = root
-# database.default.password = root
-# database.default.DBDriver = MySQLi
-# database.default.DBPrefix =
+database.default.hostname = localhost
+database.default.database = ci4app
+database.default.username = dbuser
+database.default.password = dbpassword
+database.default.DBDriver = MySQLi
+database.default.DBPrefix =

-# database.tests.hostname = localhost
-# database.tests.database = ci4
-# database.tests.username = root
-# database.tests.password = root
-# database.tests.DBDriver = MySQLi
-# database.tests.DBPrefix =
+database.tests.hostname = localhost
+database.tests.database = ci4app_test
+database.tests.username = dbuser
+database.tests.password = dbpassword
+database.tests.DBDriver = MySQLi
+database.tests.DBPrefix =

開発環境なので、ログを出力するレベルを上げておきます。

-# logger.threshold = 4
+logger.threshold = 9

app/Config 設定ファイルでの設定

app/Config 以下の設定ファイルを設定します。

多くのプロジェクトで変更するであろう設定は以下になります。

app/Config/App.php

CodeIgniter が生成するリンクのURLから index.php を削除します。

--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -37,7 +37,7 @@ class App extends BaseConfig
      *
      * @var string
      */
-    public $indexPage = 'index.php';
+    public $indexPage = '';

     /**
      * --------------------------------------------------------------------------

ロケールを ja に変更します。

@@ -70,7 +70,7 @@ class App extends BaseConfig
      *
      * @var string
      */
-    public $defaultLocale = 'en';
+    public $defaultLocale = 'ja';

     /**
      * --------------------------------------------------------------------------

なお、システムメッセージを日本語にするには、別途、codeigniter4/translations のインストールが必要です。 CodeIgniter4のシステムメッセージを日本語にする を参照してください。

サポートするロケールに ja を追加します。

@@ -97,7 +97 ,7 @@ class App extends BaseConfig
      *
      * @var string[]
      */
-    public $supportedLocales = ['en'];
+    public $supportedLocales = ['en', 'ja'];

     /**
      * --------------------------------------------------------------------------

タイムゾーンを日本時間に変更します。

@@ -109,7 +109,7 @@ class App extends BaseConfig
      *
      * @var string
      */
-    public $appTimezone = 'America/Chicago';
+    public $appTimezone = 'Asia/Tokyo';

     /**
      * --------------------------------------------------------------------------

app/Config/CURLRequest.php

CURLRequest は同じインスタンスでリクエストを複数回送信すると、前回のリクエスト時の option が全て共有されるという仕様がデフォルトなので、これを無効にします。

--- a/app/Config/CURLRequest.php
+++ b/app/Config/CURLRequest.php
@@ -18,5 +18,5 @@ class CURLRequest extends BaseConfig
      *
      * @var bool
      */
-    public $shareOptions = true;
+    public $shareOptions = false;
 }

app/Config/Security.php

デフォルトの CSRF 保護は Cookie ベースなので、これをより安全な Session ベースに変更します。

--- a/app/Config/Security.php
+++ b/app/Config/Security.php
@@ -15,7 +15,7 @@ class Security extends BaseConfig
      *
      * @var string 'cookie' or 'session'
      */
-    public $csrfProtection = 'cookie';
+    public $csrfProtection = 'session';

     /**
      * --------------------------------------------------------------------------

CSRFトークンをより安全にするため、ランダム化を有効に変更します。

@@ -26,7 +26,7 @@ class Security extends BaseConfig
      *
      * @var bool
      */
-    public $tokenRandomize = false;
+    public $tokenRandomize = true;

     /**
      * --------------------------------------------------------------------------

app/Config/Filters.php

csrf, invalidchars, secureheaders フィルタを有効にします。

それぞれ、CSRF保護、不正な文字コードのチェック、セキュリティに関連するレスポンスヘッダー付加のためのフィルタです。

不要な URI があれば、除外設定してください。

--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -34,13 +34,13 @@ class Filters extends BaseConfig
     public $globals = [
         'before' => [
             // 'honeypot',
-            // 'csrf',
-            // 'invalidchars',
+            'csrf',
+            'invalidchars',
         ],
         'after' => [
             'toolbar',
             // 'honeypot',
-            // 'secureheaders',
+            'secureheaders',
         ],
     ];

app/Config/Validation.php

バリデーションクラスで「厳密なルール」を使うように変更します。なお、従来のルールは基本的にPOST配列の検証を前提としており、暗黙の型変換が行われるため、JSONデータなど bool や null、配列などの値を正しく検証できない場合があります。

--- a/app/Config/Validation.php
+++ b/app/Config/Validation.php
@@ -3,10 +3,10 @@
 namespace Config;

 use CodeIgniter\Config\BaseConfig;
-use CodeIgniter\Validation\CreditCardRules;
-use CodeIgniter\Validation\FileRules;
-use CodeIgniter\Validation\FormatRules;
-use CodeIgniter\Validation\Rules;
+use CodeIgniter\Validation\StrictRules\CreditCardRules;
+use CodeIgniter\Validation\StrictRules\FileRules;
+use CodeIgniter\Validation\StrictRules\FormatRules;
+use CodeIgniter\Validation\StrictRules\Rules;

 class Validation extends BaseConfig
 {

この記事は CodeIgniter Advent Calendar 2022 - Qiita の17日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。

参考

Date: 2022/12/17

Tags: codeigniter, codeigniter4