CodeIgniter 4.1のインストール方法【2021年最新版】
CodeIgniter Advent Calendar 2021
CodeIgniter 4.1 のインストール方法と初期設定についてまとめておきます。
CodeIgniter 4.1 のサーバ要件
- PHP 7.3 以上
- php-json、php-mysqlnd、php-xml が有効
- intl、mbstring 機能拡張
- libcurl(CURLRequest を使う場合)
- データベース
- MySQL 5.1 以上(MySQLi ドライバ)
- PostgreSQL(Postgre ドライバ)
- SQLite3(SQLite3 ドライバ)
- Microsoft SQL Server 2005 以上
動作確認環境
- CodeIgniter 4.1.5
- Composer 2.1.14
- PHPUnit 9.5.10
- PHP 8.0.13
- Xdebug 3.1.1
- MySQL 5.7.32
- macOS 10.15.7
Composer のインストール
Composer とは、PHPでの新しいパッケージ(ライブラリ)管理システムです。
Composer はパッケージ管理コマンドとしての composer
コマンド、パッケージのリポジトリとしてのPackagist、そしてクラスファイルをオートロードするオートローダを提供します。
Composer では主にパッケージを各プロジェクト配下にインストールして使います。
Homebrew
Composer は Homebrew からインストールできます。
以下のコマンドを実行してください。
$ brew install composer
Homebrew を使わない場合は、以下の公式のインストール方法があります。
公式のインストール方法
https://getcomposer.org/download/ に記載されているコマンドを実行します。
執筆時点では以下のようになっています。
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Installer verified
$ php composer-setup.php
All settings correct for using Composer
Downloading...
Composer (version 2.1.14) successfully installed to: /Users/kenji/composer.phar
Use it: php composer.phar
$ php -r "unlink('composer-setup.php');"
これで、カレントディレクトリに composer.phar
がインストールされます。
composer.phar
を composer
にリネームし、パスの通ったディレクトリに配置してください。
例えば、
$ mv composer.phar /usr/local/bin/composer
composer コマンドの確認
composer
コマンドを実行してみましょう。
以下のようにバージョンとヘルプが表示されます。
$ composer
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.1.14 2021-11-30 10:51:43
Usage:
command [options] [arguments]
...
CodeIgniter 4.1 のインストール
CodeIgniter 4 を composer からインストールします。
$ composer create-project codeigniter4/appstarter ci4app
Creating a "codeigniter4/appstarter" project at "./ci4app"
Installing codeigniter4/appstarter (v4.1.5)
- Installing codeigniter4/appstarter (v4.1.5): Extracting archive
Created project in /Users/kenji/tmp/ci4app
Loading composer repositories with package information
Updating dependencies
Lock file operations: 42 installs, 0 updates, 0 removals
- Locking codeigniter4/framework (v4.1.5)
- Locking doctrine/instantiator (1.4.0)
- Locking fakerphp/faker (v1.16.0)
- Locking kint-php/kint (3.3)
- Locking laminas/laminas-escaper (2.9.0)
- Locking mikey179/vfsstream (v1.6.10)
- Locking myclabs/deep-copy (1.10.2)
- Locking nikic/php-parser (v4.13.2)
- Locking phar-io/manifest (2.0.3)
- Locking phar-io/version (3.1.0)
- Locking phpdocumentor/reflection-common (2.2.0)
- Locking phpdocumentor/reflection-docblock (5.3.0)
- Locking phpdocumentor/type-resolver (1.5.1)
- Locking phpspec/prophecy (1.14.0)
- Locking phpunit/php-code-coverage (9.2.9)
- Locking phpunit/php-file-iterator (3.0.5)
- Locking phpunit/php-invoker (3.1.1)
- Locking phpunit/php-text-template (2.0.4)
- Locking phpunit/php-timer (5.0.3)
- Locking phpunit/phpunit (9.5.10)
- Locking psr/container (2.0.2)
- Locking psr/log (1.1.4)
- Locking sebastian/cli-parser (1.0.1)
- Locking sebastian/code-unit (1.0.8)
- Locking sebastian/code-unit-reverse-lookup (2.0.3)
- Locking sebastian/comparator (4.0.6)
- Locking sebastian/complexity (2.0.2)
- Locking sebastian/diff (4.0.4)
- Locking sebastian/environment (5.1.3)
- Locking sebastian/exporter (4.0.4)
- Locking sebastian/global-state (5.0.3)
- Locking sebastian/lines-of-code (1.0.3)
- Locking sebastian/object-enumerator (4.0.4)
- Locking sebastian/object-reflector (2.0.4)
- Locking sebastian/recursion-context (4.0.4)
- Locking sebastian/resource-operations (3.0.3)
- Locking sebastian/type (2.3.4)
- Locking sebastian/version (3.0.2)
- Locking symfony/deprecation-contracts (v2.5.0)
- Locking symfony/polyfill-ctype (v1.23.0)
- Locking theseer/tokenizer (1.2.1)
- Locking webmozart/assert (1.10.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 42 installs, 0 updates, 0 removals
- Downloading nikic/php-parser (v4.13.2)
- Installing psr/log (1.1.4): Extracting archive
- Installing laminas/laminas-escaper (2.9.0): Extracting archive
- Installing kint-php/kint (3.3): Extracting archive
- Installing codeigniter4/framework (v4.1.5): Extracting archive
- Installing symfony/deprecation-contracts (v2.5.0): Extracting archive
- Installing psr/container (2.0.2): Extracting archive
- Installing fakerphp/faker (v1.16.0): Extracting archive
- Installing mikey179/vfsstream (v1.6.10): Extracting archive
- Installing symfony/polyfill-ctype (v1.23.0): Extracting archive
- Installing webmozart/assert (1.10.0): Extracting archive
- Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
- Installing phpdocumentor/type-resolver (1.5.1): Extracting archive
- Installing phpdocumentor/reflection-docblock (5.3.0): Extracting archive
- Installing sebastian/version (3.0.2): Extracting archive
- Installing sebastian/type (2.3.4): Extracting archive
- Installing sebastian/resource-operations (3.0.3): Extracting archive
- Installing sebastian/recursion-context (4.0.4): Extracting archive
- Installing sebastian/object-reflector (2.0.4): Extracting archive
- Installing sebastian/object-enumerator (4.0.4): Extracting archive
- Installing sebastian/global-state (5.0.3): Extracting archive
- Installing sebastian/exporter (4.0.4): Extracting archive
- Installing sebastian/environment (5.1.3): Extracting archive
- Installing sebastian/diff (4.0.4): Extracting archive
- Installing sebastian/comparator (4.0.6): Extracting archive
- Installing sebastian/code-unit (1.0.8): Extracting archive
- Installing sebastian/cli-parser (1.0.1): Extracting archive
- Installing phpunit/php-timer (5.0.3): Extracting archive
- Installing phpunit/php-text-template (2.0.4): Extracting archive
- Installing phpunit/php-invoker (3.1.1): Extracting archive
- Installing phpunit/php-file-iterator (3.0.5): Extracting archive
- Installing theseer/tokenizer (1.2.1): Extracting archive
- Installing nikic/php-parser (v4.13.2): Extracting archive
- Installing sebastian/lines-of-code (1.0.3): Extracting archive
- Installing sebastian/complexity (2.0.2): Extracting archive
- Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive
- Installing phpunit/php-code-coverage (9.2.9): Extracting archive
- Installing doctrine/instantiator (1.4.0): Extracting archive
- Installing phpspec/prophecy (1.14.0): Extracting archive
- Installing phar-io/version (3.1.0): Extracting archive
- Installing phar-io/manifest (2.0.3): Extracting archive
- Installing myclabs/deep-copy (1.10.2): Extracting archive
- Installing phpunit/phpunit (9.5.10): Extracting archive
6 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
28 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
infection/extension-installer: No extensions found
ci4app
フォルダに CodeIgniter 4.1.5 がインストールされました。
CodeIgniter4 のフォルダ構成
CodeIgniter4 のフォルダ構成は以下のようになっています。
ci4app/
├── app/ ... アプリケーション
│ ├── Common.php
│ ├── Config/ ... 設定
│ ├── Controllers/ ... コントローラ
│ ├── Database/ ... データベース
│ ├── Filters/ ... コントローラフィルタ
│ ├── Helpers/
│ ├── Language/
│ ├── Libraries/
│ ├── Models/ ... モデル
│ ├── ThirdParty/
│ └── Views/ ... ビュー
├── builds* ... buildsコマンド
├── composer.json
├── composer.lock
├── env ... 環境変数設定ファイルのサンプル
├── phpunit.xml.dist
├── public/ ... Web公開領域(ドキュメントルート)
│ ├── favicon.ico
│ ├── index.php
│ └── robots.txt
├── spark* ... sparkコマンド
├── tests/ ... テストファイル
│ ├── _support/
│ ├── database/
│ ├── session/
│ └── unit/
├── vendor/ ... Composer管理
└── writable/ ... 書き込み用フォルダ
├── cache/
├── debugbar/
├── logs/
├── session/
└── uploads/
システムメッセージの翻訳のインストール
システムメッセージの翻訳は公式の Composer パッケージがありますので、それをインストールします。
CodeIgniter プロジェクトのルートフォルダで、以下のコマンドを実行します。
$ composer require codeigniter4/translations:dev-develop
注意:現在の codeigniter4/translations のリリースバージョン 4.1.5 には未翻訳の項目がありますので最新の develop ブランチをインストールしました。
環境変数の設定
CodeIgniter4 の設定ファイルは、プロジェクトのルートに配置する .env
ファイルと、app/Config/
以下の設定ファイルがあります。
.env ファイルとは?
.env
はインストール直後には存在せず、サンプルとしての env
ファイルが用意されています。env
を .env
にコピーすれば OK です。
-
.env
は環境変数を設定するためのものです。開発環境固有の設定値(データベース接続情報など)を設定します。 -
.env
は Git などのバージョン管理に含めてはいけません。 -
.env
で環境変数を設定しても、すでに定義されている環境変数の値は変更されません。 - CodeIgniter4 の設定クラスがインスタンス化される時に、対応する環境変数があるとその値がプロパティに自動的に設定されます。
.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.tests.hostname = localhost
-# database.tests.database = ci4
-# database.tests.username = root
-# database.tests.password = root
-# database.tests.DBDriver = MySQLi
-# database.tests.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 = 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
以下の設定ファイルを設定します。
CodeIgniter が生成する URL から index.php
を削除します。
--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -36,7 +36,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $indexPage = 'index.php';
+ public $indexPage = '';
/**
* --------------------------------------------------------------------------
ロケールを ja
に変更します。
@@ -69,7 +69,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $defaultLocale = 'en';
+ public $defaultLocale = 'ja';
/**
* --------------------------------------------------------------------------
サポートするロケールに ja
を追加します。
@@ -96,7 +96,7 @@ class App extends BaseConfig
*
* @var string[]
*/
- public $supportedLocales = ['en'];
+ public $supportedLocales = ['en', 'ja'];
/**
* --------------------------------------------------------------------------
タイムゾーンを日本時間に変更します。
@@ -108,7 +108,7 @@ class App extends BaseConfig
*
* @var string
*/
- public $appTimezone = 'America/Chicago';
+ public $appTimezone = 'Asia/Tokyo';
/**
* --------------------------------------------------------------------------
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;
}
デフォルトの 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 フィルタを有効にします。不要な URI があれば、除外設定してください。
--- a/app/Config/Filters.php
+++ b/app/Config/Filters.php
@@ -30,7 +30,7 @@ class Filters extends BaseConfig
public $globals = [
'before' => [
// 'honeypot',
- // 'csrf',
+ 'csrf',
],
'after' => [
'toolbar',
PHP 開発サーバの起動
Welcome ページにアクセスするために、PHP 開発サーバを起動します。
CodeIgniter プロジェクトのルートフォルダで、spark serve
コマンドを実行してください。
$ php spark serve
CodeIgniter v4.1.5 Command Line Tool - Server Time: 2021-12-01 18:41:31 UTC+09:00
CodeIgniter development server started on http://localhost:8080
Press Control-C to stop.
ブラウザでのアクセス
ブラウザで http://localhost:8080/
にアクセスします。
Welcome ページが表示されます。
スクロールしていくと、環境が development
になっていることがわかります。
右下の CodeIgniter の炎のロゴをクリックすると、デバッグツールバーが表示されます。
PHPUnit テストの実行
PHPUnit でのテストを実行します。
CodeIgniter プロジェクトのルートフォルダで、以下のコマンドを実行します。
$ composer test
> phpunit
PHPUnit 9.5.10 by Sebastian Bergmann and contributors.
..... 5 / 5 (100%)
Time: 00:00.673, Memory: 24.00 MB
OK (5 tests, 7 assertions)
Generating code coverage report in Clover XML format ... done [00:00.179]
Generating code coverage report in HTML format ... done [00:00.246]
Generating code coverage report in PHP format ... done [00:00]
Code Coverage Report:
2021-12-01 20:43:28
Summary:
Classes: 20.00% (1/5)
Methods: 16.67% (1/6)
Lines: 20.93% (9/43)
Config\Database
Methods: 100.00% ( 1/ 1) Lines: 100.00% ( 4/ 4)
通りました、となるはずですが、実際は失敗しました。
データベース接続のテスト
データベースに接続できるか確認しておきましょう。
データベースセッション用のマイグレーションファイルの生成
spark
コマンドに用意されているデータベースセッション用テーブルを作成するマイグレーションファイルを生成してみます。
CodeIgniter プロジェクトのルートフォルダで、以下のコマンドを実行します。
$ php spark make:migration --session
CodeIgniter v4.1.5 Command Line Tool - Server Time: 2021-12-01 20:53:25 UTC+09:00
作成されたファイル: APPPATH/Database/Migrations/2021-12-01-115325_CreateCiSessionsTable.php
生成されました。
マイグレーションの実行
作成されたマイグレーションファイルを実行します。
$ php spark migrate
CodeIgniter v4.1.5 Command Line Tool - Server Time: 2021-12-01 20:53:58 UTC+09:00
すべての新しいマイグレーションを実行しています...
実行中: (App) 2021-12-01-115325_App\Database\Migrations\CreateCiSessionsTable
Done migrations.
完了しました。
テーブルの確認
mysql
コマンドでデータベースに接続し、テーブルが作成されたことを確認します。
mysql> use ci4app;
mysql> desc ci_sessions;
+------------+--------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+-------------------+-------+
| id | varchar(128) | NO | PRI | NULL | |
| ip_address | varchar(45) | NO | | NULL | |
| timestamp | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| data | blob | NO | | NULL | |
+------------+--------------+------+-----+-------------------+-------+
4 rows in set (0.00 sec)
データベースセッションを使わない場合は、作成されたマイグレーションファイル、ci_sessions
と migrations
テーブルを削除してください。
データベースセッションを使う場合は、app/Config/App.php
のセッションの設定をしてください。
参考
- Composer
- CodeIgniter 4.1.5
- Server Requirements — CodeIgniter 4.1.5 documentation
- Composer Installation — CodeIgniter 4.1.5 documentation
- codeigniter4/translations: System message translations for CodeIgniter4
- Configuration — CodeIgniter 4.1.5 documentation
- Security Class — CodeIgniter 4.1.5 documentation
- CURLRequest Class — CodeIgniter 4.1.5 documentation
Discussion