bakeコマンド


完全に失念かつすっかり来年の事を考え始めていたQiita初心者です。
bakeコマンドで初期化出来ればいいのに・・・というのは置きまして
本日はCake3におけるbakeに関して少し書いていこうと思います。
準備を怠ってしまったので足りない点や追記したい点は気づいたら修正していきたいと思います。初めはあまり内容がないかも

bakeコマンドのオプション

bakeコマンドを呼び出すには、cakeコマンドにbakeをパラメーターとして渡します。
オプションとして以下のようなものがあります。

12月26日追記

option 概要
all
behavior xx
cell Controllerのような動きをする部品
component Controllerに処理を持たせない為に処理を記載
controller テンプレートや遷移先をディスパッチ(り替え)
fixture テスト用データの作成
form リクエストデータの置き場所。3系から?
helper viewにて使う関数を記載する
mailer メール送信処理。あまり用途が浮かばず
migration スキーマ作成用ファイルの作成
migration_snapshot xx
model テーブル、Entity、Fixture、テーブルTestを一括で作成
plugin xx
shell クーロンなどで用いるシェル
shell-helper xx
template 基本的なアクションで使用されるindex/edit/viewを作成
test xx

この中で比較的よく使うオプションはこのオプションなどではないかと思われます。
php
model
shell
all

※こちら少し偏ってたらすみません。migration等は色々融通きかないのでコピペして作ってしまう癖がありまして^^;

bin/cake bake model

上記のコマンドを実行すると実際に作成可能なModelの一覧が表示されるので一覧を元に以下コマンドを実行すると

bin/cake bake model xxxx(アッパーキャメル形式のテーブル名)

Tabel、Entity、Fixture、TableTestを同時に生成してくれます。開発の初期段階でスピードをあげるには便利です。既にファイルが存在していればファイルを上書くか対話形式にて確認されます

12月26日編集

bakeコマンドで作成される資源のテンプレート

ここから少しだけ技術よりになります。
bakeのテンプレートファイルは、Twigテンプレート構文を使用しています。
Cake3でbakeした際に作られる資源はcomposerにてcake3をインストールした際に出来る以下のフォルダ配下に格納されています。

vendor/cakephp/bake/src/Template/Bake/Template

以前AdventCalendarで話題にあがった障害も上記テンプレートを変更することによって
次回以降bakeにて作成された資源が問題なく作成されるようにすることができます。

障害概要

bakeにて作成されたControllerにてviewに渡した(set)変数のserializeが自動的に記載され、またajaxリクエストの際はRequestHandlerなるComponentの働きによってデータが出力されることにより意図していないデータが漏洩する可能性があるとのことでした。
※例.usesテーブルにpasswordカラムがあった場合、userテーブルをAPI形式にて更新し画面表示の為userテーブルのEntityをviewに渡している場合passwordのハッシュ値もjson(or xml)形式にて返却される

素早く対応はされたのですが運用中であればバージョンをあげたりすることは他に影響えることがあるので出来ないかと思います。
そういった際には上記フォルダに格納されているcontroller.ctpファイルをコピーし、
serialize処理を書く箇所を削除すれば次回以降bakeした際にserialize処理を行わない資源を自動的に作成することができます。

他にもTableを常にアプリ固有の基底クラスを継承したカタチにしたい場合、継承漏れを防ぐためにtable.ctpファイル内の記載でextendsするクラスを変更すれば、次回以降bakeの際には継承先を確認する必要なく、修正漏れ等のリスクを軽減することができます。

テンプレートをアプリに準じた形に変更すればするほど開発スピードは速くなると思いますので是非使っていってほしいです。bakeで作成されたviewのctpなどi18nがテンコ盛りで
そのままでは日本語向けのアプリではほとんど使えないものに
※忘れない方が難しい...レビューでの着眼点一覧でも作り時間があれば気付けますがアジャイルでは厳しくorz

明日は@chitokuさんの『CI Test 』に関してだそうです。