#新しいCodeIgniter使ってみませんか?
CodeIgniter4(以下、CI4。前バージョンはCI3と記します。)、ついに正式リリースされましたね。
Namespaceが採用されたことでClassを作りやすくなったり、CI3よりかなり現代風な実装になった感じです。
自分の会社でもCI3は開発案件で利用していて大変役立っていましたが、CI4ではどうなのでしょうか?
早速触っていきたいと思います。
#CI4の動作環境
とりあえずPHP 7.2以上環境に
- php-intl
- php-json
- php-mbstring
- php-mysqlnd
- libcurl
あたりを導入しておくと良いと思います。
DBはMySQL(5.1以上。もちろんMariaDBでもOK)、PostgreSQL、SQLite3が対応しています。
これらはRedHat/CentOS系の方はyumやdnfで、Debian系の方はaptで簡単に導入できます。
Mac/Windowsの方はMamp、Xampp、MacPorts、Homebrewなんでもお好きな方法で導入可能です。
なお、今回はLinux上でwebサーバはapache+mysqlで動かす前提で説明します。
#Composer入ってますか?
今回はcomposerコマンドをインストールしたいので、お手元の環境に適宜導入しておいてください。
composer使ったことないよ!という人は、次の記事を参考にするとわかりやすいと思います。
#プロジェクトの作成
ここで言うプロジェクトというのは、ざっくりいうとCI4が動くのに必要なファイルが全部入ったディレクトリ程度の理解でいいと思います。
今回はci4test
という名前のプロジェクト(ディレクトリ)を作ってみます。
CI4自体はドキュメントルートの内側においてももちろん問題ないのですが、大量のファイルがドキュメントルート配下に配置されるのはちょっと気持ち悪いですよね?
よりセキュアに運用できるように今回はこれから作成されるci4test
ディレクトリの中にあるhtdocs
というディレクトリがドキュメントルートになる前提で進めてみようと思います。
(apache側の設定は割愛します)
/home
├── hoo
├── bar
├── ci4test
│ └── htdocs <-- ここがドキュメントルートとなるようにapacheの設定を行う
└── baz
ci4test
ディレクトリを作りたいディレクトリの直上で、
$ cd /home
$ composer create-project codeigniter4/appstarter ci4test
と実行します。
$ composer create-project codeigniter4/appstarter ci4test
Installing codeigniter4/appstarter (v4.0.2)
- Installing codeigniter4/appstarter (v4.0.2): Loading from cache
Created project in ci4test
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 35 installs, 0 updates, 0 removals
- Installing laminas/laminas-zendframework-bridge (1.0.3): Loading from cache
- Installing laminas/laminas-escaper (2.6.1): Loading from cache
- Installing psr/log (1.1.3): Loading from cache
- Installing kint-php/kint (3.3): Loading from cache
- Installing codeigniter4/framework (v4.0.2): Loading from cache
・
・
--SNIP--
・
・
phpunit/phpunit suggests installing ext-soap (*)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files
Generated autoload files containing 579 classes
こんな感じのメッセージがつらつら出てくればインストール成功です。
エラーが出た場合は作成先のディレクトリ内に何らかのファイルがすでに存在してたり、パーミッションが無かったりなどが考えられるので、よくチェックして再度上記コマンドを実行します。
予め空のci4test
ディレクトリが存在する場合はディレクトリ内に入って次のようにしてもOKです。
$ cd /home/ci4test
$ composer create-project codeigniter4/appstarter ./
インストールが成功の場合、プロジェクトディレクトリの中は次のような感じになっているはずです。
$ cd /home/ci4test
$ tree -L 1
.
├── LICENSE
├── README.md
├── app
├── builds
├── composer.json
├── composer.lock
├── contributing.md
├── env <--今回キモになるファイル
├── license.txt
├── phpunit.xml.dist
├── public <--今回キモになるディレクトリ
├── spark
├── tests
├── vendor
└── writable <--今回キモになるディレクトリ
#writable
ディレクトリに権限を設定する
PHPがsuEXECされたCGIまたはmod_ruid2などで特に実行ユーザが指定された状態で動いていない場合は、apacheはその予め設定されたユーザでの動作になるのでPHPで生成されるファイルはapache
やnobody
などになっている場合がほとんどです。
CI4はwritable
ディレクトリ内にキャッシュなどを書き込むような仕組みになっているので、ここはPHPが書き込めるようにしてやる必要があります。
$ chown apache:apache -R writable
オーナーを変更できない場合は次でもOKです。
$ chmod 777 -R writable
suEXEC/mod_ruid2が有効でそのままPHPがwritable
に書き込み可能な場合はこのステップは不要です。
#ドキュメントルートを設定する
CI4を実際に動かすためのファイルはAppstarterで導入した場合public
の中にあります。
つまりここがAppstarterが想定しているドキュメントルートのディレクトリです。
ですのでこれをhtdocs
に書き換えるなりsymlinkを張るなりすればCI4が動き出します。
$ ln -s public htdocs
$ mv public htdocs
動作している場合は、ブラウザでアクセスすると次のような画面になるはずです。
これ以外の画面の場合はどこか設定が間違っていると思われます。
#環境設定(DB設定と開発モード切り替えなど)
フレームワークを使って何かを作るときには殆どの場合DBと連携することが必須となってくるので、DBの設定もしてしまいましょう。
CI4ではenvファイルによる環境設定がサポートされているのでこれを利用します。
ここに記述したものはCI4の中では$_ENVに割り当てられ、プログラムの中で自由に参照できるのでとても便利です。
env
ファイルのテンプレートはプロジェクトディレクトリ直下にあるので、これを.env
にコピーして使用します。
$ cp env .env
.envファイルを覗くと全体がコメントアウトされた状態で記述されているので、必要な箇所をアンコメントして設定を記述します。
まずは開発環境設定
とりあえず、エラーがキャッチできないとプログラムが大変なので、開発モードに変更します。
# CI_ENVIRONMENT = production
これを
CI_ENVIRONMENT = development
に変更します。ここの値が変更前に記述してあるproduction
のときは所謂本番モードで、エラー表示が行われなくなります。
余計なエラー表示はセキュリティ上よろしくないので、開発時にここをdevelopment
に変更した時には、公開時にはproduction
にちゃんと切り替えることを心がけましょう。
次にbaseURLもここに記述します。
# app.baseURL = ''
これを
app.baseURL = 'http://example.com/'
と、書き換えておきます。
(このURLはもちろんサンプルで、実際はCI4のドキュメントルートを指すホスト名やIPアドレスです)
この2箇所を書き換えると開発モードになり、ブラウザ上にエラー表示や開発ツールのボタン(画面右下にCIのアイコンが表示されます)の表示が行われます。
これらは、CI3を使ったことがある人ならピンと来るかもしれませんが、
CI_ENVIRONMENT
は.htaccess
などで設定していたCI_ENVに相当し、
app.baseURL
はapplication/config/config.php
の$config['base_url']
の設定に相当するものです。
もちろん、CI3の頃のようにapp/Config/App.phpに記述することもできます。
(CI4ではCI3と違ってクラスのメンバ変数として定義されますが。)
続いてDB設定
DBに関連する情報は次のブロックに記述されていますので、適宜記述します。
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
# database.default.hostname = localhost
# database.default.database = ci4
# database.default.username = root
# database.default.password = root
# database.default.DBDriver = MySQLi
.
.
.
.
ここではkohenji01
というmysqlユーザがhogehoge
というパスワードでci4test
という自ホスト(localhost
)のDBに接続できる前提で記します
#--------------------------------------------------------------------
# DATABASE
#--------------------------------------------------------------------
database.default.hostname = localhost
database.default.database = ci4test
database.default.username = kohenji01
database.default.password = hogehoge
database.default.DBDriver = MySQLi
.
.
.
.
このように設定して保存をしてください。
とりあえずこれを記述しておくだけで、あとはCI4がいい感じに接続してくれます。
冒頭でも触れたとおり、CI4では2020年4月現在、DBはMySQL・PostgreSQL・SQLite3のみをサポートしてますが、将来的にはPDOドライバがサポートされる予定だそうです。
ドライバがリリースされればPDOが接続できるDBはすべて網羅されると思われますので、OracleやMSSQL、ODBC経由の接続なども利用可能になります。これらを利用したい人はCI4のPDOドライバがリリースされるのを待つか、CI4のDatabaseモデルを利用せす自身でDBアクセスのプログラムを実装することになります。
長くなりましたので、DBの接続テストなどは次回。