« ウェブ業界はどこを向いているのか、は知らんのだけれど。 | メイン | 音声ですべて操作できる携帯電話が変える人生。 »

MT FileInfoMgrプラグイン。

昨日の続きです。ちょっと必要があって書いてみたのだけど、なんだかんだと忙しくて本日はギブアップ。だけど一通り動かしてみて一応意図通りに動いてるっぽいので晒しておきます。名前負けです。ファイルマネージャーみたいなもんを最初は意識していたのですが、ちょっと頭混乱したので出来るだけシンプルな実装にしてみました(とはいえ結構トリッキーなこともしているかもしれませんが...)。

要するに、MTから生成された静的ファイルのうち、不要なものをまとめて削除するプラグインです。

改造/再配布自由です (Artistic License)。 <<だったらMTOS/MT問題ないですよね。

但し! ファイルを消去するプラグインなので、自己責任、プライオリティの高いサイトで使うにはテスト不十分です。何か気づいたことがあればご指摘ください。実用的というよりも、実験的なものくらいに考えてください。

利用方法

プラグインをインストール後、一度全再構築してください。その後アーカイブマッピングを削除したり変更したりカテゴリーのベースネームを変更したりして静的ファイルが残ってしまうシチュエーションになったら、再び全再構築してください。再構築完了時に不要な静的ファイルをまとめて削除します。

やっていること

再構築を一度かけた段階で吐かれたファイルの情報をDBに保存します。静的出力されるアーカイブに影響のあるオブジェクト(Template,TemplateMap,Category,Author)が保存された時、あるいは削除された段階で影響のある(かもしれない)静的ファイルに対して削除フラグを立てます。エントリーを非公開にしたり削除した時には、関連する日付ベースのアーカイブに削除フラグを立てます。

再度全再構築をかけた時には、吐き出されるファイルのパスと一致するファイル情報のレコードをチェックして削除フラグが立っていたらフラグを外します(そのファイルは必要なファイルなので)。全再構築処理の完了時に、削除フラグが立ったままのファイルが存在したらその静的ファイルをまとめて削除します。

制限事項・その他

ブログの公開パスを変更した時は...対応していません。さすがに全部が対象になるし。 既に結構無駄な処理してると思います。もっとスマートに出来るよって方は是非ヒントをください。細かくやるのは大変そうな気がします。

MT4.15では再構築に色んなバリエーションが出来ます。正直そこまで頭回っていません。

引き続き考察とか

サイトの運用状況にもよるのですが、削除のタイミングを間違うとリンク切れが発生します。MTでエントリーを先に再構築してインデックスを後に再構築するのはこの点に配慮しているからだと思います。カテゴリーなんかは保存時にベースネームが変更していたらその場でファイル消去してしまいたいところですが(インデックスアーカイブの出力先変更の場合も)、ただその場で削除してしまうとリンクが切れます。そこで、とにかく変更があったオブジェクト (に関連する出力ファイル) に削除フラグを立てて、次の再構築時にフラグを外し、再構築完了後にフラグが立ったままになっているファイルを消去するようにした、ということです。

いきなり削除するのではなくて、一度一覧を表示して選択削除できるようにすれば、結構実用的になるんじゃないかと。

ただ、当然ですが各処理時にDBへのアクセスが発生しますので、負荷はバカにならないと思います。スペックに余裕のある場合でないと現実的にはしんどいでしょう。あと、ファイル削除時に空になったフォルダとかは現状は削除しません。

企業サイトとかだと、意図しないファイルが公開されて検索にひっかかったりするのを避けたい時もあるし、結構制作過程であれこれ変更が入る時があります。そんなケースにどうするかってのを考えていて取り敢えず手を動かしてみた次第です。

追記メモ: アーカイブマッピングを「修正」は良いけれど削除すると駄目なことに気づいた。対策は明日以降。対処済み。

カテゴリー: MovableType, MovableTypeプラグイン

トラックバック

このエントリーのTBPingURL:
http://junnama.alfasado.net/mt/RRrt4444.mt/2400/post_177.html

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)


トップページ | アーカイブ(このブログの全てのエントリーの一覧)

最近のエントリー

このブログのフィードを取得
[フィードとは]