Web担当必見、活動限界MT3!! - プロが教えるMTの復活再生術 -

  • 投稿日:
  • by ライブラリ編集局

サーバインフラに関わる仕事を行っていると、メーカー保守契約が切れた旧機種のLinuxサーバに4系(REHL/CentOS4など)のOSでご利用されているユーザを未だに見かけることがある。
組織ごとに費用や人材など様々な事情により、今に至っているようだが、サーバの故障や旧OSのリスクは待ってくれない。サーバ内の情報は企業にとって間違いなく貴重な情報資源なのだから。
そんな状況の中で、今回は、旧サーバに乗っていた古いバージョンのMTを最新の環境に移設した最近の事例から一つピックアップしてみる。


【ユーザの当初のWeb運用環境】
・メーカー保守が切れた旧式のLinuxサーバ
・サポートが終了したCentOS4
・サポートが終了したMT3.3

【ユーザの希望】
・冗長化を含めて環境を新しく構築し直し、安定した運用をしたい
・MT内のデータをすべて、そのまま継続利用したい
・特にMTにこだわらないがCMSの運用ルールを変更せずに、現行の業務フローのまま継続利用したい
・CMSの操作方法が大きく変わることは望まない
・予算面からサイトの基本的なデザイン、テンプレートの変更は望まない
・複数のサブドメインにある既存のWebコンテンツをブログと共に新CMSにて管理を行いたい

ここでの課題はWebコンテンツの更新作業に関わる運用フローの変更は許されないということ。
かつ、コンテンツを構成するMT内の既存データは完全に残したまま、テンプレートのデータを含めて可能な限り有効に活用するということ。加えてMTに長年慣れ親しんだ複数の担当者にとって、CMSの操作方法が大きく変わることの不安が大きかったこと。

これらの理由により、CMSの選択肢をMTに絞り込んで作業を開始した。

【移設作業開始前のMTに関する調査結果】

項目内容
VerMT3.3
PlugInRightFields、RelatedEntries、他標準
DBSQlite (旧バージョン)

これらの結果に基づき、作業を開始。ただし、作業には以下の準備が必須である。

【事前に準備が必要なもの】
・MT3.x~MT4.x~MT5.x~MT6.x が動作するテスト用サーバ
・MySQL
・MT 4.2
・MT 5.x
・MT 6.x (ライセンスの購入が必要)
・LinkedEntryCustomFieldsプラグイン
・旧、新MTに関するMTタグ、関数の基本的な知識

これらの内、一つでも欠けていればその時点で作業はできない。
これら以外にも、作業中の想定外の事態に遭遇した場合には必要に応じて対応しなければならない。

それぞれのバージョンが動作するWebサーバとMySQLが必要なことは言うまでもないが、ポイントは
・MT4.2
・LinkedEntryCustomFieldsプラグイン
・旧、新MTに関するMTタグ、関数の基本的な知識
が必要なことである。

通常、下位バージョンから上位にアップグレードする場合は問題がなさそうだが、今回のように「RightFields」、「RelatedEntries」がフル活用されている点だ。この場合、MT4.1では失敗してしまうので、必ずMT4.2が必要となる。
通常では、「mt-db-convert33.cgiを利用する方法」、「SQliteのGUIツールを利用して手作業でDB移設する方法」などでバージョンアップに対応するケースもあるが、今回の場合はどちらも「RightFieldsプラグイン」を利用しているMTには対応できない。

続いてポイントとなるのが「LinkedEntryCustomFields」プラグイン。これは、カスタムフィールドの機能がないMT3.3に、その代替の機能を実装するために利用されていた「RightFields」プラグインのカスタムフィールドのデータを移行するのに必要となる。
後、作業の後半にテンプレート内に残っている旧MT関数を新しいものに置き換える必要があるので、旧、新MTに関するMTタグ、関数の基本的な知識が必要となる。

【実際の作業手順】

おおまかには
MT3.3+SQlite → MT4.2+SQlite → MT4.2+MySQL → MT5.x→ MT6.x
の手順を踏む。
この際、RightFieldsプラグインが利用されているケースではMT4.1は利用できない。
また、SQliteからMySQLへの切り替えタイミングも微妙である。
たとえば、
MT3.3+SQlite → MT3.3+MySQL → MT4.2
のように、SQliteのアップグレード作業を行わず、いきなりMySQLにDB変更しても失敗となる。

●OK手順
MT3.3のディレクトリをリネームして退避

MT4.2をインストール
※MT4.2~4.9が必ず必要。(MT4.1では失敗!!)

MT3.3のmt-config.cgiを参考にMT4.2のmt-config.cgiの内容を変更
この時、sqlitedbの移動も忘れずに。詳細は下記、補足1を参照

MT4.2のpluginsディレクトリにLinkedEntryCustomFieldsプラグインをインストール
この時、RelatedEntriesプラグインも入れておく。詳細は下記、補足2を参照

MT4.2のmt.cgiに接続すると自動でアップグレード開始
※アップグレード開始ボタンをクリックする直前、mt.cgiの画面に
 LinkedEntryCustomFieldsの表示を確認すること

MT4.2にログインして各エントリーデータを確認しカスタムフィールドの値が反映されていることを確認
※アップグレード完了後、SQliteのDBにカスタムフィールドが追加されている

MT4.2+SQlite をMT4.2+MySQLに変更する作業を開始・・・・
MT4.2にログインした状態でシステム > ツールからバックアップを圧縮形式で取得
※圧縮ファイルが自動でダウンロードされる

MySQL側でMT用のDBを作成

MT4.2のmt-config.cgi内、SQliteの記載を削除、新たにMySQLの接続情報を記載

MT4.2のmt.cgiにアクセス

新規でMT構築開始
※この際、ユーザ名、パスワードは前回の通り変更しない事

構築完了後、MTに再度ログイン

先ほどのバックアップで取得した圧縮ファイルを復元から指定

復元完了後、再度エントリーを確認してカスタムフィールドの正常表示を確認

続いて、関連付けデータRelatedEntriesの内容を確認
※データの反映に不具合が発生するので、元のMT3.3の関連付けからインポート→エクスポートを行うこと

MT4.2をリネームして退避

MT5.xをインストール

MT4.2のmt-config.cgiをMT5.xに移動して上書き

MT5.xのmt.cgiにアクセス

アップグレード完了

ログインしてカスタムフィールド確認

RightFields専用のMTカスタム関数をテンプレート内で修正
※MT純正のカスタムフィールド関数と置き換えして再構築

参照画像やリンクデータをMT3.3の環境から移動
※プラグインなどその他運用レベルでのチェックも必要!!

再構築の正常動作を確認して完了

「MT5.x→MT6.x」も「MT4.2→MT5.x」と同様の手順でアップグレード

再構築の正常動作を確認して完了

●●補足1
SQlite DBのアップグレードとMySQLへの変更手順
インストール済のMT4.2のconfigに

##### SQLITE #####
ObjectDriver DBI::sqlite
Database sqlitedb

を追記

mt4.2ディレクトリにSQlite DBを置き、
必ずパーミッションを777に変更
※SQlite DBは必ずバックアップすることを忘れずに!!
MT4.2のpluginsディレクトリに
・LinkedEntryCustomFieldsプラグインのインストールを確認すること
・RelatedEntriesのインストールを確認すること + パーミッションを755にすること

以降、上記のバックアップ、復元の手順でMySQLにDBを変換

●●補足2
プラグインの作業手順
mt3.3のディレクトリをリネームして退避
MT4.2をインストールして、上記のmt3.3内のmt-cofig.cgiを参考にmt4.2内のmt-config.cgiを変更する

【重要】MT4のmt-config.cgi更新後、ログイン画面へのを接続前(DBのアップグレード)の前!!!!
RightFieldsプラグインを削除
Widget Managerプラグインを削除
Template Refreshプラグインを削除

LinkedEntryCustomFieldsプラグインをインストール
RelatedEntriesプラグインをインストール

DBアップグレード後、特にmt_template内にある「RightFields」関連のMT関数を
目視で確認しながらMTの新関数に置き換え

●●補足3
作業中に「Can't locate bradchoate/catx.pm」エラーがでる場合
※MT3.3のフォルダ内にある「bradchoate」ディレクトリはそのまま忘れずに移設しておくこと。これを同じ位置に入れておく。

これらは、ユーザの利用環境に合わせたサーバを構築した上で行った作業の実際手順を備忘録形式で記載したものである。
本記事をご覧の読者が上記の記載に基づき行っても、環境の違い、それぞれのプラグインやアプリケーションのバージョンなど違いにより、結果が異なる場合がある。また、本記載に基づき行った作業において発生した損害にはいかなる責務も負わないので、あらかじめご了承の上、ご参考まで。