【React Native】スマホアプリ開発初心者たちが、プライベートでSNSアプリをつくった
はじめに
自己紹介
2019年、大手SIer企業でソフトウェアエンジニアとしてキャリアをスタートしました。複数のWebアプリケーションのプロトタイプ開発に携わり、設計から実装まで幅広く経験を積みました。2024年には医療系ITスタートアップに転職し、現在はフルスタックに開発を行っています。
SNSアプリ開発を始めたきっかけ
発案者(非エンジニア)に、フィットネス特化のSNSアプリが作りたいと声をかけてもらったのがきっかけです。かねてからスマホアプリを作ってみたいなと思っていたので、参画しました。
SNSアプリの概要
コンセプト
フィットネスに特化したSNSアプリです。ユーザーは、自身の運動や食事を投稿し、他のユーザーと交流することができます。X(旧Twitter)のフィットネス特化版のようなものです。
機能一覧
機能一覧は以下です。よくあるSNSの機能なので、想像しやすいかと思います。
機能名 | 説明 |
---|---|
プロフィール管理 | 自身の名前、プロフィール写真、自己紹介、属性、好みを設定する |
投稿 | 投稿を行う。ラベルを貼ったり、画像を添付できる。 |
検索 | 他のユーザーのポストを検索する |
コメント | ポストに対してコメントをする |
リアクション | ポストに対して絵文字によるリアクションをする。SlackやDiscordの絵文字機能のようなもの |
フォロー | 他のユーザーを登録し、その投稿を追えるようにする |
DM | 他のユーザーと1対1のダイレクトメッセージをやりとりする |
通知 | 他のユーザーからコメントやフォローをされたとき、ユーザーに通知する機能。スマホアプリ内のpull通知であり、push通知は行わない。 |
完成したアプリ
完成したアプリのスクリーンショットは以下です。いずれもAndroid版です。
開発
開発体制
開発メンバーは私を含め3人。エンジニア歴4~6年のエンジニアです。開始時点では、全員Webアプリは作ったことあるが、スマホアプリは作ったことは無かったです。全員スマホアプリ開発素人です。
私はまずはバックエンドを担当し、徐々にスマホアプリ側の実装も行いました。
開発期間
7か月です。全員本業があるので、本業外の時間で開発作業を行いました。本業の忙しさ、モチベーション、人数の増減により濃淡はありました。
技術スタック
技術スタックとその選定理由は、以下の表の通りです。
カテゴリ | 使用技術 | 選定理由 |
---|---|---|
スマホアプリ(iOS/Android) | React Native, TypeScript | iOS, Android両方対応したい。メンバー全員Reactがわかる |
APIサーバ | FastAPI, Python | 実装者が慣れていた。openapiの自動生成が可能。 |
RDB | PostgreSQL | 実装者が慣れていた。 |
画像用ストレージ | Cloud Storage for Firebase | 簡単。無料枠あり。 |
認証基盤 | Firebase Authentication | 簡単。Permission,Role等の機能は必要ない。 |
インフラ | Render | AWS、Google Cloud等より圧倒的に安い |
アプリケーションの構成図
構成図は以下の通りです。
開発プラットフォーム(Expo)
動作確認・ビルドの際には、React Native アプリを開発するための便利機能を集めたプラットフォームである、Expoを使用しました。
今回の開発では、Expoの以下の機能を使用しましたが、開発体験がとてもよかったです。
- Expo Goアプリを用いることで、非エンジニアが動作確認しやすかった
- EAS Buildを用いることで、ビルドが簡単。無料版では時間がかかるが、今回はこれで十分
- EAS Submitを用いることで、Apple StoreとGoogle Play Storeへの送信が簡単。無料版では時間はかかる
テストリリース
テスト版アプリの完成後、iOSとAndroidでテストリリースし、一般のユーザーに使ってもらいました。この際、iOSではTestFlightを、Androidではクローズドテストをそれぞれ利用しました。
ふりかえり
よかったこと
-
スマホアプリ開発初心者でもリリースまで到達できた
- React NativeやExpoを活用したおかげで、スムーズに開発を進められました。
- React NativeはReactの知識を活かせるため、学習コストが低くて助かりました。
- Expoを使うことで、動作確認、ビルド、ストアへの配信といったプロセスが非常に簡単になり、初心者でも安心して進められました。
-
異なるバックグラウンドを持つ人たちと共同開発
- 本業とは異なる分野の人たちと作業を進める中で、多くの刺激を受けました。
- 仕事の進め方やレビューの書き方、使用するツールなど、普段触れる機会のない新しい知見を得ることができ、非常に貴重な経験となりました。
大変だったこと
-
iOSとAndroid間の差異に対応
- 両OSでの動作確認や差分の吸収が思った以上に手間でした。
- 例として、Androidではキーボードを閉じるボタンがある一方、iOSではないため、キーボード外をタップして閉じる処理を追加する必要がありました。
- 当初Android端末しか持っていなかったため、Androidで確認した後、iPhoneでの動作確認を他の人に依頼していました。しかし、二度手間に加え、デグレードも発生したため、中古のiPhoneを購入して両方の確認を自分で行うようにしました。
- 気付き: 本格運用では、さらに多種多様な機種間のバグが発生するだろうと予想されます。スマホアプリエンジニアが日々抱える苦労を垣間見る良い機会となりました。
- 両OSでの動作確認や差分の吸収が思った以上に手間でした。
-
限られた時間の中での開発
- 平日夜や土日といった本業以外の時間を使って開発を進めたため、時間的な制約が予想以上に厳しかったです。また、モチベーションを維持する難しさも実感しました。
- 対応策: 実装する機能を絞り込むべきだったと感じています。たとえば、コア機能(プロフィール設定、投稿、検索など)に集中し、通知やDMといった付加的な機能は次のフェーズに回す判断が適切だったかもしれません。
おわりに
私にとって、初めてのスマホアプリ開発・プライベートでの開発でしたが、総じて良い経験になりました。技術力や仕事力を磨いて、また挑戦したいです。
Discussion