第34回:Movable TypeのUTF-8化
第33回では、Movable Type のテスト環境を構築する方法について説明しました。今回は、Movable TypeのUTF-8化について解説していきたいと思います。
Movable Typeのデフォルト文字コードはUTF-8なので、当ブログ構築前はUTF-8での運用を考えていたのですが、筆者が過去に制作したサイトは全てEUC-JPで統一していたため、長い間、サイトのUTF-8化をためらってきました。HTML や PHP などの静的ファイルだけを UTF-8 化するだけなら、ソフトを使って一括変換ができるのでそんなにたいした手間ではないのですが、MySQLデータベースも EUC-JP から UTF-8 に変換しなければならないとなると、MySQL のバージョンも 4.0.x から 4.1.x にバージョンアップせねばならず、非常に面倒です…。
しかし、将来的に考えて UTF−8 が主流になっていくのは明白ですし、筆者自身、そろそろ文字コードの面倒な問題からおさらばしたいという想いから、思い切ってサイトの UTF-8化に踏み切ることにしました。UTF-8にしたからといって、インターネット上にEUC-JPや Shift-JIS のサイトが存続する限り、文字コードの面倒な問題から完全におさらばできるわけではありませんが、少なくとも、筆者のストレスは劇的に解消されることになるでしょう。
一度、UTF-8化を済ませてしまえば実はなんてことはないのですが、「さぁ、今からUTF-8化しよう!」と決断するまでの道のりは、非常に長かったような気がします(笑)。Movable TypeのUTF-8化は、一般サイトをUTF-8化するのと比べると、その半分以下の労力で UTF-8化できると思います。文字コードをUTF-8 にしようと考えている方は是非、参考にしてみてください。
まず、UTF-8 化にあたって、必要となる作業項目を以下に整理します。
■ (4.0以下ならば) MySQLのバージョンを 4.1.x 以上にアップグレードする
■ MySQLのデフォルト文字コードを UTF-8 に変更する
■ MySQLデータベースを EUC-JP から UTF-8に変換する
■ 外部インクルードファイルを全て UTF-8に変換する
■ (必要があれば)追加したMovable Typeのプラグインを UTF-8に変換する
■ サイトを再構築
上記の作業は、現用サーバーに対して行うわけにはいかないので、予め、テスト用環境を構築しておき、実際にUTF-8化が実現可能かどうかを検証しながら作業を行っていく方が無難でしょう。第33回では、Movable Typeのテスト環境を構築する方法について説明したので、Debian を使っている方は参考にしてみてください。
■(4.0以下ならば) MySQLのバージョンを 4.1.x 以上にアップグレードする
使用している MySQL のバージョンが UTF-8非対応の4.0.x 以下ならば、4.1.x 以上にアップグレードします。apt-get で mysql-server-4.1 をインストールすると、 依存関係で libmysqlclient14、mysql-client-4.1、mysql-common-4.1 も同時にインストールされます。インストール後、権限設定なども各自で行っておいてください。
■MySQLのデフォルト文字コードを UTF-8 に変更する
次に、/etc/mysql/my.cnf を開き、MySQLのデフォルト文字コードをUTF-8に変更します。
[mysqld]
default-character-set = utf8
[mysql]
default-character-set = utf8
[mysqldump]
default-character-set = utf8
編集し終えたら、MySQLを再起動します。再起動後、MySQL にログインしてデフォルト文字コードが変更されたかどうか、以下のSQL文を発行して確認しておきます。
mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------
■MySQLデータベースを EUC-JP から UTF-8に変換する
データベースを移行する場合、通常は、保存しておいたデータベースを 移行先サーバーの datadir (Debianの場合は、/var/lib/mysql/)内 にまるごとコピーするだけでリストアすることができます。しかし、今回はMySQLのバージョンを 4.0.x から 4.1.x にバージョンアップしているため、保存しておいたデータベースをそのまま移行先サーバーにコピーするだけでは、今までどおりに Movable Typeを使えるようにはなりません。また、MySQLデータベースをEUC−JPからUTF-8 へも変換しなくてはなりません。
この状況下でデータベースを移行するには、以下の3つの手順を踏む必要があります。
1. 移行前サーバーで、MySQLデータベースをテキストデータでエクスポートする
2. エクスポートしたテキストデータを、専用エディタなどでUTF-8に変換する
3. UTF-8に変換したテキストデータを移行先のMySQLサーバーにリストア(インポート)する
◎ 1. 移行前サーバーで、MySQLデータベースをテキストデータでエクスポートする
MySQLデータベースをエクスポートするには、phpMyAdmin を使うなど、いくつかの方法がありますが、ここでは、シェルを利用してバックアップを作成します。MySQLデータベースをバックアップするには、mysqldump コマンドを用います。
以下の例では、hogehoge というユーザが、movable という名前のデータベースを、movable.mysql という名前でエクスポートしています。保存した movable.mysql は、カレントディレクトリに出力されています。
Enter password:***********
◎ 2. エクスポートしたテキストデータを、専用エディタなどでUTF-8に変換する
次に、エクスポートした movable.mysql をUTF-8に変換します。Windowsに戻ってテキストエディタなどで変換しても構いませんが、わざわざそれも面倒なので、ここでは、lv コマンドを使ってUTF-8に変換します。インストールされていない場合は、apt-get でインストールしておきましょう。
# lv -Ou8 movable.mysql > movable.mysql.utf-8
これで、MySQLデータベース「movable」を UTF-8でエクスポートすることができました。上記と同様の操作を、バックアップしたいデータベースの数だけ行ってください。
◎ 3. UTF-8に変換したテキストデータを移行先のMySQLサーバーにリストア(インポート)する
最後に、移行先のサーバーに movable.mysql.utf-8 をインポートします。移行先サーバーのシェルにて、以下コマンドを実行してください。インポートする前に、予めデータベースの箱を作成しておく必要があります。
mysql >create database movable;
mysql >exit
# mysql -u hogehoge -p movable < movable.mysql.utf-8
エラーメッセージが表示されなければ、正常にリストア(インポート)できています。なお、movable.mysql.utf-8 ファイル自体に文字化けしている箇所があると、MySQLにインポートできない場合があります。その場合は、movable.mysql.utf-8 を直接エディタで開いて、文字化けしている箇所を削除するなりして対処してください。
■外部インクルードファイルを全て UTF-8に変換する
include や require などで外部インクルードしているPHPファイルを全てUTF-8 に変換します。Kanji Translator のようなソフトウェアで一括変換することができるので利用してみてください。
■ (必要があれば)追加したMovable Typeのプラグインを UTF-8に変換する
追加したMovable Typeプラグインで、EUC-JP で記述されたファイルがあれば、それらを全てUTF-8 に変換しておきます。因みに、MT4i に関しては、文字コードを変換する必要はありません。
■サイトを再構築
最後に、サイトを再構築してください。再構築後にサイトを確認したとき、UTF-8化されていない箇所があれば、そこだけ部分的に文字化けしているはずなので、どこをどのように修正すればいいのか、すぐに判断できると思います。
以上で、Movable Type のUTF-8化の説明は終了ですが、実際には、もっと手こずることになると思いますので、根気よく問題を解決していってください。サイトをUTF-8化できると、それなりの達成感が得られると思うので頑張ってください。Good Luck♪