ブログを Movable Type から WordPress に移行

Movable Type から WordPress に移行したときの備忘録です。

このブログは、PSGI Plack 環境の Movable Type で運営してきました。
今回 WordPress の移行をどこまでできるか、開発環境でいろいろ試してみました。移行前に考えたのは...

  • コンテンツマネジメントシステム (CMS) は同じでサーバ間の移行は経験があるけど、CMS 間の違いの移行はやったことがない。
  • Movable Type はバージョン 5
  • CMS 間で形式が違うデータをどうやって WordPress に移行するのか。
  • どの程度コンテンツデータに手を入れる必要があるのか。
  • パーマネントリンクの URL は、すでに登録されている検索インデックスに影響を与えないようできるだけ維持したい。

まずは、データの移行

Movable Type のブログデータのエクスポート。
「ツール > 記事のエクスポート」からエクスポートしてテキスト形式のファイル (export-xxx.txt) をダウンロードします。

開発環境に構築していた WordPress にそのエクスポートファイルをインポートします。
「ツール > インポート」にある Movable Type と TypePad で「今すぐインストール」をクリックするとインポーターがインストールされます。インストールが完了して「インポーターの実行」をクリックすると、インポーター画面に移動。
実際は裏でプラグイン「Movable Type・TypePad インポートツール」をインストールして有効化されています。
移行が済んだら無効化しましょう。

インポーター画面では、
エクスポートファイルを選択する方法と、
エクスポートファイルを mt-export.txt に変えて /wp-content/ ディレクトリに直接アップロードする方法の
2 つのやり方があります。

今回は、エクスポートファイルのデータサイズが大きくないので、ファイルを選択する方で。

ダウンロードしたエクスポートファイルを選択して「ファイルをアップロードしてインポート」ボタンを押すと、
新しくユーザを作るか、今いるユーザに投稿者を割り当てて「実行」をします。

いたってスムーズにデータの移行ができました。

どこまでデータが移行できたか

タグは移行できなかった。タグはほとんど使っていないので問題ないけれど。
やる場合はプラグインに手を入れる必要がある。
画像がメディアライブラリに入ってくれたら嬉しかったけど。
エクスポートファイルとの対応付けの難しさ、
エクスポートしたデータを変更してしまうデータ保全から無理もない感じで。
実装が難しそう。

あとは問題ない。投稿もコメントもちゃんと入っている。

コンテンツデータに手を入れるとすれば、画像の張り替え。
いままでの画像フォルダを残しておけば、そのまま引き継がれる。
特段手を入れる必要は無いけれど。
今回は画像数が少ないので、メディアライブラリで管理することに。
コンテンツデータは画像のところだけ手を入れた。

パーマネントリンクのURLをどう維持するか

一番考えて調整が難しかったのがパーマネントリンクの引き継ぎ。
パーマリンクの構造は、Movable Type のテンプレートで設定していたアーカイブマッピングに依存してしまう。

ブログ記事のアーカイブパスは、archives/%e.html
%e は、6 桁のエントリー ID、桁数が 6 桁に満たないとき、0 で埋めて表示される。

ブログ記事リストでは
カテゴリが %c/index.html
月別は %y%m/index.html
とパーマリンクの構造を設定していた。

WordPress に設定するパーマリンク設定として、
ブログ記事は Movable Type から完璧に引き継ぎ。
これは記事が検索されることを考えると譲れないところ。
ただし、今後はパーマリンクを変更できるようにしたい。

カテゴリやアーカイブは、
プラグイン「Custom Permalinks」でカテゴリ、タグを個別にパーマリンクの設定ができるので、対応できる。
けれど、今後の運営のことも考えて WordPress のパーマリンクの構造に変更することにした。

ということで、パーマリンク設定のカスタム構造は、
投稿のスラッグを 6 桁のエントリー ID でヒモ付けて
パーマリンク設定のデフォルトの選択にはない以下の通りに設定した。

/archives/%postname%.html

記事のスラッグを 6 桁のエントリー ID に変える作業をやった。

これでいままでのパーマリンクを引き継ぎつつ、
今後はパーマリンクを自分でつけられるようにしてみました。

Blue-Green Deployment で無事に移行完了

あとは、メニューを作ったり、必要なプラグインを入れたりしてレイアウトを整えた。
本番環境のサーバーに新しい DocumentRoot を作って WordPress を入れてそこに WordMove で同期。
サーバーの設定を前のブログの DocumentRoot から 新しい方の DocumentRoot に向けて振り替え。
サーバーを再起動すると、WordPress ブログの運営が始まりました。
Blue-Green Deployment 的にデプロイを進めてみました。

ウェブサイトの移行は?

まだ試していない。ウェブサイトの移行も試してみたい。
普通はホームページのリニューアルを考えるものが大半だと思うので、正式なやり方がない。
そもそもCMS間でサイトの捉え方が違う。
Movable Type は、今までのサイト設計のようにフォルダーを作ってウェブサイトの設計ができるけれど、
WordPress は、固定ページを作ってそこに親子関係を作っていく設計をするので、
そこをエクスポートデータでどう吸収できるかがサイト移行の肝のような気がする。

Movable Type にはてなブックマークブログパーツをつけてみた

2009年12月25日にリリースされた「はてなブックマークブログパーツ」をブログ Movable Type につけてみた。

ブログサービスをお使いの方は、利用しているブログのボタンを押すだけでコードが取得できる。それを貼り付けるだけ。

Movable Type や WordPress などブログソフトウェアでは、

を参考に以下のコードをブログ記事のテンプレートに貼り付け設置。新しくテンプレートモジュールを作成して管理もいいだろう。

<script type="text/javascript" charset="utf-8" src="http://b.hatena.ne.jp/js/bookmark_blogparts.js">
</script>
<script type="text/javascript">
HBBlogParts.commentInsertSelector = 'div.hateana-bookmark-comment';
HBBlogParts.permalinkSelector = 'div.asset-header h1 a';
HBBlogParts.permalinkAttribute = 'href';
HBBlogParts.permalinkPathRegexp = /\/archives\/\d+\.html$/;
</script>
<div class="hateana-bookmark-comment"></div>

設定は以下の4つが最低限必要。

  • 「HBBlogParts.commentInsertSelector」にコメントが挿入される DOM Element を CSS セレクタで指定。「div.hateana-bookmark-comment」にしてみた。
  • 「HBBlogParts.permalinkSelector」にブログのパーマリンクが記載されている DOM Element を CSS セレクタで指定。標準のままのテンプレートなら「div.asset-header h1 a」で可。
  • 「HBBlogParts.permalinkAttribute」に HBBlogParts.permalinkSelector で取得した要素のどこにブログのパーマリンクの URL が記載されているか属性を指定。
  • 「HBBlogParts.permalinkPathRegexp」にブログのパーマリンクにマッチする正規表現。アーカイブマッピングによって正規表現を調整。

ほかにも細かな設定が可能だ。デザインもスタイルシートで設定できる。

ブログの更新情報をウェブサイトに表示するJavaScript × JSON を作ってみた

Twitterのツイートをウェブサイトやブログに表示するJavaScript × JSON に触発されて、ブログの更新情報も同じように表示する JavaScript × JSON を作ってみた。


    1. 更新情報の json ファイルを出力。
    Movable Typeの「インデックステンプレートを作成」から
    タイトル「MTCallback」
    出力ファイル名「mt.json」
    テンプレートの種類「カスタムインデックステンプレート」
    で以下のソースを貼り付けて保存。json ファイルを出力。

    MTCallback([
    <mt:Entries glue=",">
    {
      "created_at":"<$mt:EntryDate format="%x %X">",
      "title":"<mt:EntryTitle escape="url">",
      "url":"<mt:EntryPermalink>"
    }
    </mt:Entries>
    ]);

    記事を更新するごとに公開日時、タイトル、URLを含んだ json ファイルを出力してくれる。タイトルは URLエンコード化。

    2. あとは、ページにjsonファイルまでのブログURLを設定した三行のソースを貼り付けるだけ。JavaScriptファイル (blogger.js) はダウンロードして使ってもOK。

    <ul id="blog_update_list"></ul>
    <script type="text/javascript" src="http://project.thingslabo.com/MTCallback/blogger.js"></script>
    <script type="text/javascript" src="ブログURL/mt.json?callback=MTCallback"></script>
    

    JavaScriptのソース (blogger.js) は、こんな感じの10行。

    function MTCallback(MT) {
    var statusHTML = [];
    for (var i=0; i<MT.length; i++){
      var title = decodeURIComponent(MT[i].title);
      var url = MT[i].url;
      var date = MT[i].created_at;
      statusHTML.push('<li><a href="'+url+'">'+title+'</a> '+date+'</li>');
    }
    document.getElementById('blog_update_list').innerHTML = statusHTML.join('');
    }
    

    ブログサービスでも json ファイルで更新情報の出力に対応してほしいゾ。

    ブログ記事を自動で公開する指定日投稿

    ブログ記事を指定した日時に公開してしてくれる指定日投稿。テストもかねて。

    cron の設定

    Movable Typeでは、記事を日時指定で公開する機能がありますが。使う前に設定が必要です。スクリプトやプログラムを自動実行するための cron を利用します。設定ファイル crontab にプログラムを登録することで自動的に公開してくれます。

    登録するプログラムは、toolsディレクトリにある run-periodic-tasks です。まずは、run-periodic-tasks に実行権限を与えます。

    $ chmod +x /path/to/mt/tools/run-periodic-tasks
    

    cron に登録。

    $ crontab -e
    

    crontab には、分 時 日 月 曜日コマンド の書式で設定。毎時間ごとに更新するように設定してみる。

    0 * * * * cd /path/to/mt/; ./tools/run-periodic-tasks
    

    注意点としては、まず mt までのディレクトリに移動後、プログラム run-periodic-tasks を指定すること。

    0 * * * * /path/to/mt/tools/run-periodic-tasks
    

    と横着しちゃうと

    Can't locate MT/TheSchwartz.pm in @INC (@INC contains: ./lib ../lib extlib ../extlib
    ....
    

    モジュールがないとエラーが出る。

    共用サーバの管理画面で cron の設定管理が用意されている場合はそれを使えばかなり楽に設定できます。

    Movable Typeでの指定日投稿は、cronのほかに複数の方法でできる。

    ブログ記事の編集画面で書いた記事を公開状態「日時指定」を選んで、公開日を設定保存するだけで、指定した日時に記事を公開してくれる。厳密には、cronに登録した日時に更新されるわけですが。

    最近の投稿

    カテゴリー

    アーカイブ