Movable Type 5とMovable Type 4を同じDB(MySQL)にインストールする

ちょっとMovable Type 5を試してみたいなと思ったのだけど、使用できるデータベース数に厳しい制限がある共用サーバでは「試す」のはちょっと難しい。なんでって、Movable Type 5の場合、作成するテーブルの名前を変更できない(Wordpressなら任意の文字列を頭に使用できる)ので複数インストールしようとするとテーブル名がかぶってしまって失敗してしまいます。

もし問題なく行けば移行も考えているので、SQLiteなどでの運用は2度手間だし…ということで、テーブル名をなんとか変更する方法はないかと探したら、ありました。ソースの編集という大技(昔のMovable Typeならともかく今はあんまり流行らないっぽい。その手のは全部プラグインでやるから)ですが、確かに上手く行ったのでメモ。

実行環境:

  • MySQL 5.1.51
  • Movable Type 5.0.4



参考にさせていただいたのはこちらの記事:

1つの DB で MT4 を複数インストール | WWW WATCH
MT5を1つのDBへ複数インストールする – memories


変更が必要なファイルは以下の3つ:

  • lib/MT/ObjectDriver/Driver/DBI.pm
  • lib/MT/ObjectDriver/Driver/DBD/Legacy.pm
  • lib/MT/ObjectDriver/Driver/DBD/Pg.pm


DBI.pm(16-30行目)

sub init {
my $driver = shift;
my (%param) = @_;
$param{prefix} ||= 'mt5_';
$driver->SUPER::init(%param);
my $opts = $driver->connect_options || {};

require MT;
my $mt = MT->instance;
my $cfg = $mt->config;
$opts->{RaiseError} = $cfg->DBIRaiseError;

$driver->connect_options($opts);
$driver;
}


Legacy.pm(47-52行目)

sub db_column_name {
my $dbd = shift;
my ($table, $col) = @_;
$table =~ s{ \A mt5_ }{}xms;
return join('_', $table, $col);
}


Pg.pm(128-141行目)

sub sequence_name {
my $dbd = shift;
my($class) = @_;

my $key = $class->properties->{primary_key};
## If it's a complex primary key, use the second half.
if(ref $key) {
$key = $key->[1];
}

# mt_tablename_columnname
return join '_', 'mt5',
$dbd->db_column_name(MT::Object->driver->table_for($class), $key);
}


これだけの変更で出来たっぽい。
インストール、ウェブサイト作成、ブログ作成、ブログ記事投稿まで確認しています。


注意:

自分でソース読んで確信を持ってるわけではないので、実施に当たっては必ずDBのバックアップを取り、巻き戻せるような体制を整えてから実施してください。



ちなみに、Movable Type 5の使い勝手は?移行するの?

悪くないです。UIは見やすいし、ギミックは軽快に動くし。

メニューが整理されてるとは言いづらいこと(例えば「ウェブサイト」トップのブログ一覧表示と「ブログ一覧」がかぶってる。しかも機能が微妙に違う)と、別にサイトごとに管理する必要性を感じないこととがアレだけど、まぁその辺は大した問題ではないかな…

1つ困ったのはドメインの扱いがかなりナイーブだと言うこと。Webサイトでドメインを決めたらブログはそれを継承することになるので、違うドメインのブログを作るにはまず違うドメインのWebサイトを作らなくちゃならない。また、ウェブサイトで「hoge.com」とかにして、ブログを「blog.hoge.com」にしてみたら全記事のパーマリンクが「hoge.com」になって直らない。変わりに「blog.hoge.com」でウェブサイト作ったら設定できた。何か間違っているのかなぁ。

実際の話、今どき、ブログソフトウェア、それもMovable Typeをサーバにインストールする必要なんか無いんじゃないのかと思ったりもするのですけど、実用的な意味ではともかく興味という意味でやってみたいなぁとは思っています。だからこのまま見通しが立てば移行もする予定。


1つだけ断念の可能性があるとすれば…ModTextFilterの未対応かな…
上手く回避の方法があれば未対応でもOKなんだけども。


追記:ModTextFilter

ダメ元でインストールしてみたら使えました。

  • convbr → 正常に動作
  • noconv → MT5では<br />挿入のルールが変わったっぽい(リスト入れ子でも改行が入らなかった)ので良くわからない
  • enchtml → 正常に動作

行けそうだなー