« 2011年12月 | メイン | 2012年02月 »

2012年01月 アーカイブ

2012年01月08日

WebSocketの基礎知識(2012年年始版)

WebSocketに関する、よくある質問や知っておいたほうがよさそうなことをまとめてみました。
技術的なことについては深くはふれていません。
あやまりがあれば指摘してください。

Q.
仕様が2つあるみたいだけど...
A.
WebSocketは、主にブラウザ上で使うことを考慮された通信の規格で、通信の「プロトコル」とJavaScriptから使うための「API」に仕様がわかれています。前者は「WebSocket Protocol」として「IETF」が、後者は「WebSocket API」として「W3C」がかかわっています。

Q.
WebSocketってまだ仕様が固まってないんじゃないの?
A.
WebSocket ProtocolはIETFのRFCの「標準化提案」に、WebSocket APIはW3Cの「勧告候補」になりました。IETFにもW3Cにも承認プロセスがあり、それぞれ最後には「標準」と「勧告」になりますがここでは詳細は述べません。
一応承認プロセスの途中なので、実際に使うには躊躇するかもしれません。しかし、誤解を恐れずに大胆に言うと、『こういう仕様を書いたんだけど、おかしかったら意見ください。』という段階を過ぎ、『仕様が固まったので使ってみてください。実際に使ってみておかしかったら修正します。』という段階に達しています。

Q.
WebSocketとWebSockets、どっちが正しいの?
A.
仕様の「草案(ドラフト)」で一時混乱していましたが、WebSocket ProtocolのRFCやWebSocket APIの勧告候補では「WebSocket」で収束しました。しかし、ブログのレベルではWebSocketの表記が統一されていません。「Web」と「Socket」をわけたり、単数形であったり複数形であったり、表記のゆれがあります。つまり「WebSocket」「WebSockets」「Web Socket」「Web Sockets」の4つです。このうち、単語をわける「Web Socket」「Web Sockets」は最近ではほとんど見られません。また、日本語のブログでは「WebSocket」が大半ですが、英語圏のブログでは「WebSockets」が多く見られます。英語圏の情報も検索したい場合には、もうしばらく「WebSockets」をキーワードに追加しておく必要があります。英語圏のブログで使われる単語も、今後は仕様にあわせて「WebSocket」になっていくのではないでしょうか。

Q.
どのブラウザで使えるの?
A.
「Google Chrome」と「Safari」では、そのままWebSocketが使用できます。
後述するセキュリティの問題のため「Firefox」では一時的に無効になっていましたが、現在のバージョンは一応使用できます。ただし、APIのオブジェクト名が「ベンダープレフィックス」付きになっています(本来はWebSocketというオブジェクト名ですが、MozWebSocketになっています)。Firefoxの現在の開発バージョンでベンダープレフィックスが外れたので、現在の開発バージョンの正式リリースとなるFirefox11(3月リリース予定)では普通に使えるようになるでしょう。
「Opera」にもWebSocketが実装されているのですが、セキュリティの問題のため標準の設定では無効にされています。今のバージョンでも設定を変更すれば使えるようになりますが、次のバージョンでは正式に有効になるかもしれませんね。
「Internet Explorer」の開発バージョンが既にWebSocketに対応しています。Windowsの次期バージョンが今年リリースされる予定ですので、多分それに合わせてIE10もリリースされるのではないでしょうか。
iPhone・iPad・iPod touch等の「iOS(ただしバージョン4.2.1以上)」でも、標準ブラウザのSafariがWebSocketに対応しています。
「Android」の標準ブラウザはWebSocketに対応していませんが、Android版のFirefoxがベンダープレフィックス付きでWebSocketに対応しています。
組み込み向けのブラウザである「NetFront Browser」は、発表されたばかりの最新バージョン「NetFront Browser NX v2.0 DTV Profile」が対応しているそうです。

Q.
Node.jsがないとWebSocketは使えないって聞いたんだけど...
A.
よくある誤解ですが、他の環境でも使えます。Node.jsは実行言語にJavaScriptを使用するサーバで、ノンブロッキングI/O・イベント駆動を特徴としています。これらの特徴は、WebSocketと非常に親和性があり、WebSocketサーバの実装の第一候補になるのも頷けます。
しかし、実行言語がJavaScriptであることを除けば、同じようなことが可能な環境は他にもあります。例えばJavaで実装されたサーバであるJettyは、ノンブロッキングスレッディングモデルを採用し、イベント発動時にInterfaceの実装を呼び出します。
自分の得意言語や実行環境の制限、将来性などを総合的に判断し、環境を選択してみてはいかがでしょうか。

Q.
WebSocketってセキュリティに問題があるんじゃなかったっけ?
A.
確かにWebSocket Protocolの古いバージョンの草案ではセキュリティホールが指摘されていましたが、RFCの現在の仕様では既に解決済みです。ただし、まだ古いバージョンで実装されたブラウザもあるため注意が必要です。実は、FlashやJava Appletで通信を行う際にも同様の問題があるのですが、普及してしまっているため修正が難しい状態となっています。

Q.
また、使うには早いんじゃないの?
A.
インターネットの世界には、仕様策定段階の技術でも使われる文化があります。また、WebSocketは仕様が固まる前から注目されてた技術であり、一部のブラウザのサポートや色々なサーバの実装が進んでいたため、それなりに熟れていると言えます。個人的な意見ですが、ノウハウがまだ貯まっていないため、商用にはまだ躊躇するかもしれませんが、個人で使うのであれば決して早くはありません。

2012年01月25日

食育ならぬ数育

アンパンマンが食育に役立っているという話がある。
幼い頃から色々な食べ物のキャラクターに触れている効果であろう。
算数嫌いや数学嫌いに応用できないかとキャラクターを考えてみる。

■タス子さん
調味料やソースに一味たすのが得意。
隠し味のスペシャリスト。

■ヒク夫くん
サヤエンドウの筋取り、エビの背わた取りなど、何かを引き抜くことに躍起になっている。
最近、挽き肉作りを覚えた。

■カケルくん
料理にかけるソースや調味料を選ばせれば天下一品。
タス子さんの作るソースが大好き。

■ワル実さん
クルミやピスタチオを割ったり、某乳酸飲料(瓶入)を水で割ってくれる。
お酒を割るのも得意らしいが、子ども向けじゃないので裏設定になっている。
くるみ割り人形を集めるのが趣味。
名前に反してイイ子だけど、扱いにくいキャラクターのため出番が少ない。

なんかアンパンマンみたいだけど、まあ良いや。

続き。

■クリ・アーゲーとクリ・サーゲー
初めて見ると、皆が面食らう。
でも、慣れれば当たり前すぎて気にもならなくなる。
いわゆる空気。

■びぶん親分とせきぶん親分
「シスウ」というものを増やすか減らすかでいつもケンカしている。
でも、いざという時はコンビを組んで大活躍することもある。
コンビ名は「ビブン セキブン 良い気分」。

■紙神(かみがみ)
この世界を最初に想像した神。
なんでもペラペラ喋ってしまうため、相談事には要注意。
最近、デンノー世界に紙世界が脅かされているのを嘆いている。

■サインくんとコサインくんとタンジェントちゃん
三角山に住む三兄妹。
サインくんとコサインくんは双子。
びぶん親分やせきぶん親分とからむと、性格が入れ替わったり体が入れ替わったりする。
タンジェントちゃんは気分屋のため、興奮するとそのテンションは無限大で紙の世界も突き抜ける。

■ぎょうれつ大名
ぎょうれつ大名の大名行列は美しいと評判で、家来が織りなすマスゲームは息を飲むほど。
実はデンノー世界と交流があり、サン・ジゲン画伯とは旧知の仲。
とある映画の製作に関わったという設定もあったが制作元の許可が降りなかった。

■すうれつざむらい
ぜんか式剣術の達人で、得意技は水を切るように切る「斬」。
刀剣を集めるのが趣味で、お気に入りの剣は南蛮渡来のフィボナッチ。
ゼンマイはついていない。

ネタが尽きたので終わる。
Google

タグ クラウド