固定リンクを変えずにスムーズにMovableTypeからWordPressに移行するまでの作業ログ

SPONSORED LINK

Pocket

wp_top.gif

さてそろそろWordPressに移行しますよ。MovableTypeにはお世話になりましたが、企業CMSとして高機能版へ進化していっているので個人ブログにはちょっとつらい(MT4.xへアップグレードする理由がない)。あとモバイルへの対応が難しいのも理由です(WordPressだとプラグイン使えば固定リンクそのままでケータイへ振り分け可能)。

なお、WordPressへの移行は以前も検討したのですが、固定リンクを保持するのが難しかった(と当時思っていた)ので躊躇していました。URLが連番で処理されていればいいのですが、記事タイトルからごにょごにょと生成される方式だったのでいろいろ面倒だったのです。

しかしいろいろ調べてみるとなんとか固定リンクを変えずに移行できることが判明。まずはSIMPLE*SIMPLEから移行させてみました。

s_s.gif

↑ まだ完璧ではないですが、記事単位のURLはそのまま保持しつつ移行完了。

URLを気にしない人ならいいですが、長くブログをやっていると過去の資産というかSEOというかが重要ですよね・・・。いやぁ、良かった、良かった。

以下、その作業ログ。淡々といきますよ。なお、MovableType 3.32からWordPress 2.7への移行です。たぶん他のバージョンでもOK。

■ 忙しい人のためのまとめ

かなり長文になりそうなので作業方針だけ最初に書いときます。

  1. 前準備としてMovableTypeのテンプレートを使って固定リンクに使われているファイル名をだーっと書き出し。
  2. WordPressをインストール。各種設定。
  3. 1.で用意したファイルを使い、WordPressのDBを直接いじってwp_posts.post_nameを一気にUpdate。
  4. 固定リンクを互換性のあるように設定。
  5. 画像ファイルをごっそりコピー。
  6. 画像ファイルおよびアーカイブにアクセスできるように.htaccessをごにょごにょ。

こんな感じですかね。要はMTのときのファイル名を使ってWPのDBを更新、それをURLに使う、という手法です。

■ かなり詳細な作業ステップ

さて以下、詳しくいっときましょう。

  • なにはともあれバックアップ
  • 基本。MTはいじらないのですが、変なことになったときに戻れるようにブログのディレクトリ以下をバックアップしておくといいでしょう。DB使っている人はそれも。

  • MTのテンプレートを使って固定URLリストを生成
  • MTのテンプレート機能を使えば固定URLのリストを生成できます。

    wp_template.gif

    ↑ こんな感じで。

    一応コードも。固定URLと一応何の記事がわかるようにタイトルも(これは使わないけど確認用に)。

    <MTEntries lastn="999999">
    <$MTEntryBasename$>|<$MTEntryTitle$>
    </MTEntries>
    

    そのあとこのテンプレートを再構築すれば http://www.simplexsimple.com/postnames.txt でリストが取得できます。あとで使うのでここでリストをコピー、テキストファイルとして保存しておきましょう。

    ただ、ここで一点注意。上記のコードだと公開されている記事だけが対象になります。下書きの記事、公開予定の記事がある人はあとで書き出しをするときに書き出したファイルから削除するか、全部公開しちゃってから作業をすすめましょう(そうしないといろいろずれる)。

  • MTで書き出し
  • ここでMTの機能を使って全エントリーを書き出しておきます。mt-export.txtとしておきましょう。

  • WordPressのインストール、設定
  • データベース設定して設定ファイルをいじってファイルをコピーしてパーミッションとか必要なら変えてください。ここらへんは割愛。以下をどうぞ。テーマなんかや設定もお好みで。

    » WordPress のはじめ方 – スタートガイド – WordPress Codex 日本語版

  • ユーザーの管理
  • Adminはテストエントリーとかもあるので削除します。独自のユーザーを設定してログアウト、ログインしてからAdminを削除します。

  • mt-export.txtからインポート
  • WordPressのインポート機能を使ってMTからのエントリーを読み込みます。さきほど作ったmt-export.txtは/wp-contentにコピーしておきます。

    wp_import.gif

    ↑ ファイルを設置してからインポートする方が好き。

  • エントリーIDを確認する
  • 次がちょっとトリッキーなのですが、インポートされた記事の最初のIDを調べます。

    wp_id.gif

    ↑ マウスカーソルを最新記事にあわせると最後についているこれ。クリックしてアドレスバーから調べてもいいかも。

  • マッピング用のSQLを作る
  • ここまで来たら、WPのIDとMT上での固定URLのマッピングリストを作ります。適当にExcelを使いましょう。さきほど作ったpostnames.txtをコピー、URLとタイトルを分けるために「データ」「区切り文字」「|で分離」をしてみます。

    そのあとにWPのIDを横に列を作ってだだっと連番降順でフィルします。

    excel.gif

    ↑ こんな感じ。

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

    wp_sql.gif

    ↑ こんな感じで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あたりにアップしておいてください。

  • SQLにてWordPressのデータベースを更新
  • WordPressのwp_postsというテーブルにpost_nameというのがあるので直接SQL文を使ってそれを更新します。さきほどのpost_names_update.sqlをアップしたディレクトリに移動して以下を実行します。

    mysql -uUSER -pPASSWORD DB < post_names_update.sql
    

    あっさり終了すると思うので次のステップに。

  • WordPressでパーマリンクの設定
  • ここで固定URLを使ってパーマリンクの設定をします。僕の場合はarchives以下に置いていたので次のように設定。人によってここらへんは変更してください。

    wp_permalink.gif

    ↑ ここね。

    一応コードも。

    /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

ツイッターもやっています!

SPONSORED LINK

  1. パーマリンクやタグをそのままにMovableTypeからWordPressへ簡単に移行する方法

    2006年の9月にLivedoor BlogからMovableTypeに乗り換えて2年強が経過したが、再構築のスピードやエラーに辟易しており、WordP…

  1. January 6th, 2009
  2. January 6th, 2009
  3. January 6th, 2009
  4. January 9th, 2009
  5. January 9th, 2009
    Trackback from : [N]
  6. January 11th, 2009
  7. January 11th, 2009
  8. January 11th, 2009
  9. January 11th, 2009
  10. January 14th, 2009
  11. January 18th, 2009
  12. January 19th, 2009
  13. January 25th, 2009
  14. January 30th, 2009
  15. January 30th, 2009
    Trackback from : 玄鵬の地下室
  16. February 1st, 2009
  17. February 1st, 2009
  18. February 4th, 2009
  19. February 5th, 2009
    Trackback from : 頭ん中
  20. February 20th, 2009
  21. February 24th, 2009
  22. March 5th, 2009
  23. March 22nd, 2009
  24. March 22nd, 2009
  25. March 22nd, 2009
  26. April 1st, 2009
  27. April 5th, 2009
  28. April 13th, 2009
    Trackback from : ぷりどうぐ
  29. June 12th, 2009
  30. June 25th, 2009
  31. August 4th, 2009
  32. October 24th, 2009
  33. October 25th, 2009
  34. October 27th, 2009
  35. December 6th, 2009
  36. March 27th, 2010
  37. May 24th, 2010
    Trackback from : サーバお引っ越し
  38. July 3rd, 2010