SHOEISHA iD

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

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

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

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

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

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

古いInternet Explorerでの検証

 IEの場合、他のブラウザと比べてバージョンごとの違いが大きく、またそれぞれのバージョンを使っているユーザー数が多いため、各バージョンごとにWebサイトのテストが必要になります。IEの古いバージョンのテスト用に、MicrosoftによってVirtual PCのイメージがWeb上で提供されています。MicrosoftのVirtual PCというWindows用の無料ソフトウェアをインストールし、Virtual PC上でこのイメージを使ってWindowsを起動することで、過去のバージョンのIEを動かすことができます。イメージには使用期限が設けられておりそれ以降は使えなくなりますが、使用期限が過ぎると新しいイメージがサイト上にアップロードされ、次の使用期限まで使えるようになります。なお、Windows XPやVistaで使うにはVirtual PC 2007をインストールします。

クライアント側のエラーログを収集する

 クライアント側で起きたJavaScriptのエラーログをサーバに送信するようにしておくと問題解決に役立つことがあります。window.onerrorに関数をセットすると、ページ内でJavaScriptエラーが発生した時にその関数が呼ばれます。この関数内部からエラーの詳細をAjax等でサーバに送信できます。

[リスト6]クライアント側のエラーログを収集する
window.onerror = (message, file, line) ->
  # jQueryを使ってエラーの詳細をPOSTする
  $.post 'http://localhost/api/errors',
    message: message
    file: file
    line: line

 コールバック関数の実行時に渡される引数は以下のような内容となります。

message: Uncaught ReferenceError: a is not defined
file: http://localhost/error/js/page.js
line: 15

複雑なテンプレートの使用

 クライアント側で動的にHTMLを生成する場合はテンプレートを使うと便利です。CoffeeScriptの#{...}による変数展開や、Underscore.js_.template()でも簡単なテンプレートは使えますが、繰り返しなどの文法は用意されていません。Handlebars.js(MITライセンス)というライブラリを使うと、配列を使った繰り返し処理をすっきりと書くことができます。

 Handlebars.jsを使うには、ダウンロードページから最新のファイルをダウンロードして読み込みます。runtimeと書いてあるファイルはテンプレートのコンパイル機能を含まないものです。よくわからなければ、runtimeではない方を選びましょう。

[リスト7]Handlebars.jsを使ってHTMLを作成する
# テンプレートに渡す変数
context =
  name: 'ビートルズ'
  members: [
    { name: 'ジョン・レノン',         part: 'リズムギター' }
    { name: 'ポール・マッカートニー', part: 'ベース' }
    { name: 'ジョージ・ハリスン',     part: 'リードギター' }
    { name: 'リンゴ・スター',         part: 'ドラム' }
  ]

# テンプレート
source = """
<div class="band">
  <h2>{{name}}</h2>
  <ul>
  {{#each members}}
    <li>{{name}}({{part}})</li>
  {{/each}}
  </ul>
</div>
"""

# テンプレートをコンパイルする
template = Handlebars.compile source
# コンパイルしたテンプレートに変数を流しこむ
result = template context

 リスト7を実行すると、resultの値は以下のようになります。

<div class="band">
  <h2>ビートルズ</h2>
  <ul>
  
    <li>ジョン・レノン(リズムギター)</li>
  
    <li>ポール・マッカートニー(ベース)</li>
  
    <li>ジョージ・ハリスン(リードギター)</li>
  
    <li>リンゴ・スター(ドラム)</li>
  
  </ul>
</div>

 テンプレート内の{{変数}}はその変数の値をHTMLエスケープした内容で置き換えられます。エスケープしない値で置き換えるには{{{変数}}}のように中括弧を3つ書きます。その他の文法はWebサイト(英語)を参照してください。

【コラム】Handlebars.jsの名前の由来

 Handlebars.jsはMustacheというテンプレートエンジンを元にして作られたもので、{{ }}という文法もお互いに共通している。mustacheは英語で口ひげという意味だが、{の文字を90度時計回りに回転させると口ひげに見えるというのが名前の由来。一方、handlebarは自転車やバイクのハンドルを意味する。英語でhandlebar mustacheというと、自転車のハンドルのように両端が上がっている口ひげのことを指す。そのため、Mustacheへの愛情を込めてHandlebars.jsという名前が付けられた。

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

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
CoffeeScriptによるモダンなWebアプリケーション開発連載記事一覧

もっと読む

この記事の著者

飯塚 直(イイヅカ ナオ)

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6537 2012/05/14 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング