携帯向け Apache モジュールの本命 mod_chxj

昨日、携帯向け Apache モジュール mod_chxj バージョン 0.10.3 がリリースされました。

http://sourceforge.jp/projects/modchxj/files/?release_id=30473#30473

mod_chxj には以下のような機能があります。

  • CHTML や HTML を User-Agent を見て適切な形(docomo向け、au向け、softbank向け、PC向け)に自動で変換してくれます
    • 余計なタグがあれば削ってくれます
    • 文字コードも各機種向けに変換してくれます
    • 絵文字も各機種向けに変換してくれます
    • jpg, gif, png などの画像も各機種向けに変換してくれます
    • タグの変換に失敗した場合、Apache のログでまずい箇所を指摘してくれます
  • QRコードを出力できます
  • docomocookie 非対応端末向けに cookie をエミュレートしてくれます
  • cookie-id を保存する場所を変えることができます
    • デフォルトはファイルです
    • memcached を選択することができます
    • MySQL を選択することができます

一言でいえば、ロードバランシング環境に設置された PC 向けのアプリをそのまま(場合によっては多少手直しするだけで)、携帯に対応させることができます。

似たようなものにゆめみの mod_ktai という Apache モジュールがありますが、まだリリースされていません。

http://labs.yumemi.co.jp/labs/mod.html

携帯対応は、ウェブアプリケーション側で対応するのはナンセンスで、最終的には Apache モジュールに落ち着くと思います(速度も抜群に早いですし)。

memcached を使う場合のインストール方法

あらかじめ memcached をインストールしておいてください。ubuntu の場合は以下のようにしてインストールします。

$ sudo apt-get install memcached

以下のサイトから「apr_memcache v0.7.0」をダウンロードします。

http://www.outoforder.cc/projects/libs/apr_memcache/

configure.acの33行目を

LIBTOOL="`${apr_config} --apr-libtoool`"

から

LIBTOOL="`${apr_config} --apr-libtool` --tag=CC"

に変更して、以下のようにビルド・インストールします。

$ autogen.sh
$ ./configure --prefix=/usr 
$ make
$ sudo make install

次に mod-chxj_0.10.3.src.tar.gz を展開してインストールします。

$ buildconf.sh
$ ./configure --enable-memcache-cookie \
    --with-apr-memcache-header=/usr/include/apr_memcache0 \
    --with-apr-memcache-lib-dir=/usr/lib
$ make
$ sudo make install

ubuntu の場合、なぜかヘッダファイルがうまく読めなかったので以下のようにしました。

$ cd include
$ ln -s /usr/include/apr_memcache0/apr_memcache.h .
$ cd ..

etc 以下の設定ファイルを適当な場所にコピーします。

$ cd etc
$ sudo cp *.xml /etc

Apache の設定ファイルを書きます。以下はバーチャルホストで Catalyst アプリを動かす例です。Catalyst アプリは UTF-8 で記述されており、携帯では SJIS に自動変換されて表示されます。

Listen 4000

<IfModule mod_fastcgi.c>
  FastCgiServer /somewhere/MyApp/script/myapp_fastcgi.pl -idle-timeout 300 -processes 2
</IfModule>

<VirtualHost 192.168.1.xx:4000>
  # mod_chxj
  ChxjCookieStoreType    "memcache"
  ChxjCookieLazyMode     "true"
  ChxjCookieMemcacheHost "localhost"
  ChxjCookieMemcachePort 11211
  ChxjCookieTimeout      3600
  ChxjLoadDeviceData     "/etc/device_data.xml"
  ChxjLoadEmojiData      "/etc/emoji.xml"
  ChxjConvertRule        ".+$" "EngineOn,CookieOn" "UTF-8" "PC"

  # log
  LogLevel debug

  # fastcgi
  ScriptAlias / /somewhere/MyApp/script/myapp_fastcgi.pl/
</VirtualHost>