Movable Type から WordPress に引っ越す


この記事は「初めての WordPress」の続きです。前回で nginx と php-fpm の設定が出来ましたので、実際に Movable Type からの引っ越しを始めます。

Movable Type からのエクスポート

ブログ記事のエクスポートとインポート : Movable Type 5 ドキュメント
http://www.movabletype.jp/documentation/mt5/tools/import.html

公式サイトに書いてあります通り、これによりカテゴリー・タグを含んだ(ほぼ)全ての情報がエクスポートできます。

ブログ記事のエクスポート

ブログ記事のエクスポート

尤も、記事に掲載された画像や動画などはこれではコピーされません1。これらは別個コピーしておきます。

Movable Type のファイル群を WordPress ディレクトリにコピー

コピー先は /wp-content/uploads/mt にしました。これは自由に決めていいです。

コピー元(Movable Type のディレクトリ)
/Library/WebServer/Documents/blog
コピー先(Wordpress のディレクトリ)
/Library/WebServer/Applications/wp-content/uplads/mt
$ cd /Library/WebServer
$ sudo cp -r Documents/blog Applications/wordpress/wp-content/uploads/mt
# 念のため所有者も変更
$ sudo chown -R _www:staff Applications/wordpress/wp-content/uploads/mt

エクスポートしたファイルを修正する

ここはバッドノウハウの塊です。Movable Type のときは様々なプラグインを突っ込んでほとんどオレオレ記法ともゆうべきフォーマットで記事を書いていました。

これを WordPress にインポートするに当たって、正常に動くように修正していくのですが、最後は人力で全ての記事を確認するとして、スクリプトでできる範囲はやっておきたいです。

#!/usr/bin/env perl
use 5.12.0;
use warnings;
use utf8;
use Path::Class;
use String::Random;

my $dir = dir("$ENV{HOME}/Downloads");
my $original_file = $dir->file('blogremoracx.txt.orig');
my $input = $original_file->slurp(iomode => '<:utf8');
my $file = $dir->file('blogremoracx.txt');
my $output_fh = $file->openw;
binmode $output_fh => ':utf8';

my $random_string = String::Random->new;
$random_string->{A} = [
    @{$random_string->{c}},
    @{$random_string->{C}},
    @{$random_string->{n}},
];

my %scripts;
$input =~ s#(<|\[)(code|script|pre)[^\]>]*([\]>])(?:(?!\1/\2\3).)*\1/\2\3#
    my $key = $random_string->randpattern('A' x 50);
    $scripts{$key} = $&;
    $key;
#sge;

my $new_mt_dir = '/wp-content/uploads/mt';
{
    local $_ = $input;
    s#(?<=src=")(?=/)#$new_mt_dir#g;
    s#(?<=src=")https://blog.delphinus.dev#$new_mt_dir#g;
    s#(?<=href=")(?=/)(?!\S*\.html)#$new_mt_dir#g;
    s#(?<=href=")https://blog.delphinus.dev(?!\S*\.html)#$new_mt_dir#g;
    s#^(?<=BASENAME: ).*_#-#g;
}

while (my ($key, $str) = each %scripts) {
    $input =~ s/$key/$str/;
}

$output_fh->print($input);

なんかいろいろ複雑なことやってますね。全てはこのブログに散在するソースコードのせいです。

詳しく書いても他の人には全く役に立たないと思うので、このスクリプトでやったことを箇条書きにしておきます。

画像のリンク先を変える
トップディレクトリを /wp-content/uploads/mt に変えます。
固定ページへのリンクを変える
記事のパーマリンクは引き継ぎますが、個別に作っていたページはリンク先が /wp-content/uploads/mt に変わります。
BASENAME 中の _- に変える
Movable Type ではパーマリンクを作る際、BASENAME 中の _- に変換します。Wordpress はこれを自動的にやってはくれないので、自前で変換しておくのです。
以上の修正は、ソースコードには適用しない
これのためにスクリプトが大きくなってしまいました。予め、ソースコードとおぼしき部分をランダムな文字列に変えておき、上記の修正の影響を受けないようにします。

WordPress でのインポート

では修正したファイルを使って WordPress に記事をインポートします。

Wordpress で記事をインポート

WordPress で記事をインポート

「ツール」→「インポート」にて Movable Type and TypePad を選びます。

修正した記事ファイルを選択

修正した記事ファイルを選択

修正したファイルを指定します。説明書きにもありますが、このときアップロードできるのは 2MB までです。僕のファイルは 369 記事(多分)で 1.3MB ほどでした。2MB を超えるときは、画面の下部にあるとおり、/wp-content にファイルを設置した上でインポートを行います。

各記事のチェック

正常にインポートできているか、書式に問題がないかを実際に目で見て修正していきます。ここが一番時間を食うところです。

プラグインの実験しつつ、色んな書式で書いてきたツケがここで出ました。(下書き以外の)全ての記事を修正するのに 2 週間くらいかかってしまいました。

このときへ移行してプラグインの導入2なども行っています。それは次節で。


  1. エクスポートされるのは単なるテキストファイルです。Movable Type には記事やその他の添付ファイルも含んだ「バックアップ」機能もあり、Wordpress にはこれに対応したインポートプラグインも存在します。うちの環境ではこれがうまく動作しなかったので、「エクスポート」と、後述の標準プラグインを使いました。 
  2. Syntaxhighlighter や markdown 記法を使えるようにしました。 

コメントを残す