仲 裕介

WebRTC開発者向けライブラリ「PeerJS」はこうして作られた

NTT Communications(以下、NTT Com)が提供するWebRTC開発用プラットフォーム SkyWayはPeerJSをベースに構成されています。この記事ではPeerJS開発者であるEric Zhang氏の素顔に迫ります!

はじめに

2013年11月19日から21日にアメリカで開催されたWebRTC Conference & Expoに合わせて、NTT ComのSkyWay開発担当者がアメリカを訪れ、PeerJS開発者の一人であるEric Zhang氏にインタビューを行いました。

アレンとエリック

(写真左:NTT com SkyWay開発チームの飯田アレン真人氏、写真右:PeerJS開発者のEric Zhang氏)

──PeerJSとは?

WebRTCを活用したアプリケーションを開発できるようにするためのJavaScriptライブラリ。PeerServer Cloud serviceというWebRTCを実現するための仲介サーバ機能も提供している。

http://peerjs.com/

──SkyWayとは?

Web開発者が高度な知識の習得や環境の整備をすることなく、WebRTCを活用したアプリケーションを開発できるように、PeerJS互換のJavaScriptライブラリ、仲介サーバ機能、WebAPI、日本語の開発ドキュメントを提供している。

http://nttcom.github.io/skyway/

学生時代に二人で開発をスタート

──どのような方が開発に携わられているのですか?

私とMichelle Buの二人で開発しています。私は、過去にBinaryJSやNowJSなどを開発していました。特に、ネットワーク系の技術を簡単に使いやすくするためのライブラリ開発が得意です。MichelleはGoogleでインターンシップをしていたこともあり、JavaScriptを用いた開発経験が豊富なんです。

──PeerJSはいつごろから開発を始めたのですか?

私やMichelleがカリフォルニア大学バークレー校に在籍していた、2012年の12月にスタートしました。

WebRTCが流行るのはわかっていた

──WebRTCという技術に触れてみて、最初はどう思いましたか?

WebRTC DataChannelを利用してみると、多くの問題があることがわかりました。APIはブラウザごとに互換性がない、データのシリアライゼーションができない、そもそもシグナリングサーバが存在しないため利用するハードルが高いなど、とにかく使いにくい印象でした。しかし、ブラウザ上で動くWebアプリケーションはネイティブアプリケーションに比べて、ネットワーク技術を活用した開発を苦手としています。そのため、今後WebRTCは間違いなく流行る技術だと確信しました。

──なぜPeerJSを開発しようと考えたのですか?

私はもともと、JavaScriptの機能を簡単に利用できるようにするJavaScriptライブラリが好きでした。だからWebRTCの機能をみんなが簡単に使えるライブラリが、もっとあれば便利だと考え、開発をスタートしました。当初は開発者向けのチュートリアルも少なく、W3Cの仕様も毎週のように変わっていたこともあってかなり苦労しましたが、なんとか公開することができました。頑張ったかいあって、公開初日にGitHubにて700スターを頂きました。私が今までに開発したJavaScriptライブラリの中で、最も大規模なライブラリになりましたね。

PeerJS開発の日々

──開発はどのように進めているのですか?

私とMichelleは仕事をしながら、プライベートの時間でPeerJSの開発を進めてきました。現在も、毎日仕事から帰ってきたらメールとPeerjs – Google Groupを確認し、個別の質問への回答やバグ修正などを行っています。Chromeのコミットログも定期的に確認し、WebRTCに関する実装の進み具合も把握するようにしています。

PeerJSに求めることは互換性と安定性

──今後PeerJSに新しい機能追加を行う予定はありますか?

PeerJSへの機能追加は最小限にしたいと考えています。WebRTCの仕様自体が変化し続けているため、ブラウザのバージョンが上がるたびに使えなくなるという事態は避けなければなりません。WebRTC Working Groupの動向をウォッチし、仕様の変化に迅速に対応するとともに、高い安定性と互換性を維持していく方針です。もちろん、私達以外の開発者によるPeerJSへの機能追加は大歓迎です。そのためにMITライセンスで公開していますので、ぜひ、新しい機能をいろいろと追加してみてください。

──最近はどのような開発をしているのでしょうか?

PeerJSは2013年9月20日に、Version 0.2.xから0.3.xへメジャーバージョンアップを行いました。主な変更は、WebRTCのMediaChannelへの対応です。2ヶ月ほどの開発で、同時にコア部分のリファクタリングも行いました。ループ処理を極力省き、信頼性や処理速度の向上などを目的にしたコードの最適化を行っています。処理速度向上のアプローチとしては、WebScoketsによる接続を行う前に、XHRにて通信することで、50msほど処理を速くすることができました。これは価値があることだと考えています。

今はバグ修正と処理速度の高速化に注力しています。例えば、Chrome 31からSCTP DataChannelがデフォルトで有効になりました。Chromeの実装ではデータを一時保管するバッファーサイズが1MBしかないため、データ転送速度が速いとデータが溢れてしまう可能性があります。そのため、これに対処するためのバッファーインターフェースを実装する必要があります。(※1)その他にもエラー処理や、ユーザのイベント処理を改善していきたいと考えています。

※1・・・この機能はVersion 0.3.6 Beta (3 Dec 2013)にて実装されました。

──PeerJSのマネタイズはどう考えていますか?

公開しているPeerServer Cloud serviceの運用には、費用はかかります。ですが、開発者の方に素早くサービスを開発してもらうことに重点を置いているため、私達でサーバを維持できるかぎり、有償化するつもりはありません。

WebRTCは課題も多いけど、新しい可能性を秘めた技術

エリック──WebRTCに関して課題だと感じていることはありますか?

WebRTCはPeer-to-Peerを前提にしているので、グループビデオチャットを簡単に実装することができません。サーバ側でミキシングを行い、複数人でチャットなどができる商用サービスはいくつか存在します。しかし、オープンソースで公開されているものはありません。今後はnpm installで簡単にインストールできる、オープンソースのサーバプロダクトが出てくることを願っています。

──WebRTCを活用した新しいユースケースはありますか?

PeerCDNというサービスは面白いと思います。これは、Webサイト上の画像や音声、動画などのコンテンツを、その時に同じようにWebサイトを閲覧しているユーザ同士でシェアしあうサービスです。WebRTCの機能を使い、Peer-to-Peerの片方がCDNの役割を果たし、コンテンツを他方に配信します。サーバからダウンロードするよりも高速にコンテンツが取得できるようになれば、多くの人から注目されるでしょう。

WebRTCは新しくてとても魅力的なAPIです。今後の可能性に期待しています。

終わりに

今回はPeerJSの開発者であるEric Zhang氏へのインタビューをお送りしました。残念ながら、Michelle Bu氏には時間が合わずお話を伺うことができませんでしたが、Eric氏は一人のエンジニアとしてすごくバイタリティにあふれている方でした。また、HTML5とJavaScriptでつくるエコシステムにすごい可能性を感じており、ちょっと大げさかもしれませんが、同時にWeb技術への愛が感じられました。今後の活躍を大いに期待したいと思います。

NTT ComのSkyWay開発チームは、今後もSkyWayをはじめとするWebRTCに関する情報発信を行っていきますので、ご期待ください。

ここだけの話、ErichとMichelleはお付き合いしているそうです。二人がこの先もうまくいくといいですね。

エリック顔_small
[Eric Zhang/エリック・ザング]中国生まれで2000年からアメリカに在住。2009年にカリフォルニア大学バークレー校に入学。在学中にFlotype incにてNowJSの開発に携わる。2012年には同じく学生だったMichelle Buと共にPeerJSの開発を始める。現在はLever incの開発に携わりつつ、PeerJSの開発も継続して行っている。JavaScriptライブラリの開発が得意でBinaryJSの開発なども行っている。http://ericzhang.com/

Powered byNTT Communications

tag list

アクセシビリティ イベント エンタープライズ デザイン ハイブリッド パフォーマンス ブラウザ プログラミング マークアップ モバイル 海外 高速化 Angular2 AngularJS Canvas Chrome Cordova CSS de:code ECMAScript Edge Firefox Google Google I/O 2014 HTML5 Conference 2013 html5j IoT JavaScript Microsoft Node.js PhoneGap Polymer React Safari SkyWay TypeScript UI UX W3C W3C仕様 Webアプリ Web Components WebGL WebRTC WebSocket