2018年2月25日

ASP.NETのモバイル対応

DotNetNukeの基盤技術にはASP.NETが使用されています。実はASP.NETにも以下のようなモバイル用ウェブサイト開発の仕組みが用意されています。

  1. 文字コードの変更
  2. ブラウザ判別の仕組み
  3. クッキーレスの設定
  4. URLの指定方法(絶対パスとするか否か)
  5. モバイルWebコントロール

 1~4はモバイル専用というわけではないのでDotNetNukeでも使えます。ただ、最初からそれらを想定して作られていないので、細かなところで問題が出てきたりします。

また、ASP.NETでは文字コードやクッキーレスについては基本的にフォルダ単位で制御するため、全てのページが同じファイルであるDotNetNukeでは全体を一括して変更することになり、細かな制御がやりにくいということになります。

5のみモバイル専用のコントロール群であり、コントロールだけでなくページ(WebForm)自体も違います。これをDotNetNukeで使うためにはかなり根っこのところからカスタマイズが必要になってきます。それに、モバイルWebコントロールはだいぶ前に更新がされなくなっており、Visual Studio2008ではついにデザイナも利用できなくなってしまうなど隅に追いやられてしまいました。このため、モバイルWebコントロールをDotNetNukeで使うというのは避けたほうがよいでしょう。

        

モバイル対応

最小化

DotNetNukeの最大の弱点はモバイル対応です。これはDotNetNukeというよりはASP.NET自体の問題ですが、基本的に日本のモバイル対応はほとんど考えられていません。しかし、日本ではインターネットアクセスの半分は携帯からといわれる状況ですので、無視するわけにもいきません。とはいってもなかなかこれは難しい問題です。ここで実験しながら対応を考えていきたいと思います。

ということで、まず最初にモバイルアクセス時に必要な事項を整理してみましょう。

  1. 文字コードはShift-JIS
  2. JavaScriptは使えない
  3. Cookieは使えない
  4. ページ内に表示できる文字数に制限
  5. ナビゲーションをどうする?
  6. デザインはシンプルに
  7. 他にも画像フォーマットやサイズ、タグの制約など一杯

一応、優先順位が高いと思う順に並べてあります。

まずは、なんといっても文字が読めないことにはお話になりませんので、やはり文字コードの問題が一番でしょう。日本では基本的にShift-JISにしないといろいろと不都合があります。例えば、DotNetNukeはUTF-8が標準ですが、auの端末からアクセスした場合、文字化けして全く読めません。なお、ASP.NETの機能としてWeb.config内の設定を変えることでサイト全体の文字コードをShift-JISに変更することは可能ですし、実際にしばらく運用してみました。しかし、致命的ではありませんが、いろいろなところ(特に管理用画面)で不具合が出て使いづらいので元に戻してしまいました。

次にJavaScriptです。使わなければよいだけの話ですが、メニューやボタンなどにバリバリに使われているのでそのあたり工夫が必要です。特にページ移動ができないと話になりませんので、メニューはなんとかしないといけません。

Cookieについては、ポストバックを多用するASP.NETでは大きな問題になるのですが、DotNetNukeの場合には大抵はユニークなURLが割り振られているので閲覧だけであればそれほど問題にはなりません。ただし、ログインが必要な場合は別です。管理者や編集者は使い勝手から考えてもPCでログインすると思うのでよいとして、会員制サイトの場合の一般ユーザをどう取り扱うかが問題になります。なお、これもASP.NET自体にCookieを使わずにURLにセッション文字列を含めてしまうというCookielessの設定が用意されています。これも確かに動きますが、セキュリティやPCサイトへの影響を考えると使用するのはためらわれます。

文字数の制限、デザイン、ナビゲーションはそれぞれ関係する項目ですが、とにかくPC用に作られたページをそのままモバイルページとして表示するわけにはいきません。文字数制限やパケット料金などを考慮すれば同一ページ内に全てを表示するのではなく、例えばモジュール単位であるとか、可能な限りページを細かく分割し、それらをリンクで辿っていくというようにナビゲーションを変更しないといけません。また、表示もできるだけシンプルにする必要があります。

画像やタグは致命的な問題ではないので、ここでは扱いません。特にタグについてはXHTML Basicを対象と、それ以前のタグについては扱いません。従って、ここでは1~6の問題について考えていきたいと思います。