[ソースコード付き!]ReactNativeとFirebaseでメッセンジャーアプリを作ったよ。
弊社では結構前から自社製のメッセンジャーソリューションを展開しているのですが、そもそもの始まりはこのエントリーで分かるように5年前にむしゃくしゃして作ったSpikaというオープンソースのメッセンジャーでした。
その後オープンソース製品をベースにビジネスをなんかうまい事構築できて、売上のまぁそこそこの割合を製品からの売上で建てられるようになりました。ココらへんの話もいつか記事にする予定です。
現在はオープンソースは閉じて、Spika for Business という製品を展開しています。ただ、今年に入って競合がめちゃくちゃ増えて売上は落ちまくりで、まぁどしたもんだろと思っている感じです。。
もう殆どのソーシャル系のアプリにチャット機能ってあるんですが、今の所の選択肢は
・SaaS形式のSDK (無料〜、カスタマイズ不可)
・自前で作る (iOS/Android/バックエンドで、まぁ諸々300万円はかかる&サーバー管理費用)
の2択で、なんかちょうどいい感じの真ん中がありません。弊社のビジネスモデルはソースコード売り切りで、どっちかと言うと自前形式なのですが、 1から作らなくて良い分コストダウンが可能です。まぁそれでもiOS/Android/NodeJS知ってる人が居て、AWSでもなんでもいいのですがサーバーを構築する必要が出てきます。
もっと簡単に出来ないものかと色々試していたのですが、ReactNativeとFirebaseが一番良さそうって事になって実際に作ってみました。 弊社みたいな零細企業で研究開発なんてコストを掛けられないので、自分のプライベートの時間でほとんど作りました。
と言う大義面分があって頑張ったアピールしちゃったけど、ぶっちゃけ好きだからやっただけです。 本当にReactというかReactとReduxの組み合わせって好き過ぎてドキドキしてくるんですが、昔好きだったPHPのフレームワークへの愛に似てる気がしますね。 Ubuntuのデスクトップが好きだった時もそういう感じでしたね、どうでもいいけど。
長々と書いた上記は全部後付っすね。
というわけでホイッと
テストコードとか書いてないし、まぁDisられるんだろうな。。。 なんかブラック企業とかコメント欄で言われてたし。。 まぁいいんだけどね。好きなだけDisってくれ
というか、建設的な意見を言ってくれる人はIssueに英語でコメントお願いします。
RNとFirebaseの組み合わせについて
家族が寝てからの2,3時間毎日やって1ヶ月半くらいですかね。ざっくりで100時間位かかった気がします。いやぁいいですよ、ますますReact愛が深まりました。Firebaseも必要最小限なものを超簡単に使える形で利用できるのでサクサク進みます。最初はLambdaをベースにAWSって考えてたんだけど、結構複雑で途中で折れました。仕事だったらやるけど、シンプルなものを作るには合わないかなー。AWSとFirebaseを比較すること自体間違っているんだけど、とりあえずメッセンジャーに必要なものはFirebaseだけでもどうにかなりそうです。
利用しているReactのライブラリは
ちょっと癖があるけど便利なUI集です。
Firebaseのアプリ版のRN用のラッパーですね。RNでFirebase使うなら必須だと思います。 ライブラリ自体のバグとか今の所ないし、大体の機能が今のところ使えてる
チャットのUIのみのライブラリ。これだけで2週間は開発工数を減らせた気がする。
タブからスタック型のナビゲーションまで全部面倒見てくれます。ナビゲーションはReduxとは独立して動かしたくて それがちゃんと出来たから更に好きになりました。
がっつりReactNativeを使ってみて気になった所
序盤のよくわからないままやってる時が辛い
CRNAとかExpoとかの関係性がわかってなくて、とりあえず動いているけどなんかよくわからない時期が結構辛かった気がします。 ちょっとしたことでググりまくって2,3日たったとか。まぁなんでも最初はそうっちゃそうですが。。 ReactとReduxとかはWebで結構やってるので、Javascript周りもあやふやな知識の人がやると大分辛い気がする。
XcodeとAndroidStudioを結構開く
ハイブリッドと言いつつも、iOSとAndroidの基本的な知識がないと辛い。 例えば、"react-native link" というコマンドがあるのですが、これがいつも使えなくて、Redditにクソ投稿する位頭にきました で返信をみると、めんどくさいですが手動でリンクしたほうが良いという結論に致しました。
iOSだけで実装を進めちゃうとAndroidで実行した時に死ぬ
デバッグは常に二つのデバイスでチェックしないとすげー巻き戻しをするリスクがありそうです。
このくらいかなぁ。まぁ一通り山を超えたらサクサク進むようになった気がします。
まとめ
メッセンジャーを立ち上げたい場合って、iOS/Android/NodeJS/サーバー管理のかなり幅広い知識が必要とされるのですが、ReactNativeでマルチプラットフォーム化して、Firebaseでサーバーレス化することで、まぁ知識量的には1/3か1/4位になる気がします。もちろん、経営者視点ではコストも下げる事ができると思います。 すべて1から作る場合はまぁ1000万円くらいの予算は必要だと思います。まだMVPの段階でそんなコストもかけられず、エンジニアも確保できず、歩留まりしてる人ってかなりいると思います。そういう人こそこういう製品を賢く使ってコストダウンして次に繋げるプロダクトが作れるようになったらいいですね。
まだまだ機能的には全然なので、今後ゆっくり開発していく予定です。
将来的には、簡易SNSがさくっと立ち上げられるような製品にしたいですね。昔OpenPNEという製品があって、みんなこぞってコピってマイナーなSNSを立ち上げていたじきがあったのですが、そんな感じで誰でも気軽に自分のソーシャルアプリを作れるようにしたいです。
もし関わりたいという人が居たら気軽に声をかけてください。