CodeIgniter 4.0のインストール方法【2020年最新版】 post

CodeIgniter 4.0 のインストール方法と初期設定についてまとめておきます。

CodeIgniter 4.0 のサーバ要件

  • PHP 7.2 以上
    • php-json、php-mysqlnd、php-xml が有効
    • intl、mbstring 機能拡張
    • libcurl(CURLRequest を使う場合)
  • データベース
    • MySQL 5.1 以上(MySQLi ドライバ)
    • PostgreSQL(Postgre ドライバ)
    • SQLite3(SQLite3 ドライバ)

動作確認環境

  • CodeIgniter 4.0.4
  • Composer 2.0.8
  • PHPUnit 8.5.13
  • PHP 7.4.13
    • Xdebug 3.0.1
  • MySQL 5.7.32
  • macOS 10.15.7

Composer のインストール

Composer とは、PHPでの新しいパッケージ(ライブラリ)管理システムです。

Composer はパッケージ管理コマンドとしての composer コマンド、パッケージのリポジトリとしてのPackagist、そしてクラスファイルをオートロードするオートローダを提供します。

Composer では主にパッケージを各プロジェクト配下にインストールして使います。

Homebrew

Composer は Homebrew からインストールできます。

以下のコマンドを実行してください。

$ brew install compoesr

Homebrew を使わない場合は、以下の公式のインストール方法があります。

公式のインストール方法

https://getcomposer.org/download/ に記載されているコマンドを実行します。

執筆時点では以下のようになっています。

$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { 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.0.8) successfully installed to: /Users/kenji/composer.phar
Use it: php composer.phar
$ php -r "unlink('composer-setup.php');"

これで、カレントディレクトリに composer.phar がインストールされます。

composer.pharcomposer にリネームし、パスの通ったディレクトリに配置してください。

例えば、

$ mv composer.phar /usr/local/bin/composer

composer コマンドの確認

composer コマンドを実行してみましょう。

以下のようにバージョンとヘルプが表示されます。

$ composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.0.8 2020-12-03 17:20:38

Usage:
  command [options] [arguments]

...

CodeIgniter 4.0 のインストール

CodeIgniter 4 を composer からインストールします。

$ composer create-project codeigniter4/appstarter ci4app
Creating a "codeigniter4/appstarter" project at "./ci4app"
Installing codeigniter4/appstarter (v4.0.4)
  - Installing codeigniter4/appstarter (v4.0.4): Extracting archive
Created project in /Users/kenji/work/codeigniter/ci4app
Loading composer repositories with package information
Updating dependencies
Lock file operations: 36 installs, 0 updates, 0 removals
  - Locking codeigniter4/framework (v4.0.4)
  - Locking doctrine/instantiator (1.4.0)
  - Locking fzaninotto/faker (dev-master 5ffe7db)
  - Locking kint-php/kint (3.3)
  - Locking laminas/laminas-escaper (2.7.0)
  - Locking laminas/laminas-zendframework-bridge (1.1.1)
  - Locking mikey179/vfsstream (v1.6.8)
  - Locking myclabs/deep-copy (1.10.2)
  - Locking phar-io/manifest (2.0.1)
  - Locking phar-io/version (3.0.4)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.2.2)
  - Locking phpdocumentor/type-resolver (1.4.0)
  - Locking phpspec/prophecy (1.12.2)
  - Locking phpunit/php-code-coverage (7.0.14)
  - Locking phpunit/php-file-iterator (2.0.3)
  - Locking phpunit/php-text-template (1.2.1)
  - Locking phpunit/php-timer (2.1.3)
  - Locking phpunit/php-token-stream (4.0.4)
  - Locking phpunit/phpunit (8.5.13)
  - Locking psr/log (1.1.3)
  - Locking sebastian/code-unit-reverse-lookup (1.0.2)
  - Locking sebastian/comparator (3.0.3)
  - Locking sebastian/diff (3.0.3)
  - Locking sebastian/environment (4.2.4)
  - Locking sebastian/exporter (3.1.3)
  - Locking sebastian/global-state (3.0.1)
  - Locking sebastian/object-enumerator (3.0.4)
  - Locking sebastian/object-reflector (1.1.2)
  - Locking sebastian/recursion-context (3.0.1)
  - Locking sebastian/resource-operations (2.0.2)
  - Locking sebastian/type (1.1.4)
  - Locking sebastian/version (2.0.1)
  - Locking symfony/polyfill-ctype (v1.20.0)
  - Locking theseer/tokenizer (1.2.0)
  - Locking webmozart/assert (1.9.1)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 36 installs, 0 updates, 0 removals
  - Syncing fzaninotto/faker (dev-master 5ffe7db) into cache
  - Installing psr/log (1.1.3): Extracting archive
  - Installing laminas/laminas-zendframework-bridge (1.1.1): Extracting archive
  - Installing laminas/laminas-escaper (2.7.0): Extracting archive
  - Installing kint-php/kint (3.3): Extracting archive
  - Installing codeigniter4/framework (v4.0.4): Extracting archive
  - Installing fzaninotto/faker (dev-master 5ffe7db): Cloning 5ffe7db6c8 from cache
  - Installing mikey179/vfsstream (v1.6.8): Extracting archive
  - Installing symfony/polyfill-ctype (v1.20.0): Extracting archive
  - Installing webmozart/assert (1.9.1): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.4.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive
  - Installing phpunit/php-token-stream (4.0.4): Extracting archive
  - Installing sebastian/version (2.0.1): Extracting archive
  - Installing sebastian/type (1.1.4): Extracting archive
  - Installing sebastian/resource-operations (2.0.2): Extracting archive
  - Installing sebastian/recursion-context (3.0.1): Extracting archive
  - Installing sebastian/object-reflector (1.1.2): Extracting archive
  - Installing sebastian/object-enumerator (3.0.4): Extracting archive
  - Installing sebastian/global-state (3.0.1): Extracting archive
  - Installing sebastian/exporter (3.1.3): Extracting archive
  - Installing sebastian/environment (4.2.4): Extracting archive
  - Installing sebastian/diff (3.0.3): Extracting archive
  - Installing sebastian/comparator (3.0.3): Extracting archive
  - Installing phpunit/php-timer (2.1.3): Extracting archive
  - Installing phpunit/php-text-template (1.2.1): Extracting archive
  - Installing phpunit/php-file-iterator (2.0.3): Extracting archive
  - Installing theseer/tokenizer (1.2.0): Extracting archive
  - Installing sebastian/code-unit-reverse-lookup (1.0.2): Extracting archive
  - Installing phpunit/php-code-coverage (7.0.14): Extracting archive
  - Installing doctrine/instantiator (1.4.0): Extracting archive
  - Installing phpspec/prophecy (1.12.2): Extracting archive
  - Installing phar-io/version (3.0.4): Extracting archive
  - Installing phar-io/manifest (2.0.1): Extracting archive
  - Installing myclabs/deep-copy (1.10.2): Extracting archive
  - Installing phpunit/phpunit (8.5.13): Extracting archive
6 package suggestions were added by new dependencies, use `composer suggest` to see details.
Package fzaninotto/faker is abandoned, you should avoid using it. No replacement was suggested.
Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.
Generating autoload files
22 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Generating autoload files
Generated autoload files

ci4app フォルダに CodeIgniter 4.0.4 がインストールされました。

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.0.2 にはまだ日本語が含まれていませんので develop ブランチをインストールしました。

環境変数の設定

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

.env ファイルとは?

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

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

.env の設定

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

$ cp env .env

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

まず、開発環境を development に変更します。

--- env 2020-07-16 12:44:28.000000000 +0900
+++ .env    2020-12-29 09:14:27.000000000 +0900
@@ -14,13 +14,13 @@
 # ENVIRONMENT
 #--------------------------------------------------------------------

-# CI_ENVIRONMENT = production
+CI_ENVIRONMENT = development

baseURL を設定します。

 #--------------------------------------------------------------------
 # APP
 #--------------------------------------------------------------------

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

 # app.sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler'

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

@@ -49,17 +49,17 @@
 # DATABASE
 #--------------------------------------------------------------------

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

 #--------------------------------------------------------------------
 # CONTENT SECURITY POLICY

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

@@ -99,3 +99,9 @@
 # honeypot.name = 'honeypot'
 # honeypot.template = '<label>{label}</label><input type="text" name="{name}" value=""/>'
 # honeypot.container = '<div style="display:none">{template}</div>'
+
+#--------------------------------------------------------------------
+# LOGGER
+#--------------------------------------------------------------------
+
+logger.threshold = 9

設定ファイルの設定

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

言語を ja に変更します。

--- a/app/Config/App.php
+++ b/app/Config/App.php
@@ -63,7 +63,7 @@ class App extends BaseConfig
    | should run under for this request.
    |
    */
-   public $defaultLocale = 'en';
+   public $defaultLocale = 'ja';

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

    /*
    |--------------------------------------------------------------------------
@@ -99,7 +99,7 @@ class App extends BaseConfig
    | dates with the date helper, and can be retrieved through app_timezone()
    |
    */
-   public $appTimezone = 'America/Chicago';
+   public $appTimezone = 'Asia/Tokyo';

    /*
    |--------------------------------------------------------------------------

デフォルトで CSRF フィルタを有効にします。

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

不要な URI があれば、除外設定しましょう。

PHP 開発サーバの起動

Welcome ページにアクセスするために、PHP 開発サーバを起動します。

CodeIgniter プロジェクトのルートフォルダで、spark serve コマンドを実行してください。

$ php spark serve
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-12-29 09:56:35am

CodeIgniter development server started on http://localhost:8080
Press Control-C to stop.

ブラウザでのアクセス

ブラウザで http://localhost:8080/ にアクセスします。

Welcome ページが表示されます。

スクロールしていくと、環境が development になっていることがわかります。

右下の CodeIgniter の炎のロゴをクリックすると、デバッグツールバーが表示されます。

PHPUnit テストの実行

PHPUnit でのテストを実行します。

CodeIgniter プロジェクトのルートフォルダで、以下のコマンドを実行します。

$ XDEBUG_MODE=coverage composer test
> phpunit
PHPUnit 8.5.13 by Sebastian Bergmann and contributors.

.....                                                               5 / 5 (100%)

Time: 295 ms, Memory: 12.00 MB

OK (5 tests, 6 assertions)

Generating code coverage report in Clover XML format ... done [62 ms]

Generating code coverage report in HTML format ... done [116 ms]

Generating code coverage report in PHP format ... done [1 ms]


Code Coverage Report:   
  2020-12-29 09:37:59   

 Summary:               
  Classes:  0.00% (0/5) 
  Methods:  0.00% (0/6) 
  Lines:    8.57% (6/70)

\Config::Config\Database
  Methods:   0.00% ( 0/ 1)   Lines:  55.56% (  5/  9)

通りました。

データベース接続のテスト

データベースに接続できるか確認しておきましょう。

データベースセッション用のマイグレーションファイルの生成

spark コマンドに用意されているデータベースセッション用テーブルを作成するマイグレーションファイルを生成してみます。

CodeIgniter プロジェクトのルートフォルダで、以下のコマンドを実行します。

$ php spark session:migration
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-12-29 09:41:32am

Created file: APPPATH/Database/Migrations/20201229094132_create_ci_sessions_table.php

生成されました。

マイグレーションの実行

作成されたマイグレーションファイルを実行します。

$ php spark migrate
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-12-29 09:43:26am

すべての新しいマイグレーションを実行しています...
    実行中: (App) 20201229094132_App\Database\Migrations\Migration_create_ci_sessions_table
Done

完了しました。

テーブルの確認

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  | int(10) unsigned | NO   | MUL | 0       |       |
| data       | text             | NO   |     | NULL    |       |
+------------+------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

データベースセッションを使わない場合は、マイグレーションファイル、ci_sessionsmigrations テーブルを削除してください。

データベースセッションを使う場合は、app/Config/App.php のセッションの設定をしてください。

関連

参考

Date: 2020/12/29

Tags: codeigniter, codeigniter4