山本ゆうごブログ

山本ゆうごの仕事メモ

React Nativeがレガシー呼ばわれする時点でスマホアプリ開発はしんどい

quipper.hatenablog.com

React Native がレガシー呼ばわれして、それを排除できたという成功談。

Swiftで作り直しましたという話でそれはそれでいいのだが、React Nativeのマイナスポイントがいまいち。

React Native に詳しいエンジニアが退職した

って理由は、「しらん」としか言いようがない。

React Native を強みとするエンジニアは転職市場に少なく、新規採用が難しい

ってマイナスポイントも、そもそも学習の敷居が低いというのがReact系の強みのはず。1年もあればベテランを育成できるだろうし、スマホネイティブに関しては常に新しい技術が出てくるだろうから、学習・育成の仕組みがないと組織自体がレガシーになる。

『React Nativeに不慣れな人だけが残ってしまって、これからReact Nativeに強い組織を作るだけの熱意もなかった。』という理由ならすごくわかるし、それならそうと正直に言ってほしい。別に恥じることじゃぁない。

そして何より、React Nativeのswiftに対する優位性は、Andoridアプリも作れるということ。ところがこのチームは「iOS開発チーム」。Androidも一緒にリリースするということがスコープ外になってる。そりゃぁ評価低くなる。

心配されていた不具合も致命的なものはほとんどなく、現在まで安定して稼働しています

とあるが、あれ?Andoridはどうなったの?と気になってマーケットをみてみた。

iOSのレビューは3.9でそこそこ評判がいいが、Androidのレビューは3で低評価のコメントが目につく。「React Nativeやめました!Andoridの開発はぞんざいになりますがそれはスコープ外です!がんばれ!Andoridチーム」ということならわかる。これも恥ずべきことではないから正直に言ってほしい。

実際問題、iOSとAndroidをまたがって作れるツールっていっぱいあるけど、Unity以外はほとんど成功していない。有名どころでは、CocoaがXamarinで同じコードで作られていたけど、iOSとAndoridで「似ているけど意味の異なる定数」がバグの元となっていた(ただCocoaの失敗の本質はテスト不可能なデータモデリングをしてしまったというところが敗因でXamarinのせいじゃない)。

どうせUIガイドラインも別なんだから個別に作るのがいいんだけど、2つのチームをうまく連携させないといけない。さらにほとんどのサービスはサーバー側でデータを読み書きしている。サーバーサイドチームも入れると3チームが同期を取る必要がある。データモデリングをガチガチに設計した上で、「つよつよiOSエンジニア」と「つよつよAndoirdエンジニア」の両方を連れてきて、「腕前があるのは分かっていますがデータ設計はすでにありますので、あなた方はJSON色付職人として活躍してください」とガバナンスを効かせるというのも手。

ということでスマホアプリ開発のしんどさを挙げる。

  • iOSとAndoridの両方作らないといけない
  • 一方でつよつよスマホエンジニアはiOSのことしか眼中にない
  • 2つまたがって作れるマルチOSな開発ツールはあるにはある
  • ただマルチOSの開発ツールは
    • 出ては消えする
    • 各OSのUIガイドライン通りにはならない
    • Unity以外はどれもマイナー

極めつけは、こんだけスマホアプリのエンジニアがフロントエンド側の言語について論じているけど、どのスマホアプリも結構WebViewを使ってる。そのWebViewがHTMLレンダリングする際のフレームワークは何を選ぶ?ということで同じ話が出てくる。