Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。14:00JavaScriptポスト最近話題の新言語『CoffeeScript』をとりあげた連載「CoffeeScriptによるモダンなWebアプリケーション開発」。今回からはベストプラクティス編として、CoffeeScriptでブラウザ向けJavaScriptを開発する際によく使われる実用的な開発手法を4回に分けて紹介します。CoffeeScriptの歴史や概要については過去の連載も参照ください。4CoffeeScriptをブラウザで直接実行するtext/coffeescriptの使い方まとめWebSocketをクロスブラウザで使うSocket.IO(MITライセンス)は、WebSocket(注1)と同様の機能をクロスブラウザで提供する便利なライブラリです。サーバから任意のタイミングでブラウザにデータをプッシュしたい場合、WebSocketを使えば簡単に実現できますが、WebSocketをサポートしていないブラウザに対して代替手段を提供するのは非常に面倒な作業となります。Socket.IOは、そのようなブラウザごとの違いを吸収して共通のAPIを提供し、ほぼすべてのブラウザ上でWebSocketと同様の機能を提供してくれます。Socket.IOはサーバ側をNode.jsのWebサーバに組み込んで使います。注1:WebSocketWebブラウザとサーバ間で1つのTCPソケットを使って双方向通信を行うための技術。通常80番ポートを利用するためHTTPとの親和性が高く、既存のWebサーバに組み込む形で利用できる。フォームの送信などとは異なり、ソケットをつなぎっぱなしにしてページ内でデータのやり取りを何回も行うことを意図して設計されている。従来はFlashやCometなどを使って実装しなければならなかったことが簡単なAPIで実現でき、またAPIやプロトコルの仕様も標準化されているため、誰でも広く利用できる(少し古いブラウザではサポートされていない)。Socket.IOのインストール(サーバ側)サーバ側のプロジェクトのディレクトリにモジュールをインストールします。socket.ioSocket.IOの使い方(サーバ側)Node.jsのWebサーバにSocket.IOを組み込みます。3.0と組み合わせる場合はリスト1のように記述します。data.split('').reverse().join('')Socket.IOの使い方(クライアント側)リスト1を実行すると、サーバ上の/socket.io/socket.io.jsというパスでSocket.IOのJavaScriptライブラリが提供されるようになります。クライアント側のHTMLではこのJavaScriptを次のように<script>タグで読み込みます。HTMLはひとまず静的ファイルとして作り、前述のサーバ側のプロジェクト内にpublicディレクトリを作成してその中に配置します。src="/socket.io/socket.io.js"></script>クライアント側のコードはリスト2のように記述します。'hello!'これをブラウザで実行すると「hello!」という文字列がサーバに送信され、サーバは受け取った文字列を逆さまにしてクライアントに送り返し、ブラウザは受け取った文字列「!olleh」をコンソールに出力します。上記の例ではイベント名としてdataを使っていますが、connect、message、disconnect以外の任意の名前を使うことができます。APIサーバの実装例リスト3、4は、Socket.IOを利用して簡単なAPIサーバを実装したものです。1000この例のように、WebSocketを使うと自由に双方向の通信を行うことができます。再接続パラメータの設定Socket.IOのクライアントは、サーバとの接続が切れた時に自動的に再接続する機能を持っており、デフォルトで有効になっています。自動再接続を無効にしたい場合は、クライアント側で次のようにreconnectオプションを指定します。再接続しないまた、再接続に関するパラメータを変更する場合はクライアント側で次のように指定します。接続に失敗した後、再接続を試みるまでの待ち時間(ミリ秒)。失敗し続けるとだんだん長くなる。再接続に失敗し続けると待ち時間が長くなっていくが、その最大値。デフォルトはInfinity、つまり制限なし。接続が切れてから何回再接続を試みるか。この回数連続で失敗すると再接続が行われなくなる。100その他、指定できるオプションの一覧はこちらのWebページ(英語)に掲載されています。本番環境で動かす際には、サーバ側で以下のオプションを設定することが推奨されています。ナオ)1984年東京都生まれ。高校時代に趣味でPerlやJavaを使ってプログラミングを始める。ニュースサイトの開発などを担当。その後、面白法人カヤックにてソーシャルゲームの開発などを手がける。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。プラットフォームチームの意義と実践のポイント1DMM.comの施策から見る、事業をむしばむ「技術負債」への処方箋──リファクタリングの「言語化」でインシデントを予防2企業の7割超が「2025年の崖」を理解していないことが明らかに。NEW新着記事一覧を見るイベント今後の予定を見るCodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。イラストの無断転載を禁じます。記載されているロゴ、システム名、製品名は各社及び商標権者の登録商標あるいは商標です。