Slide 1

Slide 1 text

カンムでの React Native の 歴史と現在 Kanmu, Inc. 伊藤 友気 【Kanmu × Nature】React Native Meetup

Slide 2

Slide 2 text

2 伊藤 友気 Kanmu, Inc. @mururu @murururu ⾃⼰紹介

Slide 3

Slide 3 text

3 バンドルカードを作ってます

Slide 4

Slide 4 text

4 歴史 現在の構成 これから 1 2 3 アジェンダ

Slide 5

Slide 5 text

歴史 1

Slide 6

Slide 6 text

6 バンドルカードのはじまり • バンドルカードの前にやっていたプロダクトの反省 から⾃分たちでカードを発⾏するべきだと判断 • 当時の開発チーム • 開発者3⼈(内⼀⼈は兼デザイナー) • 3⼈とも Web の開発経験はあったがネイティブ開 発経験はない

Slide 7

Slide 7 text

7 バンドルカードのはじまり • 2015年12⽉ 開発開始 • 2016年9⽉ iOS版リリース • 2016年12⽉ Android版リリース

Slide 8

Slide 8 text

8 なぜ React Native だったのか • ネイティブ開発経験のない少数の開発者で、素早く アプリをそれなりのクオリティでリリースしたかっ た

Slide 9

Slide 9 text

9 課題① Android 版リリース 開発初期は iOS のみでとりあえず実装してリリース し、Android 版もそこまで⼤きな変更は必要ないと⾒ 込んでいた 実際にはアニメーション系などいくつかクラッシュす る部分の発⽣や、iOS しか対応していないライブラリ なども導⼊してしまっていた プラットフォームによる分岐、機能の変更などによ り、なんとかリリースにこぎつける 後にアプリケーションレベルでのプラットフォームご との分岐は解消 →

Slide 10

Slide 10 text

10 課題② Android 4.4 系対応 もともと Android 4.4 系で原因特定が難しいクラッ シュが発⽣しがちであった Android の 64bit 対応のため React Native 0.60 への アップデートを試みた所、Android 4.4 系でのクラッ シュが爆増し断念 4.4 系のサポート終了を決定 終了までの間 Multiple APK にして 64bit対応版/⾮対応 版を別ブランチで管理 →

Slide 11

Slide 11 text

現在の構成 2

Slide 12

Slide 12 text

12 現在の構成 • React Native, JavaScript, Flow, Redux, Storybook, Firebase など • ⽇常のほとんどの開発が React の世界のエコシステ ムの範囲ですんでいる • Expo は使っていない • リリースサイクルはおよそ週1

Slide 13

Slide 13 text

13 ビルド/リリース周り • 基本的にビルド/リリースはfastlaneで完結させ、CI はBitriseにのせている • lint や Jest でのテストなどは社内の別のプロジェク トと共通で CircleCI 利⽤ • 開発版の社内への配布は DeployGate を利⽤

Slide 14

Slide 14 text

14 ビルド/リリース周り

Slide 15

Slide 15 text

15 API 連携 • JSON Hyper-Schema からAPIクライアントの実装を ⾃動⽣成している • バックエンドのAPIサーバーも同じスキーマからリク エスト/レスポンスの構造体やバリデーション実装を ⾃動⽣成している

Slide 16

Slide 16 text

16 デバッグ • react-native-debugger • react-devtools や redux-devtools 相当の機能 • ネットワークのデバッグ • ネイティブのエレメントの検証など • Flipper に移⾏予定

Slide 17

Slide 17 text

17 Storybook • いわゆるUIコンポーネントカタログ的にはなっておら ず、コンポーネント開発時にコンポーネントのみを確 認するような⽤途で利⽤している • ほぼ全てのコンポーネント/ページをStorybook化して いる • Storyshots で Snapshot testing を⾏っている

Slide 18

Slide 18 text

18 • Sentry • 当初よりエラートラッキングに利⽤ • Firebase Crashlytics • クラッシュレポート • Firebase で記録しているイベント紐付けられる ので便利 エラートラッカー/クラッシュレポート

Slide 19

Slide 19 text

19 • Analytics • ⾏動ログは Firebase Analytics で収集 • react-navigation の遷移イベントをフックにペー ジ遷移のトラッキングなども • Remote Config • 任意のタイミングで表⽰を切り替えたい場合 (ex. アドホックな⽂⾔の変更 • A/B テスト Firebase の他の機能

Slide 20

Slide 20 text

これから 3

Slide 21

Slide 21 text

21 TypeScript 移⾏ • 現状は Flow + JavaScript • そろそろ Flow をサポートしないライブラリも出て きているので、⾝動きが取れなくなる前に TypeScript に移⾏したい • 変換ツールもあるが⼀筋縄では⾏かない感じがして いるので、泥臭い作業になりそう

Slide 22

Slide 22 text

22 デザイン連携の効率化 • 現状、実装とデザインの⼀致してない部分がある • ⼀貫したUIを素早く効率的に提供できるようにした い • Atomic Design ベースでコンポーネントをデザイ ナーと共に認識を合わせながら整理している

Slide 23

Slide 23 text

まとめ 4

Slide 24

Slide 24 text

24 まとめ • Web の開発者ならば基本的に開発にはすぐ⼊れる • ただしハマったときはネイティブの知識がないとや はりしんどい • バンドルカードは都度ハマりながら進んできました

Slide 25

Slide 25 text

We are hiring!

Slide 26

Slide 26 text

おわり