MT->WP Log. (WordPress引っ越し記録)

先日、MovableTypeからWordPressに移行したので作業記録を残す。

このエントリは移行時の作業メモであり、MovableTypeからWordpressへの移行作業を1から10まで書いていない。 また、本ブログで重要とされてる事柄(主にパーマネントリンク)に対して、本ブログなりの対策を行っているため、全ての方の参考にはならないかもしれない。 つまり『移行ガイド』ではないのでそのつもりで。

環境は以下のとおり。

  • OS:CentOS
  • PHP:5.1.6-24
  • MySQL:5.0.77
  • MovableType:4.27-ja (以降 MT )
  • WordPress:2.9.2-ja (以降 WP )

■パーマネントリンクの解決

最大の課題。

完全に移行(MTエントリのURLでWPのエントリにリンクさせる)するか、それとも潔くMTのパーマネントリンクは捨てるか。

本ブログは移行時点で約400のエントリを持っていて、どちらかと言えばエントリの少ないブログに区分されると思う。

しかし、ありがたくもソーシャルブックマークされているものや、中には検索エンジンの上位に検出されるエントリも存在するため、それらを完全に無視するのも申し訳ない。

かと言って、MTでのURLをWPにマッピングして将来的にもMTのならわしでWPを運用し続けていくのも気に食わない。

結論として、外部サイトからリンクを張られた(リンク切れが発生する)エントリに関しては、apacheのmod_rewriteによりWPにマッピングし、他のエントリに関してはMTのURLを捨てる事とした。

今後のパーマネントリンクはWPの形式に準ずる事にする。

■mod_rewriteの実験

実現したい事は、MTのURLでアクセスしても、移行後のWPエントリが表示される事。 mod_rewriteは正規表現を用いる事ができる等、自由度高く動作指定できるのだけど、期待する動作は1:1の紐付けと、古いURLでアクセスした際に301を返却させる事である。

全ての設定(RewriteRule)をWPの.htaccessファイルに記述すれば実現するが、httpd.confに記述した方が動作が速くなるそうなのでそうする。

実験的にWPインストール&MTからのインポートを行い、ちゃんとrewriteされるか色々と試したところ、最初はうまくいかなかった。以下の理由で。

  • rewrite設定を記述しても、アクセスしたファイル(つまりrewrite元のファイル)が存在する場合にはrewriteしない。
  • 該当フォルダに.htaccessファイルが存在し、rewriteの記述が存在する場合にはOverwriteされてしまい(本当?)、httpd.confの記述が有効とならない。

この事から、前者については移行後は該当しないので問題ないが、後者についてはWPが元々持っている.htaccessファイルが存在する(パーマネントリンクの設定をdefault以外にした場合)ため対策しなくてはならない。

対策は、WPの.htaccessファイルの内容をhttpd.confに移動させ、.htaccessの中身は無効化(記述削除でもいい)する。

ちなみに、WPの(.htaccessに自動生成された)rewrite設定は、今回のrewriteマッピング設定よりも後ろに記述する事。そうしないと、全てのアクセスがWPのindex.phpにrewriteされてしまう。不安であれば移行前に色々と実験した方が良い。

なお、.htaccessの中身をコメントアウトないしファイルそのものを削除して.htaccessの中身を無効としても、後でWPの管理画面よりパーマリンクの設定を更新すると、.htaccessの内容は復活してしまう。

これにより、いつのまにかmod_rewriteで設定した内容が無効になってしまうので、パーマリンクの設定は以後行わないようにするか、.htaccessをapacheが更新できないよう、ファイルそのもののパーミッションを変更しておく必要がある。これはハマった。

それでは実際の移行作業に移ろう。

■DataBaseの作成

以下の説明では、MySQLのユーザ名をUSER_NAME、パスワードをPASSWD、WPで用いるデータベース名をDATABASE_NAMEとしている。

$ unzip wordpress-2.9.2-ja.zip  
Archive: wordpress-2.9.2-ja.zip  
creating: wordpress/  
creating: wordpress/wp-includes/  
:

apacheに書き込み権限を与える。

なお、私のアカウントはapacheグループに所属しているため、一般ユーザでchgrp apacheが可能となっている。できなければrootで実施する事。

$ chgrp apache ./wordpress/  
$ chgrp apache ./wordpress/wp-content  
$ chmod g+w ./wordpress/  
$ chmod g+w ./wordpress/wp-content

なお、MTとWPを同一フォルダに共存させるため、WPの方はとりあえず「wp_blog」というフォルダ名としておく。

以上、ディレクトリに適切な権限が付与されていれば、あとはブラウザから設定する事ができる。

ブラウザから、データベース名等設定する。セキュリティ上不安であればSSL(https://)で接続する。 面倒ならsshで接続して直にconfigファイルを編集したり、ローカルで編集したconfigファイルをFTPでアップロードしても良い(WordPress自体がこの方法を推奨している)。

設定が完了すればadminというユーザが生成され、ブラウザに初期パスワードが表示される。これをメモしておく。

ログインボタンを押下する。

アカウントをadminとし、パスワードは先ほどメモしたものを入力する。

WPのダッシュボードが表示される。

まずは新規アカウントの生成(adminを使い続けても良いのだが気持ちが悪い)。

管理者権限を与える。

adminをログアウトし、新たに生成したアカウントでログイン。

adminをコンテンツごと削除する(『すべての投稿とリンクを削除』を選択)。

これで何もない(まっさらな)WPができあがる。

■WPへのインポート

MTからエクスポートしたファイルをインポートする。

当ブログは、エントリ数が少ないのでエクスポートファイルが2MB以内に収まったが、2MBを超える場合には、ファイル名をmt-export.txtとし、/wp-content/に格納してからブラウザを操作する。

要するにインポートページに書いてあるようにする。

■投稿者の割り当て

インポートするエントリの投稿者をWPのユーザに割り当てる。先ほど生成したユーザ(つまり今ログインしている唯一のユーザ)に割り当てる。

■パーマリンクの設定

[設定]→[パーマリンク設定]

『カスタム構造』を選択し、以下を指定した。

/%year%/%monthnum%/%post_id%

■Rewriteの設定

いよいよ。

■Movabletypeからデータのエクスポート

メニュー:[ツール]→[エクスポート]で、『ブログをエクスポート』ボタンを押下。

画像などのバイナリデータは含まれていないので、MTの環境はまだ捨ててはならない。

■外部サイトからのリンク抽出

この作業はGoogleのウェブマスター ツールが適している。

Google ウェブマスター ツール

ダッシュボードの『サイトへのリンク』から詳細ページに遷移すると、リンク情報をcsv形式のファイルでダウンロードする事ができる。

ブログへのリンクのみを抽出するためにスクリプトを書いた。

スクリプトは失われました。すみません。

もしも、あなたがこのスクリプトを利用する場合には、strstrの引数を修正する必要がある。

スクリプトは以下のように用いる。Gg_BlogLink.txtに抽出されたURLが記録される。

$ php BlogLinkExtract.php ダウンロードしたCSVファイル名 > Gg_BlogLink.txt

■WordPressのURLとエントリタイトルの取得

MTからインポートしたエントリをエクスポートする(WPでのURLが欲しいので)。

以下のスクリプトを書いた。このスクリプトを実行すると、WPのURLとそれぞれのエントリタイトルが得られる。

スクリプトは失われました。すみません。

このように使う。結果はWP_BlogLink.txtに書き出される。

$ php WPExportXMLExtract.php WPからエクスポートしたファイル名 > WP_BlogLink.txt

■MovabletypeのURLとエントリタイトルの取得

ブログのアーカイブページを表示させページソースからURLとエントリタイトルを手動でファイルに保存する(MT_BlogLink.txt)。ここ、いきなり原始的になるが、手っ取り早いのでこうした。

残すファイルの内容は、URLとエントリタイトルをカンマ区切りにして1行に1エントリとする。

要するに、上記で抽出したWPの抽出内容と同じ形式にする。なお、ファイル保存時の文字エンコーディングは忘れずにUTF-8としておくこと。

■RewriteRuleの自動生成

これまでに準備した3つのファイル( Gg_BlogLink.txt, WP_BlogLink.txt, MT_BlogLink.txt)を元に、以下スクリプトでRewriteRuleを自動生成する。

スクリプトは失われました。すみません。

こんな感じで実行すると、httpd.confに記載すべきRewriteRuleが吐かれます。

$ php CreateRewriteRule.php > RewriteRule.txt

■ブログのフォルダを入れ替える(rename)

  • MTのフォルダ:blog
  • WPのフォルダ:wp_blog

という状況なので以下の手順で入れ替える。

WPの設定画面([設定]→[一般])で、アドレスを変更する。

設定前  
WordPress のアドレス (URL) http://www.ivoryworks.com/wp_blog  
ブログのアドレス (URL) http://www.ivoryworks.com/wp_blog  
  
設定後  
WordPress のアドレス (URL) http://www.ivoryworks.com/blog  
ブログのアドレス (URL) http://www.ivoryworks.com/blog

アドレスを変更した事により、『変更を保存』ボタンを押下すると元のページに戻れなくなるが問題ない。

次に、MTのフォルダをrenameする。例えば『blog』→『mt_blog』というように。

最後に、WPのフォルダ名をrenameする。『wp_blog』→『blog』

おしまい。