Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
おわり