CocoaSpace

Drupalでウェブサイト構築

Drupal 6.xからDrupal 7.xへのアップグレード

Sep 06 2011
Drupalバージョン: 
カテゴリ: 

先月、このCocoaSpaceをDrupal 6.22から(Drupal 7.4を挟んで)Drupal 7.7にアップグレードしました。アップグレードの方法をご存じの方は多いと思いますが、日本語の情報があまりないようです。これがベストプラクティスかどうかは自信がありませんが、アップグレードに付随する注意事項なども含めて、調べたことをここであえて書いてみたいと思います。

英語でも大丈夫な方は、Drupal 7に同梱されているUPGRADE.txtUpgrading from Drupal 6 to 7 | drupal.orgを参考にしてください。この投稿もそれらを基に書いています。

まずは下調べ

Drupal 6で使用しているモジュールのDrupal 7バージョンが存在するか?

drupal.orgの各モジュールのプロジェクトページで、現在Drupal 6で使用しているモジュールのDrupal 7バージョンが存在するか確認してください。まだ、まったく存在していなかったり、betaなど安定版リリース前の状態のモジュールもあると思います。一般的には、安定版リリース前のモジュールはプロダクションサイトで使用しないほうが良いでしょうが、betaという名前が付いているから使用しないというのも、現実的ではない気がします。例えば、Drupal 6のImageCacheモジュールはこの投稿を書いている時点でbetaバージョンですが、みなさん使用してますよね。その辺りは、ローカル環境で実際にテストし、ご自身で判断してください。

Drupal 7でコアに組み込まれたモジュール

Drupal 6で人気のあったモジュールの多くがDrupal 7のコアに組み込まれました。ですので、それらのモジュールのDrupal 7バージョンがなくても心配しないでください。Drupal 7のコアに組み込まれたモジュールのプロジェクトページには、そのように明記されていると思われます。チェックしてください。Dateモジュールについては、D7バージョンもありますが、機能のほとんどがコアに組み込まれたようです(Dateはあまり使用したことがないので、すみません...)。主要なモジュールは、アップグレード・パスが用意されているものと思われます。問題なくアップグレードできるでしょうが、念のため各モジュールのドキュメンテーションを確認したほうが良いでしょう。

Drupal 7のコアに組み込まれた主なモジュール(Lullabotさんのポッドキャスト #79を参考にしています)

  • CCKの一部
  • FileField
  • ImageField
  • ImageAPI
  • ImageCache
  • Poormanscron
  • Vertical Tabs
  • Admin Role
  • SimpleTest

もっとあるはずなので、リストがないか調べてみました。UNLEASHED MINDさんの記事によれば、50以上のサードパーティ・モジュールがDrupal 7のコアに組み込まれたそうです。興味のある方は、そちらの記事をチェックしてください。

More than 50 Drupal modules moved into Drupal 7 / UNLEASHED MIND // .....

アップグレードの手順

いきなり本番サイトでアップグレードしないでください。私はローカルの環境でアップグレード作業を試してみて、上手く行ったら細かな調整をして、そのローカル環境をプロダクションサイトに移動するようにしました。

Drupal 6のサードパーティ・モジュールの無効化

ローカル環境で、本番Drupal 6サイトと(できる限り)同じ環境を作ってください。そして、コア以外のモジュールを全て無効にします。間違ってアンインストールしないようにしてください。先ほどの下調べで、Drupal 7バージョンがないと判明したモジュールや、Drupal 7では使用しなくてもよいモジュールに限り、ここでアンインストールします。

その他、アップグレード前に確認する項目

  • テーマをGarlandに切り替える
  • メンテナンス・モードに切り替える
  • ユーザID 1(Drupalをインストールしたときに最初に作成したユーザ)でログインしたままの状態にしておく

この時点で、データベースを保存しておいてください。

Drupal 7のテスト環境を準備

これもローカル環境で、Drupal 6とは別のディレクトリにDrupal 7を準備します。まず、Drupal 7のコアと必要なサードパーティ・モジュールのDrupal 7版をインストールします。ファイルシステム(filesディレクトリ)内のアップロードした画像等はDrupal 6のものを、そのままコピーして使用してください。

Drupal 7をクリーンインストール

Drupal 7用の空のデータベースを作成して、クリーンインストールします。Drupal 6のインストールと同様に、sites/default/default.settings.phpをコピーし、settings.phpとリネームすることと、filesディレクトリとsettings.phpファイルに書き込みができるようにパーミッションを変更します。ウィザードに従って、インストールを済ませてください。

*なぜここでクリーンインストールするかといいますと、settigns.phpを自動で設定してくれるからです。慣れている方は、settings.phpをテキストエディタで編集してください。

インストールが済んだら、いよいよデータベースの移動です。

Drupal 6のデータベースをDrupal 7にコピー

たった今、インストールしたDrupal 7のデータベース・テーブルを全て削除し、先ほど保存しておいたDrupal 6のデータベースをコピーしてください。コマンドラインを使用するほうが確実ですが、phpMyAdminを使用していて、ファイルサイズが大きすぎてインポートできないという場合は、保存ファイルを圧縮してください。それでも大きすぎる場合は、PHPのpost_max_sizeとupload_max_filesizeディレクティブを適宜調整してください。

update.phpを実行

Drupal_7_URL/update.phpにアクセスし、データベースをDrupal 7にアップグレードします。もしも、update.phpを実行できない場合は、settings.phpをテキスト・エディタで開き、

$update_free_access = FALSE;

という部分を

$update_free_access = TRUE;

に変更して、再度実行してください(アップグレード作業が終わったら、FALSEに戻すのをお忘れなく!)。もしも、真っ白な画面になったり、エラーメッセージが出てアップデートの画面すら表示されない場合は、キャッシュをクリアしてみてください。上手く行くかもしれません。Drushを使用すれば簡単に外部からキャッシュをクリアできるのですが、Drushを使用していない場合は、真っ白な画面になった時のキャッシュのクリアの方法を試してみてください。

Drupal 7の日本語翻訳をインポート

インターフェイスの日本語化にはDrupal 6と同じように、Localeモジュールを有効化し、言語設定画面(admin/config/regional/language)で日本語を追加する必要があります。Drupal 6で日本語サイトを運営していた場合は新たに設定する必要はないですね。CocoaSpaceでは、Drupal 6の日本語翻訳を全て削除して、新たに翻訳をインポートしました。

drupal.orgの日本語翻訳ダウンロードページから、日本語ファイルをダウンロードして、管理画面の'インターフェイスの翻訳'のインポートセクション(/admin/config/regional/translate/import)からインポートします。

正直、これが一番良い方法かはわかりません。インターフェイスの翻訳という画面から翻訳をインポートしても、ユーザ登録時に送信されるEメールの文章テンプレートのように、管理者が自由に設定できる文章は翻訳されなかったような気がします。そのくせ、たった今管理画面で確認してみたところ、Eメールの文章がちゃんと翻訳されています。いつ翻訳されたのかなと考えてみましたが、確かDrupal 7.4からDrupal 7.7へのマイナーアップデートする際にupdate.phpでアップデートを実行したら、翻訳も読み込まれたのではなかったかと思います。もしも、そうだとしたら、翻訳ファイルを/profile/standard/translationsディレクトリに置いていたのでしょうか?記憶がはっきりしなくて、申し訳ありません。詳しいことを調べたら、加筆・修正します。

上記の日本語翻訳ダウンロードページからリンクされているFAQにあるように、Localization updateを使用するのが良いのでしょうか?このモジュールを使用したことがないのでわかりません。

サードパーティ・モジュールの有効化

Drupal 6のデータベースを準備する段階で無効化した使用モジュールを有効化します。有効化したら、データベースもアップデートする必要があります。管理画面のサイトの状態ページ(/admin/reports/status)でデータベースのスキーマが最新の状態か確認してください。

CCKで作成したフィールドのアップグレード

CCKで作成したフィールドのアップグレードには、Drupal 7バージョンのCCKモジュールに同梱されているcontent_migrateモジュールが必要です。content_migrateモジュールを有効にすると、管理画面の(確か)サイト構築セクション(/admin/structure)にフィールドをミグレートするための項目が追加されます。そこで、ミグレートしたいフィールドにチェックを入れ実行するだけです。CCKのモジュール群の中でも、下のモジュールはコアに組み込まれなかったので、注意が必要です。

確か、Field Groupにはアップグレード・パスがなかったと記憶しています。つまり、Drupal 7でもう一度フィールド・グループを作成し直す必要があったと思います。ReferencesとField Permissionsについては、まだ使用したことがないのでわかりません。

参考ページ: Migrating D6 Content Construction Kit (CCK) to D7 Fields | drupal.org

お好みのテーマをインストール

Garland以外のテーマを使用したい方は、このあたりでテーマをインストールしてください。

アップグレード後にやること

ここまで終えたら、ノードやコメント、タクソノミーなどがきちんと表示されているかなどをチェックしましょう。CocoaSpaceの環境では、Views、Contextモジュールなどの設定を調整し直す必要がありました。

Drupal 6.xからDrupal 7.7へのアップグレードでは、ノード本文が表示できないというバグがありました。そのため、私はまずDrupal 7.4にアップグレードして、それからDrupal 7.7にアップデートしました。Drupal7.8では修正されたようですので、そのようなことをする必要はないでしょう。デベロッパー以外の、私たち一般ユーザもDrupal 7にアップグレードできる環境が整ってきていると感じています。

コメント (3)

投稿者: iromuok 投稿日時:

はじめまして、いつも参考にさせていただいております。

件名についてですが、現在ホームページ作成でD6からD7への移行を進めています。
その際フィールドの設定につきまして、もしよろしければご教授頂ければと思いましてコメントさせて頂きました。

D6にあったフィールドの一括管理画面がD7では、なくなっていますよね。CCKの統合のせいかな?とも思うのですが…
D7でコンテンツタイプを作成して、フィールドを設定して、また別のコンテンツタイプを作成して「既存のフィールドを追加」で選択すると
「共用するフィールド」「ウィジェット」は表示されるもののD6ではラベルも一緒に関連付けされていましたが、D7ではなくなってしまったのでしょうか?

フィールド関連のモジュールはfield_groupとfield_permissionsを入れています。

説明がうまく出来ず申し訳ありませんが、よろしくお願いします。

投稿者: cocoaspace 投稿日時:

@iromuok さん、はじめまして。

iromuokさんのおっしゃる問題の箇所がわからなかったので、ローカル環境でDrupal 6を久しぶりに立ち上げてチェックしてみました。

まず、一括管理画面の件ですが、フィールドの一覧表示の画面のことでよろしいでしょうか?全く表示する機会のない画面でしたので、気づきませんでした。私の勝手な想像ですが、Drupal 7には必要ないと判断され、含まれなかったのではないかと思います。

それと、'既存のフィールドを追加'した際にラベルが空白のままになる件ですが、これはJavascript関連のバグではないかと想像しています。field_ui.jsファイルをチラッと見てみたりもしましたが、私のスキルでは問題の箇所を探し出すことはできませんでした。ラベルを再度書き込めばいいことなので、あまり気になさる必要はないと思います。クリティカルな問題ではないですから。

あまり良い情報ではなくて申し訳ありません。Drupal 7へのアップグレードが上手く行くといいですね。

投稿者: iromuok 投稿日時:

こんにちは。
ご返信が遅くなりまして申し訳ありません。

>一括管理画面の件ですが、フィールドの一覧表示
こちらの件ですが、発見いたしました。
D7では、レポート>フィールド一覧から見られるようになっていたようです。

>'既存のフィールドを追加'した際にラベルが空白のままになる件
こちらもありがとうございます。
javascriptのバグですか…フィールドの数が膨大なのでなんとか関連付けできないかと思いましたが
仕方ないですね(;´д`)
関連付けができるものと、できないものがあるようです。
ラベルもですが、ほとんどのフィールドタイプでデフォルト値の関連付けができませんでした。

ご親切に教えて頂きまして、ありがとうございました。
またお世話になることもあるかと思いますが、よろしくお願いいたします。

コメントを追加

Powered by Drupal + Linux