はじめに
キッチハイクのエンジニアメンバーでReact Nativeの気になるニュースを持ち寄ってみました!
- はじめに
- React Native Japanコミュニティの1ヶ月
- React Native 0.66 リリースアナウンス
- Shopify の複数アプリ間でのコード再利用について
- Expo 43 beta
- 大きなプロジェクトでTypeScript化を進めるための8つのtips
- NativeBase のご紹介
- rn-css のご紹介
- さいごに
- We're Hiring
技術書典 11に共著で出展しました!キッチハイクアプリの事例も掲載されています。
React Native Japanコミュニティの1ヶ月
- React Native Matsuri 2021が10/02に開催されました!
- キッチハイクCTO shoken0xがJSIソースコードリーディング というタイトルで登壇しました。
- stand.fm での放送
- 10/12 #21 れん氏と話すエンジニアのキャリア
React Native Matsuri 2021のまとめ記事
コメント
「React Native Matsuri, すごく盛り上がりましたね!」
「リアクトネイチュウって考えたの誰なんだろう」
「USメルカリのような大きな会社がReact Nativeを使っているというのはすごく心強く思いました!」
「個人開発の方の発表で、自分たちと同じライブラリを使って素晴らしいアプリを作られていることがとても印象に残りました」
「当日参加できなかった方のために、Youtubeに配信のアーカイブがあります!」
React Native 0.66 リリースアナウンス
公式ブログより
ハイライト
- Androidで親ビューの境界の外にレンダリングされた要素のタップをハンドルする
- Androidにおける新しいBluetoothパーミッション
- Apple Silicon、Xcode 13、iOS 15のサポート強化
- Hermes 0.9.0
- Nightly と Commitly リリース
一番上の「Androidで親ビューの境界の外にレンダリングされた要素のタップをハンドルする」についてはPRにgifが貼ってありました。
before | after |
---|---|
Nightlyリリース
Nightlyリリースは nightly
タグでnpmに公開され、yarn upgrade react-native@nightly
で使用できる。
Commitlyリリース
React NativeはCIで、メインブランチとリリースブランチの各コミット、各PRに対してcommitlies
を作成する。これらのcommitliesはnpmには公開されないが、CircleCIから直接ダウンロードすることができる。
コメント
「Androidの親ビューの件は、iOSでは元々できていたものなので今回で統一されたようです」
「Nightly リリースはFirefoxなどでもありましたね」
「Commitly リリースという概念は新しいですね...!」
「GitHubのReact Nativeリポジトリにある.circleci
ディレクトリに、Docker環境でのテストビルドコマンドが記載されているのでCommitly
リリースを手元でビルドしてみることもできますね」
「CircleCI上で、React Native内のテストアプリrn-tester
が動いているんですね。E2EテストにはDetoxを使っています」
Shopify の複数アプリ間でのコード再利用について
- Shopify は、多くのアプリを React Native で開発している
- 基礎的なコードをモノレポで管理すること、複数アプリでコードを再利用している
- パッケージやリポジトリのメンテナンスコストを削減
- 全パッケージ・リポジトリで React Native のバージョンを統一している
- TypeScript、Jest、ESLintなどの設定をルートレベルに抽出し、パッケージ全体で一貫させている
- CIパイプラインは自動で生成されるので、全てのパッケージで標準化されている
- 自動生成ドキュメントで書き忘れを防ぎ、どんな人でもスムーズに開発できる状態を維持している
コメント
「ひとつのモノレポから多くのアプリでコードを再利用しているということは、モノレポはアプリでありUIフレームワークみたいなものなのですかね」
「開発体験はExpoに近くなるかもですね」
「モノレポをアップグレードする際の影響範囲はかなり大きそう」
Expo 43 beta
- iOS 15サポート開始、iOS11のサポート終了
- iOSにてHermesの実験的サポート(EASビルドなどの一部環境でのみ)
- EASビルド、bare projectではXcode 13が必要になる
- React Native 0.64.2, React 17を使用
expo-payments-stripe
が削除、@stripe/stripe-react-native
を使用するように
コメント
「Androidのビルドでエラーが発生するおそれがあるようなのでその点は注意とのことです」
「プロダクト開発ではExpoを使っていないので今度個人でなにか作ってみようと思います!」
大きなプロジェクトでTypeScript化を進めるための8つのtips
- ハイブリッドJS / TSプロジェクト(徐々にTS化を進める)
- anyを許容する
- 型を再利用できる箇所を探す
- 正規表現やツールを使って一括リファクタリング(記事ではairbnb / ts-migrateが紹介されていた)
- 優先順位付け(Wixのケースだと、ライブラリなのでAPI部分を最優先とした)
- チームにチュートリアルを共有する(Wixでは https://typescript-exercises.github.io/ を使用)
- エラーを正しく読み取れるようになる (階層の深いエラーだとテキストがIDE/ターミナルに圧縮され読めなくなるケースがあるため)
- 過度なanyの使用に注意する
typescript-exercises.github.io
コメント
「typescript-exercisesはとても面白いですね!こういうゲーム感覚で学べるのはいいなあ」
「7番はとてもよくわかります...エラーの解読スキルは力を入れるべきってことですね」
「記事にはTypeScriptの公式ドキュメントのUnderstanding Errors
を読めと書いてありました」
「アプリ側にTSを導入した際も、いったんanyを許容して導入した過去がありますね。今後はanyをどんどん減らしていきたい!」
NativeBase のご紹介
- NativeBase はアンドロイド、iOS、ウェブで一貫したデザインシステムを構築するための、モバイルファーストでアクセスしやすいコンポーネントライブラリ
コメント
「NativeBase, 色のグラデーションが変数化されているのはすごく使いやすそうですね!」
「Kitchen Sink
というNativeBaseのデモアプリがExpoで公開されているようです」
rn-css のご紹介
- styled-componentsの拡張ライブラリ
- styled-componentsで不足している機能 (メディアクエリ、px指定など) を補うことができる
- React Native Web と React Native で共通の CSS を記述できる
コメント
「React NativeとReact Native Webの両方で開発しているプロジェクトにはかなり良さそうですね!」
「CSSから入った人にもとっつきやすいかもしれないです」
さいごに
これからも社内で持ち寄った技術ネタを共有します!
We're Hiring
キッチハイクでは、React Native アプリエンジニアを募集中です!