固定リンクを変えずにスムーズにMovableTypeからWordPressに移行するまでの作業ログ
- December 27th, 2008
- Posted in 便利ツール
- Write comment

さてそろそろWordPressに移行しますよ。MovableTypeにはお世話になりましたが、企業CMSとして高機能版へ進化していっているので個人ブログにはちょっとつらい(MT4.xへアップグレードする理由がない)。あとモバイルへの対応が難しいのも理由です(WordPressだとプラグイン使えば固定リンクそのままでケータイへ振り分け可能)。
なお、WordPressへの移行は以前も検討したのですが、固定リンクを保持するのが難しかった(と当時思っていた)ので躊躇していました。URLが連番で処理されていればいいのですが、記事タイトルからごにょごにょと生成される方式だったのでいろいろ面倒だったのです。
しかしいろいろ調べてみるとなんとか固定リンクを変えずに移行できることが判明。まずはSIMPLE*SIMPLEから移行させてみました。
↑ まだ完璧ではないですが、記事単位のURLはそのまま保持しつつ移行完了。
URLを気にしない人ならいいですが、長くブログをやっていると過去の資産というかSEOというかが重要ですよね・・・。いやぁ、良かった、良かった。
以下、その作業ログ。淡々といきますよ。なお、MovableType 3.32からWordPress 2.7への移行です。たぶん他のバージョンでもOK。
■ 忙しい人のためのまとめ
かなり長文になりそうなので作業方針だけ最初に書いときます。
- 前準備としてMovableTypeのテンプレートを使って固定リンクに使われているファイル名をだーっと書き出し。
- WordPressをインストール。各種設定。
- 1.で用意したファイルを使い、WordPressのDBを直接いじってwp_posts.post_nameを一気にUpdate。
- 固定リンクを互換性のあるように設定。
- 画像ファイルをごっそりコピー。
- 画像ファイルおよびアーカイブにアクセスできるように.htaccessをごにょごにょ。
こんな感じですかね。要はMTのときのファイル名を使ってWPのDBを更新、それをURLに使う、という手法です。
■ かなり詳細な作業ステップ
さて以下、詳しくいっときましょう。
- なにはともあれバックアップ
- MTのテンプレートを使って固定URLリストを生成
基本。MTはいじらないのですが、変なことになったときに戻れるようにブログのディレクトリ以下をバックアップしておくといいでしょう。DB使っている人はそれも。
MTのテンプレート機能を使えば固定URLのリストを生成できます。

↑ こんな感じで。
一応コードも。固定URLと一応何の記事がわかるようにタイトルも(これは使わないけど確認用に)。
<MTEntries lastn="999999"> <$MTEntryBasename$>|<$MTEntryTitle$> </MTEntries>
そのあとこのテンプレートを再構築すれば http://www.simplexsimple.com/postnames.txt でリストが取得できます。あとで使うのでここでリストをコピー、テキストファイルとして保存しておきましょう。
ただ、ここで一点注意。上記のコードだと公開されている記事だけが対象になります。下書きの記事、公開予定の記事がある人はあとで書き出しをするときに書き出したファイルから削除するか、全部公開しちゃってから作業をすすめましょう(そうしないといろいろずれる)。
ここでMTの機能を使って全エントリーを書き出しておきます。mt-export.txtとしておきましょう。
データベース設定して設定ファイルをいじってファイルをコピーしてパーミッションとか必要なら変えてください。ここらへんは割愛。以下をどうぞ。テーマなんかや設定もお好みで。
» WordPress のはじめ方 – スタートガイド – WordPress Codex 日本語版
Adminはテストエントリーとかもあるので削除します。独自のユーザーを設定してログアウト、ログインしてからAdminを削除します。
WordPressのインポート機能を使ってMTからのエントリーを読み込みます。さきほど作ったmt-export.txtは/wp-contentにコピーしておきます。

↑ ファイルを設置してからインポートする方が好き。
次がちょっとトリッキーなのですが、インポートされた記事の最初のIDを調べます。

↑ マウスカーソルを最新記事にあわせると最後についているこれ。クリックしてアドレスバーから調べてもいいかも。
ここまで来たら、WPのIDとMT上での固定URLのマッピングリストを作ります。適当にExcelを使いましょう。さきほど作ったpostnames.txtをコピー、URLとタイトルを分けるために「データ」「区切り文字」「|で分離」をしてみます。
そのあとにWPのIDを横に列を作ってだだっと連番降順でフィルします。

↑ こんな感じ。
一応記事数や、最初と最後のIDと記事タイトルがあっていることを確認してから、Excelの関数を使ってSQL文を生成します。

↑ こんな感じでIDとURLを使ってSQL文を作ります。
一応関数に使うコードも。
="update wp_posts set post_name='"&C1&"' where id="&B1&";"
これを使えば次のようなSQL文が出来るはずです。
update wp_posts set post_name='post_90' where id=207;
ここまで出来たらA列をコピーしてpost_names_update.sqlとして保存、/wp-contentあたりにアップしておいてください。
WordPressのwp_postsというテーブルにpost_nameというのがあるので直接SQL文を使ってそれを更新します。さきほどのpost_names_update.sqlをアップしたディレクトリに移動して以下を実行します。
mysql -uUSER -pPASSWORD DB < post_names_update.sql
あっさり終了すると思うので次のステップに。
ここで固定URLを使ってパーマリンクの設定をします。僕の場合はarchives以下に置いていたので次のように設定。人によってここらへんは変更してください。

↑ ここね。
一応コードも。
/archives/%year%/%monthnum%/%postname%.html
あとは変更を保存して指示どおりに.htaccessを設定しましょう。
ここまで来たら実際にサイトを見てみます。昔のURLそのままにアクセスできているはずです。ただし、昔アップした画像とかが表示されませんよね。そこらへんを処理していきます(インストールしたディレクトリによっては表示されるかもですが)。
フォルダがそのままならいいですが、サーバーが違ったり、インストールディレクトリが違う場合はアップした画像をフォルダごとコピーしましょう。なお、その中にMTで生成したHTMLがあれば一括削除しておきましょう。使わないので。
再帰的に削除するにはこちら(赤松さんに感謝!)。
find . -name "*.html" -print (一応確認)
find . -name "*.html" -exec rm -f \{\} \;
これで画像は表示されるようになりますが、実在する/archivesとRewriteRuleの設定が.htaccess内でバッティングするため月別アーカイブなんかが表示できなくなります。そこでここで画像ファイルの保存場所を/archives_imgに名称変更し、/archives以下の画像ファイルがアクセスされたときだけ/archives_img以下を呼び出すようにします。
まぁ、ここらへんはざっくり以下のように設定してください(.htaccessね)。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule archives/(.*\.(jpg|jpeg|png|gif))$ archives_img/$1
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
これで月別アーカイブも画像ファイルも表示されるようになりましたね。
ここまでで一応終了ですが、他にもSitemapやらAdSense、Google Analytics、プロフィールページなんかもうまいこと処理して移行を完了させましょう。無事運用ができるようになったらMTを削除してバックアップなんかも設定しましょうね。要らないcronも削除しておくのが吉かと。
以上、駆け足で見てきましたが、冬休みにブログの移行なんかを考えている方はぜひどうぞ。環境によっては上記のとおり行かない場合もありますが、がんばって解決してみてください。
今はまだSIMPLE*SIMPLEだけですが、年末年始にかけて百式やこのブログも移行予定です。ようやくWordPressの便利プラグインとか使えるようになりましたな。そこらへんも今後アップしていきたいところです。
ブログシステムはどれも一長一短あるでしょうが、WordPress、シンプルでいいですよ。本体はあくまで軽く、そのあとはお好みで拡張していく楽しみがあります(そういう意味でFirefoxに似ています)。いやぁ、強烈に勧められてやってよかったなぁ。
■ 追記
こちらの方法でもうまくいくようです。基本的に同じことかな・・・。
» MovableTypeからWordPressへのURL込みの移行方法 – Wiki@browncat.org



パーマリンクやタグをそのままにMovableTypeからWordPressへ簡単に移行する方法
2006年の9月にLivedoor BlogからMovableTypeに乗り換えて2年強が経過したが、再構築のスピードやエラーに辟易しており、WordP…