www.ni4.jp

Movable Type 3.2 からMovableType.netへ

ども、どもども。
ジャクスタポジション 西山です。

この記事は、Movable Type Advent Calendar 2024 の10日目の記事です。

弊社でMovable Typeを使い続けて20年。
Movable Typeを採用してウェブサイトを構築した中で現存する最古の1つ、そのウェブサイトが今まさにリニューアルを迎えようとしています。
現在使用されているのは…Movable Type version 3.2
諸般の事情があり長らくこの状況が続きましたが、やっとこの時を迎えようとしています。

そして18年ぶりのリニューアルにあたって、弊社が得意としているMovableType.netを採用することに。
公開はまだ少し先ですが、今日はそのMovable Type version 3.2 からMovableType.netへ、950件ほどの記事を移行した手順を書いていこうと思います。

正直なところあまり需要はない…というか、あっても困る気がしますが、version3.2のころを知っている方は、懐かしむように読んでもらえたらと思います(笑)

Table of Contents

懐かしいMovable Type 3.2の管理画面

今日現在まだ利用されているので、弊社ではたまに見かけていた管理画面ではありますが、こう見ると時代を感じずにはいられませんね…
そして今も、管理画面にはMTクラウドのことや、2024年から2025年にかけてのサポートのことなど、最新ニュースが配信されています。

20年ほど前のCMSが現役で動いているのって結構すごいことですよね…

利用しているプラグインはこちら

Better File Uploaderとかめちゃくちゃ懐かしい(笑)

Movable Type 3.2 からの記事エクスポート

懐かしんでばかりもいられないので、早速記事データの移行へ進みます。
ふと思ったのですが、MT3.2のころには「ウェブページ」という存在がなかったのですよね…、今では普通に使っていますが、当時はFTPソフトと併用する感じだったのだなぁと思いました。

記事の移行については、まずは普通に「書き出し(エクスポート)」から進めることにしました。
このブログでは562件ほどの記事があったのですが、MT3.2は動作がめちゃくちゃ早いです(笑)

一瞬でMovable Type形式のテキストファイルを取り出せました。

インポートと改行問題の解消

先ほど出力したテキストファイルをMovableType.netへインポートします。

上記手順のとおり、アイテムをインポートしつつ進めますが、ここで1つ目の問題が発生。
先ほどのテキストファイルでインポートすると、記事の中で「本文の改行」が反映されていませんでした。
調べてみると、テキストデータに記載された以下の点が問題だったようです。

CONVERT BREAKS: __default__

CONVERT BREAKSは改行に関するフラグなのですが、ここがdefaultとなっていました。
MT3.2では、管理画面内でこれを設定できる箇所がなかったように思うので、もしかしたらmt-configなどで設定できるのかもですが、今回はテキストファイル内で「CONVERT BREAKS: 1」と置換して対応することにしました。

そして改めてインポートを実施。
ところがそれでも改行は反映されません。

原因を調べる時間もなかったので、今回は「インデックス・テンプレート」でインポート用のファイルを作成することにしました。
これなら本文中にHTMLタグが入るはずと考え、先ほどのドキュメントにも記載されているテンプレートを用いて、以下のように出力することに。

<MTEntries lastn="99999">AUTHOR: <$MTEntryAuthor$>
TITLE: <$MTEntryTitle$>
BASENAME: <$MTEntryBasename$>
STATUS: <$MTEntryStatus$>
ALLOW COMMENTS: <$MTEntryFlag flag="allow_comments"$>
CONVERT BREAKS: <$MTEntryFlag flag="convert_breaks"$>
ALLOW PINGS: <$MTEntryFlag flag="allow_pings"$>
<MTIfNonEmpty tag="MTEntryCategory">
PRIMARY CATEGORY: <$MTEntryCategory$></MTIfNonEmpty>
<MTEntryCategories>
CATEGORY: <$MTCategoryLabel$>
</MTEntryCategories>
DATE: <$MTEntryDate format="%m/%d/%Y %I:%M:%S %p"$>
-----
BODY:
<$MTEntryBody$>
-----
EXTENDED BODY:
<$MTEntryMore$>
-----
EXCERPT:

-----
KEYWORDS:

-----


--------
</MTEntries>

そのうえで、先ほどの改行設定を「CONVERT BREAKS: 0」へ置換してインポートを実施(今思えば出力時に固定しても良かった)
すると、意図したとおり改行が反映されたままインポートすることができました。

タグ閉じ忘れ問題を解消

このインポート作業をしている時に、テンプレート実装をしていた他のメンバーから「記事の中にaタグの閉じ忘れがあるみたいでレイアウト崩れが発生している」と連絡が。

確認してみると、複数の場所でaタグの閉じ忘れを確認できました。
MT3.2(Better File Uploaderかも)では、最後にHTMLを表示してそれをコピーして本文中に貼り付けることができるのですが、もしかするとその際にコピーミスなどがあったのかもしれません…。

1つ1つ確認するのは流石に手間だったので、ChatGPTさんに相談して正規表現による検索と置換を教えてもらい、なんとか洗い出しを終えました。
aタグ以外にも閉じ忘れがあると困るので、最終的に正規表現ですべてのHTMLタグをチェックすることに。

画像ポップアップ表示の問題を解消

あらためてインポート作業を実施して、記事とアイテム(画像等)が正常にインポートできたところで表示確認をしてみると、今度は一部の画像で以下のように画像がポップアップウィンドウで表示するようになっていることを見つけました。

<a href="http://www.example.com/DSC00705.php" onclick="window.open('http://www.example.com/DSC00705.php','popup','width=400,height=300,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false">
  <img src="http://www.example.com/DSC00705-thumb.JPG" width="180" height="135" alt="http://www.example.com/DSC00705-thumb.JPG" />
</a>

これ、Better File Uploaderの機能でしたっけね…(拡張子がPHPになっているのはたぶん個人的な設定の問題)
今となってはこのような対応をする必要もないかと思うし、そもそもMovableType.netではPHPなどを利用できないので、この部分をまるっと削除することにしました。

再度、ChatGPTさんに相談して正規表現による検索と置換を実施、imgタグ部分だけを残してこれらを一括除去することに成功。
ちょっとだけコードの構成が違うところなどがあったので、何度か繰り返してこれらをきれいにしていきました。

日本語ファイル名のエンコード問題を解消

画像のポップアップ部分を削除することに成功したあと、念のため、他にPHPへリンクしている部分などが無いか正規表現でチェック。
存在した場合はそのリンクタグを除去するように進めました。

…が、ここで以下のようなリンクが残ってしまうことが判明。

<a href="http://www.example.com/%A3%D6%8E%BD%8E%B8.php" >
  <img src="http://www.example.com/%A3%D6%8E%BD%8E%B8-thumb.JPG" width="80" height="60" alt="http://www.example.com/%A3%D6%8E%BD%8E%B8-thumb.JPG" />
</a>

日本語ファイル名のまま画像などをアップロードした際に、エンコードされてしまったファイル名が検索対象から漏れてしまったようです。
この部分もChatGPTさんに相談して、画像タグだけを残すことに成功。

エンコードされたアイテムがインポートができていない問題を解消

あらためてインポートした結果を確認してみると、旧サーバー上でエンコードされたファイル名のアイテムが、MovableType.netにインポートできていないことが判明。

この辺りまで来ると、「MT3.2の管理画面、懐かしいー」とか言っている余裕がなくなってきました…
思い起こせば、こんなことがたくさんあって疲れたので、弊社でその後、ImageUploadUtilityをリリースすることになったのでした(笑)

ここはもう手作業でやるしか無い…と判断して、インポートするテキストファイルから、1つ1つエンコードされた部分を探して、旧サーバー内のファイルを参照、インポートできていないものは手動でバックアップしてMovableType.netへアップロードする…という原始的な作業に入りました(汗)

結果的には40個ほどのファイルがインポートできていなかったのですが、これもなんとかクリア。

旧サーバー内にも見当たらないファイルについては、画像部分を削除するかあるいは「File Not Found」という画像を用意して代替することに。
ここは今後、クライアントさんとも相談が必要ですが…、その多くが数年前のものだったりするので、ひとまずこれで作業を終えることに。
40個くらいなので、後日、旧サーバーから画像をダウンロードしてリネームのうえでリンクを再設定することになるかもな…

インポートした記事で「最古の記事」がインポートされない問題を解消

これですべての作業が終わったー
と思ったのですが、インポートした記事の数を確認してみると、いくつか足りない(数字が合わない)ことに気が付きました。

今回のインポートファイルはテンプレートとして書き出したのですが、調べている中で、Movable Typeはドラフト(下書き)の記事を出力しないことを思い出して、それを数えてみるとおおよそ数字が合うことが判明。

小粋空間さんのプラグイン「AllEntries」を使用するかとも考えたのですが、残念ながら現在はNotFoundだったので今回は断念。
ドラフト状態の記事は直近のものを除き、インポートしないことに。

ただ、それでも3記事分だけ合わないことがわかりました。
今回は3つのブログから記事インポートを実施していたのですが、確認してみると、それぞれのブログ記事で最古の1件(最初の1件)だけがインポートできていないことが判明。

MT3.2から出力したファイルには記載されているのですが、なぜかMovableType.netでそれをインポートしていないようでした。
おそらく出力したMovable Type形式のテキストデータに不備が合ったのだと思いますが…ここまで来ると

「たった3件なら手動で登録してしまえw」

という判断に(苦笑)
こうして無事に、対象となった950件ほどの記事移行作業は完了したのでした。

古いMovable Typeからの記事移行を終えて

正直なところ、思っていたよりも疲れました(苦笑)

HTMLに小さいサイズで埋め込まれた画像をポップアップウィンドウで原寸表示するとか、Movable Typeがどうこうというよりも、確かに当時はそんな対応とかしてましたよね…
インターネット回線が今みたいに高速・大容量じゃなかったので、このような対応をみんなが考えていたと思います。

あと、日本語ファイル名ね(苦笑)

サーバーを移設する際などにFTPソフトでダウンロードしても、移設先のサーバーにそのままアップしただけじゃリンクが切れちゃうとか、なんか色々あったのを思い出しました。
いやー、そう考えると我ながらImageUploadUtilityの「マルチバイトリネーム機能(日本語ファイル名を強制的に半角英数字に変換する機能)」って、良いですよね(笑)

あと、ChatGPTさんをはじめとするAIさんたちってすごくありがたいなと思いました。
今回、その助けがなかったら、正規表現とかでめちゃくちゃ苦労していたと思います…(汗)
ありがとう。

というわけで、18年分の950件の記事移行も無事に完了。
今後はMovableType.netで運営されるので、今回のような作業はもう発生しないだろうし今回やれて良かったかな、と。

さすがにMovable Type 3.2を現在も利用しているケースはそうそう無いと思いますが、もし似たような状況があった時に、この記事が参考になれば幸いです。

こちらの記事は以上です!
このウェブサイトがリニューアル公開されたら、またお知らせしますねー
お疲れさまでした!(笑)


この記事は、Movable Type Advent Calendar 2024の10日目の記事です。
明日は @pot_au_feu さんの記事が公開予定となっておりますので、お楽しみに!

にしやま やすふみ

札幌のウェブサイト・ホームページ制作会社 ジャクスタポジションで、代表とディレクターやってます。Movable Typeとラーメン、ザンギ、酒が好き。
プロフィール詳細はこちら

アクセスの多い記事