最近自社のアプリ(iOS,Swift/Android, Kotlin)をReactNative化しているので使ってみた雑感など。
導入のきっかけ
自社アプリのiOS(Swift)とAndroid(Kotlin)は私が一人で作って運用しています。
なんで一人かというと社内でアプリをかけるのは私しかいないからです。
そんなわけで、新しい機能の追加や修正などは2つのプロジェクトを触らなければならなくて非常に手間がかかるんですよ。
そんなわけでちょっと開発が落ち着いたのを見計らって巷で話題(?)のReactNativeを調べ始めたのがきっかけです。
ちなみにJavascriptはほぼ初心者です。
調査段階でのメリット
- iOS, Androidでコードの共通化ができる(100%ではない)
- iOS, Androidのネイティブコードを呼び出すことができる(既存のコードを再利用できる?)
- RectをベースにしたJavascriptとJSXスタイル
- レイアウトがHTML, CSSスタイルで記述でき、Flexboxスタイルで画面対応ができる
- HotReload, LiveReload機能がありコードの変更が即時反映される(XcodeやAndroidStudioのビルド待ちが無い)
- Javascriptが勉強したいんじゃ(個人の気持ちです
調査段階でのデメリット
- まだベータ版
- 情報が少ない
- 日本での人気をあまり感じない
- JavascriptもReactも初めて(個人の問題です
実際に触ってみて
書き始めてまだ4日くらいですが、基本的な部分は一通り試しました。
調査段階のメリットデメリットとの差分を少し書きます。
調査段階でのメリットについて
iOS, Androidでコードの共通化ができる(100%ではない)
かなりの部分共通化出来ました。 今のところそこまでネイティブでViewを分ける必要は無いのでネイティブのダイアログを読んだりする程度に留めてます。
iOS, Androidのネイティブコードを呼び出すことができる
出来ました。 公式のリファレンスはObj-cとJavaでしたが、SwiftとKotlinでも問題無く呼ぶことが出来ました。 ただXcodeがObj-c <-> Siwftのブリッジの設定を上手くやってくれなくてちょっとハマりました。
RectをベースにしたJavascriptとJSXスタイル。レイアウトがHTML, CSSスタイルで記述でき、Flexboxスタイルで画面対応ができる
これはめっちゃ良かったです。 AndroidStudioのXmlエディタがすごく優秀なのにくらべ、XcodeのStoryboardはめっちゃ使いづらくSnapKitを使ってコードでView書いてたのですがビルドしないと見れないし色々と辛みがありました。 HTML、CSSの知識があれば問題無く書ける感じで非常に良かったです。
HotReload, LiveReload機能がありコードの変更が即時反映される(XcodeやAndroidStudioのビルド待ちが無い)
これもいいですね。実機でも動くのでデバッグがかなり楽です。 AndroidとiOS2つも起動するとLiveReloadは1つだけしか出来ませんが、HotReloadはどちらも使えるのでデバッグが同時にできるのも非常に良かったです。 ただ、まだ結構バグが多くて上手く行かないことも多かったです。
Javascriptが勉強したいんじゃ(個人の気持ちです
勉強になりました。 ReactNativeはES6で書けるのでそっちの勉強にはなります。
ちなみに本を2冊読んでからはじめました。
調査段階のデメリットについて
まだベータ版
ですね。まだまだバグが多いです。 ハマった時になかなか正解に行き着かないのでそういう時間は結構かかりました。 結構デバッグが大変で、Chromeでデバッグログの確認とかできるのですがこれをするとめちゃくちゃ重くなります。 iOSはChrome使ってますが、Androidはadb logcat | grep Reactで見てます。
情報が少ない
公式リファレンス通りに動かないこともあります。
日本での人気をあまり感じない
TweetDeckでKotlinとReactNative垂れ流してるけどKotlinの日本人ツイートめっちゃ多いのにReactNativeは超少ない。 ちょいちょいブログとかで記事見るけどあんまり好印象の記事見ない…
JavascriptもReactも初めて(個人の問題です
大変でした。 とは言っても2日も書いていればなれます。 設計はFluxを使ってるんですが、これもよくわからなくて azuさんの神資料をもとに実装したらなんか理解した感じになったのでよかったです(?)
感想
全然まとまりないけど雑記だからね!! 両OSを1ソースで書けるけど、今はそこまで開発速度出てないのでネイティブの方が早そう… まぁでも上手くやれば運用は楽かもしれない。 ビルド待ちが無い分開発のストレスは少ない。 以前はてブで話題だった「もうNativeOnly開発者はいらないのかもしれない」というタイトルの記事については、うーん触った感じは真逆な印象。 ぶっちゃけReactNative使ってもちゃんとしたアプリ作りたいならUIKit, AndroidSDKの知識は必須。あとネイティブのAPIも普通に使えなきゃいけないからSwift, Obj-c, Java, Kotlinの知識とかも必要になってくる。 要はチーム編成の問題で、iOSアプリ, Androidアプリ担当がちゃんといるんならそれで済むし、ReactNativeでロジック部分共通化したいってなればiOSネイティブ部分担当とAndroidネイティブ部分担当とReactNativeロジック担当みたいな構成になるのかな(適当
まぁ銀の弾丸は無いってことで。
(ソウルイーター超人気出たけどコイツ出なかったなぁ…)