ScaffoldとBakeはどちらも開発をサポートする機能です。
どちらも「ひとつの画面を用意するのに、モデル作って、ビュー作って、コントローラ作って...と、似たようなコードを何度も書きたくない」というプログラマの希望を叶えてくれるありがたい機能です。ただ、個人的には昔「何が違うのか?」と悩みました。
似て非なるこの2つの機能について、メリット・デメリットを理解して使いどころを分けましょう。
#Scaffoldについて
簡単なコントローラをひとつ用意するだけで、テーブルの一覧・追加・削除・編集画面などを簡単に実装することができるといった機能です。
具体的には以下のようにコントローラを用意すると、shopsテーブルの一覧・追加・編集・削除ができる管理画面を実装されます。
class ShopsController extends AppController {
public $scaffold;
}
#Bakeについて
こちらはコマンドからモデルやコントローラ、ビューを自動生成する機能になります。
テーブルの一覧・追加・削除・編集画面なども自動生成されたファイルによって既に出来上がっています。
具体的には以下のようにbakeコマンドを実行すると対話的に次々と入力を求められ、それに答えていくことでファイルが生成されるといった手順です。
$ app/Console/cake bake
Welcome to CakePHP v2.x Console
---------------------------------------------------------------
App : ***/app/
Path: ***
---------------------------------------------------------------
Interactive Bake Shell
何作るの?と聞かれるので、例えばモデルを作りたかったら、「M」を入力
---------------------------------------------------------------
[D]atabase Configuration
[M]odel
[V]iew
[C]ontroller
[P]roject
[F]ixture
[T]est case
[Q]uit
What would you like to Bake? (D/M/V/C/P/F/T/Q)
>M
どのDB設定(app/Config/database.php参照)を使う?
---------------------------------------------------------------
Bake Model
Path: ***/app/Model/
---------------------------------------------------------------
Use Database Config: (default/test/release)
[default] > test
上記で選択したDB設定からテーブルを呼び出し候補を羅列し、どのモデルを作るか問いかけられるので作りたいモデルの番号を入力する。
Possible Models based on your current database:
1. Shop
2. Item
3. Maker
:
Enter a number from the list above,
type in the name of another model, or 'q' to exit
[q] > 1
このように対話的に生成する内容を設定していきます。選択肢によっては質問も異なってきます。
#ScaffoldとBakeの使いどころ
上述したように、大局的に見ればScaffoldとBakeはどちらも「テーブルの一覧・追加・削除・編集画面などを簡単に実装」できる機能ですがそれぞれにメリット・デメリットがあります。
- Scaffold
-
メリット
容易に作成でき、テーブル変更へ柔軟な対応が可能 -
デメリット
コントローラ毎に個別のカスタマイズに不向き - Bake
-
メリット
コントローラなど個別のカスタマイズが容易 -
デメリット
テーブル変更への対応が必要
類似コントローラすべてに対する共通の変更が不向き
Scaffoldはすごく簡単に管理画面を作れますが、各コントローラ別に画面レイアウトを変更するのが難しいという点があります。
Bakeはそれぞれファイルを書き出すので、個別のカスタマイズが容易になりますが、テーブルの変更やレイアウトの変更などそれぞれ個別に行う必要があります。
開発体制などに併せて考える必要はありますが、こういったメリット・デメリットを踏まえて、以下のように使いどころを意識することで開発はよりスムーズにできる可能性があります。
- Scaffoldの使いどころ
- 開発初期(テーブル構造が確定する前段階など)
- マスタなどのレイアウトに大きな変化が不要なテーブル
- Bakeの使いどころ
- 開発中〜後期(テーブル構造の確定後など)
なんだかんだと要望が増えてテーブル構造が変わることはよくあります。
開発当初はScaffoldで管理画面を用意して、ある程度テーブルが固まってきたらBakeでファイルを作ると随時テーブル変更に対応する必要がなくなります。
また可能なら、UIに凝る必要がないマスタデータをScaffoldで提供すると工数削減できますね。