SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

CoffeeScriptによるモダンなWebアプリケーション開発

CoffeeScriptベストプラクティス集
ブラウザ向けJavaScript編(1)

CoffeeScriptによるモダンなWebアプリケーション開発 第7回

HTML5やCSS3のサポート状況を判別する

 Modernizr(MITライセンスとBSDライセンスのいずれかを選択可能)というJavaScriptライブラリを使うと、HTML5やCSS3の機能をブラウザがサポートしているかを判別できます。HTML5やCSS3はブラウザのバージョンによっても実装状況が異なるため、User-Agentだけを見て対応状況を判定するのは大変な作業です。Modernizrを使えば、User-Agentでの判定をすることなく各機能ごとにサポート状況を判定し、それを元に動作を変えることが可能になります。Modernizrは、IE6以上など現在使われているほぼすべてのブラウザで動作します。

Modernizrの使い方

 ModernizrのWebサイトにアクセスし、ライブラリをダウンロードします。ダウンロードできるバージョンにはDevelopmentとProductionがありますが、Developmentは主に開発用、Productionは本番環境用です。何ができるかを試す分にはDevelopmentバージョンで構いませんが、本番環境では自分に必要なパーツだけを選んでカスタマイズしたProductionバージョンを使うことが推奨されています。

 ダウンロードしたJavaScriptファイルをHTMLの<head>内で読み込みます。スタイルシートを読み込んだ後の部分に入れましょう。

<script src="js/libs/modernizr.js"></script>

 ブラウザがページにアクセスしてModernizrが実行されると、<html>要素にクラスが自動的に追加されます(リスト8)。これらのクラスは、ブラウザがどの機能に対応しているかを教えてくれています。

リスト8:Modernizrによりクラスが追加された例
<html class=" js flexbox flexbox-legacy canvas canvastext webgl no-touch geolocation postmessage websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions fontface generatedcontent video audio localstorage sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths">

 この<html>に付けられたクラスを利用して、特定のブラウザについてだけ特別なCSSを適用できます。例えば、CSS3のborder-radiusプロパティに対応しているブラウザでは<html>borderradiusというクラスが追加されます。リスト9のCSSを指定すると、border-radiusプロパティをサポートしているブラウザとサポートしていないブラウザで見た目を変えることができます。

[リスト9]border-radiusに対応しているブラウザには異なるCSSを適用する
.borderradius #content {
  -webkit-border-radius: 10px;
     -moz-border-radius: 10px;
          border-radius: 10px;
  padding: 15px;
}

#content {
  border: 2px solid #cdb599;
  padding: 8px;
}
[リスト10]HTML
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>test</title>
  <link rel="stylesheet" href="css/site.css" type="text/css" />
  <script src="js/modernizr.js"></script>
</head>
<body>
  <div id="content">
    ブラウザによってスタイルが異なります
  </div>
</body>
</html>
図3 Chromeでの表示
図3 Chromeでの表示
図4 IE8での表示
図4 IE8での表示

条件によって読み込むスクリプトを変える

 Modernizr.load()メソッドを使うと、条件をもとに異なる外部JavaScriptを読み込むことができます(リスト11)。

[リスト11]条件によって読み込むファイルを変える
Modernizr.load
  test: Modernizr.canvas
  yep : 'js/canvas.js'
  nope: ['js/flashcanvas.js', 'js/no-canvas.js']

 Modernizr.load()の引数のtestプロパティがtrueの場合はyepに指定したファイルが、falseの場合はnopeに指定したファイルが読み込まれます。配列を指定すると複数のファイルを読み込むことができます。

 リスト11の例では、Canvasをサポートしているブラウザではjs/canvas.jsを、サポートしていないブラウザではjs/flashcanvas.jsとjs/no-canvas.jsの2つのファイルを読み込みます。各機能のサポート状況は、<html>のclass属性以外にも、JavaScriptのModernizrオブジェクトのプロパティによって知ることができます。

サポートされていないAPIを補完する

 HTML5やCSS3に代表される新しいAPIをサポートしていない古いブラウザでもそれに近いことが実現できるよう、足りない機能を補完する詰め物となるJavaScriptをpolyfill(ポリフィル)と呼びます。様々なpolyfillの一覧をこちらで確認できます。

 ただしpolyfillはあくまで標準APIを有志の努力によって模倣しようという取り組みなので、すべてが完全に標準APIと同じように動くわけではなく、一部のAPIが使えなかったりパフォーマンスが悪いという場合もあります。polyfillを使う時は、適用しても問題が出ないかどうかを慎重に確認することが大事です。

 次回も引き続き、CoffeeScriptでブラウザ向けJavaScriptを開発する際によく使われる実用的な開発手法を紹介します。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
CoffeeScriptによるモダンなWebアプリケーション開発連載記事一覧

もっと読む

この記事の著者

飯塚 直(イイヅカ ナオ)

1984年東京都生まれ。 高校時代に趣味でPerlやJavaを使ってプログラミングを始める。 慶応大学湘南藤沢キャンパス卒業後、共同通信社にてニュースサイトの開発などを担当。 その後、面白法人カヤックにてソーシャルゲームの開発などを手がける。 2012年現在、カヤックを退社し個人として活動し...

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/6533 2012/05/10 14:00

イベント

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

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

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

メールバックナンバー