MT3からWP3への移行メモを公開しておきます

2011/06/05WordPressに関する記事airoplane,DB,MT,WordPress,WP

前述の通り、MovableTypeことMT3.xxからwordpressことWP3.xxへ移行するという、かなり無謀というか浦島太郎的なシステム変更を行いました。当然ながらドキュメントも乏しく、かなり厳しかったわけです。MT3が好きでずっと使っているけど、そろそろ限界が…という人もいるかと思いますので、参考までにこのメモを公開しておきますね。

まず条件をば

今回の移行の条件・環境は以下の通りです。

  • サーバーはロリポップのチカッパプラン
  • MT3はEUC-JPで運用中
  • WP3は当然ながらUTF-8
  • DBもSQLiteからMySQLへと移行が必要
  • 移行にあたってパーマリンク(URL)は維持したい
  • できればFlickrの写真を生かしたい

こんなところですかね。では1つずついってみましょう。

1.まずSQLiteで文字コードを移行する

最初に手を付けたのが文字コードです。調べてみると、どうやらコンソールからコマンドちょちょいで変更できることが判明します。

$ echo '.dump' | sqlite3 mt.db | nkf -w > dump.txt
$ sqlite3 mt_utf8.db < dump.txt

おおこれは楽だ…と思ったのもつかの間、ロリポップではコンソールが提供されていないので、どうしようか悩みます。PCに環境作るのもめんどうだしな…とそこで気がついたのが、会社のサーバを運用しているさくらサーバ。さくらはコンソールが提供されているじゃ有りませんか。当然DBコマンドも使えます。

ということでSQLiteの文字コード変換は、ロリポップからDBファイルそのものを一時さくらに移し、そこでコンソールを叩くことで完了することが出来ました。あまりにあっけなくてビックリ。

その後はファイルをロリポップにもどし、ひとまずMTの文字コードをUTF-8に変更することで移行のためのフェーズ1の終了となりました。

2.DBをMySQLに変更

次に行ったのは、DBの変更です。WordPressのMySQLでブログを引き継げるように、現在のエントリーの内容を全てMySQLに移さなければなりません。

幸いこの作業には、大変便利なスクリプトが公開されておりました。

もうこれだけでOK。もしエントリ数が莫大な場合は、こちらをご参考に。エントリが多くてタイムアウトになる場合は、スクリプトから変換が完了したデータベースの処理を削ることで、そこは飛ばして勧めることが出来ます。

例えば「MTEntryが終わって、MTlogでタイムアウトしてしまう場合は、スクリプト中にあるMTEntryの処理部分をカットしてしまってもOK」ということです。うちはエントリ数がかなりあったので移行に時間がかかりましたが、この処理を施すことで少しずつすすめることができ、なんとか完了しました。ただし後で気がついたのですが、この作業は意味が無くなることになりますw

3.テストフォルダにWPをインストールする

今回の移行処理のポイントは、同一サーバ上にMTとWPを両方立てて、WPが安定運用できるようになった時点でメインシステムを移す、というものです。それはつまり

移行までは MT→ルートドメイン、WP→テストフォルダ で運用し、そして移行の時は WP→ルートドメインへ、MT→無効化 という処理を行うということです。今回の移行作業では、ここに2日ほどかかりました。以下、簡単に流れを説明しておきます。

まずは/wp/にWordPressをインストールします。これはとても簡単。DBは先ほどSQLiteからデータを移したMySQLを指定します。この時点で、WP単体としては稼働する状態になります。

次ににWPでMTのデータをインポートします。ポイントはパーマリンクを維持するところです。最初は田口さんの

こちらを参考に進めようと思ったのですが、やはりロリポップでは厳しい感じでした。そこで次に選んだのが

この方法です。つまり、MTからデータをエクスポートする段階で、すでにWPに最適化された状態にしてしまおうという考え方です。この方法はとてもスマートなのですが、いかんせん実例ではMT4を念頭に置いているため、MT3では若干の不具合が出る部分もありました。といって2カ所だけです。公開されているスクリプトの

  • 19行目 <MTEntries lastn="$ecount">
  • <MTEntries lastn="XXXX"> #XXXXは自分のエントリ総数より大きい数字にする

ここと

  • 37行目 <content:encoded><![CDATA[<$MTEntrybody$>]]></content:encoded>
  • <content:encoded><![CDATA[<$MTEntrybody convert_breaks="1"$>]]></content:encoded>

この2カ所を修正することでうまくいきました。このあたりは個人差出てきそうですね。うちはこの処理が必要だった原因が不明でしたが、症状からみてこう直すしか無かったので、こうしました。

これでWPにインポートさせるデータが完成しました。この時点で、さっき用意したDBは要らなかったかも!と気がつくわけですが、それはまあそれで。

できあがったデータは「WordPressのデータをインポート」から読み込ませ、完了です。なお、多くのサーバでは1度に読み込めるデータのサイズが2MBに制限されているようです。これではたいていのデータが読み込めないので、レンタルサーバのコントロールパネルから上限を拡張してください。ロリポップの場合は20MBにすることができます。

無事に読み込むと、WPのデフォルトテンプレートに、いままでMTで表示していた記事が表示されました。しかも固有のURLは保持したままで!素晴らしい!そして簡単すぎる…。

4.テーマとプラグインを決めて完成度を高める

あとはもうMTでやってきた作業とあまり変わりませんね。仮のディレクトリ以下で、WPによるこのサイトを構築しました。テンプレートも100個ぐらいみてそこから選びました。インストレーションに関しては資料が圧倒的に不足していたのですが、トライアンドエラーでなんとか完成させることが出来ました。

5.よしっ終わったぜ!と思った瞬間に悪魔の罠

そうこうしてデザインも入り、データの確認も終了。フッターが若干未完成でしたが、要素としては揃っているので、早朝のうちに公開しようと思いました。このときじつに午前7時。徹夜でした。

WPの設定画面を開き、まずは移行のテストのために、テスト用フォルダへWPを移してみることにしました。やり方は

とくに後者のほうの情報が役に立ちました。が、ここで罠にはまりました。

WPの設定には

  • WordPress のアドレス (URL)
  • サイトのアドレス (URL)

と、URLを入れる場所が2カ所あるのですが、なんとこれ、書き損じると、管理画面にアクセスできなくなるのです!そんなアホなwこんなオープンなフォームを書き損じただけで、パニックに陥ることとなります(実際、そうなりました)。しかも早朝、頭も弱っている時間です。ぐぐったところ、マスナガさんの情報が大変役に立ちました。というか、マスナガさんも同じ感想ですねw

それにしてもこれは焦ったなあ。一瞬真っ暗になりました…。もしDBを触れないなら、この設定だけはぜったいにミスってはいけません。

6.細かい問題をクリアして無事公開!

そんなこんなで小さなつまづきはありましたが、思いのほかスムーズに移行を果たすことが出来まして、今に至ります。他にもXML-SitemapとDDSitemapGeneratorがコンフリクトするとか、Featured Content Gallery は蔵の登録が2枚以下だとどんなにがんばっても表示できないのでドツボにはまるとかありましたけど、些細なことです。エントリがURLを維持したまま公開できれば良いのです。

ちなみに移行にあたって最も興味のあったことが、MT時代の静的HTMLファイルが残っていても、WordPressで動的HTMLファイルを参照させることができるのか、ということでしたが、そこはご覧の通り、うまくいっています。皆さんが見ているほとんどのHMTLは、アクセスの瞬間にWordPressの設定によって、Wordpressページに差し替えられているのです。これ、面白いし便利ですよ。なんせWordPressへの移行がうまくいかなかったなら、気にせずそのままMTで運用すればいいだけですからね。WPのデータなんてMTからエクスポートすればいくらでも同期できます。これからMT→WPを考える人は、この方法がよさそうです。

ということで、なんとか無事にWPユーザーとなることができました。これからはWPの記事も増えるかと思います。

それにしても、4月にMacユーザーになり、6月にはWPユーザーに。なんか変化の年ですね、今年は。まあうちのサイトも10年超えて11年目ですからね、これくらい変化しても良いのかも。

ということで、改めまして今後ともどうぞよろしくお願いいたします。

 

WordPress レッスンブック 3.x対応
4883377245

2011/06/05WordPressに関する記事airoplane,DB,MT,WordPress,WP

Posted by norio nakayama