CakePHP 4.0.0-RC1 で bake を試す

はじめに

昨日は、CakePHP 4.0.0-RC1 の composer を用いたインストール方法をご紹介しましたが、 今日は Bake コマンドを叩き、生成されたコードを見たり、画面を動かしてみました。

今日は、実際に試した bake のコマンドや、その実行結果などをご紹介します。

XAMPP
7.3.5
PHP
7.3.5
Maria DB
10.1.40
OS
Win 10 Home 64Bit
目次
  1. help オプションでエラー
  2. bake all を実行
  3. “declare(strict_types=1)”って?
  4. おわりに

1. help オプションでエラー

まずはヘルプを見てみようと思い、下記コマンドを叩いたら、早速エラーがでました。

> bin/cake bake --help

Exception: Class 'Cake\Command\HelpCommand' not found
In [\path\to\cakephp4\vendor\cakephp\bake\src\Command\EntryCommand.php, line 186]

ここはあまり深追いせず、bake all することに。

2. bake all を実行

2-1. テスト用のデータベースを作成

今回はサンプルとして、下記の articles と categories テーブルを作りました。

CREATE TABLE `articles` (
  `id` int(10) UNSIGNED NOT NULL,
  `category_id` int(10) UNSIGNED NOT NULL,
  `date` date NOT NULL,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `articles`
  ADD PRIMARY KEY (`id`),
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;


CREATE TABLE `categories` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(255) NOT NULL,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `categories`
  ADD PRIMARY KEY (`id`),
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;

2-2. bake all 実行

ここでは articles の例でご紹介します。実行したのは下記コマンドです。

> bin/cake bake all articles

下記ファイルが生成されました。

cms/
├ src/
│ ├ Controller/
│ │ └ ArticlesController.php
│ │
│ └ Model/
│    ├ Entity/
│    │ └ Article.php
│    │
│    └ Table/
│       └ ArticlesTable.php
│
├ templates/
│ └ Articles/
│    ├ add.php
│    ├ edit.php
│    ├ index.php
│    └ view.php
│
└ tests/
    ├ Fixture/
    │ └ ArticlesFixture.php
    │
    └ TestCase/
      ├ Controller/
      │ └ ArticlesControllerTest.php
      │
      └ Model/
          └ Table/
            └ ArticlesTableTest.php

フォルダ構成も、生成されたファイルも CakePHP 3 と大体同じですね。
template が src から出て、拡張子が ctp から php になっています。

ファイルの中身も CakePHP 3 に近いです。
1行だけ、見慣れないコードが目にとまりました。

3. “declare(strict_types=1)”って?

Bake されたコードの先頭には declare(strict_types=1) がついています。
見慣れなくてググったところ、解説されいる記事がすぐにみつかりました。

タイプヒンティングをより厳密にするモードなんですね。
型を意識しない PHP のメリットを消しているような感じもしますが、やはり厳格にしたほうが堅牢なシステムが作れるので、良い変更かなと感じます。

4. おわりに

CakePHP 4 はまだ RC1 ですが、 Bake をすることは出来ました。今のところ大きな問題は発生していません。各画面を開いて軽く触ってみましたが、特にエラーが出ることもありませんでした。

まだ未完成な部分もありますが、十分に楽しめそうです。
Bake したコードのカスタムであれば手軽に始められるので、みなさんも試してみてください。