BlogCakePHPを中心としたサイト開発情報をメインに公開。新しもの好きなので時々製品レポートなんかも。(木)【CakePHP】「詳解CakePHP辞典(CakePHP辞典2)」を刊行しました!大変にお待たせしました!ご好評いただきました「Pocket詳解CakePHP辞典」の続編、「詳解CakePHP辞典(通称CakePHP辞典2)」が3/15日に無事刊行となりました。基本的に本書はCakePHPバージョン2系対応本ですが、前書でページ数の都合上なくなく削った機能の解説を追加し、より多くの情報を詰め込んだ「これぞ辞典!」と言える内容となっています。facebookのECWorksページでも若干紹介させていただいていますが、本書が前作と比較してどのような変化があったか、また多くの方からご要望のある「電子書籍化」について、執筆時のエピソード的なものを交えてちょっと書こうと思います。前作と変わったところAmazon等の書籍紹介ページをご覧になりますと、前作とあまり変化がないように見えますが、書店等で実物をご覧いただければ一目瞭然です。本書ではバージョン2系から新しく搭載された、もしくは改良された機能は勿論、バージョン1系で収録できなかった機能についてもかなり盛り込んだため、結果として大幅にページ数が増加することが懸念されていました。このままでは厚さ100%増しとなってしまいとても実用にはならなくなってしまうため、出版社側との議論の結果判型を大きくし、出来るだけページ数を増やさない方向で調整を行いました。判型については「紙面が小さすぎ」「とてもPocketではない」とのご意見もあり、あの判型にこだわる必要もありませんでしたし、紙面が小さいことですぐに閉じてしまうなど逆に扱いにくいこともありました。良かったのかもしれません。それでいて若干薄くなった・柔らかい紙で開きやすくなったページ数はやや増加しましたが、本の厚さは若干薄くなりました。これは前作の紙が厚く硬めの紙だったため、柔らかく薄いものに変更したためです。このため開いたページが閉じにくくなりより扱いやすくなったと思います。逆に、以前は硬い紙だったため自立が容易でしたが、本書は使い込んでくると立たなくなるかもしれません。本書の発売は遅くとも3月であることが宿命づけられていた関係で、CakePHPのバージョンアップのタイミングに関してはかなり気をもんでいました。追記の可能な丁度良いタイミングで2.3がリリースされたため、本書にもその情報を盛り込むことが出来ました。本当に運が良かったです。逆に、ページ数の都合からバージョン1系の情報はばっさりと削りました。両方の情報が載ってしまうと混乱するでしょうし。CakePHP辞典」の方をお求めください。併売されると思います(でも数量が減っているため入手はどんどん困難になると思われます)。前書ではページ数の都合から紹介できなかったクラスがあり、その中で「テスト」に関する仕組みを紹介できなかった経緯がありました。今回改訂版(実際には改訂どころか書き下ろしに近いのですが)ということで増ページが許され、テストをはじめとする多くの掲載できなかったクラスを盛り込みました。テスト以外では、ファイル入出力やフォルダ管理に必要な「Fileクラス」「Folderクラス」、低レベルなネットワークアクセスを実現する「HttpSocketクラス」等、あまり情報として出回っていない仕組みについても掲載することが出来ました。最後の最後まで悩んでいたのが「データソース」の周辺で、例えばCake標準でないデータベースにアクセスしたい場合やその他低レベルのデータ入出力インターフェースとしてデータベースの情報は必要になりますが、表面的にはモデルと似通った機能で構成されていること、解説をし出すと膨大で少々の増量では済まないこと、そもそもデータソースの利用やカスタマイズに関する情報は上級者向けのものが多い...等の理由で泣く泣く削りました。データソースのグループの中に「CakeSession」が含まれており、これだけは誰もが扱う重要な仕組みであるため、例外的に掲載しました。テスト編の情報はあくまでも「Cakeで拡張された部分」のみの掲載となっています。冊分の情報量を詰め込むことになってしまいます。ついて書かれている別の書籍を併用していただいた方が良いと思います(PHPUnitの本はほとんど見受けられないので、誰か書いてくれないかなぁ...)。紙の書籍ではやはり「ページ数との戦い」がどうしても発生してしまいます。ない限りはなかなか難しいと思うのですが、紙の書籍でギリギリの情報量と実用性を考慮した上で今回の内容となりました。本文中のクラスメソッドの収録順をアルファベット順にソート辞典としての便利さの向上ということで「収録メソッド・プロパティ」をアルファベット順にソートしました。前書は「(頻度の高いものを除く)クラスファイル内での登場順」で掲載していました。これは「辞典で調べた後にソースコード内の該当箇所を検索しやすくする(もしくはその逆)」のためだったのですが、CakePHPをあまり知らない方にとってはソートされていた方が引きやすいだろうということで今回変更しました。前書のAmazonの書評で「索引がクラス順にソートされているため、初級者だと機能を知らないので引けない」というコメントがあったのですが、最初メソッド名でソートをしてみたのですが、むしろこちらの方がわかりにくいのと、見た目的にも項目が不揃いで大変に見にくく難読であったため元に戻しました。基本的に内容が分からない場合は索引から入るのではなく本文から入っていただいて概要で判断していただいた方が分かりやすいのではないかと思います。電子書籍版について前書から散々に言われていて、今回もまだ未解決の事象として「電子書籍化」があります。確かにCakePHP辞典は電子書籍化された方が便利な事もあるのですが、おおむね次のような理由から実現に至っていません。出版社に電子書籍のインフラがないためCakePHP辞典のそもそものコンセプトが「実務での紙で引くことの便利さ」であるためCakePHPの認知度を上げるには紙媒体を優先した方が良いため出版社に電子書籍のインフラがないため電子書籍化ができない一番の理由は、現時点で出版社側に「インフラ」が無いためです。実は前書の時にも同様に言われ、議論もされたのですが、実現には至っていません。こればかりは出版社側の対応を待つしかありませんが、現場レベルでは十分に重要性を理解しており、電子書籍版について前向きであることは間違いありません。コンセプトが「実務での紙で引くことの便利さ」であるためこれは私が100%オンラインで育っていない古い世代であるからかもしれませんが、やはり紙でペラペラめくることでの引きやすさは実務上で大変に役立つため、心情的に電子書籍よりも優先度が高いというのがあります。オンラインにはCookbookがありますし、ググって調べることも出来ますから、そちらで代用していただくことは出来るでしょう。優先度として紙の方が高いというだけで「電子書籍を出したくない」のではありません。現状出版が出来ない状況ですので、こればかりはどうしようもありません。CakePHPの認知度を上げるには紙媒体を優先した方が良いためちょっと裏側の話になりますが...電子書籍にこだわるのなら別の出版方法もありますが、やはり紙の本として出版することで書店に置いて貰うことが出来、またいろいろなオンラインストアなどでも取り扱って貰え、その結果googleの検索など多くの場所で「CakePHP」のキーワードが登場するようになるため、CakePHPの認知度を上げるためにはやはりまだ紙のほうが優勢だと思うからです。自分の利益を優先するのであれば、出版社などを通さず個人的にKindle向けや別の電子書籍媒体を使って出版すれば、多分印税率は高く儲かると思います。専門書の執筆で貰える印税はそれほど多くなく、実際のところ執筆にかける時間を別の案件などに使った方が遙かに上でして、電子書籍にしたところで大したことはないです。それよりは、CakePHPをより多くの方に使って貰いたい気持ちの方が上ですので、より効果的な方法として紙の方を優先しています。繰り返しになりますがあくまでも優先度の問題で、電子書籍「も」出せるのならそれに越したことはありません。作業机の上の1冊に本書はあくまでも「辞典」であり、この1冊でCakePHPの学習が出来るかどうかといわれると謎です。実践入門」のような素晴らしい本があります)。本書は、学習の過程で「より深くCakePHPの機能を知るため」あるいは学習を終え実践的な段階に入ったときに「こんな機能は無いのだろうか?」「こんな使い方は出来ないだろうか?」「この機能はどういう使い方だったっけ?」といった時に使っていただくための本で、いつも机の上に置いていただければと思います。Cake2が発表されてから1年以上立った今でもCake2の情報はネット上でもなかなか無いのが実情ですが、本書がよりCake2を便利に使っていただくための1冊になっていただければ幸いです。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。久しぶりのブログ更新です。かけなくてスミマセン...さて、更新が止まっているうちにCakePHPの本がいくつか出たり出したりしましたので、ここでまとめて書評&ご紹介いたします。「CakePHP2実践入門」CakePHPコミュニティで活躍されている皆さんが執筆された待望の一冊。以前は「CakePHPガイドブック」という本がありましたが、あれの改訂版とも言える内容です。CakePHPの概要的な話から始まり、コントローラ・モデル・ビューの作り方、ビヘイビア・コンポーネント・ヘルパー・プラグイン、ユニットテスト...といった基本的な使い方を押さえ、さらに現在のポピュラーなCakePHP開発の手法をこの一冊にまとめたといった感じです。献本いただいて一通り読んでみましたが、この本のターゲットは「CakePHPを一通り触ってみた初級者〜中級者」が一番しっくりくるのではないかと思います。一度Cakeを触った方は、この本の随所にちりばめられた有用なTips・手法が大変に役に立つと思います。メール関連、デプロイ関連の章は即戦力でかなり役に立つと思います。反面、「本当にCakePHP(あるいはMVCフレームワーク)が初めての方」には向いていないかもしれません。いうのは、CakePHPのシステムが最初の段階である程度理解できていないと内容についていけないところが若干あります。Cakeの学習ではDBとモデルの関係性の理解に一番時間をかけたので、あの題材ならどちらかというとまずモデルの解説から入って欲しかった)。ページ数も少ないため、全てのレベルの方に向けた本を一冊で完結するのは難しいでしょう。チュートリアル的に流れに沿って学習したいのであれば別の書籍も併用されると良いかもしれません(その「別の書籍」は後述で)。豪華執筆陣の本だけあって中の情報は確かなものです。初級者は勿論、ある程度使い込んだ方でも持っていて損はないでしょう。幸いなことにCakePHPの書籍は他のPHPフレームワークと比べて沢山あるのですが、これぞ真打ち!的な本です。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。※「サンプルコードがない」という記述をしていましたが、githubで公開されているそうです。「CakePHP入門書」の定番であり、対応バージョンが1.2→1.3→2.1と改訂されていった伝統ある本です。入門書に徹した内容であり、プログラミング初級者でも分かりやすいです。この本の魅力は「サンプルコードがダウンロード可能」な点で、そのコードを実際に動作させて学習できるところが良いと思います。学習できる範囲もかなり絞り込まれており、最初には丁度良いです。私自身、「全く分からない人に伝える」というのが大変に難しくいつも苦労しているのですが、とても見習いたい部分です。反面「2.1版なのに若干古い技術が使われているところがある」点があります。本編ではリクエストデータの取り出しに「$this->request->data」ではなく「$this->data」が使われてしまっています。今のところこれでも動きますが、推奨されたものではないためあまり良いとは言えません。それから詳細なCakeの学習には向いていないため、すぐに次の本が必要になる点かと思います。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。記事に書くのが大変に遅くなってしまったのですが、今年の春にGreativeの原氏と共著で発刊させていただきました。今までのCake本はほぼプログラマー向けに書かれたものですが、本書は「Webデザイナー向け」という野心的なものです(笑)。本書を企画したきっかけは、昨年に開催際した「(第一回)デザイナー向けCakePHP勉強会」でした。懇親会等でいろいろなデザイナーさん・コーダーさんとお話させていただいた際に、「もっと勉強してみたい」という声がたくさんあったので、是非書籍にそのエッセンスをまとめられたらなと思い、企画を出版社に持ち込みました。デザイナーにあてたWebプログラミング技術書というのはあまり例がないため(スマホアプリ開発本はあると思いますが)、出版社側は冒険だったでしょうが、快く企画を通していただけました。余談になるのですが、当方はかなり前から「プログラマーとデザイナーのコラボレーション方法」という点でいろいろ模索していて、Smartyを使ってみたり、別のテンプレートを考案してみたり、「Tplcutter」というHTMLを切り出してビューにするものを開発してみたりしたのですが、こういった解決方法をするにしても、やはりシステムを理解して貰う必要がどうしてもあり、「フレームワーク」あるいは「MVC」といったものの共通認識は必要なんじゃないかと考えるようになりました。ノンプログラマー的な方が理解可能な書籍はなかなかないため(基本的にフレームワーク本はプログラマーの目から見ても十分難易度が高いと思う)、もっとしきいの低いところで実現する方法はないかと考えていました。テーマとか作れるようになったら、他のCake案件も頼めるのではないか?」というところで期待をしている感じです。制作の流れを簡単に解説しています。基本的に全編通してチュートリアル形式になっていますが、サンプルコードがあらかじめスタートと完成形両方が収録されていて、確認が容易にできるようになっています。サンプルの内容は「問い合わせフォーム」が題材になっており、表画面と裏画面の両方の制作を行うようになっています。Webの案件はほぼこの題材の応用でやっていけるでしょうから、必要最低限の学習で実践できるような内容にしました。チュートリアル形式ということで、CakePHPの動作する環境が必要になるのですが、例えばローカルにXAMPP等を入れていると動かないケースがどうしても出てしまうので、本書では思い切って「バーチャルマシン」を用いてCakePHPの動作するLinux環境をダウンロードできるようにしました。具体的にはVirtualBoxを導入して仮想マシンファイルをサンプルダウンロードサイトから入手・展開し、本書の解説に従って進めていただければ極力環境依存がないようになっています(勿論、サンプルコード単体を入手して試すこともできます。gitを使ってコラボレーションする方法や、CSSフレームワークである「Compass」を使ったりとか、かなりモダンな開発スタイルも解説したりしています。本書の活用方法は、表題の通りデザイナーさん・コーダーさん向けの学習教材ではありますが、Cakeバリバリのプログラマーさんにも是非買っていただいて、案件でコーダーさんあたりに発注する際に「この本を読んで、ビューまで作って!」と言えるような内容を目指しました。こちらがメインです(笑)。Cake案件で是非活用いただけますと、野望の一つが達せられる感じです。幸いなことに、Amazonの書評で、初級者プログラマーさんにも役立つ本と好評いただいて、嬉しい限りです。以外の部分については、他の本で補っていただけると良いのではないかと思います。アマゾンのサーバでエラーが起こっているかもしれません。一度ページを再読み込みしてみてください。CakePHP2実践入門という感じと思います。カッコについては「あると便利」の位置づけです。基本的に、どれが良い・悪いというのはなく、用途によってどれもオススメできる本です。「CakePHP辞典2(仮)」について最後に。CakePHP1.2/1.3対応で書きました「CakePHP辞典」ですが、残念ながらCakePHP2系では仕様が変わってしまい、そのままで使うことは若干難しいです。そこで、「ビューコーディング入門」脱稿後から「辞典2」の執筆をスタートし、現在折り返し地点を過ぎたところです。予定では、年内中には刊行できると思います。できるだけ早い段階で書店に並ぶように頑張っています。Cake2になって仕様変更になった部分は網羅し、新しいクラスや仕組みについてもかなりの量を追加しています。前回収録できなかったテストについても予定しています。本当は全部掲載したいのですが、それだとものすごい量になってしまいますので、実務上問題ない範囲でできる限りの情報を詰め込んでいます。プロパティのオプション値についても、詳細に書いている点はもちろん従来と変わりません。内容はざっと見積もりですがおそらくそのままいくと5割増しかと思います(!!!)。なってくると自立するどころではなくなってくるのですが、何らかの工夫をする予定です。いうわけで、若干お待たせしている辞典2ですが、鋭意執筆中なのでもう少しお待ちいただけますと幸いです。ページの都合上バージョン1系には対応しておりませんので、バージョン1系をお使いの場合は現行の「CakePHP辞典」を併せてご利用くださいませ。(木)【CakePHP】リクルートエージェント様主催のイベントでトークさせていただきます最近案件で追われていましてなかなかブログ更新できなくてスミマセン。このたびリクルートエージェント様が主催されているクリエイター向け勉強会で、当方がセッションを担当することになりました。12/15とちょっと告知が遅くなってしまい申し訳ございませんが、もしお時間がありましたら是非ご参加いただければと思います。■タイトル位置情報を用いた携帯webゲームの作り方と、事例紹介GPS×携帯×PHPフレームワーク=地方活性コンテンツ!■概要(紹介文より)位置ゲーやチェックイン関連サービスの拡大など、何かと話題のジオメディア。最近はスマホでの関連サービス展開が進んでいますが、まだまだ携帯のシェアはフィーチャーフォン(ガラケー)がメイン。開発~ローンチまでの事例紹介を交えた勉強会を開催します。地方活性や産学連携のテーマも含んだ、大変興味深い事例ですので、ご興味をお持ちの方は、ぜひご参加ください!また、勉強会の後は懇親会も実施します。ご覧ください先日、いただいた案件で「GPS位置情報を用いた携帯ゲーム」を制作しまして、現在サービス中なのですが、そのときの事例を交えて、PHPフレームワークを用いて高速にサイト開発をするための手法や、GPS機能についてのTipsなんかをお話しできればと思っています。今回は話の流れ上「CakePHP」を用いての制作についてお話しいたしますが、決してこれに限らず、モダンなWebサイト開発においてフレームワークを用いることの重要性、そして当方が何故CakePHPを使っているのかについても触れてみようと思っています。フレームワークをバリバリ用いている方よりは、これからフレームワークを使ってみたいと思っている方に是非ご参加いただきたい感じです。それから、今回の案件は「地域活性化」というところでの立ち位置で、若干通常の案件とは異なる性質のものでした。地域性の高いサイトでの位置情報サービスは大変に有用だと感じているところです。位置情報サービスといいますと普通は地図上の1つの「点」の情報である場合がほとんどですが、今後はその点が拡張されて他のものになっていくと予想します。今回はその事例の一つと思いますので、位置情報サービスに興味のある方にも是非いらしていただきたいです(そして懇親会等でお話を聞いてみたいです)。1時間程度の短い時間の中になりますが、是非よろしくお願いします。Libraryの0.4.2をリリースしました。本バージョンから、SoftBank携帯の絵文字出力について大きく変更があります。以前のバージョンではwebコードでの出力を行っていましたが、他のキャリアと同じくバイナリコードもしくは数値文字参照形式で出力されるようにしました。これは、SoftBank側のSSLの扱いが変更になった関係で、SJISにてwebコードによる絵文字が見ることが出来なくなってしまったことがあります。SSL/TLShttp://creation.mb.softbank.jp/web/web_ssl.htmlまた、ディズニーモバイルのメールアドレスからキャリア判別出来るようになり、QRコード作成でパラメータ生成で問題があった点を修正しました。あと現時点での機種情報とIPアドレス情報に更新しました(IPv4枯渇問題の影響か、各社対象IPアドレスが減っている点が興味深いです)。Libraryの0.4.1をリリースしました。今回はバグフィックスがメインになっています。Lib3gkEmoji::emoji()で生成した絵文字をさらに自動絵文字変換を行っている際に文字化けしてしまう不具合がありました。emoji()の出力が既に対象キャリアの絵文字であるのに、その絵文字をdocomo絵文字と認識して再度変換をかけてしまっているためです。ト手法を変更した際にそのコードを処分してしまったらしいです)。Lib3gkCarrier::is_android()のラッパーメソッドがどこにも無いため追加しました。あと、これは修正項目ではありませんが、docomoの比較的新しい機種で「SJISで拡張絵文字の数値文字参照形式(#xxxxx;)の絵文字を表示できない」現象を見つけました。P-01A等でこの現象が出ます。SJISに関してはバイナリ絵文字を出力した方が良いようです。Libraryの導入に伴い、3G携帯の普及率が気になっていらっしゃった方がいました。Libraryは3G携帯対応であり、2G携帯は想定していないためです(一部使えますが)。自分でも気にはなっていたため、近況を調べてみました。びっくり!もう2Gは無視してしまって問題のないレベルじゃないでしょうか。Libraryは安心してお使いいただけるレベルかと思います。いうか、2G対応の手間をスマートフォン対策にかけていく時期がそろそろ来そうな気がします。(木)【BaserCMS】テーマファイルを安全に配置する方法BaserCMS関連のTips続編です。導入が楽でお手軽に使える事を目指しているBaserCMSですが、一つだけ個人的に良くないかなーと思う点があります。「テーマ機能」を用いて簡単にデザインを変えられる機能がありますが、ビューファイル(*.ctp)もドキュメントルート内に置く仕様になっているため、ctpファイル単体が閲覧できてしまう問題があります。Topページのビューは、インストール直後は「/themed/demo/pages/index.ctp」にあります。「http://www.example.com/themed/demo/pages/index.ctp」とすると次のように見えてしまいます。PHPの関数コールが分かってしまうソースコードが丸わかり。ビューにコードをいろいろ書いてしまうと危険!これはあまり気持ちの良い事ではないので、ビューファイルだけは見えないところに移動してみましょう。テーマファイルは「app/webroot/themed/」以外に「app/views/themed/」内においても動作をします。そこで次の対処を行います。「app/views/」内に「themed」ディレクトリを作成するさらに、対処したいテーマ名のディレクトリを「themed」内に作成する。今回は「app/views/themed/demo/」となる「app/webroot/themed/demo」内にある「elements」「feed」「leyouts」「pages」を「app/views/themed/demo/」内に移動するなお、これが可能なのは「webrootをドキュメントルートとしている」場合のみです。ドキュメントルート内にBaserCMS本体を置いて運用されている方は対処する事が出来ません。(2011.01.26追記:「スマートURL」設定であれば、どのようなインストール方法でも上記は有効です)また、上記対処をする事で問題点もあります。管理画面上でテーマファイルの編集が出来なくなりますので、別の方法でファイルを直接扱わなければならなくなります。プログラマーの方でしたら特に問題はないでしょう。ビューファイルの拡張子がphpでしたらPHPコードとして実行されるためエラーコードがはき出されるのみですみますが、そうでない場合は普通にテキストファイルとして入手できてしまうので、場合によっては脆弱を生む事になります。これはBaserCMSに限った事ではなく、CakePHPを丸ごとドキュメントルート内において運用する場合にも起こりうる問題です。ビューにはあまりコードを書かないようにするか、ちゃんとwebrootをドキュメントルートにした上で、上記のようにthemedからビューファイルを外に追い出した方が安全でしょう。いえ、システムの方で一応ディレクトリを分ける対応をした方が問題がなさそうな気がします。丸ごとインストールされているとまあどうしようもないのですが...【追記】(2011.01.26)@nojimageさんから「.htaccessにAddHandlarでctpも加えたら」というアイデアをいただきました(ありがとうございます!)。お使いのサーバで「.httaccessの編集権」「AddHandlar使用権」がある場合は、ctpファイルをPHPコードと見なす事で、webroot内にctpファイルがあっても、コードの中身を閲覧する事を(一応)防ぐ事が出来ます。「app/webroot/.htaccess」に次のように記述します。.ctpたいていの場合、内部のメソッド・関数が見つからないために致命的エラーとなり、閲覧が出来なくなります。ドキュメントルートに丸ごとBaserCMSをインストールしている場合は「/(BaserCMSのインストールディレクトリ)/.htaccess」に記述する事でBaserCMS内の全てのctpファイルを防げます。(木)【BaserCMS】app/webrootをドキュメントルートにする場合の注意点いままでBaserCMSの話題が全くなかったので、ちょっと取り上げてみようと思います。4月頃、東京で「BaserCMSの勉強会」の開催をもくろんでいます。興味がありましたら是非ご参加ください。お手伝いいただける方、会場をちょろっとお借りできる会社様等ありましたら是非ご協力お願いいたします。このへんについてはまた後日。本題なのですが、Bakerの皆さんがCakePHPを扱う場合、おそらくapp/webrootをドキュメントルートとしてサーバ設定をする事が多いと思いますが、同じようにBaserCMSもこのように設定すると、インストーラ実行後、表画面もしくは裏画面のどちらかがうまく表示されなくなってしまうかと思います。BaserCMSは標準ではドキュメントルート内にアーカイブ一式をコピーする事を前提で設定がされているため、いくつかの箇所で不具合を生じてしまいます。app/webrootをドキュメントルートにする場合は次のようにします。'');インストール後うまくいかないようでしたら、たぶんこの辺が影響していると思います。(木)【CakePHP】「CakePHP新春勉強会」に行ってきましたCakePHPの勉強会が久々にありましたので参加しました。Matsuri以来となりますが、当方は顔を出したものの完全参加はできなかったので、実質昨年5月以来です。Library」ではなく、CakePHPで製作されたCMSアプリケーション「BaserCMS」をLTでご紹介させていただきました。スライド(をPDF化したもの)を公開いたします。■クリックするとpdfを参照できますCake界隈では「Croogo」あるいはかなり前から存在している「Wildflower」などがありますが、これらは日本向けのCMSではないため、かなりカスタマイズをしないと難しい点がありました。BaserCMSは日本で開発されているため作りも日本向けであり、サポートもされやすいてんがメリットです。「コーポレートサイト」が簡単に作れるよう機能的にも的を絞っており、他の(Cake以外の)CMSと比べてもコーポレートサイト向けなら導入する価値が大変にあると思います。当方も開発メンバーでありますが、本業が忙しくてなかなか出来ないところがあります。今年はちょっとてこ入れをしていくつかプラグイン等を作っていきたいと思っています。本業でも売っていきたいので(笑)。ネタはいくつか考えていますが、一般向けのものについては是非公開していきたいと思います。BaserCMSは福岡では勉強会も回数をこなしており、普及を促している方もたくさんいらっしゃるため盛り上がっているのですが、残念なことに関東では情報がやってこないためなかなか認知度がありません。この便利なCMSを知っていただきたいと思い、今回勉強会を開催してみようと思っています。Cakeを日頃お使いの方はもちろんですが、特にデザイナーの方にも知っていただきたいと思っております。デザイナーさんをお誘いのうえ参加していただけますと大変に嬉しいです。現時点ではとりあえず「やる」と表明しただけで、何も決まっていない状態です。現実的になってきましたら改めて告知させていただきます。手伝っていただける方、会場をお貸しいただける方(企業)も絶賛大募集です。小さくと思っておりますが、関東でも是非盛り上げていきたいと思いますのでよろしくお願いします。...と告知が長くなってしまいましたが(汗)、勉強会そのものも大変に楽しかったです。内容については他の方がレポートされていますし、ちょっとまとめる時間もなさそうなので今回は割愛させていただきますが、CakePHP2.0は今年の大注目になりそうですね。2次会はカラオケボックス内でLT大会になりました(笑)。それがUstされたり!こんな事をするのはCakeメンバーくらいかもしれません。「第2回CakePHP温泉部」をはじめ、私もいろいろと企画したいと思います。(木)【CakePHP】Shellを拡張してTaskで親シェルのメソッドが使える「ShellEx」クラスCakePHPを利用するにあたり、基本的にはWeb上で動作するアプリケーションを作成すると思いますが、バックエンド等でCakeの機能を用いながら処理を実行したい場合も当然出てきます。そんなときは「シェル」が活躍します。みなさんシェルは活用されていますか?CakePHP1.2/1.3では、シェルの中で「タスク」という小機能を呼び出す仕組みがあります。Shellの中に膨大な機能を全部押し込まなくても済むようになるためコードの可読性が上がり、大変に便利な機能です。膨大な機能を提供しているCake機能の一つ「Bake」も、コアコードを覗けば多数のタスクで構成されています。「app/vendors/shells/」内に、例えば「hoge_shell.php」を作成します。中身はShellクラスを継承した「HogeShell」クラスを作成します。その中には「main()」メソッドを用意すれば動作します。CakePHP辞典」をご覧ください(出来れば買って!(笑))。ここからなのですが、Taskを使う場合、ShellからTaskが呼ばれるのですが、Shell内は素通りしてしまうため例えばタイトルなどをShell内で制作しても表示されません。タイトルを表示するためのメソッドを作って共通化をはかろうとしても、タスクからは呼び出し元のシェルはアクセスが出来ないため、利用することが出来ません。タイトルに限らず、シェル内で利用したいプロパティ・メソッドがあってもアクセスが不可能のため利用不可能です。そこで、タスク内から親シェルのオブジェクトを参照することが可能な機能を付加する「ShellExクラス」を作成してみました。やっていることは非常に簡単で、タスクの初期化時に親クラスのオブジェクト参照を付加するのみです。タスクの初期化・スタートアップ・実行が全てシェルのinitialize()とstartup()の間に挟まれていますので付加するタイミングがありません。このため、ShellExクラスのinitialize()内でタスクの初期化を先行して行っています。タスク初期化は「Shell::loadTasks()」が行っていますが、結果として二度実行されます。Shell::loadTasks()が二度実行されることで若干問題点があります。それは親シェル内にロードされる各タスクオブジェクトが1回上書きされることです。幸いだったのが、このとき上書きされるのはClassRegistry::getObject()で入手できる参照オブジェクトでした。実体ではないため、結果として同じオブジェクトになります。単純に無駄な処理が走るだけです。多少気持ち悪さは残りますが、とりあえず要求していた機能は実現できます。ソースコードはgistに上げました。このファイルを「app/vendors/shells」等にアップロードし、シェル内であらかじめApp::import()でこれを読み込み、extendsを「ShellEx」にすれば動作します。ファイル名は「shell_ex.php」とします。Library1.0のシェル関連機能を実装している最中に必要になりました。オリジナルのタイトルは作りたいので(笑)。さんによりますと、CakePHP2.0ではShell機能は改良されているそうです。まあ今回の記事は思いっきりバッドノウハウですね(^^;。