新規事業でReact Nativeを選択して、良かったこと・辛かったこと 3選
はじめに
こんにちは!
犬専用の音楽アプリ オトとりっぷでエンジニアしています、足立です!
この記事では、React Nativeを選択して、良かったこと
と辛かったこと
を紹介したいと思います。
良かったこと 3選
iOSとAndroidを同時に開発できる
React Nativeといえば、クロスプラットフォーム開発です。
Reactの知識があればiOSとAndroidの両方で最大90%同じコードを使用することも可能です。
厳密に全てのデザインを共通化することは叶いませんが、それでも開発サイクル短縮に大いに寄与してくれます。
「さあ新規事業をやろう」という時にOS毎に個別に開発することは現実的ではありません。
またサービスのピポットも日常茶飯事なので、クロスプラットフォーム開発は良かったです。
ただしクロスプラットフォーム開発はReact Nativeだけの強みではなく、近年人気のFlutterでも同様の開発体験が得られると思います。
言語をTypeScriptに統一できる
JavaScriptのエコシステムは非常に強力です。中でもTypeScriptは、非常に使いやすい言語です。
どの言語を選択するか?はそのままチームの開発速度に直結します。
小規模なチームではAWS Lambdaの使用言語としてNode.jsを選択しているデータもあります。
特に少人数でフロントエンドからバックエンドまで全て管理しなければならないチームにとってメリットが大きいです。
私たちはAWS Lambdaの言語にnode.jsを選択することはありませんでしたが、LPや簡単なWebアプリを作ろうとした際にTypeScriptで開発できることは良かったです。
Reactの知見が活かせる
Nativeレイヤーに関わらないライブラリは、Reactの知識がそのままが流用できます。
例えばFormのライブラリには、React Hook Formがそのまま使えます。
React Nativeの情報を見つけるのは少々難しくても、Reactは様々な方が公開してくれています。
これまでも幾度となく先人に助けられてきました。
辛かったこと 3選
3rd partyライブラリを導入しないとまともに動かない
いろいろな記事で叩かれていることだと思います。
「Flutterの方がいい」という意見が声高に叫ばれる理由はこれだと個人的に感じています。
ライブラリ同士の依存関係やメンテナンスがOSSに委ねられていることが、React Native自体のアップデートに追いつくのを非常に困難にします。
最近だと、React NativeはNew Architectureへと移行を開始していますが、移行作業が開始されていない3rd partyライブラリも非常に多い現状です。
ドキュメント整備が未熟
前項の3rd partyライブラリに依存している
と連動しますが、ドキュメントが 少ない or 更新されていない ことがたまにあります。
このこともFlutterと比較される点だと思います。
Flutterは標準ライブラリで可能なことが多岐に渡る上に、そのドキュメントが豊富で、使い方も丁寧に説明されている印象です。
Issueを追いかけて問題解決を図る手法は辛い日々です。
Nativeレイヤーのバグで詰む
iOSやAndroidのNativeを書けないからクロスプラットフォーム開発できるReact Nativeなのに、重大な問題は大体Nativeレイヤーで発生するというのが個人的な感想です。
可能であれば自らNativeコードを書いてPull Request投げてみたいのですが、今の自分の能力ではそれも叶わず、渋々Issueで問題報告するのみ。。。
まとめ
良かったこと
- iOSとAndroidを同時に開発できる
- 言語をTypeScriptに統一できる
- Reactの知見が活かせる
辛かったこと
- 3rd partyライブラリを導入しないとまともに動かない
- Webアプリとコードを統一できない
- Nativeレイヤーのバグで詰む
見渡すと辛かったことの方が強烈ですが、それでもやっぱりReact Nativeが好きです。
最後に
ここまで読んでいただきありがとうございました。
もし犬専用の音楽アプリに興味を持っていただけたら、ぜひダウンロードしてみてください!
Discussion