10月に記事を書いた通り、2005年から2010年までやっていたNucleus CMSの記事をサルベージし、Movable Typeにインポートしてアーカイブ公開をしました。
それで旧ブログの記事は全てサルベージできたと思っていたのですが、PC内を見ていたら2010年2月〜4月までのNucleus CMSのバックアップがあったので、昨日その分の記事もサルベージしてインポートし、アーカイブサイトが完全体になりましたw
なぜか2010年2月に1回記事を全消しして、4月までNucleus CMSでやっていたようです。謎。
というわけで何回かNucleus CMSからデータを復元し、その方法を確立したので(?)、古いNucleus CMSからMovable Type 7へ記事を移行した方法について書き残しておきたいと思います。
また、WordPressも基本的には同じ手順となるので、WordPressへ移行についても書いています。
基本戦略:Nucleus CMSを設置してリストアし、NP_ImpExpでエクスポートする
もちろん、移行にはNucleus CMSから取得したバックアップデータがあるということが大前提ですが、Nucleus CMSのバックアップは、その時のデータベースを再構築するためのSQLファイルになっています。
しかし、WordPressやMovable Typeがインポートできるファイル形式は、WXR(WordPress)形式かMovable Type形式であり、そのままだとWordPress/Movable Typeにインポートできません。
そこでどうするかというと、NP_ImpExpという、MT形式でNuclesu CMSの記事をエクスポートできるプラグインがあるのでそれを使います。
Nucleus CMSを設置してバックアップからリストアし、NP_ImpExpでエクスポートする、という方法でMT形式のデータを取得します。そしてそれをWordPress/Movable Typeにインポートすることで記事が移行できます。
Nucleus CMSのバックアップは普通のSQL文、つまり暗号化がされているわけではない一定の形式のデータなので、コードが書ける人であればMT形式に変換することもできるのかもしれませんが…。
Nucleus CMSとNP_ImpExpを入手する
まずはNucleus CMS本体とNP_ImpExpを入手します。
Nucleus CMS本体は2015年の最終バージョンv3.71であれば公式サイトからダウンロードできます。
バックアップを取得した時点のバージョンを設置したほうがより上手くいくと思うのですが、過去のバージョンの配布ページは見つけられませんでした。GitHubはあるようですが、過去バージョンは無い?
私がNucleus CMSを使っていたのは2010年までなのでv3.71ではないのですが、幸いにしてPC内にv3.31とv3.64のパッケージが保存されていたのでそちらを使いましたw
NP_ImpExpはGitHubからダウンロードします。
GitHub – NcleusCMS/NP_ImpExp
ZIP:https://github.com/NucleusCMS/NP_ImpExp/archive/master.zip
開発者のブログからもダウンロードできますが、そこにあるのは2006年のv1.1と古いバージョンです。最新版はGitHubにある2015年のv1.59です。
2006年頃のNucleus CMSを復元するのであればNP_ImpExp v1.1でのいいのかもしれませんが、基本的にはv1.59を使ったほうがスムーズに行くででしょう。
サーバー環境を整備する
レンタルサーバーでの作業を想定して、環境を整えます。
Nucleus CMS用のデータベースを用意する
Nucleus CMSはデータベース(MySQL)を使用するので、Nucleus CMS用のDBを用意します。使っていないDBがあればそちらを使って構いませんが、既に他のプログラムで使っている場合は追加したほうがいいでしょう。
私はレンタルサーバーのXREAを使っていますが、XREAでのDBの追加はコントロールパネルのデータベース→データベースの新規追加からできます。ただし、XREAで複数のDBを作れるのは有料版のXREA Plusで、無料版では1つしか作れません。
DBの文字コードは当時バックアップを取得した環境に合わせましょう。2010年頃のXREAはEUC-JPでしたので、今回はEUC-JPで新規作成しました。
サーバーのPHPバージョンを下げる
Nucleus CMSは2015年に開発が終了した古いプログラムなので、新しいPHPだと正常に動かない可能性があります。
サーバーのPHPバージョンを確認し、必要であれば(かつ可能であれば)バージョンを下げましょう。
XREAであればコントロールパネルのサイト設定から、php80からphp53まで選ぶことが出来ます(2021年12月現在)。
私は2010年頃のデータをリストアするので、最も古いphp53まで下げました。最新のNucleus CMS 3.71ではPHP7に対応しているようですが。。
Nucleus CMSをインストールする準備
当時とは異なるURLに設置する場合、MySQL 4時代の古いNucleus CMSを設置する場合は、事前作業が必要です。
バックアップのSQL文を編集する(当時と異なるURLに設置する場合)
Nuclesu CMSのバックアップは、当時のDB内容を再構築するためのSQL文の集合体です。記事だけでなく設定も全てそのままリストアされるので、当時と異なるURLにリストアする場合は内容を書き換える必要があります。
当時と異なるURLにリストアする場合、データをリストアしたら管理画面に入れず操作ができなくなるからです。管理画面へのログイン成功がすると、DBで設定された管理画面URLに飛ばされてしまうのです。
バックアップのSQLファイルをエディタで開き、nucleus_configテーブルを設定する箇所まで行き、各URLを変更しましょう。バックアップがgzipで圧縮したものであれば解凍して編集してください。
install.sqlを編集する(古いNucleusの場合)
古いNucleus CMSを新しいMySQL(v5.x〜)にインストールする場合は、Nucleus CMSのinstall.sqlの内容を書き換える必要があります。
/install/install.sqlをエディタで開き、
TYPE=MyISAM
を、すべて
ENGINE=MyISAM
に書き換えてください。
TYPE=MyISAMはMySQL 4の書き方で、MySQL 5だとエラーになるようです。ENGINE=MyISAMにすることでMySQL 5でもインストールできます。
データベースのインポートでエラー「TYPE=MyISAM」(KoToRi Blog)
MySQLが「TYPE=MyISAM」でエラーになる場合の対処法 :: [コエカタマリン MX 2007]
Nucleus CMS 3.71はENGINE=MyISAMになっていましたが、v3.64ではTYPE=MyISAMになっていました。
現在のXREAのMySQLは5.7のみですが、SQL文で問題になるのはそこぐらいで、ほかはMySQL 5.7でも致命的なエラーにはならず動きました。
Nucleus CMSをインストール
準備が整ったら、いよいよNucleus CMSをインストールします。
インストールはマニュアル通りでいいでしょう。
軽くインストール方法を記しておくと…
- Nucleus CMSをサーバーにアップロード
- confing.phpのパーミッションを666に
- /install/ディレクトリを開き、インストール
で、できます。
インストール画面ではキャラクタセットを正しく選択し、MySQLのログイン情報では「ホスト名」はlocalhost、「ユーザー名」はDB名、「パスワード」はDBのパスワード、「データベース名」はDB名を入力します。
管理画面からバックアップをリストアする
インストールができたらブログが設置されますので、管理画面にログインしましょう。
11年ぶりにNucleus CMSの管理画面を拝めたときは、懐かしすぎて感動しましたw
「DB保存/復元」から、データをリストアします。バックアップファイルを選択して、リストアを実行します。
なぜか私の環境では非圧縮のSQLファイルでは「不正なファイル形式です」とエラーが出てリストアできず、gzip圧縮ファイルでしかリストアできませんでした。
圧縮版のバックアップを取っていなくてもMacであればターミナルで簡単にgzip圧縮できます。ターミナルを開き、
gzip 圧縮したいファイルのパス
のgzipコマンドを叩きましょう。
同じフォルダにgzipファイルが生成されます。このように後から圧縮したものでも問題なくリストアできました。
リストア後、NucleusのURLにアクセスすると当時のブログが表示されます!
スタイルが崩れている場合、当時のスキンファイルがあるならば/skins/フォルダに当時使っていたスキンファイルを入れるとちゃんと表示されると思います。
データベースにmautosaveを追加する(古いバックアップを新しいNucleusにリストアした場合)
私の場合、最終的にNucleus CMS 3.64をインストールしたのですが、バックアップはそれよりも古いNulcues CMSで取っていたもので、そのせいかリストア後に管理画面にログインするとDB(SQL)のエラーが出ました。
そしてログイン自体はできるものの、ログイン状態を維持できずページ遷移をする度にログインが要求されてしまいます。
ログイン後の管理画面の上に出てくるエラーを見ると、「nucleus_memberをUPDATEしようとしたけど、mautosaveっていうフィールドがないよ」という感じだったので、DBにこのmautosaveを追加します。比較的新しいNucleusでmautosaveという項目が増えたようです。
XREAではコントロールパネルのphpMyAdminからDBの内容をいじれます。なお、このphpMyAdminも古いものらしく、サイト設定でPHPを古くしないとちゃんと動きません。。
nucleus_memberテーブルを開き、SQLタブから以下のSQL文を実行します。
ALTER TABLE `nucleus_member` ADD `mautosave` TINYINT( 2 ) NOT NULL DEFAULT '1';
あるいは、フィールドリストの下にある「フィールドを追加する」から、「フィールド」はmautosave、「種別」はTINYINT、「長さ」は2、「ヌル」はnot null、「デフォルト値」は1として追加することもできます。
これで問題なく管理画面で操作ができるようになります。
NP_ImpExpをインストールしてエクスポートする
NP_ImpExpを解凍した中身を全部そのまま/nucleus/plugins/フォルダにアップロードし、管理画面の「プラグイン管理」からNP_ImpExpをインストールします。
インストールに成功したら一覧にNP_ImpExpが追加されますので、「管理」から画面を開き、エクスポートを実行しましょう。
MT形式のテキストファイルがダウンロードされます。
私の場合、約1,300件の記事で4MBほどのファイルができました。
Nucleus CMS 3.64、PHP 5.3、My SQL 5.7の環境でちゃんとエクスポートができました。
正常にエクスポートできない場合、Nucleusのフォーラムにトピックがあるので、そこを見てみると良いかもしれません。
NP_ImpExpでエクスポート出来ません (ページ 1) / 質問コーナー / Nucleus(JP)フォーラム
NP_ImpExpでエクスポートしたデータを編集する
エクスポートしたデータを見てみると、以下のエラーが出ていました。
mySQL error with query SELECT * , UNIX_TIMESTAMP(timestamp) as ts FROM nucleus_plugin_tb WHERE tb_id=idnum order by timestamp: Table 'dbname.nucleus_plugin_tb' doesn't exist
なぜこのようなエラーが出るのかはよく分かりませんが、このエラーが出ている以外はMT形式として問題なくちゃんと内容が出ているので、テキストエディタで正規表現を使って全部消しました。
また、エラーではありませんが、コメントに含まれるURLが欠損したものになる、という現象が起こります。
Nucleus CMSではコメントにURLを書くと自動的にハイパーリンクが張られるのですが、一定より長いURLを書くとリンクテキストが途中から省略されます。NP_ImpExpではこのリンクテキストをそのままエクスポートするらしく、長いURLが書かれたコメントは「…」で省略された状態になってしまい、正しくリンクが張られません。
私の場合、それほど量が多くなかったので、気合でNucleusの記事を参照し、全てのURLを復元しました…。
WordPress/Movable Typeにインポートする
ここまできたら後はWordPress/Movable Typeにデータをインポートするだけです。
WordPressにインポートする場合
WordPressもMT形式のデータをインポートすることができます。
管理画面にログインし、「ツール」の「インポート」を開きます。
「Movable Type と TypePad」があるので、「今すぐインストール」でインストールしたら「インポーターの実行」でインポート画面を開きます。
ファイルの選択画面になるので、PC内のファイルを選択し、「ファイルをアップロードしてインポート」をクリックします。
すると「投稿者の割り当て」画面になるので、新規ユーザーを作成して割り当てるか、既存ユーザーに割り当てるかを選びましょう。
あとは「実行」をクリックすれば、完了後即座にNucleus CMSの記事がWordPressで表示されます!
なお、MT形式データをインポートした場合、タグの移行ができないようなので注意してください。
Movable Typeにインポートする場合
管理画面にログインし、「記事」の「インポート」を開きます。
「インポート元」は「他のシステム(Movable Type形式)」に、「インポートした記事の所有者」は「自分の記事としてインポートする」「記事の著者を変更しない」のどちらでも良いと思いますが、元の著者(AUTHOR)が2バイト文字だった場合は、自分の記事としてインポートしたほうが無難じゃないかと思います。
あとはファイルをアップロードして、インポートを実行しましょう。そして再構築をすれば、Nucleus CMSの記事がMovable Typeで表示されます!
エクスポートして再度バックアップを
一度WordPress/Movable Typeに入れてしまえば、あたりまえですがWordPress/Movable Typeからデータをエクスポートすることもできます。
今回取得したNucleus CMSのデータは、古いシステムからサードパーティのプラグインを使用して出力したものなので、WordPress/Movable Typeから改めてデータをエクスポートしておくと安心だと思います。
WordPressは、WXR形式のデータをエクスポートできます。WordPressの形式になりますが、デファクトスタンダードであるWordPressの形式であれば困ることは無いと思います。
Movable Typeは、管理画面の「記事」の「エクスポート」からMT形式で記事データをエクスポートできます。MT形式は他のシステムやサービスでも使える場合が多いので、ここからデータを取得しておくとよいでしょう。
「サイト」から実行できるエクスポートのデータは、MTのサイト全体のデータとなり、他のシステムとの互換性はありません。
終わりに
というわけで、何度か試行錯誤した結果、上記の方法で古いNucleus CMSの記事をMovable Type 7に移行することができました。
一度はv3.31を設置してリストアを試みたのですが、設置はできたもののリストアしたら何故か文字化けしてしまったので、v3.64でやり直した経緯があります。ある程度新しいバージョンじゃないと、古すぎて上手くいかないのかもしれません。
Nucleus CMS自体は2015年で開発が終了してしまったシステムで、かつ私が使っていたのは2010年ですから、そこからするとPHPやMySQLもアップデートを重ね、サーバーのXREAも仕様変更をしているのでちゃんとNucleus CMSを動かせるかどうか不安でしたが、なんとか出来ました。マイナーなCMSを使うと、こういうデータの移行のときにちょっと困りますね。
もっとも、昔はNucleus CMSもそれなりに人気のCMSで、プラグインやスキンも盛んに作られていました。いつのまにかMovable Typeとともに衰退し、WordPress一強時代になってますよねぇ。。まあ、Nucleus人気も日本中心だったような気もしなくはないですが。プラグインも日本人が作ったものが多く、本家の開発が終了してからは日本語版プロジェクトが開発を引き継いでいました。
というわけで、Nucleus CMSからWordPress/Movable Typeに記事を移行する方法の紹介でした。
コメント