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

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

 多言語対応と並んで重要なのが、デバイスごとに最適化されたコンテンツの配信です。最近はさまざまなデバイスからインターネットにアクセスできるので、それらに専用のページを用意することも多いと思います。しかし、それぞれのページを別々の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回にわたり、ユーザビリティ・アクセシビリティというテーマに沿ったサーバーサイドの機能を紹介しました。次回はそこから少し外れて、一般的なサーバー管理の事柄に触れたいと思います。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30