なぜ React Native 向け WebRTC ライブラリを開発するのか

自社では今 React Native 向けの WebRTC ライブラリの開発を行っている。すでにオープンソースが存在しているのになぜ開発しているのか?、また数多くあるクロスプラットフォーム開発ツールの中から React Native を選んだのかを書いていきたい。

既存オープンソースの React Native ライブラリ

大変、よく出来ている。ただ色々足りていない機能があったり、libwebrtc への追従が追いついていない。さらにビルドも簡単とは言い難い。さらにライブラリのメンテナンスが不安定だ。

最初に考えたのはこのライブラリへの貢献をしようと考えたが、課題が大きすぎるのと設計方針が自社が期待する設計と合わなかった。

そのためフォークして運用することを考えたが、フォークするくらいならこのライブラリを参考にし 1 から書き起こしたほうが良いと判断した。

最初は react-native-webrtc と互換性があるライブラリをと考えていたが、どうしても react-native-webrtc は古いバージョンの libwebrtc を利用していることから最新バージョンの libwebrtc への追従を前提とする場合互換性を保つのが難しくなった。

結果的に互換性がない react-native-webrtc-kit (まだ未公開) を開発することになった。

react-native-webrtc-kit

基本的には WebRTC SFU Sora で利用する前提のライブラリとなるため DataChanel API への対応は行わない。もし利用したい場合は fork してもらう前提となる。

  • ブラウザで利用していた WebRTC API に寄せていく

重要なのが最新の libwebrtc への追従だ。この追従を楽にするため react-native-webrtc-kit では内部に libwebrtc を保持していない。時雨堂が iOS や Android SDK 向けに提供している libwebrtc を利用できるようにした。そのため、最新への追従コストがかなり低い。

なぜ React Native 向けのライブラリなのか

現時点でクロスプラットフォーム開発ツールとして使えるのは React Native か Flutter のどちらかだと考えている。

Flutter の WebRTC ライブラリも検討したが、Flutter は Dart を利用していることから、あまり馴染みがある人がいない。

その点 React Native は JavaScript を採用しており、WebRTC API を理解できていれば、難しい事はあまりない。

WebRTC を実際にモバイルで動かすためには実機である必要がある。もちろんモバイル開発者がいれば iOS や Android の SDK を利用してサクッと作ってもらえる。ただ React Native であればフロントエンドエンジニアが少し頑張れば利用できるというメリットがある。

気軽にまず動くものを作るという点では React Native はとてもあっていると考えている。

既存のアプリに対して、というより新規ビジネスでのアプリというところで多く使われていると考えており、WebRTC を利用した何かのプロトタイプ向けという位置づけだ。

クロスプラットフォーム開発ツールの主流が React Native ではないなにかに取って代わることもあると思うが、それはその時考えれば良い。今は React Native への投資を進めていく。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store