- 詳細
-
2012年2月19日(日曜)20:48に公開
-
作者: 佐藤英人
当サイトでは、2012年2月17日に Joomla 1.5.22 から 2.5.1 へ移行しました。この移行は比較的順調に行えましたが、いくつか注意すべき点がありました。今後のために、この移行経験の要点をまとめておきます。
1. 記事エイリアスのチェック
事前に記事エイリアスのチェックを行います。J1.5では記事エイリアスが同じである異なる記事が認められていました。このままでは後で述べる記事のインポートでエラーが発生してしまいます。事前にJ1.5サイトで記事エイリアスの重複をなくしておくことが重要です。
私は使いませんでしたが、Articles with Duplicate Title Aliases というJ1.5用エクステンションもあります。これは記事エイリアスの重複を検出してくれるもののようです。
2. J2XMLを使用したエクスポート
Joomlaお勧めのjUpgradeはトラブルが多そうなので、無難そうなJ2XML Exporter/Importerを使用して移行を行いました。
まずJ1.5サイトにJ2XMLをインストールします。ユーザ管理、記事管理、カテゴリ管理、セクション管理、Webリンク管理の各画面にExportとSendのボタンが追加されます。Exportボタンを使って以下の3つをエクスポートしました。
- 全ユーザ
- 全セクション
- 全Webリンク
セクションをエクスポートするとそこに含まれるすべてのカテゴリと記事が同時にエクスポートされます。ただし、あまり大量の記事を一度にエクスポートすると、インポート時にエラーが発生したとき、返事が返ってこない現象が発生しました。少量ずつエキスポートするのが無難なようです。なお、アーカイブに入っている記事はエキスポートできませんでした。
3. J2XML Importerを使用したインポート
次にJ2.5サイトにJ2XML Importerをインストールします。管理画面の「コンポーネント」メニューに「J2XML Importer」というメニュー項目が現れます。これを選んで表示された画面のImportボタンをクリックして、先にエクスポートしたファイルを1つずつインポートします。オプションボタンを押せばインポートのやり方を細かく設定できますが、私の場合はデフォルトのままで大丈夫でした。このエキスポート/インポートは、上で述べた「記事エイリアスの重複」によるエラー以外、特にトラブルはありませんでした。
なお、このエキスポート/インポートに使われるファイルはクライアントマシン(Windowsデスクトップ)上に作られます。エキスポート/インポートにFTPを使う必要はありませんでした。
4. インポート後に判明した問題
インポート後、(1) 文字化け、(2) 内部的リンク切れ、(3) yvCommentの返信が消える、(4) 外部的リンク切れ、の4つの問題が判明しました。以下それらに対する対処をまとめておきます。
4.1. 文字化け
数は多くありませんでしたが、「ツ黴」という文字が挿入された場所がありました。元の記事と比較してみると「 」がこれに化けています。「 」のすべてが化けているわけではありませんがどのようなときにこれが発生するのか分かりませんでした。これはJoomla標準の「検索」を使って簡単に場所が特定できましたので、1つ1つ修正しました。
4.2. 内部的リンク切れ
インポート直後は多数のリンク切れが発生していました。そこでこれをチェックするために、Link Checkerを利用しました。ネットで検索すると、多数のこの手のツールが見つかります。多くはWordPress専用ですが、汎用のものもあります。その中の1つを使わせてもらいました。
チェックした結果、以下の4種のリンク切れが見つかりました。
- 他の記事の参照
J2.5はJ1.5と記事URLの構成が変わっています。また、J2XML Importerは記事idを新たに設定します。このため他の記事を参照しているリンクはすべてがリンク切れになってしまいます。
- メニュー項目の呼び出し
J2XML Importerではメニューの移行はできませんから当然リンク切れになります。新しいメニュー項目の呼び出しに置き直します。
- 画像の移行忘れ
これは私のミスで、画像の一部をJ2.5サイトにコピーするのを忘れていました。
- サードパーティ製コンポーネントの問題
サードパーティ製テンプレートやエクステンションの中には、J2.5用やJ1.6用であっても、J1.5にしか含まれていない画像やCSSを利用しているものがいくつかありました。
これらのリンク切れを目で見て発見するのは大変です。Link Checkerには大変お世話になりました。
当サイトではコメントシステムとして、yvCommentを利用させてもらっています。yvCommentの発言はすべて復元できましたが、記事とコメントとの対応が自動では復元できませんでした。以下のようにして記事とコメントの対応を復元しました。
- 管理画面の「コンポーネント/yvComment/comments」メニューを使って表示されるコメント一覧で、古いidと同じidをもつ新しい記事を見つける。
- 見つかった記事のコピーを作る。新しいidをもつコピー記事を今後利用する。
- 見つかった記事の内容をコメント付記事の内容に置きかえる。
これで記事とコメントの対応は復元できましたが、返信(コメントのコメント)はすべて消えてしまいました。記事としては移行できているのですが、どの返信がどのコメントに対するものなのか分からなくなってしまったことが原因と思われます。
yvCommentの返信はすべて記事エイリアスが同じであったため、移行前にそれを修正しました。この問題はyvCommentの作者も気がついていて、最新版の2.00.5ではユニークなエイリアスがつくように修正されています。ただし、例えこのエイリアス問題が解消されても、記事idが変わってしまうと、返信がどれに対するものか分からなくなるという問題は解決しないのではないかと思われます。現状では消えた返信の1つ1つを入力し直すことぐらいしか対策が思いつきません。
4.4. 外部的リンク切れ
J2.5では記事URLがJ1.5のものから変わりますから、検索エンジンやブックマークなどを介して記事に直接アクセスしようとすると「404 - 記事が見つかりません」と表示されることになります。内部的リンク切れは上で述べたように対処可能ですが、外部リンク切れはどうしようもありません。rewriteエンジンを使ってリダイレクトすることは可能ですが、手間がかかります。私のところでは「リンク切れのお詫び」を掲載するに止めました。
なお、商用のSP Upgradeというアップグレードツールでは、この問題も解消できるようです。これから移行を検討される方は、これもチェックしてみると良いのではないでしょうか。
5. カテゴリブログページの記事構成
J1.5のセクションブログでは下位カテゴリから1つずつの記事を選んで表示してくれましたが、J2.5のカテゴリブログでは、最初の下位カテゴリの記事をすべて表示した後、2番目のカテゴリの記事を表示するようになりました。これでは複数のサブカテゴリをもつ大きなカテゴリの要約ページとして役に立ちません。直接のサブカテゴリには記事を1つしかおかず、他の記事はサブ・サブカテゴリに配置するようにすれば、現在のJ2.5のやり方でもそれなりの表示ができますが、カテゴリ構造が複雑になってしまいます。
そこでJoomla自身に手を加えて、最初の1巡目では異なるサブカテゴリから記事をとってくるようにしました。以下にコードをのせておきますので、同じ問題が気になる方は、参考にしてください。
components/com_content/views/category/view.html.phpの81行目に以下を追加
$items = $this->s_reordering($items);
components/com_content/views/category/view.html.phpのContentViewCategoryクラスに以下のメソッドを追加
protected function s_reordering($articles) {
if (count($articles) < 3) return $articles;
$new_articles = array();
$rest_articles = array();
$prev_catid = -1;
for ($i=0; $i<count($articles); $i++) {
$article = $articles[$i];
if($article->catid == $prev_catid) {
array_push($rest_articles, $article);
} else {
array_push($new_articles, $article);
$prev_catid = $article->catid;
}
}
return array_merge($new_articles, $rest_articles);
}
6. 移行を完了して
今回の移行では、(1) yvComment返信の消失、(2) 外部的リンク切れ、の2つの問題を除き、大きな問題はありませんでした。私のところのような研究室サイトではこれで十分ですが、商用で利用されている方々にとっては、外部的リンク切れは大問題でしょう。本文の中に書きましたSP Upgrade は、外部的リンク切れを防ぐだけでなく、記事idを変更せずに移行できるみたいですから、yvCommentの問題も解消できる可能性があります。自分で試したわけではありませんので確かではありませんが、情報として残しておきます。
最後に、雑感ですが、移行を完了して公開したとたん、ゲストアクセスが急増してわずかの間に300を超えました。普段は30~100程度です。ほとんどはロボットと思われます。変更があったことを察知して、情報収集のために1つ1つが長く滞在したためでしょう。まわりには膨大の数のロボットがいて常時監視されているのだと、今更ながら驚かされました。