DAU最大1万程度のチャットアプリを新規開発〜クローズ(3年程度)まで関わりました。
プラットフォーム:
Android, iOSアプリ
※webは登録等できずチャットの閲覧ができる程度の制限版のみ
担当範囲:
初期 - Node.js-Socket.IOによるサーバー開発(メンバー規模iOS1, Android1, サーバー1)
約半年後 - メンバーの入れ替わりによりAndroid担当、サーバヘルプも兼務(メンバー規模 PM1, iOS1, Android1, サーバー1, QA1)
約1年半後 - メンバーの入れ替わりによりiOS担当(メンバー規模 PM1, iOS2, Android2, サーバー1, QA1)
※その後稼働の足りない部分を補う形で三つの箇所を行ったり来たりしていました
苦労したところ:
・Socket.ioの開発
業務として初めて触ったので、非同期通信のハンドリング、常時接続のサーバーをスケール、restartする仕組みなどが構築に非常に苦労しました
・Androidのパフォーマンスチューニング
トップの情報取得が重く、何に時間がかかっているかの計測やJSONパースの高速化、Sqliteでデータ取得にメインスレッドを使っていたのでスレッド管理修正、重複して取得するデータのキャッシュ化などをし、それまで重いと初回30秒以上かかっていたものを数秒程度まで下げました
・プライバシー管理
全ユーザーに公開されるデータに関して、著作権違反画像などを投稿された場合の取り扱いに対して監視をしたり、個人同士のやりとりで未成年が問題のある画像を送って警察からの捜査依頼が来たりなど、対応の難しいものが多かったことがありました
・通話機能開発
WebRTCでサーバーを介さずP2Pのみで通話機能、生放送機能を作りました
Stunサーバ、シグナリング用Socket.ioサーバ、iOS・Androidのクライアント用ライブラリビルド等が必要だったので全て自分がサンプルで作成しネイティブエンジニアに渡し、API設計、サーバー実装、Androidのコア部分実装を行いました
当初SIPとの比較・検証を行いましたが、NAT超えがデフォルト実装されていたりNode.jsとの相性がいいことなどを踏まえてWebRTCを選択し、当時としては国内でも少ないWebRTCでの通話実装となったと思います