CakePHP Advent Calendar 2012 20日目の記事です。
19日は@konsanさんの「「Chosen + Search + Collectionable」の3つのプラグインの組み合わせ」でした。
Chosenは使ったことなかったです。select系のjQueryライブラリだと、最近Chained Selects jQuery Pluginを使ってみたりしました。
あ、すみません。3回目です。
細かすぎて伝わらないCakePHP Pluginシリーズということで、次はRoutine pluginを紹介したいと思います。
https://github.com/k1LoW/Routine
READMEすらないところからも、「他人に紹介しても伝わらないだろうな」と思っていることがおわかりいただけるかと思います。
ただ、自分は「安心して」頻繁に使っています。
この「安心して」というのがポイントだったりします。
ルーチンワークをやめたい
みなさんは、マスタ画面などで、単純なCRUDの機能を作るときどうしていますか?
「一覧」「登録」「編集」「削除」なんて、今まで腐るほど作ってませんか?
まあ、そういう時はプログラマなら楽をする方向に進むと思います。
- bakeを拡張している
- scaffoldを拡張している
- App*に毎回使うコード(メソッド)をコピペして使いまわしている
などなど。
方法はいろいろあると思いますが、「まだ愚直に書いている」人はすぐに考え直した方がいいですよ。
RoutineのためのPlugin
で、自分は「単純なCRUD機能を作成するときに継承するModel」と「単純なCRUD機能を作成するときに継承するController」をまとめたPluginを作って使いまわしているというわけです。
例えば単純なCRUD機能があるPostsController.php
とPost.php
を作ろうとしたら
// PostsController.php
App::uses('RoutineController', 'Routine.Controller');
class PostsController extends RoutineController {}
// Post.php
App::uses('RoutineModel', 'Routine.Model');
class Post extends RoutineModel {}
と書けば、index()、add()、edit()、delete()ができてしまいます。
オブジェクト指向万歳。
Plugin形式にしたわけ
なんでこういう形をとったかというと
- 単純なオブジェクト指向の仕組みなので分かりやすい(通常のbakeのように同じコードが氾濫しない)
- App*が汚れるのがあまり好きではない
- Pluginなら保守しやすい(Travis CIでテストを回しています)ので安心して次回も使える
- Pluginが好き
という理由からです。
大体はプロジェクトごとに必要なものが変わるので、ほとんどRoutineModelしか使いませんが、それでも愚直に書くよりも効率化されることは確かです。
当然のことを他の人を共有するために
「ルーチンワークを回避する」というプログラマとしては至極当たり前のことですが、「自分のやり方」として紹介しました。
人それぞれその人なりの効率化はしていると思うので、「この方法良いよ!」というのはなかなか伝わりにくいかもしれませんが。。。。
というわけで
「細かすぎて伝わらないCakePHP Pluginシリーズ」 Routine pluginの紹介でした。
明日は@BiMihoujyunさんです!