
アプリ開発にReact Nativeを使うメリットをスタートアップ目線で書いてみた
弊社では、現在iOS、AndroidアプリをReact Nativeで運営しております。
最近、知人のスタートアップやベンチャーの方からReact Nativeってどうなの?みたいなことを聞かれることが多くなってきたので、曲がりなりにも1年弱くらいReact Nativeで開発してきて思ったことを、書き記したいと思います。
ですので今回は技術的な部分に踏み込みすぎず、あくまでスタートアップの事業開発におけるReact Nativeの有用性についてのみとさせて頂きます。
TL;DR
少数精鋭ならReact Native, 安定性と質を重視するならネイティブ言語を使うのが良いと思います。
目次
・React Nativeとは
・React Nativeを採用してよかったこと
・React Nativeを使わない方がよいパターン
・まとめ
React Nativeとは
React NativeはFacebookが2015年に発表したJavascript製のライブラリです。モバイルアプリをReactライクにクロスプラットフォーム開発ができるものです。
世界ではAirbnb, Skype, UberEATS, Baiduなどの大きなプロダクトに採用されております。Facebook, Instagramでも一部使用されているようです。
今までもJavaScriptでモバイルアプリを開発できる技術はいくつかあったのですが、公式(https://facebook.github.io/react-native/)にあるように
With React Native, you don't build a "mobile web app", an "HTML5 app", or a "hybrid app". You build a real mobile app that's indistinguishable from an app built using Objective-C or Java. React Native uses the same fundamental UI building blocks as regular iOS and Android apps. You just put those building blocks together using JavaScript and React.
他のクロスプラットフォーム開発技術(Cordova等)と違い、アプリ内にWebViewがレンダリングされるのではなく、ネイティブUIを使ってViewが描画されるというのがReact Nativeの大きな特徴になります。
これによりユーザーは普段使っているネイティブで書かれたアプリと使い心地にほぼ差がなくアプリを使うことができます。
より知りたい人は公式サイトや、日本語ですとこちら↓がよくまとまってるかなと
React Nativeを採用してよかったこと
細かいレベルで見ると本当に色々利点があるのですが、ここでは大きく二つに分けて書きたいと思います。
①開発効率の良さ・素早い改善
React Nativeは各OSのネイティブをラップしたComponent・APIを使って書くので基本的にはiOS・Android共に同じコードで動きます。
そのため、各OS間の差をほとんど意識することなくコードを書いていけるのが快適です。
もちろん細かい部分でOS間の対応をしなければならないので全部ではないですがコード共有率としては96,7%くらいは実現できていると思います。
弊社はリリースまで2ヶ月半くらいかかったのですが、React Nativeの学習期間(エンジニアは2名で片方はReactから)、API・管理画面のフロント(React)の作成を含めてこの期間でiOS, Android同時にリリースできたのはReact Nativeだったからというのは大きいです。
開発中もホットリロードやライブリロードという機能を使って、ビルド時間がほぼなしで保存したソースコードを即時反映させながら開発できるのもネイティブ開発ではなかなか嬉しいところです。
また、リリース後はCodePushというサービスを併用すると、ストアへの申請なしでアプリの状態を最新のものに反映することが可能です。
この利点はアプリをアップデートしない癖があるユーザーに対して強制アップデートなしでアプリを最新の状態にしてもらえるということです。
使ってもらうアプリのバージョンが、ユーザーごとにバラつきがある状態だと、APIで破壊的変更がある際に、エンドポイントのバージョニング管理、または返却するファイルの場合分けをしなければならず初期のスタートアップにおいてはダルい実装コストとなってしまいます。
弊社ではCodePushを活用することにより、そういった部分を考えずアプリのバージョン数以上の更新(ほぼ毎日)を全ユーザーに向けて配信していくことができました。
あと、細かい修正とかを次のバージョンアップまで待たずに即反映できていたところも良かったなと思います。
②採用の集中化
創業期のスタートアップといえば、エンジニアの採用は死活問題です。
Web, ネイティブアプリを展開しているスタートアップでエンジニアを集めるとなると必要な役割として
- サーバーサイド(インフラ含む)エンジニア
- Web フロントエンドエンジニア
- iOSエンジニア
- Androidエンジニア
最低でもこの技術を持っているエンジニアがいないといけないのですが、創業期は主に採用担当として動けるのが社長1人の中で、それぞれ集めるというのは非常にコストが高いと思います。
そんな中React Nativeを採用すると
- サーバーサイド(インフラ含む)エンジニア
- React エンジニア
といった風に採用すべきスキルセットが非常に絞られます。
そうすると1人のエンジニアでカバーできる担当範囲が広くなり、結果的に柔軟に業務を割り当てていくことが可能になります。
もちろん、いろんな技術が高いレベルでこなせてかつ1人でものすごい速さで実装するエンジニアも中にはいますし、そういった人に入ってもらうべきではあるのですが、スタートアップの創業期にそのレベルの人を採用するのは非常に難しいです。
React Nativeを使わない方がよいパターン
逆にこれはネイティブ言語で書いた方が良いなという場合もあります。
①UIの挙動やパフォーマンスがサービスの根幹のUXに関わってくる
サービスによっては、初期からアプリのパフォーマンス・操作感がユーザーのUXに大きく関わってくるものもあります。こういったサービスはあまりReact Nativeで書くのをおすすめできないかなあと思います。
というのも、React Nativeは一回JSを経由するため、ネイティブで書かれたアプリのパフォーマンスを超えることはできません。
また、ライブラリ自体も発展途上なので予期せぬバグや挙動を起こすことがちらほらとあります。
②会社全体の開発力が弱い
これは弊社もそうなのですが()、あまりにも技術力がない会社は使うのを避けた方がベターかなと。
僕自身が見てきた感じだと、特に若いスタートアップに多い印象があり、ちょろっとコードを書く勉強をしてサーバーサイドあたりはなんとか書けてきたあたりのエンジニアがいるレベル感のところですね。(決して批判していあるわけではありません。)
弊社はネイティブ言語覚えなくてもJSでどっちも書けちゃうならこっちの方がいいよね〜くらいの理由で採用して、その後①みたいなしんどい思いをしたので以下のツイートくらいのことがそつなくできるのであれば問題ないかなと思います。
まあ要はライブラリ内のコードにまで気を配ろうねというだけの話なので、そんなに技術力の高さを必要としているわけではないです。
あとは、Swift, Kotlinの方が圧倒的にリファレンスが充実していますし、調べつつ実装していくという観点ではこちらの方がもちろんやりやすいです。コミュニティの厚さやライブラリの安定性も全然違います。
まとめ
良いとこ悪いとこどっちもざっくりと書いてみましたが、デメリットに共通するのは技術力があればどちらも解決できるということです。
現に冒頭でも挙げたビッグプロダクトは、React Nativeかネイティブ言語どちらで書かれているのかわからないくらい使いやすいアプリになっています。
大事なのはチームの技術力とスキルセット、そしてプロダクトにおいて技術的に重視しなければならないポイントをしっかりと抑えた上で技術選定をするということでしょうかね(当たり前ですね…)
いずれにせよReact Nativeは素晴らしい技術だと思っているので、少しでもみなさんが興味を持って使ってくれるといいなーと思います。
そんなわけで弊社ではReact Nativeを書きたいエンジニアを募集しております。
お気軽にどうぞ↓
気軽にクリエイターの支援と、記事のオススメができます!