SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Yahoo! JAPANの制作チームによる、さまざまなWebサイト最適化手法

HTML5とCSS3を使ってスマートフォン向けサイトを構築
- iPhone版Yahoo!JAPANトップの開発事例紹介

Yahoo! JAPANの制作チームによる、さまざまなWebサイト最適化手法 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

Android対応

 スマートフォン版Yahoo! JAPANトップでは、歴代のiPhone、iPod touchだけではなく、現在日本で発売されているAndroid(一部機種を除く)にも対応しています。AndroidはiPhoneと同じWebKitブラウザが標準で備わっていますが、細かな仕様においてiPhone、iPod touchとは異なっています。いくつか特徴的な面を挙げていきます。

 iPhoneではデフォルトの状態では、リンクや、タップ可能な要素(formパーツや、onclickイベントが定義されている要素)にタッチをすると、グレーの半透明の「ハイライト」が表示され、離すと消えます。これは、指という「カーソル」が、リンクにピンポイントでタップするのが難しいために表現されている仕組みですが、Androidのフォーカスは若干異なります。iPhoneではタップしやすい領域を確保するために、以下のようにa要素のスタイルで、displayプロパティを標準の "inline" から "block" にすることがよくあります。こうすることで、要素全体が指のタップとして認識され、ユーザビリティが向上します。

 <a style="display: block; height: 30px;">ボタン</a>

 ところが、Androidではブロック要素になったa要素も、インラインのフォーカスとして扱われてしまいます。また、スタイルを"opacity: 0"のように透明にしてしまった場合はタップしたときのフォーカス枠すら表示されなくなります。ただしタップは正常に動作するので、指を離したときに正常な動作が行われます。

 iPhoneのようなグラフィックエンジンで処理されるなめらかな動きにはならず、動きがカクカクしています。ただし、Android OSがバージョンアップされるごとにパフォーマンスが向上されているようですので、今後さらなる改善にも期待できるでしょう。

 iPhoneではwindowのorientationchangeイベントを検知して、縦・横に応じたレイアウトなどの微調整をすることができますが、Androidではorientationchangeイベントは発行されません。ただし、window.orientationプロパティは取得できるので、以下のようにすれば擬似的にイベントを検知できます。

function orientationChange () {
    // 縦横が切り変わると実行される関数
}
if( typeof window.onorientationchange === "undefined" ) {
    // for Android.
    // 500ミリ秒おきに window.orientation の値を監視し、変わっていたら関数を呼び出す。
    var currentOrientation = window.orientation;
    setInterval(function() {
        if(currentOrientation !== window.orientation) {
            orientationChange();
        }
    }, 500);
} else {
    // for iPhone.
    window.addEventListener("orientationchange", orientationChange, false);
}

 AndroidにはiPhoneと同じようにGPSが搭載されており、ブラウザのJavaScriptからもそれを利用することが可能です。Android バージョン2.1以降である「X06HT - HTC Desire」ではW3C勧告の仕様に沿ったGeoLocation APIが搭載されているためiPhoneとまったく同じコードで動作します。ところがAndroid 1.6の「Xperia SO-01B」、「HT-03A」などはそれらのAPIが実装されていないため、Google Gearsという内部APIを経由して位置情報を取得する必要があります。

var geo = false;
if ( navigator.geolocation ) {
    // geolocationを利用して位置情報の取得
    geo = navigator.geolocation;
} else if ( window.google && google.gears ) {
    // gearsを利用して位置情報を取得
    geo = google.gears.factory.create("beta.geolocation");
}
if (geo) {
    geo.getCurrentPosition(callback);
}
  • フォーカスの違い
  • CSSアニメーション、CSSトランスフォーム
  • イベント
  • 位置情報取得

画面サイズの違い

 基本的には、HTML+CSSをリキッドレイアウトで組んでいれば表示崩れは起きません。参考までに主要な端末の画面サイズをまとめておきます。

主要な端末の画面サイズ
キャリア デバイス OS 解像度 ブラウザ表示サイズ(縦) ブラウザ表示サイズ(横)
SoftBank iPhone 3G/3GS iOS 2x~4x 320x480 320x416 480x268
SoftBank iPhone 4 iOS 4x 640x960 320x416 480x268
SoftBank X06HT - HTC Desire Android 2.1 480x800 320x533 533x320
au IS03 Android 2.1 640x960 320x455 480x295
NTTドコモ Xperia SO-01B Android 1.6(2.1) 480x854 314x525 563x275
NTTドコモ HT-03A Android 1.6 320x480 314x430 474x270
NTTドコモ GALAXY S SC-02B Android 2.2 480x800 320x508 533x295
※注意

 「ブラウザ」とはデバイスに標準でインストールされているブラウザを指しています。「ブラウザ表示サイズ」はURLバーのサイズは含まれていません。本データはヤフー株式会社で独自に調査した内容となり、本データの内容が正確であることについては一切保証できかねます。

まとめ

 今回紹介したように、最新のスマートフォン端末では大変多くの先進的な機能が実装されています。先進的な機能を使うには対象ブラウザごとによる作り分けなどが必要になる場合が多いですが、対象をiPhoneやAndroidなどのWebKitベースの端末に限定することで、多くの最新機能を共通で利用することができます。これらを有効に活用することで今までにないリッチな表現やユーザビリティの高いUIを、非常に効率的に開発することができるでしょう。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Yahoo! JAPANの制作チームによる、さまざまなWebサイト最適化手法連載記事一覧
この記事の著者

藤木 裕介(ヤフー株式会社)(フジキ ユウスケ)

ヤフー株式会社 R&D統括本部 制作本部 ウェブデベロップメント部 所属。1984年生まれ、神奈川県横浜市出身。美術大学にて情報デザイン等を学び、2007年にヤフー株式会社デザイナー職の新卒採用にて入社。同社では、スマートフォン版Yahoo! JAPANトップのマークアップを担当。HTML5...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5619 2011/06/08 09:53

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング