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

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

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

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

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

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

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

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

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

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

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