細かすぎて伝わらないCakePHP Pluginシリーズ "Routine plugin" #cakeadvent2012 Day20

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.phpPost.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さんです!