ASP.NET MVCで作る携帯サイト(番外編) 携帯用ライブラリに必要な機能

去年のやり残し(・ω・)
先月はASP.NET MVCで携帯サイトを作るための、Smart.Web.Mobileライブラリを作ったりしていましたが。

関連して、参考までに携帯サイトを作るために必要な機能についてまとめておきたいと思います。

携帯用ライブラリに必要な機能

とりあえずMindMapです(・∀・)

これが、自分の考える携帯サイトを構築するために必要な機能の一覧です。
だいたいこれで過不足はないかな(・ω・)?
JavaであれLLであれ、携帯サイトの構築をやったことのある人ならば、これだけでどんな処理かの類推はできると思いますが。


ちなみに、画像の色がついている部分は以下の意味です。

青色 ASP.NET標準でサポートあり
緑色 Smart.Web.Mobile v0.1で実装あり
黄色 アプリケーションレイヤで対応

なお、ここではASP.NETとSmart.Web.Mobileをメインに話を進めますが、必要な機能という意味ではJavaでもPHPでも一緒です(・ω・)

セッション管理

DoCoMoCookieをサポートしない機種でセッション管理を行うための機能が必要になります(´д`;)
Cookieが使えないとなると、セッションIDをURLに含めるという方法になりますが、これをどこでやるか?
リンクについて、ビューヘルパーを使うとかやっても漏れが出る可能性はあるし(´・ω・`)


Javaの場合は、Filter内で出力をバッファして、正規表現で自サイト内のリンク部に対してencodeUrl()するとかをやりますね(・ω・)
PHPなんかでも、ob_start()を使ってバッファリングすれば考え方を一緒。


ASP.NETの場合、標準でcookielessセッションがサポートされていますが、Azure上での動作でちょっと気になる点もあるので、自前のセッションモジュールなんかも考えた方が良いのかしら(´д`;)?
まあ、とりあえずASP.NET任せで、Smart.Web.Mobileに処理はありません。

入出力

携帯サイトを作るときに一番問題になるのが、絵文字の扱いやキャリア毎の入出力エンコーディングをどうするか。
JavaPHPではこんな感じでリクエスト、レスポンスを加工して対応しますが(・ω・)


Smart.Web.Mobileの主な機能も、これに対応するものです(`・ω・´)
Shift_JISでの絵文字を考慮したEncodingクラスや、キャリア毎にエンコーディングを切り替えたり絵文字のキャリア間変換を行うためのStreamを用意しています。
後はおまけで、カナ文字の全角半角変換とか、空行のトリム機能とか。

判別

っで、キャリア毎に処理を切り分ける為に必要なのが判定機能。
要するにUser-Agentの解析ですが(・ω・)
Smart.Web.Mobileではとりあえず簡易的な判別機能のみを実装しています。
ASP.NET標準のブラウザ定義でも判別できるけど、ブラウザ定義の処理はむしろ邪魔な部分もあるので、Smart.Web.Mobileとしては使わずにむしろ標準設定を無効化する方向で。


キャリアのみでなく、携帯の機種を判定したい時にはもう少し細かいチェックが必要になります。
まあ、基本はUser-Agentを解析するだけなので、難しい話ではないですが。
その機種のスペックやサポートする機能(画面サイズ、Flash等)を判定したい場合、それはリクエストからは取得できないので、機種をキーにスペックを取得するデータベースの構築が必要。
その情報自体はネットに転がっているので、それを取り込む形で。


後、判別という意味では携帯固有IDの取得なんかもありますが。
とりあえずSmart.Web.Mobileには実装してないけど、キャリアに応じてHTTPヘッダから取得する処理になります(・ω・)

Viewヘルパー

携帯用のHTML(XHTML)を出力するために用意するヘルパーです。
XHTMLヘッダの出力や、キャリア毎にエンコーディングを変更する場合のヘルパー、絵文字出力用のヘルパーなどを使いますが。
Smart.Web.Mobileとしては、この辺はアプリケーション固有で好きにしてという感じで、ライブラリとしての実装は特になしです。
Codeplexのサンプルでも、アプリケーションレイヤの処理として処理を実装していますが(・ω・)


あと、携帯用のHTML出力で必要になるものといえば、スタイルシート周りの処理(これもキャリアによって差異がある(´д`;))や、携帯固有の属性出力をサポートするinputタグとか、そのあたり。
ASP.NET MVCの場合、匿名クラスを使って任意に属性は追加できるのでinputタグのヘルパーとかは無しで、その他についてもライブラリとしてはViewヘルパーは用意しない方向で。
結局、アプリケーション固有のデザインの話として、キャリア間の違いを吸収するためのViewヘルパーを用意したりするので、そこにお任せしますという話にしておきます(´ω`)

携帯固有

携帯固有の機能を使うものとしては、Flashの動的生成、位置情報の取得とかありますが。
Flashではswfmillとかが有名ですね。
位置情報の取得については、キャリア毎にそれぞれ取得方法がありますが。
携帯サイト用のライブラリの中には、これらの機能のサポートがあるものもありますね(・ω・)

その他ライブラリ

あとは、携帯サイトでよく使うけど、別に携帯に限定しない機能について。


まず、携帯サイトというか、携帯サイトに誘導するためのQRコードの画像を出力する機能とか。
これは既存のバーコードライブラリを使ったり、Google Chart APIを使ったりできるので、携帯ライブラリの内部に機能を持つ必要はないと思います。


画像について、端末の画面サイズに合わせて画像サイズを変更する事もありますが。
画像の変換も既存のライブラリなりを使えば良いと思うので、別に携帯ライブラリとして実装する必要は無いと思います。
まあ、画像の見た目の問題もあるので、画像を動的に変換するか、複数サイズを用意しておくか、用途に応じて方針を考える方が先ですが(・ω・)


あと、携帯サイトへのリアル携帯以外からのアクセスを拒否するため、IPアドレス制限なんかをするケースもありますね。
これも機能としては、携帯固有の話ではないので良いでしょう。
アクセス元のIPアドレスのメンテナンスについては、ネットの情報をスクレイピングするとかそんなんで(・ω・)



っというわけでもうしばらくは携帯サイトにも付き合わなければならない状況も続くでしょうから、携帯サイトの構築に必要な機能を羅列してみました(・∀・)
まあ、携帯サイトに関わったことがある人ならわかりきった話ですが。
っで、これらの機能と仕組みと対応方針がわかっていれば、これから携帯サイトに関わる人も困ることはないと思います。


個人的には、そんな事よりスマートフォンというか、GoogleさんNexus Oneを配ってよ、お願いします(´∀`)、とかいう感じですが。