ReactNativeに入門して感じたこと

こんにちは。モバイルエンジニアの@m-sugawaraです。

弊社ではReact Nativeを使って作られたアプリがいくつかあります。 今回はReact Nativeほぼ未経験で入社した私が、三ヶ月ぐらいReact Nativeの開発に参加して感じたことをつらつらと書きます。

簡単に私のバックグラウンドを説明しますと、Swift、Java/Kotlinを使ったiOS/Androidのアプリの経験はありましたが、React NativeやReact/Redux/TypeScriptについてはほとんど未経験でした。 すでに業務でReact Nativeをバリバリ使っておられるような方には当たり前の内容になるかもしれませんが、これから取り組もうと考えている方などに少しでも参考になれば嬉しいです。

なお、導入の背景や技術的な説明に関してはこちらこちらに詳しく書かれているので、ご興味のある方はぜひ参照していただければと思います。

React Nativeのつらい点

エラーの原因を分析するのが難しい

React Nativeのアプリ開発に参加して、一番最初に感じたのはこの点です。バグ修正などを行う際にJavaScriptレイヤーで起きているのか、Nativeレイヤーで起きているのかの切り分けをする必要があります。また、iOSAndroidのどちらかでしか発生しない不具合があるなど、アプリとWebフロントエンドの総合的な知識が求められるように感じました。
直近では、最新のAndroid端末においてScrollViewの慣性スクロールが逆になる現象が発生しており、これを修正するために結局Android Nativeのソースコードを修正しなければならない、というようなことも発生していました。

Nativeエンジニアにとっては学習コストが高い

私がNativeエンジニアなので主観的な話になりますが、アプリを構成する要素がTypeScript, React+Redux, レイアウトはJSXなどフロント寄りの知識が開発の際には求められます。
普段SwiftやKotlinに慣れ親しんでいるNativeエンジニアにとって、想定通りに開発が進まず、もどかしい気持ちになることもありました。

アップデートは職人技が必要

React Nativeは定期的に大規模なアップデートが行われるのですが、手元の環境をアップデートするのが容易ではないように感じます。
また弊社ではGitHub上の各リポジトリごとにCI環境の整備もしっかり行われているのですが、アップデートの際にCI上の環境でのみ失敗してしまい、解決に困るというような出来事もありました。
この経験から、運用する上での保守性は通常のNative開発に比べるとかなり難易度が高いように思います。

React Nativeの良い点

Webエンジニアにも協力してもらえる

弊社に多くの優秀なWebエンジニアが在籍しており、コードベースがTypeScript、ReactであるReact Nativeの場合はコードレビューしてもらえる機会があったりします。
逆に一部のWebエンジニアの方からはPull Requestが送られてくるなど、WebとNativeの垣根を越えて一緒に開発できるのはReact Nativeならではの体験だと思います。
もし、会社にNativeエンジニアがあまりいないのであれば、Webエンジニアからの協力が得られるReact Nativeは十分選択肢になり得ると思います。
実際、弊社でもReact Native導入の際にはそのような背景があったと聞いています。

TypeScriptとReact+Reduxの知見が得られる

これは先程述べた学習コストが高いこととつながっているのですが、フロントエンドのコードに慣れることができます。個人的な話をすると、フロントエンドのソースコードを読むことにあまり抵抗がなくなりました。
さらに弊社のReact Nativeアプリは偉大な先人達の貢献により、全体的なアーキテクチャがReact+ReduxおよびTypeScriptで統一されているため、修正などでソースコードを読んでいると、様々な作法を学ぶことができます。

デバッグが捗る

これはReact Nativeに限らず、Flutterなどでもそうですが、修正した内容を一瞬で更新して確認することができるのはレイアウト調整においてとても便利です。
また、React Native DebuggerをつかうことでViewの構成やAPIのレスポンスなどが容易に確認できるのも、React Nativeの良いところだと思います。

まとめ

という感じでReact Nativeの良い点とつらい点をあげましたが、弊社ではちょうど現在はNativeエンジニアが増えてきたフェーズであり、React Nativeアプリを今後も続けるのかについては相談中だったりします。
このように弊社では、すでに完成しているアプリでも、今後の開発速度等に影響が出るようであれば作り直すかそのままで運用するかを議論して決めることができるぐらいにはエンジニアに裁量があります。
そんな裁量のある環境で一緒に開発していきたいエンジニアを募集しています。