KitchHike Tech Blog

KitchHike Product, Design and Engineering Teams

RN Features 2021年6月号 - React Native Matsuri 開催日決定, React 18 Alpha, Shopify が React Native アプリをどのように書いているか

はじめに

キッチハイクのエンジニアメンバーでReact Nativeの気になるニュースを持ち寄ってみました!

React Native Japanコミュニティの1ヶ月

reactnative-matsuri.com

コメント

「とうとう React Native Matsuri の日程が決まりましたね!楽しみです」
「Meetupの参加者も200人以上ということですごいですね」
「運営チームの熱量や、前回のハンズオンも引き金になったのかと」

Coinbase の React Native 記事 2本

1記事目 : Announcing Coinbase’s successful transition to React Native

blog.coinbase.com

  • 世界中で5600万人以上のユーザーに利用されているアプリ
  • 2018–12〜2021–01の期間で提案から移行までを実行している
  • エンジニアが最小限のコンテキスト切り替えでウェブとモバイルの両方のアプリに機能を提供し、その結果得られた効果をアプリの品質に再投資できる世界を目指している
  • iOSのアイデアから最終的なロールアウトまで、2年間かけて段階的に調査し、実験し、実行した

2記事目 : Coinbase’s animated TabBar in React Native

  • Coinbase では、インタラクションを可能な限り完璧に近づけるために多くの時間を費やしている
  • ネイティブから React Native への移行で重要なことは、品質基準を維持するだけでなく、引き上げること

blog.coinbase.com

コメント

「Coinbaseでは、React Native導入の検討にとても力をかけたようで、一つ目の記事は主にそのことが書かれている」
「『品質基準を維持するだけでなく、引き上げること』というのは背筋が伸びますね」
「React Nativeという技術選定は一般的に工数削減として見られがちですが、同じ時間をつかってよりアプリの体験を磨き上げる道をとれるのが素晴らしい」

stand.fmアプリのパフォーマンス改善話「推測するな、計測せよ」

React Native Japanでも活動されている和田さんの記事。

note.com

コメント

「React Devtools おすすめの設定がとても有用な情報!」
「ライブ配信の負荷を擬似的に再現するための社内ツールがあるんですね...!」
「パフォーマンス改善は地道に確実に行う必要があるので、こういった一つ一つ丁寧に説明してくれる記事はとてもありがたいです」

React 18 Alpha

www.youtube.com

目玉は以下の3つ

Automatic Batching

  • ReactではClickEventなどの中で複数の状態更新がある場合、再レンダリング回数を1回にするなどのパフォーマンス対応をしていたが、これまではReactのイベントハンドラにおいてのみ適用されていた
  • 18以降、PromiseやsetTimeout等のイベントにおいてもバッチが自動適用される
  • 不要なレンダリングのさらなる軽減によるパフォーマンス向上に期待:rocket:

Transitions

  • 新たに追加された startTransition APIを用いることで、ステート更新を「トランジション」として扱い、反映優先度を従来よりコントローラブルなものにすることを可能にしている

    to tell React which updates are urgent, and which are not.

Suspense & Streaming HTML, Selective Hydration

  • Suspense 機能が従来のSSRの課題にアプローチできるよう強化された
  • これまでは、データ取得に引きずられて関係ない部分の SSR が遅延してしまう課題があった
  • 18以降は、<Suspense>にラップされたコンポーネントが先にローディング中に表示するコンテンツを出力するため、HTMLの生成をデータ取得が邪魔しないようにできる
  • また、Hydration(雑にいうとDOMの再レンダリングをスキップし再利用できる機能)を行うのに、ページ全体ではなく<Suspense>外さえクライアント側でレンダリングできればOKという仕様になるよう

他にも多くのBreaking Changesがあるので、公式やuhyoさんの記事を参考にしてみると良さそう

zenn.dev

コメント

「これらの新しい機能はどんどんキャッチアップしていきたいですね!」
「前回のReact 17が今後のバージョンアップをしやすくするための更新だったのもあり、バージョンアップ自体はすぐに追いつけそう」
「キッチハイクは17.0.0だったので、今度17.0.2(最新)に上げておきます!」

React Native 0.64.2 Release

github.com

  • 現在キッチハイクで0.64へのアップグレード中
  • 0.64.1 ではAndroid で Picker をタップすると、部分によってはクラッシュする不具合があった
  • 0.64.2 で改善されていたので、同様の不具合があった方は参考にしてください

コメント

「先行してアップグレードをすると、こういった不具合にあたることがあって知見になりますね!」
「確か、JavaのUIManager周りの不具合だった記憶。今回で例外処理が入った」
「これはJestでは拾えない不具合ですね...E2Eや手動での確認が大事だと思いました」

直近のiOS開発の動向

App Storeのレビューガイドラインアップデート

2021年6月7日に更新された

developer.apple.com

5.1.1(v): Apps supporting account creation must also offer account deletion.

https://developer.apple.com/app-store/review/guidelines/#legal (v) Account Sign-In: If your app doesn’t include significant account-based features, let people use it without a login. If your app supports account creation, you must also offer account deletion within the app.

アカウント新規作成機能を提供している場合は、アカウント削除機能も提供する必要がある、とのこと

コメント

「この変更は、これからのレビューに影響してくる可能性大ですね」
「Sign in with Appleや、最近のプライバシー保護強化の流れがあるのでしょうね」
「Appleだとメールについてもプライバシーに関する機能追加がありましたね。」

iOS 15 注目の新機能

www.apple.com

  • SharePlay
    • FaceTimeで友人とつながりながら体験を共有できるようになる
    • 対象サービスは Disney+、ESPN+、HBO Max、Hulu、MasterClass、Paramount+、Pluto TV、TikTok、Twitchなど
  • 集中を妨げない通知体験
    • 「集中モード」
    • 「通知要約」機能
  • Live Text
    • 画像の中のテキストを認識し、それに応じた操作ができる
    • 例 : クレジットカードを写真で撮ると、番号が入力される
  • Safariの画面下部にタブバーが出現 (画面下にバーを置いているアプリはつらいのでは...)

コメント

「Safariのタブバーは気になりますね...レイアウト変更が必要になるのか」
「WebView だとどうなるんでしょうね?」
「Live Textについては、機械学習の進歩やM1チップの力が生かされてきたのでしょうね」
「Androidエンジニアからは、「Googleでは数年前からできてたけどね」という声を聞きました😂」
「Safariのタブグループも同じですね!」

Apple社によるXcode Cloudの発表についてBitriseが考えること

blog.bitrise.io

  • AppleからクラウドベースのCI/CDサービス, Xcode Cloudが発表された
  • それに対して競合になるであろうBitriseがブログを公開
  • 「競争が不足していましたが、私たちは今回の発表により新たな競争が改善を生むことを確信しています」とのこと
  • これからのCI/CD業界を見据えつつ負けない強い意志を感じるコメント
  • Xcode CloudにはBitriseが現在サポートしていない機能がありつつ、Xcode CloudはiOS専門なので差別化はできそう
  • Xcode Cloudの機能としては、データの暗号化、IDEの統合、PRのインラインコメント、追加のテスト機能など

コメント

「WWDC21 で Xcode Cloud の動画を観たのですが、Xcode上で操作ができるのがウリでした」
「他の記事だと、アプリのビルドをクラウド内で自動で実行できるようになったり、並列テストや外部のベータ版テスターへの配信もできると書いてあった」
「正直、GitHub Actionsなどでもできることが多いのですが、Xcode上ですべて完結するのはiOS開発者にとっては大きなメリットですね!」
「Provisioning Profileなど証明書周りの扱いが簡単になることを期待」
「価格は未発表ですが、気になりますね」
「ベータ版の申し込みができるようなので、気になる人は申し込んでおきましょう」

developer.apple.com

Shopify が React Native アプリをどのように書いているか (2021)

shopify.engineering

  • Shopify はrestyle というUI ライブラリやPolaris というデザインシステムを公開している
  • Shopify はKotlin Multiplatform を利用している
    • iOS, Android間でコードを共有できる
  • Shopify はCI サービスのBuildkite を利用している

buildkite.com

github.com

github.com

コメント

「Kotlin Multiplatform, だんだん見る機会が増えてきた印象です」
「ソースコードが公開されていて、デザインシステムの構築方法について知りたいときに参考にさせてもらえると思いました」
「他だとSalesforceAtlassianGitHubなどがデザインシステムを公開してますね」
「Buildkite, 知らなかったのですがBasecampやDiscordなども使っているんですね」

Ui Kitten のご紹介

akveo.github.io

  • Ui Kitten は Eva Design System の仕様に基づいたカスタマイズ可能な React Native UI ライブラリ
  • 30以上のUIコンポーネント、2つのビジュアルテーマ、その他のサポートモジュールを搭載している
  • Ui Kitten は、アプリケーションをリロードせずにランタイムでテーマを変更できる

Eva Design System とは

  • Akveo社が公開しているUX/UIデザイン

eva.design

www.akveo.com

コメント

「リロードが不要なのはすごいね。テーマ変更がJS上で完結しているということかな?」
「Akveo社はアメリカとベラルーシにオフィスがあるようですね」

React Native ライブラリの紹介

react-native-shader

github.com

  • React Nativeコミュニティで、Youtubeや画像ライブラリ周りで活躍している @wcandillon さんが開発したライブラリ
  • 使い方しか書いていなくて、どんなライブラリなのか分からずサンプルアプリを作ってみた
  • 色の移り変わりがとても綺麗で、みていて気持ちが和んだ
  • 使いどころが気になっている

f:id:yamataku3831:20210616191053g:plain

コメント

「グラデーションの移り変わりが綺麗ですね!」
「確かにREADMEに画像がないね、この画像をコミットしてあげるといいかも?」
「React Nativeでゲームを作成するときに使えるかもですね」

react-native-swipe-list-view

github.com

cpoint-lab.co.jp

  • iOS でよく見る、一覧のリストアイテムを右や左にスワイプすることで、削除ボタンなどを表示する機能を実装できるライブラリ
  • React Native の FlatList とほぼ同じ感じで使用することが可能
  • Actions (https://github.com/jemise111/react-native-swipe-list-view/blob/master/docs/actions.md) を使うと、「右または左のスワイプ量が設定値に達したら、指定した関数を実行する」ということもできる
    • iOS の Gmail で見られる動き

コメント

「このライブラリ使ったことがあるのですが、すごい使いやすかったです。スターも多くて安心ですね」
「GIFの説明がとても丁寧で、色々な機能が紹介されていますね!」

キッチハイクのアプリ開発最前線

アプリ申請のGitHub Actions化

  • これまでアプリ申請は、オフィスのiMacをビルドマシンとして使用していた
  • GitHub Actions + Fastlaneで、GitHub上の仮想環境でアプリをビルドし AppStore Connect へのアップロードができた
  • 証明書関連でハマったのですが、後日記事化して知見共有しようと思います。

コメント

「コロナ禍で出社をするのも大変なので、リモートでリリース申請ができるのはいいですね!」 「ほかにも、二要素認証の突破でハマりました。この記事が参考になりました!」

zenn.dev

さいごに

これからも社内で持ち寄った技術ネタを共有します!

We're Hiring

キッチハイクでは、React Native アプリエンジニアを募集中です!

www.wantedly.com www.wantedly.com www.wantedly.com