遅まきながらDruap7にUpgradeしました

遅まきながらDrupal6からDruap7にUpgradeしました。

移行をためらっていたのは、Drupal6で使用していた画像系モジュールが、Drupal7に対応しなかったからです。最初は、画像系モジュールがDrupal7に対応するのを待っていました。しかし、対応する気配がないので、Drupal7へのUpgradeを諦めるか、ビデオギャラリーの構築方法や画像のブログへの挿入方法を再調査するかという選択を迫られることになりました。ビデオギャラリーの構築には苦労したので、その苦労を繰り返すならばDrupal7を諦めようかという気持ちもありましたが、先ずは Drupal Core がDrupal7でどれだけ進歩したのか確かめる必要がありました。

Drupal7をインストールして先ず目につくのは、管理メニュー用のツールバーです。ツールバーはスクロールされず常に見えているので、画面の切り替えが楽になり便利です。設定画面の look and feel は全て変更され、メニュー構成も変わったので、慣れるまで少し戸惑いましたが、一番の目玉は、Content typesの機能が刷新され、格段に使い易くなったことだと思います。

また、Drupal6の多言語機能には、バグとも言える欠点がありました。Detection MethodをURLに設定し、デフォルトを英語にすると、Path prefix を付けないと英語で表示され、/ja/を付けると日本語が表示されます。しかし、デフォルトを日本語にすると、Path prefix を付けないと日本語が表示されるのですが、/en/という Path prefix を認識しないので、英語に切替えられません。Drupal7は、/en/を認識するよう改善されています。当面、Multilingual site を構築する気はありませんが、困ったときは英語でググるので、英語への切替えが簡単になったので助かります。

Drupal7の感触は悪くなかったので、代替モジュールが見つかれば移行することを決めました。代替の必要なモジュールは、FlashVideo、Image Gallery、image assistおよびinlineの4つです。

  • ビデオギャラリーを構築するためには、動画をflvに変換するとともに、 thumbnailを抽出しそれをTeaserに表示する機能が必要です。その機能は、Videoで代替できます。Videoには、動画を本文中に埋め込む機能はありませんが、それは諦めました。
  • Image Galleryは、Imageの付属機能です。Drupal7で、ImageはCoreに組み込まれましたが、Image Galleryはなくなりました。しかし、ViewsとTaxonomy Menuで、Image Galleryに近いものは構築できます。
  • image assistは、Image resize filterでほぼ代替できます。
  • inlineは、Drupal7の Development release が出ているので、試してみましたがうまく動きません。使いこなせてない可能性もありますが、inlineは諦めて、Content types の manage display 機能を用いて、Teaserにthumbnailを表示することにしました。

Drupal7でも、Drupal6で使用していた画像系の機能が、ほぼ代替出きることが分かりました。しかし、update.phpが、コンテンツをどの程度移行してくれるのかは、やってみなければ分かりません。

最初は、公開しているDrupal6のDBを直接エクスポートし、それをDrupal7のDBにインポートしてからupdate.phpを実行していました。しかし、Drupal6上で設定変更しなければならない項目が色々と出てきたので、公開サーバーをDrupal6のまま一旦作業環境へコピーし、そこで設定変更を行ってからエクスポートするよう、作業手順を変更せざるを得なくなりました。Drupal6で必要になった設定変更は、下記の通りです。

  • これは、UPGRADE.txtの“MAJOR VERSION UPGRADE”手順にも書いてあるのですが、テーマをデフォルトのGarlandに戻し、Pluginを全て無効にする必要があります。
  • また、UPGRADE.txtには、Drupal7で使わないモジュールはアンインストールするようにと書いてあるのですが、Image Galleriesに関わるデータはできるだけ救いたかったので、アンインストールせずにupdateしました。しかし、Image Galleriesのtaxonomyは、Druapl7に継承されるのですが、編集もできないし、 Taxonomy Menuを生成しようとすると、エラーで中断してしまいます。結局、Image Galleriesのデータは一つも救えなったので、DBにゴミを残さない方が無難だと思い、アンインストールしてからupdateするよう方針変更しました。
  • xmlsitemapのupdateには不具合があるようです。updateすると、variableテーブル関連のエラーが出続けますし、xmlsitemapを有効化するとエラーのために環境設定ができなくなってしまいました。xmlsitemap関連のデータは特に継承する必要もないので、xmlsitemapをアンインストールしてからupdate.phpを実行することにしました。
  • Drupal7をインストールしたときは/en/ Path prefixを認識したのですが、、Drupal6からDrupal7にupdateすると/en/ Path prefix を認識しなくなり、Drupal6と同様に英語に切り替わらなくなりました。デフォルトが日本語のままupdateしたのがまずかったのかもしれないと思い、Drupal6でデフォルト言語を英語に戻してからDrupal7にUpgradeし、Drupal7でデフォルト言語を日本語に変更したら、/en/ Path prefix を認識するようになりました。

公開しているサイトは、マルチサイト構成になっているため、マルチサイトに関わるトラブルにも悩まされました。

  • 公開しているサイトは、“自宅サーバー”、“ハンドメイドな生活”および“愛犬アルバム”の三つに分かれており、update.phpはサイト毎に実行する必要があります。“自宅サーバー”のupdateは無事終了したのですが、“ハンドメイドな生活”のupdateはエラーで中断してしまいました。原因は、分かれば当たり前でした。DBは、サイト専用のDBとユーザ情報を共有するためのDBに分かれています。ユーザ情報のDBは、“自宅サーバー”のupdateでdrupal7に変換済みであったため、“ハンドメイドな生活”のupdateでエラーが発生していたのです。従って、ユーザ情報のDBをインポートし直し、Drupal6の状態に戻してから、update.phpを実行すれば解決しました。
  • “ハンドメイドな生活”のupdateでは、引き続きファイル参照エラーが多発しました。これには二つの要因が関わっていました。Drupalのマルチサイトは、/sites/にURLと一致するフォルダがあればそのフォルダを使用し、一致するフォルダがなければ/sites/defaultを使用するというルールに基づいて構成されています。このサイトの場合、“自宅サーバー”は/sites/defaultを、“ハンドメイドな生活”は/sites/crafts.5thbear.jpを、“愛犬アルバム”は/sites/mypet.5thbear.jpを、使用しています。テストサイトを構築するに当たっては、公開サイトと同じURLは使えないので、“ハンドメイドな生活”と“愛犬アルバム”のフォルダ名は、変更する必要がありました。一方、Drupalのコンテンツが画像等のファイルを参照する際は、ファイルのディレクトリも一緒にDBに書き込むので、フォルダ名を変更すると参照エラーになってしまいます。“自宅サーバー”は/sites/defaultを使用しフォルダ名が変わらないので、update.phpは無事終了しました。しかし、“ハンドメイドな生活”はフォルダ名が変わったので、ファイル参照エラーが多発したのです。その対策としては、エクスポートしたSQLを編集し、フォルダ名を書き換えてからインポートするいう、原始的だが着実な方法を選択しました。

これで、update.phpによる移行は一応終わったのですが、画像関連のデータほとんど移行されず、手作業で補わなければなりませんでした。

  • Drupal6では、Imageモジュールをインストールすると、ImageというContent typeが自動生成されます。Drupal7で、ImageはCoreに組み込まれました。しかし、ImageというContent typeはCoreに組み込まれずupdateで消えてしまいます。Drupal6でImageだったコンテンツは、Type未定の状態で継承されます。update後、ImageというContent typeを手動で登録すれば、TypeはImageとして再認識されますが、画像ファイルは消えてしまうので、画像ファイルをアップロードし直す必要があります。
  • Drupal6で手動登録したVideoというContent typeは、Drupal7に継承され、コンテンツも正常に継承されます。だたし、ビデオファイルは、単なる添付ファイルとしてしか、認識されません。添付ファイルではthumbnail表示が使えないので、コンテンツにvideo fieldを追加し、そこにアップロードし直す必要があります。
  • Image Galleriesは消滅したので、taxonomyとTaxonomy MenuとViewsを用いて、それに近いものを構築しました。Image Galleriesに登録していたImageやVideoには、もともとImage Galleriesのtaxonomyが付いていたのですが、その代わりにTerm reference filedを追加し、Taxonomy termを登録し直しました。
  • ブログには、image filedを追加し、Teaserにimageのthumbnailを表示するようにしました。画像を添付していたブログは、画像ファイルをimage filedにアップロードし直し、本文にはその画像をImage resize filterを使って添付しました。

 結果的には、画像モジュールのDrupal6からDrupal7への移行には、大変な手間がかかってしまったので、それだけの手間をかける価値があったかどうかクエスチョンマークが付きます。