iOS/Android 向け WebRTC ライブラリのビルドツールを公開しました

SUZUKI Tetsuya
shiguredo
Published in
6 min readJun 12, 2017

WebRTC ビルド職人の朝は早い。 16 時間前のタイムスタンプと共にサンフランシスコ・ベイエリアからプッシュされたコミットのログを一瞥し、その影響から考えられうるビルドエラーへの対策を考えるのだ。「 WebRTC のソースコードは生き物なんです。彼らのリリースブランチへの果敢なコミットはいつも僕らを驚かせます。ハハ、心配はいりません。コミットログと真摯に向き合えば build_ios_libs.py の声が聞こえてくるんです。今日は webrtc/BUILD.gn に変更があるから気をつけろ、ってね」。そう言って彼は gclient sync -R; python tools-webrtc/ios/build_ios_libs.py -b framework とキーボードを叩くと、朝日が照らす窓際のバリスタマシンにカフェオレ・カフェインレスのカプセルをセットした。「実行結果は気長に待つ、それが暖かみのあるビルドのコツです」。コーヒーカップに浮かぶクレマは、馥郁とした淹れたての香りをリビングに漂わせた。

WebRTC on Safari 11 記念に、弊社で使っている WebRTC ライブラリのビルドツールを公開しました。 iOS と Android 向けのバイナリを手軽にビルドできて便利です。使い方は README を参照してください。基本的に弊社製品の WebRTC SFU Sora iOS/Android SDK 用ですので、目的を越えた汎用化には力を入れないと思います。がんばっても毎度のリリースでビルド方法が変わっちゃうだろうしね。

WebRTC のビルドには全世界のプログラマが苦心消耗されているかと思います。 webrtc.org が各プラットフォーム向けのバイナリを配布してくれればぐっと楽になるんですけど、デフォルトのビルド設定で満足できない場合はそうも言ってられません。ですが、実際に WebRTC ライブラリをビルドしようとする人はほとんどいないでしょうし、ビルドの詳細を把握している人もほとんどいないでしょう。ビルドに成功する人はさらに少ないはずです。

ビルドが面倒な理由を挙げてみます。私見です。

  • ソースコードがあまりに巨大で、ダウンロードにもコンパイルにもひどく時間がかかります。気軽にトライ&エラーができません。間違って Git 絡みのファイルを消してしまったときは泣きそうになります。
  • ビルドに使われるツールのほとんどが Chrome のビルド用に開発された Google 独自のツールです。ビルドエラーを初見ですんなり理解できる人は少ないでしょう。ソースコードが巨大な分、ビルドファイルもあちこちにあるからなおさらです。それにしても海の向こうは Ninja 好きですね。ナンデ?
  • メジャーアップデートでビルド方法に大きな変更が入る場合があります。ビルドツールすら変わったアップデートもありました (GYP が GN に置き換えられた) 。ビルドのノウハウはあっという間に古くなります。せっかくビルドに成功した方々がビルド方法やスクリプトを公開してくれたのに、次のアップデートですべて無に帰してしまう可能性だってあります。このビルドツールも例外ではありません。
  • iOS 向けのライブラリをビルドする場合、 Xcode のバージョンによってはビルドが失敗します。 Xcode がアップデートされたらビルドできなくなったというケースはざらにあります。 Xcode のアップデートに追従してくれないと考えておいたほうがいいでしょう。
  • WebRTC ライブラリの新しいバージョンがリリースされたあとでも、リリースブランチに変更がコミットされます。 mjsk 。ビルドに関する変更も平気でコミットされます。 mjd 。今日ビルドに成功したとしても、明日の成功は保証されません。さっきは同じ条件でビルドできたのにおかしいなと思ってコミットログを見たら、 2 時間前にビルドファイルに関する変更があった、という日もありました。そういう場合はビルド設定を変更するなりビルドファイルを編集するなり、何らかの方法でカバーする必要があります。コミッターがろくに試さず見切り発車している可能性大です。
  • したがって、 master ブランチでビルドができたからと言ってリリースブランチも成功するとは限りません。 master ブランチとリリースブランチはビルドでもビルド以外でも大きな差があり変更著しいので、年収 3000 万でもなければ master ブランチのことは忘れたほうがいいと思います。
  • iOS/Android 用のビルドスクリプトがそれぞれ用意されていますが、スクリプトの存在も場所も使い方も公式サイトに記述がありません。もちろんこのスクリプトにもアップデートで大きな変更が加わることがあります。変更内容を把握するためには iOS/Android ライブラリのフォーマットに関する知識が必要です。

これだけの諸事情があるので、このビルドツールもユーザーの環境によって様々な原因のエラーが起きる可能性があります。危うい土台に立っているツールなのだと認識して頂けるとお互いに気が楽です。

  • バグ報告以外の PR は対応する余裕がないかもしれません。返信は気長に待って頂けると助かります。
  • デフォルトのビルド設定は弊社製品の WebRTC SFU Sora iOS/Android SDK に合わせてあります。
  • ビルド済みの WebRTC ライブラリは動作の保証ができないため配布しません。開発にはご自分でビルドしたライブラリをお使いください。
  • 一時期はビルドコマンドを OCaml で書いてましたが、誰もメンテできないという理由で却下されました。どうやら仕事で OCaml を使うには OCaml ユーザー (何て言うんだ? OCamler はかっこ悪いしフランス発なら OCamlier とか?) を増やすしかなさそうです。
  • Golang で書いたソースコードは Python より読みやすくて意外でした。しかし型が「 Golang 型あるよ」「どこに?」「ガタガタいってんじゃねー」 — from Slack

--

--