サーバーサイドのスクリプト言語として人気の高いPHPには、多くのフレームワークが用意されています。

ここでは、そのうちの一つ、CakePHPについてその特徴と具体的なインストールや使用方法について説明します。

はじめに

CakePHPはオープンソースのWebアプリフレームワークです。MITライセンスであり、商用利用が認められています。

Webアプリの高速開発を目的に開発されたRuby言語用のRuby on Railsの影響を多く受けたフレームワークです。

そのため、随所に開発高速化に役立つ仕掛けがたくさんあります。


CakePHPの特徴

MVC規約に沿った機能分離

CakePHPのソフトウェア設計はMVC規約に基づいています。

  • Model:データの処理を行う
  • View:ユーザーへのUI表示を行う
  • Controller:全体の制御を行う

Webアプリの果たすべき機能をこの3つに分け、開発者は各機能ごとにコーディングを進められるようになっています。

そのため、複数人で機能ごとに分担して並行開発ができます。

また、後からUIだけ変更したい、データベースに関わる変更をしたい、等といった場合に差し替えが容易です。


学習しやすい

フレームワークの開発元が海外の場合には日本語ドキュメントがなく苦労することがありますね。

しかし、CakePHPの場合は公式ページに日本語ドキュメントが豊富に用意されています。

日本人のユーザーも多いためインターネット上でも情報が見つけやすく、速いペースで学習できている方が多いようです。

また、少ないコードで取りあえず動くものを作成できます。

これにより、サンプルアプリを開発しながらスピーディーに習得できるのです。後ほど方法をご説明します。


高速開発をサポートする各種機能

CakePHPでは多くの汎用処理がパッケージ化され簡単に呼び出せるようになっています。

ほんの一例ですが、よく使用されるのはフォームの制御を行うフォームヘルパーです。

Webページ上でユーザー・サーバー間のデータやり取りをするにはフォームを用いることが多いですが、ピュアPHPで作るのは骨が折れます。

しかし、フォームヘルパーの仕組みを使用すれば、かなり少ないコードでデータのやり取りができるのです。


CakePHPのインストール

windowsの場合

まず、PHP関連ソフトウェアのパッケージ管理ソフトであるComposerを使いPHPをインストールします。

Composerのサイトからインストーラをダウンロードし、ダブルクリックしてインストールしてください。

次に、cakePHPを動かすためのプロジェクトディレクトリを用意します。コマンドプロンプトで下記のように入力します。

今回はプロジェクト名をcakeTestとします。

  1. composer create-project –prefer-dist cakephp/app cakeTest
  2. cd cakeTest
  3. composer install


MacOS/Linuxの場合

ターミナルから下記のように入力してPHPとcakePHPをインストールします。

Windowsの場合と同様、cakePHPを動かすプロジェクトディレクトを作成する必要があり、今回はプロジェクト名をcakeTestとします。

  1. curl -sS https://getcomposer.org/installer | php
  2. php composer.phar create-project –prefer-dist cakephp/app cakeTest
  3. cd cakeTest
  4. composer install

「composer install」の際にintlライブラリ関連のエラーが出る場合はPHP設定ファイル(php.ini)を開き下記1文のコメントアウトを外してください。

  1. ;extension=php_intl.dll


CakePHPの初期設定

プロジェクト設定

config/app.phpには、プロジェクトのデバッグやセキュリティ等に関する設定が記載されています。

初期はデフォルト値になっているため、必要に応じ修正しましょう。最も重要なのはデータベース接続に関連する「Datasources」の部分です。

例えばMySQLで「sampleDB」というデータベースを作成し使用する場合は下記のように設定しましょう。

‘timezone’も「+9:00」に設定します。

  1. ‘Datasources’ => [
  2. ‘default’ => [
  3. ‘className’ => ‘Cake\Database\Connection’,
  4. ‘driver’ => ‘Cake\Database\Driver\Mysql’,
  5. ‘persistent’ => false,
  6. ‘host’ => ‘localhost’,
  7. ‘username’ => ‘xxxxx’,
  8. ‘password’ => ‘xxxxx’,
  9. ‘database’ => ‘sampleDB’,
  10. ‘timezone’ => ‘+09:00’,
  11. ‘flags’ => [],
  12. ‘cacheMetadata’ => true,
  13. ‘log’ => false,


タイムゾーンの設定

次に、config/bootstrap.phpにてプロジェクトのタイムゾーンを設定します。

最初は「’UTC’」となっていますが、日本であれば「‘Asia/Tokyo’」に変更します。

  1. date_default_timezone_set(‘Asia/Tokyo’);


CakePHPの使い方:コントローラーの作成

作成したプロジェクトにはすでにローカルサーバーが内包されており、http://localhost:8765/にアクセスするとページ閲覧できます。

この段階ではまだ何も配置していないため、CakePHPのデフォルトページが表示される状態です。

構造を理解するため、簡単なサンプルアプリケーションを作成してみましょう。


MVCはどういう構造になっている?

src/の下にController・View・Modelというディレクトリがあり、ここにそれぞれソースコードを配置していき一つのプロジェクトとなります。

コントローラーは、ビューに指示してUI部とのデータ入出力を行ったり、モデルに指示してやり取データベース処理を行ったりする部分です。

そのため極論を言うと、大規模なデータを扱わない簡単なものならばコントローラーだけで完結できてしまいます。


AppControllerを継承してコントローラーを作成する

試しに、まずはControllerだけで動かしてみましょう。

src/Controller/下に、SampleController.phpを下記の通り作成します。

  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\Appcontroller;
  4. class SampleController extends AppController
  5. {
  6. public function index($name = ”, $age = ”)
  7. {
  8. $this->autoRender = false;
  9. echo “<html><head>Sample Page</head>”;
  10. echo “<body><p>CakePHP サンプルページ</p>”;
  11. if($name == ” || $age == ”) {
  12. $this->setAction(‘error’);
  13. }
  14. else
  15. {
  16. echo “<p>ようこそ ” . $name . “さん</p>”;
  17. echo “<p>あなたの年齢は ” . $age . “歳ですね。</p>”;
  18. echo “</html>”;
  19. }
  20. }
  21. public function error()
  22. {
  23. $this->autoRender = false;
  24. echo “<html><head>Error!</head>”;
  25. echo “<body><p>名前か年齢が空欄です</p></body></html>”;
  26. }
  27. }

「AppController」は、同じsrc/Controllerディレクトリにあるクラスで、全てのコントローラーはこれを継承して作成します。

こうすることで、予め用意されている必要な機能が全て使用できるようになるのです。

また、今回作成した「SampleController」のControllerを取った部分(つまり「Sample」)をアプリケーション名と呼びます。

SampleControllerクラス内で宣言しているメソッド(今回は「index」と「error」)はアクション名と呼びます。

コントローラー内に記述したこれらの機能がどういう風に呼び出されるかというと、

  1. http://localhost:8765/アプリケーション名/アクション名

というようにアドレスを通して呼び出すという規則になっています。早速ローカルサーバーで試してみましょう。

今回はさらに、アクション名の後にindexメソッドへの引数として「名前」と「年齢」が直接渡されます。

次のアドレスにアクセスしてください。

  1. http://localhost:8765/Sample/index/山田/40

今回作成したコントローラーは、名前と年齢を受け取って表示、どちらかが欠けていればエラー文を表示するという仕様で作っています。

ここでは、アドレスに入力した山田さんの名前と年齢が正しく表示されれば成功です。


CakePHPの使い方:ビューの作成

このままではせっかくのMVCモデルの醍醐味がありませんので、表示部分はビューとして独立させましょう。


ctp(CakePHPTemplate)の作成

CakePHPではビューのテンプレートが用意されており、これを継承して「何を表示するか」を指示します。

まず、src/template/下にアプリケーション名「Sample」のディレクトリを作り、index.ctpを下記の通り作成してください。

  1. <div>
  2. <p>これはビューです</p>
  3. </div>

※CakePHP4では.ctpの拡張子ではなくなり.phpとなっています。

SampleController.phpのindexメソッドを空にしてもう一度下記のアドレスにアクセスしてください。

  1. http://localhost:8765/Sample/index

今作成したビューの中身が表示されるはずです。


フォームで値をやり取りする

簡単なフォームを使ってビューからコントローラーにデータを渡してみましょう。

まず、ビュー側であるsrc/templates/Sample/index.ctpを下記の通り書き換えてください。

  1. <div>
  2. <p>Form Test</p>
  3. <p><?= $message ?></p>
  4. <form method=”post” action=”/Sample/index”>
  5. <input type=”text” name=”question”>
  6. <input type=”submit”>
  7. </form>
  8. </div>

次に、コントローラー側であるsrc/Controller/SampleController.phpのindexメソッドを下記の通り書き換えてください。

  1. public function index()
  2. {
  3. $msg = $this->request->getData(‘question’);
  4. if($msg == null)
  5. {
  6. $this->set(‘message’, “質問をどうぞ”);
  7. }
  8. else
  9. {
  10. $this->set(‘message’, “質問:” . $msg . “を受け付けました”);
  11. }
  12. }

ビューのフォームが受け取ったテキストデータ(質問)をコントローラー側で確認し中身の有無によって挙動を変えます。

質問文の中身が空なら質問を促し、中身があれば受領文を表示するという仕様です。意図通りに動きましたでしょうか。


CakePHPの使い方:モデルの作成

CakePHPではデータベース自体がModelというクラスに抽象化されます。

このことにより、データベースごとに異なるインターフェースを意識することなくアプリ開発ができるのです。

モデルの作成は、データベースのテーブルを作成した後に「bake」コマンドを使うだけで簡単にできます。

詳細な使用方法は次項の「チュートリアル」でご確認ください。


CakePHPのチュートリアル

冒頭でもお伝えした通り、CakePHPには多くのドキュメントが用意されており、チュートリアルもあります。

公式ページに日本語版があるのでぜひ参考にしてみてください。

CakePHP3チュートリアル(日本語)

CakePHP4チュートリアル(日本語)


まとめ

CakePHPについて、その特徴と簡単な使用方法をお伝えしました。

どんどん便利なフレームワークが登場していますので、積極的に活用して高速Web開発を目指しましょう。

さらに詳しい使用方法や最新情報については公式ページもご確認ください。

CakePHP公式サイト