react-native-record-screenという画面録画ができるReact Nativeのライブラリを作って公開しています。
自分が案件で必要になったから作ったに過ぎませんでしたが、3年前にリリースして運用していく中で感じた事がいろいろあったので書きました。
きっかけ
仕事でアプリで画面を録画したいという要望から始まりました。しかしiOSの制約で既存の方法だと動画を画面録画しようとするとその動画部分が黒くなってしまい、動画を映す事ができませんでした。
そのためiOS11から導入されたReplayKit2を使って解決することにしました。
開発から公開
react-native-builder-bobを使ってテンプレートを生成する事にしました。ネイティブ部分も記述しないといけないのですが、iOSはObjective-C、AndroidはKotlinを選定しました。
一般的にiOSの開発ではSwiftがスタンダードになっていると思います。しかし以前Swiftの2から3にアップデートした際に、破壊的な変更があって面倒だった記憶があったのでObjective-Cを選定しました。ちなみにそれまでObjective-Cを書いた事はないため、言語仕様もよくわかってませんでした。
Kotlinを選定した理由はJavaの記述が冗長なためでした。ちなみにJavaは読んだ事はありますが、KotlinもJavaもほとんど書いた事はありません。
という事でObjective-CもKotlinも「まぁどうにかなるか」という見切り発車でした。
開発
iOS
Objective-Cの開発は自分でもびっくりするくらい順調で録画するだけなら割とすぐに出来ました。書き方に癖があってみんなが書きたがらない気持ちもわかりましたが、これはこれで別のパズルをやってるみたいで楽しかったです。今でもログを表示するだけでもググらないと書けません。
Android
Androidに関してはじめはこちらもスクラッチで書いていました。しかしHBRecorderというライブラリを見つけ、自分が片手間で書いたコードよりも堅牢なのは間違いないと思い、ラップすることにしました。
ライセンスがMITであるのを確認した上で利用しています。
公開
初回はiOSだけで公開して、追ってAndroidも公開しています。
運用して辛かったこと
React Nativeのアップデート
実はreact-native-record-screen本体にアップデートの影響が出る事はほぼありませんでした。しかしReact Native、Node.jsのアップデートの影響でexample(デモ画面)がよく死にます。
アップデートすると対応するPodfileやGradle、Flipperのバージョンが変わり、記述方法も変わります。特にAndroid周りのアップデートに苦戦しています。
そしてアップデートした直後は何かしらのキャッシュの影響で大体動きません。それをクリーンにしていく作業になります。それでも動かない事も多々あり、こちらも苦戦します。
画面録画の機能はiOSのシミュレーターでは動かないので、どうしても実機テストが必要なためデモ画面が必要になってきます。しかしこれが一番のボトルネックになっています。
READMEを読んでくれない
READMEにやり方を書いてるけど、結構読んでくれないというのがわかりました。しかしそれでIssueを立てれる気概は見習うものがあるのかもしれません。
雑なnot workingが多すぎる
ログやデバイス、バージョンも書いてくれないと答えようがありません。ログを貼ってくれといったら、そのまま貼られました。読み辛いのでちゃんとハイライトするように囲んで欲しいです。
会社だったら注意してると思います。
大抵はREADMEにある手順の何かが抜けてる事が多いので、前述の話につながります。
モチベーションが保ち難い
自分が必要としている機能は出来てしまったので、モチベーションが保ち難いです。これが有償だったらやるかと言われるとそういう問題でもないので難しいなと思っています。
Issueを見てると「cloneして自分で修正して、そっちを本家として運用していってくれ」と思う事が多々あります。
今はPRを送ってくれる人がいるので「反映しないと申し訳ない」というのがモチベーションになっています。
運用して嬉しかったこと
思った以上に使って貰えてる
そもそもがニッチな機能で他人が使うことを想定していなかったので、少しでも反応があると嬉しかったです。...と言っても週に100-200ダウンロードくらいですが。
英語でのやりとりが楽しい
自分の拙い英語でも通じるのが楽しいです。意外と海外の人も適当な英語でやり取りしてるんだなーと感じます。
「Thanks!」「Good!」「Cool!」と言われるとテンションが上がります。
Pull Requestを貰えると嬉しい
Issueで提案や質問をしてくれる人は多いですが、PRを送ってくれる人は本当に一握りです。READMEのTypoの修正などの軽微なものから機能追加や修正の重たいものもありますが、どれも本当に有難いです。
今のところはないですが、マージできない機能追加などのPRを貰ったら、有難いですが対応が難しそうです。
Issueに対して他の人が回答してると嬉しい
本当に有難いです。どなたの回答も有難いですが、HBRecorderの開発者でもあるHBiSoftさんが回答していてくれたのはとても嬉しかったです。
まとめ
本当に公開してよかったと思います。
モチベーションが保ち難いという問題はありますが、PRを送っていただけると励みになります。どんな小さな修正でもせっかく送っていただいたPRなので、できる限り世に出していきたいと思っています。
謝辞
PRを送ってくれた皆さん、ありがとうございました。
またHBRecorderを開発したHBiSoftさんはじめ、React Nativeや有用なライブラリ、モジュールを開発していただいた方々ありがとうございます。
他にもIssueで機能提案やバグ、その他相談などreact-native-record-screenを利用してくれている全ての方に感謝します。