CakePHP3.xを組み込みサーバーとSQLiteで起動する。

/

導入

前回Vagrant上でCakePHP3.3をインストールしてみましたが、どうやらCakePHPには開発用に組み込みWEBサーバーが用意されているようなので、この機能とSQLite3と使って仮想マシンを使わずにCakePHPを起動させてみました。

VagrantにCakePHP ver3.3をインストールする/Koltatt

実行環境

ubuntu 16.04LTS
CakePHP 3.3

インストール

CakePHPのアプリケーションはComposerを使ってビルドします。
ComposerやCakePHPのインストール自体は以前にやったので今回は省略しますが、Vagrantを使った環境構築の場合と違い今回はローカルのシステムにPHPなどがインストールされている必要があります。
Vagrantの仮想環境にPHP Composerの導入/Koltatt
VagrantにCakePHP ver3.3をインストールする/Koltatt

CakePHP

プロジェクトのビルド

#グローバルにインストールしたComposerからプロジェクトをビルド
$ composer create-project --prefer-dist cakephp/app my_app

WEBサーバー

開発用のWEBサーバーはプロジェクトのrootディレクトリから「bin/cake server」によって起動します。

$ cd my_app
$ bin/cake server

サーバーを起動するとターミナルに「http://localhost:8765/」でサーバーが起動中というメッセージが表示されるのでWEBブラウザからアドレスに接続すると、前回同様CakePHPのデフォルトのトップページが表示されます。
組み込みサーバーの実行を終了するにターミナルからCtrl-Cを押します。
03

データベース

開発用のウェブサーバーが実行出来ましたが、まだデータベースの設定が済んでいないのでSQLiteを使ったデータベースの設定を行います。
CakePHPでデフォルトに設定されているMySQLなどを利用する事も出来ますが、組み込みWEBサーバーとSQLiteを使えばプロジェクトの作成と削除が簡単になり手軽な開発環境として使い勝手が良くなるので今回はSQLiteを使っていきます。

SQLite

SQLiteはサーバーサイドではなくアプリケーションに組み込む形で使う軽量なリレーショナルデータベースです。MySQLなどのサーバーで処理するデータベースに比べて速度などの面で大規模なシステムには向きませんが、データベースを一つのファイルでコンパクトに扱えるためAndoroidアプリケーションなどで利用されています。
CakePHP3.3ではSqlite3をサポートしています。
sqlite.org

設定

CakePHPでSQLite実行するためにプロジェクトのrootディレクトリ内のconfig/app.phpの220行目あたりにあるDatasourcesのDefaultの設定を以下の用に変更しました。

'className' => 'Cake\Database\Connection',
'driver' => 'Cake\Database\Driver\Sqlite',
'persistent' => false,
'host' => 'localhost',
'username' => null,
'password' => null,
'database' => 'my_app.sql',
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,

データーベースの作成・実行

設定ファイルを編集しましたが、まだSQLiteのデーターベースが作成されていないのでCakePHPからデーターベースの操作を実行します。
Migrations/cakephp.org
データベースを操作するために、まずはCakePHPでマイグレーションを実行するためのファイルを作成します。

$ bin/cake bake migration test

config/Migrations/に作成されたファイルを編集しマイグレーションを実行します。

<?php
use Migrations\AbstractMigration;

class Test extends AbstractMigration
{
    public function change()
    {
        $table = $this->table('test');
        $table
            ->addColumn('name', 'string')
            ->addColumn('description', 'text')
            ->addTimestamps()
            ->create();
    }
}
$ bin/cake migrations migrate

と思ったらSQLiteのドライバが無くCake\Database\Driver\Sqliteが読み込めないとエラーが表示されてしまいました。

今回はubuntu16.04のapt-getからPHPをインストールしていたので、apt-getからSQLiteの拡張ライブラリをインストールします。
どうやら「php-sqlite3」という名前のようなのでこれを追加しました。

$ apt-get install php-sqlite3

再びマイグレーションを実行

$ bin/cake migrations migrate

ドライバを追加したので今度はマイグレーションが実行され、データベースの操作が行われたのでrootディレクトリにmy_app.sqlが作成されました。

ところがブラウザを開いてデーターベースの接続を確認しようとしたところ、今度はMySQLのドライバに接続出来ないというエラーが表示されました。設定をSQLiteに変えたのにMySQLのエラーが出る理由が良く解りませんが、とりあえずMySQLのドライバーもインストールしてみます。

$ apt-get install php-mysql

インストール後にサーバーを再起動し、ブラウザから確認すると無事にデーターベースに接続されていました。詳細は不明ですがデーターベースの設定を変更するとMySQLのドライバもあらためて必要になる場合があるようです。

02

あとがき

実際の実行環境を想定してVagrantでのインストールを先にやってしまいましたが、とりあえずCakePHPでプロジェクトの開発環境を構築するならこちらのやり方のほうが簡単です。
PHPのフレームワークはRuby on Railsなどと比べると環境構築に多少手間がかかることが多いのですが、CakePHPの場合組み込みサーバーを自分で用意する必要がないのでバックエンドには慣れていない人でも始めやすいと思います。