ダイナミック・パブリッシングは再構築が要らないため、再構築時の重さがなくなり(全頁を再構築しても5秒くらいで終ります)エラーとも無縁になれる素晴らしい環境なのですが、情報が少ないため誤解や間違った解釈をされることがままあるようです。ここではダイナミックの「その噂ウソ?ホント?」を検証しながらダイナミック・パブリッシングを使いこなすコツを探っていきたいと思います。
1.バグがあるってホント?
2.PHPによるモジュール化ができないってホント?
3.Perlのプラグインが使えないってホント?
1.バグがあるってホント?
ダイナミック・パブリッシングも出始めの頃はいくつかバグがありましたが、3.17辺りで実用に差し障るようなバグはほぼ一掃されたと見てよいと思います。時々バージョンアップ後に以前は正常だったものがおかしくなるということもありますが、その手のバグは静的生成でもあるので、ダイナミックだからどうこうということはないと思います。Six Apartも2006.7からはバグ報告フォームを用意してくれているので、気付いたバグはどんどん報告して改良してもらえばいいので、気にすることはないと思います。(3.32で生じたバグはこちらの方法で修正できます)
<一言ポイント>
ダイナミックでは動かなくても静的生成なら正常という場合は、バグのある箇所だけ静的生成にして<$MTInclude$>で読み込む方法で解消できます。
2.PHPによるモジュール化ができないってホント?(2006.12.16改編)
2006.9.9に改編した時はウソと本当が入り混じっている…と書いたのですが、今は正直ちょっと分からなくなっています(^^;。
MTをダイナミック化した当時(2004年12月:バージョン3.1時代)は、参考にしたダイナミック導入指南サイトに「PHPによる外部ファイルのインクルードは使えません」と書かれていたのをそのまま信用していたので(実際に自分で試してみたわけではない)、出来ないのだと思い込んでいました。が、その後テンプレート・タグが使えないだけでphpのコード自体は使えたような記述のある記事も見かけ、実際に3.32ではダイナミック頁でphpコードが動作しました。
ところが3.33にバージョンアップして大分たってからふと思い立って試してみたところ、何故かphpコードが動作しなくなっていました。しかも3.32にバージョンダウンして試してみても、3.33へバージョンアップする以前の3.32で見られたphp動作は再現できませんでした。原因が特定できていないので???状態ですが、どうもダイナミック・パブリッシング時のphpコードの動きは、もし動いたとしても「動作しないと考えた方が無難」なようです…。
しかし再構築時の負荷がほとんどないダイナミックではPHP化自体必要ないので、PHPの機能が使えなくても何も問題ありません(実はSmartyのコードを使うことによってphpの機能を呼び出して使うことが出来るのですが、それは後述)。
今大流行?のPHP化ですが、拡張子をphpにしてブログの各パーツを部品化しPHPのモジュールで読み込むという方法は、そもそもが静的生成時の再構築負荷を減らすのが目的なんですよね。ダイナミックは動的生成ですから、そのようなことをする必要がないのです。PHPのことをよく知り、PHPならではの機能をどうしても使いたいのなら話は別ですが(実はこれもSmartyのコードでPHPの機能が使えることが後になって判明したのでこの点でもダイナミックにしても弊害はないのですが)、単に再構築時の負荷を減らすだけが目的なら、PHP化よりダイナミックの方が適しているでしょう。
<PHP化サイトをダイナミックへ移行する際のポイント>
PHPインクルードしている部分があった場合は、該当箇所を全部<$MTInclude file="外部ファイルの名前"$>に変更することでこれまで同様モジュール化を維持したままダイナミックへ移行することができます。<$MTInclude$>タグは静的生成時とダイナミック時では振る舞いが違ってきますので、ダイナミック時は<$MTInclude$>タグでphpモジュール化と同じ効果を得ることが出来ますので安心して移行して下さい。なお、<$MTInclude$>の中でMTタグを使いたい場合はこちらの方法を参考にして下さい。こういったテクニックを知らずにここでハマってしまい、「ダイナミック使えない~」と思われてしまうのは悲しいことなので(^^;。
ダイナミック・パブリッシングも日々進化しています。古くなった情報の中には最新のバージョンでは通用しないものもありますので、常に最新の情報をチェックして誤解や迷信に惑わされないようにしたいと思います。
ちなみに、拡張子を.phpにするPHP化と、ダイナミック・パブリッシングは全く別のものです。ダイナミックパブリッシングはPHPで動いていますが、拡張子はhtmlのままで使えます(わざわざphpに変える必要はありません。いえ、変えても使えますけど、あまり意味はないかと…)。ダイナミックパブリッシングを「PHP化」などと言うと誤解を招くことがあるので、ご注意。
3.Perlのプラグインが使えないってホント?
これはウソ。確かにダイナミック・パブリッシングにはPerlのプラグインが使えませんが、Perlのプラグインを使いたい箇所のみ静的生成にすれば何も問題はありません。「ダイナミックでPerlのプラグインが使えない=ダイナミックを取り入れた頁でPerlのプラグインが使えない」ではないのです。「ダイナミック頁でもプラグインの箇所のみ静的生成にすることによってPerlのプラグインは問題なく使えます」が正解。
プラグインを使いたい部分を別パーツにして、「メインインデックスのテンプレート」で「新しいテンプレート」として作成します。○○.htmlなどと好きな名前をつけて保存・再構築します。この○○.htmlはダイナミックのチェックを外して静的生成されるようにしておきます。それをブログの表示させたい箇所に
<$MTInclude file="○○.html"$>
というタグを書いて、MTのインクルード機能で読み込めばOKです。こうすればダイナミックでもいくらでも好きなだけPerlのプラグインが使い放題ですよ~。お試しあれ。
<ポイント>
サイドバーなど共通の部分にプラグインスペースをまとめて設けて、動的頁から読み込むようにすると、動的頁が生成される際には、既に出来上がっているHTMLを読み込むだけでよくなるので(その度にトラックバックやコメントをいちいち構築しなくてよくなる)、ダイナミック時のMTの負担も減ることになり、その分頁表示も更に速くなります。サイドバーは1つあれば1回再構築されるだけですから、ダイナミックの良さへの影響はありません。共通の部分は静的生成にして動きの負担を減らすというのはPHPのモジュール化と考え方に共通するものがありますね。
■おまけコラム
ダイナミックへの誤解(1)~プラグインの罠
実は私自身、つい最近までこの罠にはまっていました。。。
例えば人気の「頁分割」ですが、さすがにこればかりは↑の3の方法が使えないので、Perlのプラグインが使えないダイナミックは頁分割が出来ないものと思い込んでしまっていたのです。でもそれは間違いでした。
「Perlのプラグインが使えない=頁分割が出来ない」じゃなくて、
「Perlのプラグインによる頁分割は出来ない」が正しかったのです。
つまり、Perlのプラグインじゃない、別の方法でなら、ダイナミックでも頁分割は出来たのです。それもすごく簡単に。
ある1つの方法が使えない=その方法が目的としている機能が使えない
ではありません。方法はあくまでも手段であって目的じゃない。その手段が駄目なら別の手段を使えばいいだけのこと。カレンダーも問題なく表示でき、ダイナミックでも頁分割ができることが分かった今、ダイナミックで出来ないことなんて何もないじゃないかというのが実感です。よく調べもせず聞きかじりの情報を鵜呑みにしたりしないよう注意して、冷静に判断できる力を身につけていきたいと思います。
ダイナミックへの誤解(2)~ダイナミックはSmarty
これも最近まで気が付かず「PHP」という言葉の罠にはまっていたものです。
ダイナミック・パブリッシングはPHPで動いていますが、そのベースになっているのはPHPはPHPでもSmartyという仕組みです。だからダイナミック・パブリッシングではSmartyのコードが使えます。例えばPHP化でよく使われる外部ファイルを取り込むコード、
<?php readfile("ファイルのアドレス"); ?>
はSmartyのコードに置き換えると
{{fetch file="ファイルのアドレス"}}
となります。何のことはない、そのシステムの仕組みに合ったコードを使えばいいだけだったわけで。Smartyを使えば静的生成ではプラグインが必要なカスタマイズもプラグインなしで実現できてしまいます。これに気が付けばダイナミックの可能性もさらに大きく広がります。
あらためて「普及した方法しかないという思い込み」を払拭していかねばなあと思います。
(2006年9月9日改編)
(2006年12月16日改編)
*この頁は最新バージョンの情報に伴い随時加筆修正されることがあります。
