【CakePHP/Tplcutter】カンファレンス中のスライド公開します(cakecon)

お待たせしました。
LT中で使いましたスライドを公開します。

なんと、未公開映像付きです(笑)。
というか、後半を表示できなかったんですよね。
それでははじまりはじまり…

こちらで見ていただくと、フルスクリーンになったりします。
http://www.slideboom.com/presentations/24080/Tplcutter%E3%82%92%E7%94%A8%E3%81%84%E3%81%9F%E8%B6%85%E9%AB%98%E9%80%9F%E3%82%A6%E3%82%A7%E3%83%96%E3%82%B5%E3%82%A4%E3%83%88%E9%96%8B%E7%99%BA 

詳細版スライドは、ちょっと調整した後にアップしてみます。

※言いたいことにそれほど差がなかったので、今回はやめることにしました。
後日新規で作ってみたいと思います。

【余談】
最初、フォントが崩れてしまい「こりゃ公開無理だ…(;-;)」と思っていました。
「フォントを埋め込む」でppt作っていないといけなかったんですね。
こういったことも今回初めてだったので、今回はとても勉強になりました。
今後も発表はやっていきたいですね。

【関連サイト】
http://conference.cakephp.jp/
http://events.php.gr.jp/events/show/55

【Tplcutter】Tplcutterの今後とカンファレンス後での私の決意(cakecon)

昨日のカンファレンスであまりにも疲れてしまったため、カンファレンス関連のブログを物色しながらゆっくりしています。

昨晩ざっくりとカンファレンスの感想等を書いたのですが、肝心なことを書き忘れていたのでちょっと紹介したいと思います。

それは、Tplcutterの今後についてです。

現在バージョン0.2.0で、バージョンコードからも分かるように完成型の仕組みではありません。
自分自身、何処でバージョン1.0とするかはまだ決めかねているのですが、おそらく「全ての人がViewの高速実装に関して満足が得られるようになった」ときが1.0かな、と思っています。

前置きはこれくらいにして、とりあえず現在考えている「直近のバージョン」について、アイデアを書いてみたいと思います。

●(CakePHP)「プリフィックス」の対応
 CakePHPでは、以前に「webservice」という機能が搭載されていて、Tplcutterはこれに対応しているのですが、これが改新されて「プリフィックス」という機能に置き換わりました。プリフィックスに関するViewの実装はwebserviceと全く変わってしまったため、現在のTplcutterでは対応しておりません。
 とりあえずTplcutterは0.2.0で、「基本機能としてはまあおおむね使えるものになった」と思っているので、やっとプリフィックス対応に取りかかれるかな、という感じです。

●(CakePHP)img等のタグをhelperに置き換える?
現在のTplcutterでは、相対パスを絶対パスに置き換えることで、helperを用いないでビューが作れる、つまり可視性に優れている利点があります。ところが、この点が後に問題を引き起こす可能性があり、出来ることなら変換後はヘルパーに置き換わっていた方がよいのではないか、と考えています。それは「いずれ、Cakeの管理下にないパスが使えなくなってしまうのではないか」という点です。

実はあまりふれていないのですが、ベースパスが「/」である環境については全く問題なく動くのですが、たとえば「http://www.hoge.com/~user/cake/app/webroot/」なんかで運営されていて、ベースパスを「/cake/app/webroot/」なんかにしている場合、現在動かないのではないかと思います。何故なら、Tplcutterでこれを考慮していないからです。おそらくbasepathとかオプションを作って指定してやれば出来るようになるのではないかと思いますので次のバージョンではそうしようと思っていますが、これを超える考慮が必要になるときがいずれ来るのではないか、という予言めいた思いがあります。
Cakeに限らず、どのフレームワークにも言えることなんですが、この辺の制御を完璧にフレームワークに任せてしまった方が安心感があるんですね、当方としては(^^;;;。

 
ただ、これに関しては弊害もあって、結局パスをhelperにしても、helper内でまた同じURLに戻すわけで、オーバーヘッドを増やすだけのように思います。そんなわけで、現在心が揺れている状態です。

【追記】

一晩考えてみたのですが、やはりこれはそのままにしておいた方が良いと判断しました。
よくよく考えてみたら、全てのフレームワークについて考慮しなければならなくなりますし、それに「問題が起きたときにやればよい」わけで、先取りしすぎた機能かな、と。
オプションでそのようなものを作っても良いかもしれませんが、とりあえずやめておきます。

●layoutファイル生成の抑制と別名指定
現在の仕様では、layoutファイルは必ず作られ、またレイアウトファイル名はコントローラ名と同一で生成されます。この縛りをなくす仕組みを入れたいと考えています。

●定数の宣言と挿入
「ピース」機能で、指定ボックスを記憶して他のテンプレートに挿入できる機能を0.2.0で搭載したのですが、この技術を応用して、決められた値をあとでテンプレートに挿入できる機能を考えています。これはどう行った場所で使えるかというと、たとえばAmazonのアソシエーションIDを一カ所に指定しておくだけで全部を変換できるとか、URLがちょくちょく変わる状況で、一発変換させたいとか、そういった使い方が出来るような仕組みです。
こういったことはPHPのdefineで出来ますが、あくまでも設定するのは「デザイナー側」である点が考え方として異なります。また、defineすら呼び出さずにテキスト化されるため、オーバーヘッドになりません。

 
【追記】
 
●コマンドライン上の制御オプション(ある意味復活)
一時的に制御を変えたいようなオプションを、コマンドラインから与えられる仕組みはやはり必要とのことで、コマンドライン解析を復活させようと思っています。その理由は下記に。

●ファイルコピーの抑止オプション
●ファイルコピーの強制オプション
●テンプレート書き出しの抑止オプション
「画像だけ更新したい」「画像はそのままにしておきたい」「タイムスタンプが古くても上書きしたい」という場合の強制力オプションを付けようと思います。 

※上記の機能は「あくまでもアイデア」ですので、実際にこれらが次のバージョンがつくかどうかは分かりません。必要なものから順番にやっていくつもりではいます。

 

もし他に「こんなのが欲しい」というような要望がありましたら、是非お寄せください。
ちなみに次のバージョンがでるまでには時間が結構空くと思うので、ダウンロード控えはされない方が良いと思います(笑)。いまのTplcutterを是非ご活用いただければ!

 

それから、CakePHPプロジェクトマネージャーのGarrett氏と交流して、「やはり国際化は必要だ」と感じています。氏自身が最後に語ってくれたと思うのですが、「もっと英語で発信して欲しい。そうすればこのような素晴らしいアイデアが世界中の皆で活用できる」ということで、それについては私も実感しました。

ただ、私自身が英語が苦手であり、いつも翻訳ソフトに頼っているというのも事実でして…
Garrett氏にTplcutterのスライドの英訳を渡したのですが、中身は翻訳ソフトの成果みたいなものです。英語のテキストを打つ時間より、調べたり考えたりする時間の方が100倍は長かった気がします。この年になって恥ずかしいのですが、やはり英語をきちんと使えるようになりたい。そうすればもっといろんな人とディスカッションできるのに…と思います。

なので、今後の活動として「国際化」もテーマの一つに入れたいかなと思います。
ちなみに、カンファレンス後の帰路で本屋に立ち寄り、英語の本を物色していた恥ずかしい私です(^^;;;。

さいごに…
スライドの方はもう少しかかります。
提供方法をどうしようか悩んでいるからです。
pptを直接さらしても良いのですが、見ることが出来ない人もきっといるでしょうから。
全部の中身を分解するか、スライドを公開できる場所を借りるかのどちらかにしようとも考えています。
新原さんのサイトに、スライドが公開されているのを見たのですが、これにしてみようかな。

【CakePHP/Tplcutter】「CakePHPカンファレンス東京」が終わって(cakecon)

カンファレンスに参加された皆様、お疲れ様でした。
また、私のLTに耳を傾けていただきまして、ありがとうございました。

もう少しまともなスピーチがしたかったのですが、場慣れしていないというスキル不足と、あまりにもボリュームに対して時間がなさ過ぎた題材を選んだという点でとても反省しております。個人的に、出来は100点中10点です(大汗)。次回こういった機会がありましたら、100点を提供できるように頑張りたいと思います。

というわけで、私の発表しました「「Tplcutter」を用いた超高速ウェブサイト開発」について、補足事項というか、いいわけめいたものを書きつつ、他の方のスピーチに対して私の思いをつらつらと書いていきたいと思います。

まず、補足事項というか言い訳なのですが、実際に発表できた内容は用意していた20%ほどで、すべてを5分で語るのはとてもとても無理でした(大汗)。とりあえず、Tplcutterの優れている点を絞り込み、今回は一撃で空のサイトにビューを生成して放り込む部分をかろうじて実演をしたのですが、本当に実演したかったところは別のところにもありました。

カンファレンス終了後や、懇親会中で、予想以上に多くの方から「これはおもしろい・興味あるツールだ」とおっしゃっていただけました。皆さんに話を聞くと、おおむね同じような悩みを抱えていらっしゃっていて、つまるところ「デザイナーとのやりとりでアップデートが大変に楽になる(可能性を秘めている)」とのことでした。私の一番主張したかったところはここであり、実装よりはむしろ更新の部分でしたので、このような感想をいただけたということは、このツールの方向性は正しかったと胸をなで下ろしています。

特にびっくりしたのはCakePHPプロジェクトマネージャーのGarrett氏で、懇親会中、英訳した資料を渡すついでに少しだけお話しできたのですが、開口一番「Oh, Tplcutter! It is VERY COOL!!」とお言葉をいただけました。まさかこのような評価をしてくれるとは思っていませんでしたので、とてもとても光栄です。

実はGarrett氏と話す前に、今回は通訳を担当されていた、堂園さんにご挨拶させていただいたのですが、そのときも「いや、Garrettはかなりクールだといっていた」といわれてまして、何かの間違いだと思っていました。もともとTplcutterは、ホビーユース・大規模開発の方をターゲットとしていなくて、「実務でフレームワークを使って制作している中小向けのツール」のつもりだった…つまりメジャー路線ではないと思っていたのです。LTも「東大に記念受験する出来の悪い学生」のような気持ちで臨んでいたので、自分的にはウケが悪い筈だったのです。Garrett氏も、現在のフレームワーク、とりわけCakePHPの「高速開発」のコンセプト内で、ビューの実装に関する、何か「もや」のようなものを感じていたんでしょうかねぇ。

繰り返しになりますが、デモンストレーションがあまりにも未完成のため、100%の利点を伝えることが出来なかったのですが、機会ありましたら別の形で紹介できればと思っています。もしお望みでしたら、出張講演(???)等も全然OKですので(笑。

発表に使ったスライドは、後日アップさせていただきます。
また、更に詳細に書いたスライドもありますので、そちらもチェックの後にアップさせていただきます。

個人的には、全く笑いの取れなかった点も残念に思っています。
他の方は皆さん面白い話を織り交ぜられていましたが、私の方はもうそれどころではなく、時間内にデモまでいくのに精一杯で、終わってみたら超つまらない内容でした(大汗)。デモの中に笑いを用意していたのですが、完全に予定外でしたね(;^;)。

まあ、とりあえず一部の方ではありますがそれなりの評価をいただいて手応えもありましたので、今回に関してはこれで良しとしたいと思います。

さて、他の方のスピーチに私なりの思いを語ってみたいと思います。

【安藤さん;国内でのCakePHPの利用状況について】

スピーチ内で「高速開発フレームワーク」という、CakePHPのコンセプトを強調されていましたが、私もその考え方に乗っているクチでして実際その通りだと思っています。
また、「フレームワークは生産性と保守性の向上である」というのもその通りで、私もそれを切実に感じてフレームワークを検討し、現在に至ります。丁度1年前の話になります。

【岸田さん:Agileな開発現場での実践例】

「テストケース」の使い方についてご説明いただき「あとあと役立つ」的な説明をされていました。この「あとあと」の重要性というのは、開発内容でとても左右されるのではないかと思います。パッケージソフトや、業務ソフトなどについてはかなり重要だと思います。

ちなみに私はwebプログラミングを本職としたのは比較的に新しく、以前はゲームの開発をやっておりました(最初はプログラマーとしてでしたが、プランナーが本職でした)。当時はテストケースという考え方はなく、ひたすら「人の手によって発生した不具合」を集計し、反映させる作業を繰り返していました。ただ現在考えてみると、ゲームのようなコンテンツアプリは、かなりイレギュラーな場合の不具合が圧倒的に多く、今回のようなテストケースが仮に組み込めるにしても、本当に価値のあるデバッグは人の手によるものでしか分からない点があったりします。ゲームの話は結構極端かもしれませんが、インターフェース部分、とりわけフロントエンド開発では、ページ遷移などの影響でテストケースに支障が出る可能性が多分にあるのではないかと考えます。

極端な話、私は「いくらテストケースをしようが、人の手によるエラーのチェックは省くことが出来ない」と考えていて、このことはテストケースを含むデバッグプロセスを想定する上で念頭に置いた方がよいのではないかなと思います。

【Garrett氏招待講演】

CakePHP開発のテーマはとして「State of Nature(ありのままに出来る自由)」と「Social Contract(ルール作り)」他があるそうで、特に「ルール作りをすることで、(皆が)より自由な発想が出来る」という思想のようです。
つまり「面倒なところはプログラム任せ。自分はよりやらなければならないところに特化する」という私のテーマと合致しているところがあり、とても嬉しく思っています(そういえば岸田さんも同じようなことをスピーチ内でおっしゃっていましたね)。
Garrett氏の説明を受け、やっぱりCakeは全体のシステム(プログラム、というわけではなくて、プロジェクト全体の意味)が良くできているなと改めて思いました。

ちなみに、Cakeの未来としては、とりあえずRC4が出るそうです。また、近いうちに1.3が始まり、2.0でPHP5オンリー化を目指すそうです。
そして、チケットを出す際には「テストケースとパッチを一緒に上げる」を是非しましょう、とのことです(笑)。

【鶴岡さん:XoopsCubeなのにCakePHPを使う】

XoopsCubeは実は使ったことがなかったのですが、私も実は同じようなコンセプトのCMSを作り、それを現在も商売として運営していますので、「中小向けのCMS市場」というのは需要があることはよく分かります。ただ、実際に運営してみて思ったことは「HP作りたいけどやり方が分からない」という方の多くは「PCも分からない」というくらいのスキルギャップがあり、いくら便利なCMSを作っても使ってくれないという事を身にしみていたりします。つまり、サービス運営側がCMSを使うことは何ら問題がないのですが、エンドユーザに提供するまでをやってしまうとカオス入りしかねないと思っています。そういった意味で「中小の市場は、想像よりは意外に狭い、でもやり方次第で顧客を獲得できる可能性は高い」という感じですかね。

【青木さん:旅行代理店様向けチケット予約をCake+Ajaxで】

Ajaxは私も結構注目している技術で、それでいてなかなか難しい技術だったりすると思っています。あおきさんの目指した「ユーザインタフェースの向上」は代表的なAjaxの使用例なのですが、私はもう一つのテーマを最近追求していたりします。
じつは、最近「連想くん」を紹介させていただいているのですが、こちらもAjaxは当たり前のように使っているのですが、実はAjax化は苦肉の策だったんです。「連想くん」での採用理由は、なんと「不可分散(というか時間短縮)」で、クライアント側に処理を肩代わりしてもらうことで、サーバ側の硬直時間を作らない仕組みになっています。
少し奇妙に思われるかもしれないのですが、これはPHPがシングルタスクである点から由来しています。例えばGoogleやアマゾンへいくつかのリクエストを送るのですが、個数が増えると順番に実行していかなければなりませんので、終了するのに時間がかかってしまうのです。そこで、Ajaxで複数のリクエストを同時に発行し、効率よく結果が得られるようになっています。
連想くんの例はあくまでも一例なのですが、UIとしてのAjaxはもう過渡期かなと思いますが、そのほかの使い方も出来るのではないか、という可能性みたいなものを感じています。

【青木さん:連想検索】

実は、全く同じコンセプトが当方の「連想くん」だったりするのです。
ただし、連想くんの連想エンジンは、全く違うもので、青木さんのところはかなり本格的なアルゴリズムのもとで行っているようですが、当方のものはかなり「エセ」だったりします(^^;
これからは連想検索の時代だと思います。
「検索のコンシェルジュ」的な存在だと思います。
間違いなく、今後の主流になるのではないかと予感があります。
本当はちゃんとご挨拶して連想検索について熱く語りたかったのですが、タイムアウトでその夢は叶いませんでした(涙。

【梶原さん:CakePHPerのためのBDDのすすめ】

SpecというツールやBDDという技術は実はよく知らないのですが、こういった考え方は必要かなと思います。考え方のフレームワークを実現するツール、という印象を受けました。あまりにも知識がなさ過ぎてコメントが難しいのですが、今後勉強が必要と感じました。

以上、ざっと書かせていただきましたが、私はまだ小さなところでやっているなぁと感じました。
また機会がありましたら発言させていただきますが、この次はもっとホット&クールなネタを用意しないとですね。

長文失礼いたしました。
ごめんなさい、昨日今日ほとんど寝ていないので超眠いです。
今日のところはもう寝ます。

【追記】
ねねとまつさん(赤がすきさん)、捕捉ありがとうございます。
トラバ張っていただけているみたいなのですが、何故か管理画面上では出ているのに、公開画面に出てきてないのです(涙)すみません…出てきましたー
Tplcutter期待されていたそうで、大変に嬉しく思います。資料をなる早で公開させていただきます。

【追記2】
ご紹介いただいてありがとうございます。
以下Tplcutter関連のコメントを捕捉です。

creazy photograph :  CakePHPカンファレンス東京:参加レポート
ラボブログ : CakePHP カンファレンス東京で「フェイス女学園」が紹介されました!
看招 血染東方一片紅 : CakePHPカンファレンス東京に行ってきた
本を読む : CakePHPカンファレンス東京」にオンライン参加
WEBで地域活性化~岐阜県中津川市加子母から発信☆WEBシステム屋の日記~ : CakePHPカンファレンス東京に行ってきましたよー
d.tosh10の日記 : 10/25 CakePHPカンファレンスに行って
パンプキンスパイスラテ : CakePHPカンファレンス東京にいってきた!
/halt/Snapshot : CakePHPカンファレンス 東京は最高のイベントでした
tdoiの日記 : CakePHP カンファレンス Tokyo
Think Twice : カンファレンス振り返り
わすれないように. : cakePHPカンファレンス@tokyo に参加してきた

【Tplcutter】サイト開発スタイル紹介

本当は動画で実演を撮って紹介するのがアメリカンスタイルで面白いのですが、ちょっとやるのに時間がかかりそうなのでまた今度にしますが、サイト公開が終わったことですし、ちょっとその話題にも触れたりしましたので、簡単にTplcutterを用いた開発スタイルをご紹介します。

Tplcutterを使うと、CakePHPをはじめとするフレームワークでの、ビューテンプレートの制作及び管理が大変に楽になります。基本的にデザイン作業は普通のhtmlやPHPファイルを扱う間隔で編集し、それをTplcutterに通すことで、適宜加工し、フレームワークの所定の位置にテンプレートファイルを自動で配置します。テンプレートそのものだけでなく、画像など関連するファイルについても対象となるため、実質コマンド一発で全てのデザインがフレームワーク内に適用されます。

さて、概要はこのくらいにしておいて、私が実際に使用しているツール類をご紹介します。

【サーバ側】
・CakePHP1.2.0.7296
・Tplcutter0.2.0

【クライアント側】
・PuTTY0.60-jp
・WinSCP4.1.6
・WZEditor4/5
・DreamweaverMX2004
・GoLive6
(全てWindowsアプリです)

ちなみに、私はたいていはWZで手打ちですが、CSSをあてたりするときにデザインツールを使用します。会社ではDreamweaverを、家ではGolLiveを使用しています(自費で持っているのはGLだけなので、CS4を是非とも欲しい!)。

さて、編集方法なのですが、まずはローカル内にサーバイメージを作成し、それをサーバに上げるようにします。こうした方が、WinSCPの「ミラーリングアップロード」機能を使いやすいからです。作業用のフォルダ内にまずCakeを展開し、次にTplcutterを/vendorsフォルダに展開します。database.phpを編集したあと、サーバ側のhtdocsに転送して、動作確認をします(/app/tmp以下のパーミッション設定を忘れずに)。ついでに、PuTTYを起動し、コマンドラインでTplcutterもちゃんと動くか調べます。

準備が整ったところで早速編集にはいるわけですが、デザイン作業自体はローカル側で適当にやって構いません。場合によってはデザイナーに外注する場合もあるでしょうから、Tplcutterのテンプレート置き場の通りに画像等を配置してもらうように指示して、別の場所で作業してもらってもOKです。
テンプレートの作業が終わったら、Tplcutterのテンプレート置き場に正しく配置します。

プログラム側も、出来る範囲で作業を進めておきます。モデルやコントローラを作成し、それをローカルのサーバイメージ内に正しく配置します。ビューがないとまともに動かないため、適度で良いと思います。

とりあえず最初の反映ということで、WinSCPのミラーリングアップロードを行います。ちなみに、普通にアップロードしても良いのですが、「コマンド→ミラーリングアップロード」を実行すると、まず最新のファイルを調べて転送し、その後監視を続けて更新されたファイルを逐次アップロードしてくれますので、修正しながら動作確認をするのに大変便利です。

そのあとTplcutterをコマンドライン上で実行し、ビューを反映させます。
それらしいファイルが生成されたことを確認して、サイトを表示してみます。

最初のうちは、デザインの修正とプログラムの修正が混在して大変かもしれません。ケースバイケースですが、私の場合はまずWinSCPのミラーリングアップロードを保持したまま、WZで処理が通るまでプログラムを修正し続けます。

プログラムがこなれたところでデザインの修正なのですが、自分自身でやる場合はWinSCPのミラーリングアップロードをTplcutterのテンプレート置き場を対象にして、Dreamweaver(GoLive)で修正していきます。こうすることで、余分な場所を監視することがないため、ストレスが少ない気がします。ツール側で修正して保存すると、片っ端からサーバにアップロードしてくれます。
デザインを見たくなったところで、再びコマンドラインでTplcutterを実行します。基本的に全てのデザインが1コマンドで修正されます(場合によってはブラウザのキャッシュに引っかかる場合もあるので、注意が必要です)。

あとは、プログラムとデザインを交互に修正、という感じです。

Sambaを用いていてイメージが直接いじれる方はもっと簡単で、ローカルイメージとWinSCPがいりません。普通に編集していただいて、Tplcutterの実行をするだけです。XAMPPをお使いの方も、コマンドラインでTplcutterを呼び出す方法は変わりないと思います。

ざっと駆け足で紹介しましたが、このように編集ツールとの連携がとても簡単になります。直接テキストエディタでビューテンプレートを作りだしている人には向きませんが、CSSなど視覚的に編集したい場合に便利ですので、是非ご利用ください(宣伝)。

【Tplcutter】緊急ではない不具合報告、 ほか

週一の不具合報告はもう定番になってしまいました(^^;

新機能の「ピース」で不具合を発見しました。
急いで作ったのがバレバレの、本当にどうしようもないミスです。

ピースのはめられる側で指定する名前が、はめる側の名前でない…つまり見つからなかった場合に、コンソールで警告が出ます。
処理は止まりません。単純に見てくれの問題のため、アップデートは次の改良の時に一緒にやろうと思います。

さて、新サービス開発についてですが、実は現在寄り道をしています。
アイデア出しのためのサポートツール的なものを近日公開予定です。
いくつかの基礎研究の成果とAjaxの習得、それからアソシエーションの習得の成果という感じですかね。

hasMany系のアソシエーションで、動的に検索数のリミットを変更したかったのですが、いままで「アソシエーションを定義したあとは、値を変更できない」とばかり思っていました。実際には、findをする前なら変更可能なのですね。
最初はアソシエーション定義をモデルから外しておいて、bindModelをするつもりでいましたが、そのように手を入れなくて良かったです。

あと、JSONを自力で作ると結構大変ですね。オブジェクトと配列を結構混同してしまって…(いや、混同しなければ問題のないことですけど…)
PHPのJSON命令もあるのですが、日本語が絡むとイマイチだったので、結局手で作ることにしました。
まあでも苦労した甲斐があって、XMLなど重い処理を走らせる必要が無くなったので、良かったと思います。

そんなわけで、近日公開ですのでお楽しみに。
大げさな宣伝ですが、やっていることは非常に簡単だったり(^^;;;。
ちょっとAjaxやCakeやっている人なら「ナニコレ」って感じです。

【Tplcutter】Tplcutter0.2.0公開いたします

新バージョンのTplcutter バージョン0.2.0を公開いたします。

先日指摘しましたelement関連の不具合の修正と、新機能である「ピース」機能の実装をいたしました。

「ピース」機能を簡単に説明いたしますと、エレメントは「繰り返し流用したい部分をあらかじめファイルに書き出しておき、それを呼び出す」機能であるのに対し、「繰り返し流用したい部分をあらかじめメモリに蓄積しておき、加工時に指定の場所にコピーする」機能を提供します。こうすることで、実際の表示の際に余分な処理を抑えることが出来、展開速度の向上を見込むことが出来ます。

なお、ピースは同一アプリケーション内であれば、テンプレート内のどの場所に記述しても有効に働きます。つまり、指定した領域のあるテンプレートファイルと異なったテンプレートファイル内でも呼び出すことが出来ます。

使用例はサンプルファイル内にありますので、そちらをご覧いただけますと幸いです。

とりあえず使えるツールになったっぽいので、よほどのバグがない限り、しばらくバージョンアップは控えることにします。まだいくつかやりたい機能はありますが、それは現在構築している新企画サイトの作成が終わってからにしたいと思います。

*************************************************
    テンプレート加工ツール「Tplcutter」簡易説明書
    Copyright (C) 2008 ECWorks ( http://ecw.seesaa.net/ )
*************************************************
 設置方法など詳細につきましては、アーカイブ内のドキュメントをお読みください。

————————————————–
■はじめに
————————————————–

 現在主流になりつつある、フレームワークを用いたWEBアプリ開発では、HTMLファイルやPHPファイルを直接表示する手法は少なくなり、Viewシステムを介してテンプレートファイルを読み込み、それを加工した後に表示する手法が一般的となりました。
 ところが、テンプレートファイルは通常外部から見えない領域に格納されるため、デザイン編集作業の際にテンプレートファイル内に記述する画像など表示物等のリンクが実際のリンクと異なってしまうため、編集が困難になるという問題が発生します。

 そこで、デザイン時では普通のHTMLを編集するような感覚でデータを作成し、それらテンプレートとその他ファイルを適切な位置に配置できるようなツールが実現できないかと考え、本ツール「Tplcutter」を開発しました。
 デザイナー側から見ますと、サイト制作ツール等で編集可能なディレクトリ構造のまま作業し、それをそのままプログラマー側に受け渡せます。また、テンプレートは読み込んで加工したものを別のディレクトリに作成し、その他表示物はコピーしますので現在稼働しているサイトのデザインを崩すことなく直接編集することも可能です。
 そして、最大のメリットとしては、コマンド一発で全てのテンプレートを更新することにあります。デザイナーによって制作されたテンプレートを適用するためには、これらファイルを加工したり、異なるディレクトリに配置したりする必要がありました。デザインが変更されるたびにこの作業を行わなければならないため、無駄な手間が発生します。本ツールはこれら作業を自動化しますので、時間の節約や更新間違い等による不具合の発生を極力防ぐことが出来ます。
 本ツールは、もともとCakePHPフレームワークにて利用できるように開発したのですが、SmartyやSynfony等、ほかのフレームワーク・テンプレートシステムでも利用できるように、PHPコマンドラインでも利用できるよう拡張いたしました。ini形式ファイルにて細かな設定が出来ますので、幅広いシステムで使用することができます。

————————————————–
■動作環境
————————————————–

 本ツールは、CakePHP1.2.xのCakeコンソール、もしくはPHP4/5のコマンドラインで使用することが出来ます。

 CakePHPにてテンプレートを利用する場合は、Cakeコンソールで使用することで、ほぼ無設定でCakePHP向けのテンプレート加工をします。
 同様に、PHPのコマンドラインから利用する場合は、ほぼ無設定でPHP向けのテンプレート加工をします。

 どちらの方法でも、ini形式ファイルにて設定することで、異なるテンプレートシステム向けの加工をすることも可能です。

————————————————–
■ご利用条件
————————————————–

 本ツール一式は使用もしくは再配布について、無料でご利用いただけます。
 本ツールおよびアーカイブ内に含まれる全ての著作物に対する権利はECWorksが保有しており、GNU一般公衆利用許諾契約に基づいて配布しております。再配布・改変等は契約の範囲内で自由に行うことが出来ます。詳しくは、添付のGNU一般公衆利用許諾契約書をお読みください。
 なお、本ツールは一般的な利用において動作を確認しておりますが、ご利用の環境や状況、設定もしくはプログラム上の不具合等により期待と異なる動作をする場合が考えられます。本ツールの利用に対する効果は無保証であり、あらゆる不利益や損害等について、当方は一切の責任をいたしかねますので、ご了承いただきますようお願い申し上げます。

▼ダウンロードはこちら
tplcutter-0.2.0.zip

【Tplcutter】バージョンアップを予定しています。が…

週一で申し訳ないのですが、不具合(というか想定していなかった仕様)が見つかったので、修正したものを公開しようかと考えています。ただ、現状のバージョンでも使い方次第では問題がないため、わざわざ些細な修正でバージョンをあげるのもどうかと思い、踏みとどまっています。

見つかった不具合というのは「テンプレート内のelementを指定した部分について、ファイルに書き出した後にその領域を消去し忘れた」というものです。ほかの部分(ビューテンプレート)は、ファイル化した後消去していますが、elementは消去されていないため、elementを指定したエリア内(layoutもしくはビューテンプレート)にそのまま残ってしまいます。なので、それを想定せずに「$this->element()」を呼び出すと、おなじelement領域が2つ表示されることになります。

回避方法は2つあり、一つは「そのエリア内では該当elementを呼び出さない」、もう1つは「ダミーのテンプレートを作成し、その中でelementなどを指定する」です。
もともとelementは、サイト内で共通で使用する部品をファイル化して好きなときに呼び出す機能ですが、Tplcutterでは、性質上テンプレートファイルならどこに記述してもよいため、それなら実際に使用する部分に書いてしまえば問題がでない、というわけです。
ただそれではTplcutter本来の機能としては問題がありますし、実際に想定しなかった問題が出る場合もあります。
そこで妥協点として「ダミーファイル」な訳ですが、コントローラの存在しないファイル名にしておけば表示される心配はありませんが、それでも1ファイルゴミファイルができてしまうことになるので、あんまり気持ちのいいものではありませんよね。

実際に修正されたバージョンは既に出来ていて、あとはアーカイブにして上げるだけになっています。ただ、最近頻繁にバージョンを上げているため、混乱を招くのではないか、というのも懸念しています。もっと致命的な不具合なら急いで上げるべきですが、回避方法が2つもあるので急いでやるほどのことでもないのかも… という訳なのです。

ちょっともう少し考えてみますが、一応上記のような不具合が潜在していることをあらかじめ知っておいていただければと思います。

そして将来的な話なのですが、上記一件があったことで、新しい機能を思いついたというのか、結局こちらの方がよりスマートなのかと思い、機能追加を考えています。

elementはファイルにしておいて、好きなときに利用しよう、という機能ですが、わざわざファイルにするまでもない…というか、ほかのテンプレート内にも指定した領域と同じコピーがほしい、という場合が多々あると思います。たとえば、「ようこそ○○さん」という枠を使い回したい場合、数バイトで済むような領域をわざわざファイルに書き出すのもどうか、と思います。

そこで、「指定した領域をメモり内にコピーしておき、テンプレート加工の際に指定の場所に挿入する」といった機能を考えています。
テンプレート加工時にこれら処理を行ってしまうため、サイトのアクセス時に余分なオーバーヘッドが発生しないので、ある程度の高速化も狙えるでしょう。
また、CakePHPでないテンプレートシステムでelementと同等の仕組みを作るのが面倒ですが(といっても一番簡単なのはincudeしてしまえばいいのですが)、この機能の場合は最初からテンプレート内に存在しているため、もっと楽だと思います。

機能的にもそれほど大変なものでもないため、早いうちに公開できるのではと考えていますが、新企画の方も早く立ち上げたいと思っているので、悩むところです。ただ、新企画構築中でもこの機能は使えるかもしれないので、ちゃっちゃと作ってしまった方がいいのかもしれませんね(笑)。まあ問題点としては、コピーする領域をプリフェッチする必要がある、ということですかね。見つかった順番で挿入してしまうと、順番次第で挿入されないケースが発生するので。まあアルゴリズムは今思いついたので、問題がなければそれでいけると思います。

まあ、こんなこともありバージョンが近日中に上がるのは目に見えているのですが(汗)、早急に方針を決めて発表いたします。

【Tplcutter】近日バージョンアップのお知らせ

Tplcutterですが、いくつか不具合(というかケアし忘れ)があったので、近々バージョンアップを予定しています。

不具合というのはCakePHP用のテンプレートで「絶対パス指定にしないとサーバに持ってきた際に画像等が表示されない」というものです。これは、CakePHPではurlをrewriteしているため、相対パスだと異なるパスを指してしまうためです。そのために$html->image()等があるのですが、今回直にimageタグ等が使えるのが売りですし、データを手打ちで作り、確認はTplcutter後、という使い方なら問題は全くないのですが、それではこのツールの存在意義があまりないので、早急に直します。

あと、CSSファイル内のimage関連の操作についても考え始めています。webserviceを使った際に若干問題出ますので。ただ、通常時には特に問題ないので、優先度はかなり低いです。

【Tplcutter】Tplcutterの仕組み(図解)

Tplcutterのイメージがイマイチ伝わっていないのかもしれませんので、図解してみました。

例えば、上記構造を持つ「./mypages.html」と、action1アクションに張られている「./img/img1.jpg」を用意し、Tplcutterを実行すると、次のような加工を行い、目的のディレクトリに保存してくれます。特徴的なのは、mypages.html内に、全てのパーツを書いてしまっている点です。レイアウト部分とアクション部分(プラスエレメント部分)を別々に作成しなくても済み、また結局レイアウト内にアクションが貼られるわけですので、こうやって編集する方が理にかなっているのではないか? というわけです。Tplcutterという名称は「template cutter」の略で、この仕組みから由来しています。
ちなみに、各パーツの区切りは、始まりと終わりを各名称と種類を記したコメントタグで挟んで区切ります(設定することで、コメントタグでないデミリタを使用することも可能です)。

上の例はCakePHP用のテンプレートを加工した例です。なお、設定次第で別のテンプレートシステムに行うことも可能です。
また、切り分けたビューテンプレートに、レイアウトのヘッダとフッタを全てくっつけてしまうといったことも出来ます。これは、上記のようなレイアウトという概念がない、単純に1枚のテンプレートを表示するようなシステム向けの仕組みです。

本当は、チュートリアルのようなものを紹介すればさらに分かりやすいと思うのですが、ブログでそれをやるとレイアウト上きついので、サポートサイトを早急に作ってそこで紹介しようと思います。それまでは、アーカイブ内にあるサンプルでつないでいただけると…(^^;;;

【Tplcutter】新版を明日もしくは明後日リリースします

 お待たせしておりました新バージョンのTplcutterですが、リリースに向けての最終チェックをしています。

 動くものがあり、マニュアルもなんとか出来ているのですが、表記の間違いとかが結構あり、修正している最中です。前バージョンは、マニュアル内に明らかにコピペした事が分かる致命的なミスもあったので、そういった失態は今回避けたいです(^^;;;。
 明日は少し出かけなければならないため、早い時間帯でのリリースは無理ですが、夕方以降、遅くても明後日中に発表できると思います。

 今回の目玉は何と言ってもCakePHP以外のテンプレートシステムでも使うことが出来る点だと思います。従来通りCakeコンソールからの使用に加え、PHPコマンドラインからも直接起動できますので、システム環境を選ばないのが最大の特徴になっています(無理にCakeコンソール版を残す必要はなかったんですが、やっぱり大元はCake用ツールなので、意地というかなんというか(^^;;;)。

 それから、複数のアプリケーション(サイト)を同時に加工できるのも便利な機能と考えています。個人の方はあまり必要ないかもしれませんが、仕事で更新作業を行っている方は、かなり役立つのではないかと思います。

 前バージョンは本当にとりあえずといった感じでしたが、ようやく使えるツールになったと思います。まだまだ改良する点は多く、データのチェックもかなり甘いために安定面で弱いかもしれませんが、少なくともこのツールを開発して私の仕事での更新作業量が実際激減しているので、開発して良かったと思っています。前バージョンで既に何サイトか導入していて、その時点でかなりの時間短縮はできているのですが、新バージョンの利用後で複数サイトの更新を自動化出来るようになったので、さらにコーヒー何杯分かの休憩時間が稼げるようになりました。ショッピングシステムへの適用はこれからですが、どのくらい手間が短縮できるようになるか楽しみです。

 勤務時間内に作業を進められればもっと早く公開できたと思うのですが、一般公開している手前、さすがにそういうわけにもいかないのです。電車の中や寝る前といった時間しか使えないので、もし自分の会社をつくったりとかすればいいかもしれないんですけどね~ googleとかだったら、1週間の1日分が自由に使えるみたいなので、もし自分が会社起こしたら、こういった社会貢献に繋がりそうな制度は作りたいなーと正直思います。ちょっと脱線しましたが。

 とりあえずこれでTplcutter関連は肩の荷が下りた感じで、これでようやくECWorksのサイトをブログではなくて自前サイトに移行できそうです。まあこのブログはしばらく残ると思いますが、サポート関連は自前サイトに移したいと思います。結構見にくいですしね。

 とにかくやることが山積みで、体がいくらあっても足りない状態です。iPhone関連は全然進んでいないですし、○○サイトも××サイトも開発開始が遅れているなぁ… やりたいことと出来ることが明らかに一致していないので、そこが当面の悩みですかね(^^;。

 余談が長くなりましたが、本当の本当に、もうしばらくお待ちくださいませ。

【追記】
書いていたら日をまたいでしまいました(^^;
明日→今日=日曜日(8/31)です。