MovableType

mt_fileinfoをみるとわかること

これは Movable Type Advent Calendar 2017 24日目の記事です。
Data API にはじまり、MTAppjQuery に終わるという、今年も Movable Type 一筋の一年でしたが、みなさんはいかがでしたか。来年は MT7 への移行が熱くなりそうですね。

はじめに

最近、以下のことを相談されることがあったので、解決策につながる方法を紹介したいと思います。

  1. ブログ記事のベース名を変更した際に、古いベース名のファイルが残っているので探したい。
  2. 公開しているコンテンツの中で、Movable Type で出力しているものと、そうでないものを整理したい。

(1) はよく聞く話です。ブログ記事やウェブページのベース名は、タイトル欄に入力された文字列を元に自動生成されます。このベース名を、理解しやすい URL にするために変更する際、対象を公開したまま実行するため、元のベース名のファイルが残ってしまうというものです。

(2) は (1) の現象の他に、期間限定のプロモーションサイトやランディングページを FTP 等でアップロードしているサイトではよくある話ですね。

これらを解決するには、 Movable Type で出力したファイル実際のファイル を比較することになります。これを手助けしてくれるのが mt_fileinfo というテーブルです。

mt_fileinfo テーブルとは

mt_fileinfo テーブルは、Movable Type をインストールした際に生成されるテーブルの一つで、Movable Type が出力したファイルの情報を管理します。以下は、その代表的なものです。()内は、mt_fileinfo テーブル内のカラム名です。

  • 出力先のファイルパス(fileinfo_file_path)
  • 出力先の URL からウェブサイト・ブログのサイト URL 部を除いたもの(fileinfo_url)
  • ブログ ID(fileinfo_blog_id)
  • テンプレート ID(fileinfo_template_id)
  • エントリー ID(fileinfo_entry_id)
  • カテゴリー ID(fileinfo_category_id)
  • アーカイブ種別(fileinfo_archive_type)

mt_fileinfo テーブルの情報を取得する

私の環境では phpMyAdmin とか入れていないので、mysql コマンドの出力結果を、テキストファイルに保存しています。
mysql のシェル内で、以下を実行すると、ファイルの一覧を出力できそうです。

SELECT fileinfo_file_path FROM mt_fileinfo;

ですが、これでは不十分です。理由は、mt_fileinfo テーブルには 未公開・下書き のものもあるからです。

記事やウェブページの公開状態の確認

記事やウェブページの公開状態は、mt_entry テーブルの entry_status カラムの値で確認できます。entry_status の値は、以下のようになっています。

解説
1 未公開(原稿)
2 公開
3 未公開(承認待ち)
4 日時指定
5 未公開(スパム)
6 非公開(公開終了)

現在、公開されているものは、entry_status の値が 2 のものになります。

インデックス・テンプレートや他のアーカイブの公開状態の確認

インデックス・テンプレートや他のアーカイブの公開状態は、mt_template テーブルの template_build_type カラムの値で確認できます。

解説
0 公開しない
1 スタティック(既定)
2 手動
3 ダイナミック
4 公開キュー経由

現在、公開されているものは、template_build_type の値が 0 のものになります。

Movable Type が出力しているファイルの一覧の取得するには

整理すると、以下のようになります。

  • mt_fileinfo テーブルの fileinfo_file_path の値で、出力しているファイルの一覧ができる。
  • 記事やウェブページの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_entry_id の値と mt_entry テーブルの entry_id を連携させて、 entry_status の値が 2 のもの のみを抽出する。
  • インデックス・テンプレートや他のアーカイブの公開状態を反映するには、mt_fileinfo テーブル内の fileinfo_template_id の値と mt_template テーブルの template_id を連携させて、 template_build_type の値が 0 以外のもの のみを抽出する。

ここまでわかれば、あとは頑張るだけです。今回は、SQL 文で INNER JOIN や条件を指定せず、以下の SQL で出力された結果を EXCEL で VLOOKUP してマスターを作成しました。

SELECT fileinfo_file_path,fileinfo_blog_id,fileinfo_template_id,fileinfo_archive_type,fileinfo_entry_id FROM mt_fileinfo;
SELECT entry_id,entry_blog_id,entry_status FROM mt_entry;
SELECT template_id,template_blog_id,template_build_type FROM mt_template;

最後に、作成したマスターとウェブサーバーに直接アクセスして得たファイルの一覧を比較することで、欲しい結果が得られました。

まとめ

  • mt_fileinfo テーブルをはじめに幾つかのテーブルの情報を連携させると、Movable Type が出力したファイルの一覧ができる。
  • ウェブサーバーに直接アクセスして得たファイルの一覧と、VLOOKUP することで Movable Type が過去に生成したファイルの一覧ができる。
  • 作業を楽にするためには、プログラムが必要ですね。MT7 のリリースに間に合うように開発したいな。