増子良太のブログです

増子良太が書いているブログです。テーマをしぼらず、思いついたものをただひたすら書いていきます。

MovableType(MT)のURL変更時のゴミディレクトリを削除する方法を考えてみた

      2016/01/28

こんにちは!rmascoです。

このブログ自体はWordPress(WP)で出来ていますが、この記事はMovableType(MT)について書いています。

MovableTypeで悩まされるのは、ゴミファイルが残ってしまうことです。カテゴリのbasenameを変更したなどに、古いファイルに関しては削除されず、新しいbasenameのディレクトリが作られ、そのディレクトリに各ファイルが作られます。

WordPressはというと、パーマリンクを変更すると、古いパーマリンクから新しいパーマリンクにリダイレクトされます。非常に便利です。

movabletypeではサイトを構築中で、URLをあーでもないこうでもないと変更すると、その度に古いディレクトリ(ゴミファイル)が増えて行き、FTPやSSHなんかで削除するハメになります。

そこで、少し本気でMovableTypeのゴミ(古いHTMLやディレクトリ)を削除する方法を考えてみました。

MovableTypeで再構築時に出力されるファイルについては、mt_fileinfoというテーブルに全て書かれています。ただ、ここには出力するファイルだけが書いてあるので、変更したファイルの情報などは書いておりません。

ここからは考えた内容を書いているだけなので、実装していません。

 

【2014年3月25日 追記ここから】
@junnama さんがソースを起こしてくれております。ちょっとした思いつきでブログに書いたものが、githubに載っております!

mt-plugin-garbage-cleaner

【追記ここまで】

作戦1: 削除予定テーブルを作成する

mt_fileinfoと同じような、削除予定テーブルを作成し、カテゴリのbasenameなど変更時に変更前のパスを書き出しておき、再構築時にそのパスになんらかの処理を行う。

なんらかの処理というのは、ディレクトリを削除するとかhtacessを置いて新しいディレクトリにリダイレクト処理をさせるなどです。

この方法だと、過去にどんな変更を行ったかや、2つ前、3つ前のディレクトリにもリダイレクト処理などをすることができます。

 

作戦2: mt_fileinfoテーブルの変更を検知する

これも上と似ていますが、mt_fileinfoテーブルが変更されるタイミングが分かれば、過去と現在でなんらかの処理を行う事ができるのでは?と考えました。

こちらは少しだけ深堀してみました。

movabletypeには便利なコールバック処理というものがあります。

CMS上での記事の作成や変更、削除時に処理前、処理中、処理後にオリジナルの処理(実装)を付け加えることができます。

MovableType.org – Documentation: Events and Callbacks in Movable Type

mt_fileinfoテーブルのloadにコールバック処理を入れて確認してみたところ、再構築時にmt_fileinfoテーブルが持っている出力予定のパスが古く、カテゴリのbasenameと矛盾がありました。

再構築時にカテゴリパスからfileinfoを作っているということですね。

矛盾がある場合にだけディレクトリを削除するなり、htaccessでリダイレクトするなりすればいいわけですね。

まーこのあたりはMTが標準でやっておいてほしい機能ではありますが。。。

あと、ここまで書いておいてですが、、、URLの変更は慎重に!

 - movabletype(mt), Perl