Drupal6からDrupal7へのアップグレード
このところ、運用中のサイトの、Drupal6からDrupal7へのアップグレードを何度も繰り返しています。HTML5やCSS3への対応はDrupal6でもできないことはないでしょうが、Drupal7にすることで、Drupal7用のテーマやモジュールの活用して、ずっと快適にHTML5やCSS3へ対応できる環境が構築でき、またより広範にグローバルな最新のテクニックを導入することが可能になるはずです。
このDrupal7へのアップグレード方法について、自分なりの備忘録を兼ねて手順をまとめてみます。
Drupal6からDrupal7へのアップグレードはDrupal5からDrupal6へのアップグレードの時と較べて、はるかに正確で楽になりましたが、それでも面倒な作業は少なくありません。データベースの移行はほぼ問題ないと思います。ViewsもViews2からViews3へ、細かい設定については個々に設定をし直す必要が生じますが、基本的な構成はきっちり移行してくれます。
問題として残るのは出力テンプレートです。変数の配列構造がDrupal6とDrupal7で大幅に異なるため、テンプレートは基本的に全部作り直しですが、それさえ覚悟できれば、できるだけ早めにDrupal7へ移行しておくのは、クライアントやユーザーの便宜の面からも大きなメリットがあるはずです。
基本的なアップグレードの流れとして、電子遊戯DG編さんのまとめがとても参考になります。特にDrupal7をクリーンインストールして、その後、Drupal6のデータベースを読み込み、データベースをアップデートするという方法はかなり確実な方法だと思います。
以下、運用中のサイトをアップグレートする場合の自分の手順です:
開発サイトの構築
- 運用中のサイトと同じサーバー、もしくは同一環境のサーバーに適当なサブドメインと新しいデータベースで開発サイトを構築します。ローカル環境に開発サイトを構築すると、PHPのバージョンやエクステンションの有無、MySQLのバージョンなどが異なると問題を生じかねず、運用サイトの同じサーバーに開発サイトを構築した方が確実だと思います。
- 開発サイトにベーシック認証等でアクセス制限をかけ、運用サイトの全てのファイルとデータベースをコピーします。この時FTPよりもできるだけunixのwgetコマンドでファイルを移動させた方がずっと高速で、ユーザーがアップロードしたファイルも正確にコピーできます。
- 開発サイトのDrupal6のコアと、Drupal7化後も利用する各モジュールをDrupal6の最新バージョンにアップデートしておきます。update.phpを走らせ、データベースも更新しておきます。
- コア以外の全てのモジュールを無効化し、テーマをGarlandに変更します。Drupal7で使わないモジュール以外は無効化だけでアンインストールしてはいけません。
- この時点で、全てのファイルとデータベースのバックアップを取り、全てのファイルとデータベーステーブルを削除します。filesディレクトリ(通常、sites/default/files以下)は残しておいてもいいかもしれません。
- 空になった開発サイトにDrupal7の最新バージョンをクリーンインストールします。
- 正常にインストールできたことを確認して、インストールしたばかりですが、このデータベーステーブルを全て一旦削除します。バックアップをとっておいたDrupal6のデータベースをインポートします。
- setting.phpを開き、$update_free_access = FALSE; を $update_free_access = TRUE; に変更して、update.phpを走らせます。Drupal6のデータベースがDrupal7の構造にアップグレードされます。よほど大きなデータでないかぎり、あっという間です。アップグレードが完了したら、上記のTRUEをFALSEに戻しておきます。
-
次にDrupal6で使っていたモジュールのDrupal7版をアップロード、有効化、update.phpを走らせてデータベースの更新を行います。概ね大きなエラーは起こらないかと思うのですが、ここでデータベースをアップデートできなかったら結構面倒です。上記4の段階まで戻ってやり直すか、予めDrupal6の開発サイトとDrupal7の開発サイトの2つを用意して、問題をおこすモジュールをDrupal6でアンインストールしたデーターベースをDrupla7にインポートすることになるかもしれません。
コンテンツに直接関係のないモジュール、例えば一般的に使うモジュールではwebformやxml sitemap、mollom、develといったところはインポートする前にアンインストールしておき、Drupal7化後改めてインストールした方がいいかもしれません。 - CCKはDrupal7ではコアに含まれるようになったのですが、Drupal7用のCCKがあって、これにcontent migrateというモジュールが入っています。これをインストール、有効化し、Drupal6のフィールドの設定をDrupal7に移行します。
- admin/structure以下にMigrate Fieldの項目が追加されているので、それを開くと、移行可能なフィールドの一覧が表示されています。移行不可能なフィールドの一覧も表示されています。例えばDrupal6のCCKに入っていたnode referenceはDrupal7のコアには入っていないので、Referenceモジュールのインストールが必要になります。
- 移行するフィールドを全てチェックして、Migrate selected fieldsボタンを押すと移行が始まります。何度か移行を行ったのですが、今のところ上手く移行できなかった経験はありません。ゲージで移行の状況が表示されるのですが、お~、上手くいってると実感させてくれます。
これでひと通り開発サイトの環境が構築できました。
Drupal7の設定
-
Drupal6から移行すると、Drupal7のコアに新しく追加された機能(特に管理面の機能)がオフの状態になっています。お好み次第ですが、Overlay、Toolbar、Shortcutといったモジュールを有効化します。
Contextual linkもオフになっていたら有効化しておきましょう。メチャ便利です。 - ちなみにToolbarを有効化してもDrupal7をクリーンインストールした時に表示されるメニューが表示されないことが度々経験しました。サイトの運営には直接影響しないものの、不便です。原因も対処法も解明できておらず、とりあえずAdmin menuをインストールして代替させています。
- それから管理用のテーマは移行したままだとGarlandになっているはずですが、Drupal7のデフォルトテーマのSevenに変えておいた方がずっと使いやすいでしょう。
Viewsの調整
- 上記のモジュールのアップデートでDrupal6のViews2からDrupal7のViews3にかなりきれいに移行してくれます。Drupal5からDrupal6へ移行の時にはここが全然うまく行かず、それぞれのViewsを一から作りなおした記憶があります。
- CCKのフィールドの移行とViewsのアップデートの順番がひとつの原因ではないかと推測するのですが、移行したViewsの管理画面を開くと、フィールドやフィルターの一部が壊れていて、Broken handlerになってしまっている部分が少なからずあります。これはひとつひとつ再度設定し直します。
テンプレートの作成
先に触れたように、Drupal6とDrupal7でフィールド値の変数の配列構造が大きく異なります。Drupal6で作ったカスタムテーマは殆ど使えなくなるはずです。
それからDrupal6でさんざん愛用させてもらったContemplateモジュールがDrupal7に対応していません。特にContemplateの変数を探し出す機能が使えないのは痛いです。
フィールド値を変数を直接呼び出すのではなく、花岡さんの記事でも紹介されているように、field_get_itemsというAPIを使う方法が基本のようです。自分の場合、これにfield.tpl.phpをオーバライドする方法を併用し、コンテンツタイプの表示設定で並べ替え、それで間に合わない場合はjQueryで表示場所を変更する、といった方法でなんとかしのいでいます。
テーマ(PHP、CSS、JSの出力テンプレートの集合体)はDrupal6ではGarlandを参考に自分でスクラッチしたテーマを組み込んでいたのですが、レスポンシブデザイン対応もあって、BootstrapやZenのテーマをインストールし、そのサブテーマとして必要な部分だけオーバライドする方法に変えました。
サブテーマ化で、コアモジュールやサードパーティモジュールそのものはいじらない、変更するのは自分の必要な部分だけオーバライドするというDrupal活用の大原則と、その便利さ、効率の良さ、確実性を再確認した次第です。
ユーザーインターフェースの変更
Wysiwygエディタは従来TinyMCEを使っていましたが、JS周りでどうもChromeでの動作がおかしかったりして、最近はCKEditorを使うようにしています。ユーザーにも好評で、Drupal8ではコアに入るという噂を聞いたこともあります。Wysiwgモジュールは使わずにCKEditorモジュールでOKだと思います。
画像のモーダルウィンドウ表示はLightbox2からColorboxに変更、画像だけじゃなく、iframeなんかもモーダルウィンドウ化できます。
動作確認
サブテーマでテンプレートやCSS、JSができあがったら、動作確認です。特にDrupal7ではjQueryが大活躍、自分の組み込んだjQueryのスクリプトやプラグインがCoreのjQueryで動かず、jQuery Updateモジュールで新しいバージョンのjQueryを入れると、今度はViewsの管理画面のoverlay等、一部の機能が動作しなくなったりする場合があります。
これはばっかりは徹底的に動作確認する他ないでしょうね。その上でjQueryの複数のバージョンを入れてみたり、スクリプトの順番を代えてみたり、でなんとか動くようにできるはずです。
動作確認できたら、開発サイトに運用ドメインを切り替えて完成です。クライアントやユーザーのご意見ご感想が、不安でもあり楽しみとなります。
drupal.org自体まだDrupal6で運用されているように、Drupal6からDrupal7へのアップグレードはそう簡単でもありません。しかし、もうDrupal8の正式リリースもそう遠くない先のことではありません。ここは早めに対応しておくのがやっぱり正解でしょうね。
©Uemachi Web Factory