CakePHP 4 の Bake コマンド の基本的な使い方

はじめに

CakePHP には様々なコードを自動生成することができる Bake という機能があります。

CUI(コマンド)のツールなので抵抗がある方もいらっしゃるかもしれませんが、その習得は開発効率の向上に繋がります。

今日は CakePHP 4 の Bake コマンドの基本的な使い方 をご紹介します。

今回は CakePHP 4.0.8 で確認しています。
OS は Windows 10 Home を使っていますが、Mac でも同様に使えます。

目次
  1. 下準備
  2. Bake テンプレート自作が便利
  3. コントローラを作る
  4. テンプレートを作る
  5. モデルを作る
  6. 上記 MVC をまとめて作る
  7. コンポーネント、ヘルパー、ビヘイビアを作る
  8. データベースのマイグレーション
  9. ヘルプを表示【重要】
  10. おわりに

1. 下準備

今回使用したテーブルです。bake コマンドでテンプレート、モデルを作る際に使用します。

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

2. Bake テンプレート自作が便利

Bake の具体的な使い方の前に、これはとても便利な機能だと思うので先に書きます。

CakePHP では Bake で自動生成する各ファイルのテンプレートを自作することができ、Bake で自動生成するコードを自分好みにカスタムすることが可能です。

必要な部分だけを Plugin として実装することができるので、追加や編集が行いやすい仕組みになっています。

自分オリジナルの Bake テンプレートを用意すれば、作業がとても楽になります。作り方は過去の投稿「CakePHP 4 で 独自の Bake テンプレートを Theme としてつくり、作業効率を向上!」でもご紹介していますので、是非試してみてください。

3. コントローラを作る

コントローラは bake controller で作ります。
下記は ArticlesController を作る例です。

bin/cake bake controller Articles

テストコードが不要な場合は --no-test オプションをつけてください。

bin/cake bake controller Articles --no-test

4. テンプレートを作る

テンプレートは bake template を使います。

bin/cake bake template Articles

基本的には Bake テンプレート(Bake で生成されるファイルのテンプレート)が存在するアクションのテンプレートを生成します。ただしコントローラが存在する場合は、そこに含まれないアクションは生成されません。

例えば、デフォルトでは add.php、edit.php、index.php、view.php が生成されますが、ArticlesController.php があって、その中に add() 関数が存在しない場合は、add.php は生成されません。

任意のアクションのテンプレートだけを生成したい場合は、そのアクション名を追加します。

bin/cake bake template Articles edit

5. モデルを作る

モデルは bake model で作ります。
下記は Entity/Article.php と Table/ArticlesTable.php を作る例です。

bin/cake bake model Articles

テストコードが不要な場合は --no-test--no-fixture オプションをつけてください。

bin/cake bake model Articles --no-test --no-fixture

Fixture はテストで使用するデータを定義するファイルです。

テーブル名と異なる名称でモデルを作りたい場合には --table オプションを使います。

下記は articles テーブルを Entity/BlogArticle.php、Table/BlogArticlesTable.php で扱いたい場合を想定したコマンドです。

bin/cake bake model BlogArticles --table articles

6. 上記 MVC をまとめて作る

bake all を使えば、コントローラ、テンプレート、モデルをまとめて作ることができます。

下記コマンドは articles テーブルに関するものをまとめて作ります。

bin/cake bake all articles

このコマンドでは --no-test と --no-fixture は使えないのでご注意ください。

7. コンポーネント、ヘルパー、ビヘイビアを作る

コンポーネント、ヘルパー、ビヘイビアは、それぞれ下記コマンドで作ります。
下記は SampleComponent.php、SampleHelper.php、SampleBehavior.php を作る例です。

bin/cake bake component Sample
bin/cake bake helper Sample
bin/cake bake behavior Sample

テストコードが不要な場合は --no-test オプションをつけてください。

bin/cake bake component Sample --no-test
bin/cake bake helper Sample --no-test
bin/cake bake behavior Sample --no-test

8. データベースのマイグレーション

CakePHP 4 には phinx ベースのマイグレーション機能があります。こちらも bake コマンドで実行するのですが、詳細は先日投稿した「CakePHP 4 のデータベースのマイグレーション機能の使い方」をご参照ください。

CakePHP のマイグレーション機能は便利だと思います。

9. ヘルプを表示【重要】

「自分で解決策を調べる能力」はプログラミングのスキルで重要なものの一つだと思います。やはり公式のヘルプを読めることは大切ですよね。

CakePHP は下記のように --help オプションをつけることで、ヘルプを閲覧することができます。(下記は一例です)

bin/cake --help
bin/cake bake --help
bin/cake bake controller --help
bin/cake bake template --help
bin/cake bake model --help

これを使えば、この記事や公式ドキュメントで説明されていない機能も使えるようになりますので、今必要性を感じていない方も、頭の片隅に残していただければと思います。

10. おわりに

今回は Bake コマンドの中で、僕が考える基本的な機能の使い方をご紹介しました。

僕は CakePHP を使い始めたころは Bake コマンドはあまり使っていませんでした。しばらくの間は「既存ファイルをコピペして作った方が早いじゃん」と思っていたのですが、それでも少しずつ使っているうちに Bake コマンドの便利さに気づきました。

状況によってはファイルコピペで作った方が早いときもあると思うのですが、Bake コマンドを活用できる場面もたくさんあります。

スキルアップにも繋がりますので積極的に Bake コマンドを使ってみてください。