たったこれだけ!アクセシビリティ向上策

2008年9月19日(金)
伊藤 千光

デバイスごとに別のコンテンツを送信する

 多言語対応と並んで重要なのが、デバイスごとに最適化されたコンテンツの配信です。最近はさまざまなデバイスからインターネットにアクセスできるので、それらに専用のページを用意することも多いと思います。しかし、それぞれのページを別々のURLで公開するのは、サイトオーナーにとってもユーザーにとっても不便になります。多言語対応と同じように、1つのURLで最適なコンテンツを配信するのが理想的です。

 個々のデバイスは、HTTPヘッダに含まれている「ユーザーエージェント」(以下「UA」)で判別するのが一般的です。UAはブラウザごとに異なる文字列で、携帯電話の場合は機種ごとに決まっています。インターネットメディア総合生活研究所のケータイ端末プロファイルデータ(無償版)のページ(http://imri.impressrd.jp/iil/k-taiprofile/)で、携帯電話全機種のUA表がダウンロードできますので、参考にするとよいでしょう。

 残念ながらコンテント・ネゴシエーションにはUAを判定する機能がないので、別の方法が必要です。ここではApacheの標準添付モジュールの1つであるmod_rewriteを利用しましょう。これを有効にすると、UAをはじめ、さまざまな条件でリクエストURLを変換できます。mod_rewriteはとても多機能なモジュールですが、ここではデバイス判別という目的に絞って説明します。

 mod_rewriteを利用するには、いつもどおり.htaccessで設定を行います。基本的な書式は図3のリスト5のとおりです。最初の2行はmod_rewriteを有効にするための決まり文句ですので、そのまま覚えてしまってください。その下には、RewiteCondとRewriteRuleのセットを変換するパターンの数だけ記述していきます。

 このうち、RewriteCondは変換を実行する条件を指定するディレクティブです。UAが「条件」の正規表現に一致しなければ、直後のRewriteRuleがスキップされ、次のRewriteCond/RewriteRuleの組に移ります。

 RewriteRuleはURLの変換方法の指定で、URLが「旧パス」の正規表現に一致する時のみ、それが「新パス」に置き換えられます。

mod_rewriteを使ってみる

 それでは、実際にPCとdocomo、auの携帯電話に対して別々のコンテンツを配信する設定を施してみましょう。

 Webサーバーに実験用のディレクトリを作成し、その中に図3「サンプルのディレクトリ構造」のような構造でファイル・ディレクトリを作成してください。.htaccessの記述内容は図3のリスト6です。3つの「rewrite.html」の内容は何でも構いませんが、それぞれ見分けがつくようにしておいてください。

 これで作業は完了です。docomoやauの携帯電話を使って「pages/rewrite.html」にアクセスすると、適切なディレクトリのrewrite.htmlが表示されます。この時の、図3のリスト5の処理フローは以下のようになります。

1/2行目:mod_rewriteを有効にする。
3行目:アクセス元がdocomoの携帯電話かどうかをチェック。
4行目:もしそうなら、URL中の「pages」を「docomo」に変換。
5行目:アクセス元がauの携帯電話かどうかをチェック。
6行目:もしそうなら、URL中の「pages」を「au」に変換。

 以上のプロセスで最終的に得られたURLにアクセスし、その内容をブラウザに返します。これにより、docomoの携帯電話なら「docomo/rewrite.html」が、auなら「au/rewrite.html」が、PCを含むそれ以外のデバイスなら「pages /rewrite.html」が表示されるわけです。

 図3のリスト6で使っている「^~」「^~(.*)」という正規表現は、いずれも文字列が「~」ではじまるかどうかをチェックするものです。ただし、後者は「(.*)」にあたる部分が内部的な変数に保存され、新URLの「$1」がその内容で置き換わります。4・6行目で「pages/~」を「docomo/~」や「au/~」に変換できるのは、この仕組みによるものです。このあたりの詳細については、Perl入門(http://www.kent-web.com/perl/chap7.html)などが参考になると思います。

 このようにmod_rewriteを使うと、UAを条件にして柔軟にURLを変換できます。今回は携帯電話を対象にしましたが、iPhone/iPod touch専用のページを設けたり、音声ブラウザ向けのページを用意するといったことにも応用できるでしょう。また、mod_rewriteはUA以外にも多彩な条件が指定できますので、mod_rewrite モジュール URL 書き換えエンジン(http://www.net-newbie.com/trans/mod_rewrite.html)などを参考にして活用してください。

 前回から2回にわたり、ユーザビリティ・アクセシビリティというテーマに沿ったサーバーサイドの機能を紹介しました。次回はそこから少し外れて、一般的なサーバー管理の事柄に触れたいと思います。

白髪になってもプログラムを組んでいたい、元ゲームプログラマーのWebエンジニア。いくつかのゲーム会社を渡り歩いた後、2007年にWebの世界に転身。現在はRuby on Railsを用いた業務システムの開発に従事している。ブログでの情報発信も精力的に展開。WebOS Goodies : http://webos-goodies.jp

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています