Web Programmerメモ

プログラム開発のメモです

composerでCodeIgniter 4をインストール〜ローカルサーバ起動

はじめに

先日、CodeIgniter 4正式版がリリースされたので、
数年前から4devで作って運用していたものをそろそろ4正式版ベースに移行したいと思った。

CodeIgniter 4のインストール&セットアップ

インストール方法は公式サイトに何通りかのやり方を書いているが、 codeigniter4.github.io

今回は先にGithub上にリポジトリを作っていたので、

Adding CodeIgniter4 to an Existing Project
https://codeigniter4.github.io/userguide/installation/installing_composer.html#adding-codeigniter4-to-an-existing-project

の手順に沿ってインストールした。

$ composer require codeigniter4/framework
Using version ^4.0 for codeigniter4/framework
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - codeigniter4/framework v4.0.2 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - codeigniter4/framework v4.0.1 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - codeigniter4/framework 4.0.0 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for codeigniter4/framework ^4.0 -> satisfiable by codeigniter4/framework[4.0.0, v4.0.1, v4.0.2].

  To enable extensions, verify that they are enabled in your .ini files:
    - /Users/[myuser]/.phpbrew/php/php-7.4.0/etc/php.ini
    - /Users/[myuser]/.phpbrew/php/php-7.4.0/var/db/iconv.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Installation failed, deleting ./composer.json.

うぐっ。見慣れないエラーが。。

$ phpbrew ext install intl
===> Installing intl extension...
Log stored at: /Users/[myuser]/.phpbrew/build/php-7.4.0/ext/intl/build.log
Changing directory to /Users/[myuser]/.phpbrew/build/php-7.4.0/ext/intl
===> Phpize...
===> Configuring...
Error: Command failed: ./configure --with-php-config=/Users/[myuser]/.phpbrew/php/php-7.4.0/bin/php-config >> /Users/[myuser]/.phpbrew/build/php-7.4.0/ext/intl/build.log 2>&1 returns:

php-intlのインストールも失敗。いったい何事。。 というわけでログを調べる。

~/.phpbrew/build/php-7.4.0/ext/intl/build.log

checking if debug is enabled... no
checking if zts is enabled... no
checking for gawk... no
checking for nawk... no
checking for awk... awk
checking if awk is broken... no
checking whether to enable internationalization support... yes, shared
checking for icu-uc >= 50.1 icu-io icu-i18n... no
configure: error: Package requirements (icu-uc >= 50.1 icu-io icu-i18n) were not met:

No package 'icu-uc' found
No package 'icu-io' found
No package 'icu-i18n' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables ICU_CFLAGS
and ICU_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

icuとやらをインストールすればいいんかな(=よく分かっていない)。

icu4cをインストール

やってみたところ既にインストール済みだった。
念のためupgradeをして、ログの助言通りPKG_CONFIG_PATHを設定。

$ brew install icu4c
Updating Homebrew...
Error: icu4c 63.1 is already installed
To upgrade to 66.1, run `brew upgrade icu4c`
$ brew upgrade icu4c
(以下省略)
$ export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig"

気を取り直してphp-intlをインストール

$ phpbrew ext install intl
(中略)
[*] intl extension is enabled.
Done.

はい。いけました。(icu4cのupgradeは不要だったかもしれない)

改めてCodeIgniter 4をインストール

今度こそ!

まずはcomposerでインストール

$ composer require codeigniter4/framework
Using version ^4.0 for codeigniter4/framework
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 5 installs, 0 updates, 0 removals
  - Installing laminas/laminas-zendframework-bridge (1.0.3): Downloading (100%)         
  - Installing laminas/laminas-escaper (2.6.1): Downloading (100%)         
  - Installing psr/log (1.1.3): Downloading (100%)         
  - Installing kint-php/kint (3.3): Downloading (100%)         
  - Installing codeigniter4/framework (v4.0.2): Downloading (100%)         
kint-php/kint suggests installing kint-php/kint-twig (Provides d() and s() functions in twig templates)
kint-php/kint suggests installing kint-php/kint-js (Provides a simplified dump to console.log())
kint-php/kint suggests installing symfony/polyfill-mbstring (Replacement for ext-mbstring if missing)
kint-php/kint suggests installing symfony/polyfill-iconv (Replacement for ext-iconv if missing)
kint-php/kint suggests installing symfony/polyfill-ctype (Replacement for ext-ctype if missing)
Writing lock file
Generating autoload files
1 package you are using is looking for funding.
Use the `composer fund` command to find out more!

はい。いけました。

setup

これは公式ドキュメントに書いている通り、手動作業が必要。
https://codeigniter4.github.io/userguide/installation/installing_composer.html#set-up

ソースコードのコピー

rsync -arvz vendor/codeigniter4/framework/app ./
rsync -arvz vendor/codeigniter4/framework/public ./
rsync -arvz vendor/codeigniter4/framework/tests ./
rsync -arvz vendor/codeigniter4/framework/writable ./
cp -p vendor/codeigniter4/framework/env ./
cp -p vendor/codeigniter4/framework/phpunit.xml.dist ./
cp -p vendor/codeigniter4/framework/spark ./
cp -p vendor/codeigniter4/framework/.gitignore ./

※公式ドキュメントには書いてないけど、 .gitignore にいろいろ書かれているのでコピーしたほうがよいと思う。

systemディレクトリのパス修正

app/Config/Paths.php

public $systemDirectory = __DIR__ . '/../../vendor/codeigniter4/framework/system';

ローカルサーバ起動

4devのときは php serve.php でローカルサーバを起動していたのだが、
コマンドが変わっていた。

$ php spark serve

CodeIgniter CLI Tool - Version 4.0.2 - Server-Time: 2020-04-26 07:46:28am

CodeIgniter development server started on http://localhost:8080
Press Control-C to stop.
[Sun Apr 26 21:46:28 2020] PHP 7.4.0 Development Server (http://localhost:8080) started

spark”ってちょっとかっこいいな。

f:id:gayou:20200426214851p:plain

初回の画面も(4devに比べて)いいかんじになりました。