🐡

React Native定食 Expo抜きで

に公開

会津大学学園祭実行委員会 Advent Calendar 202512/12に出すはずだった記事です。

React Nativeを使用した経緯

今年度の学祭ではLIFF上で表示されるグループ/個人識別用のQRコードを使用して入場処理をしました。
QRコードの読み取りをするためにバーコード/QRコードリーダーがついているFZ-N1という端末を使用し、それ用にReact Nativeで管理用のソフトウェア開発をしていました。

雑なフロー

  1. PCまたはスマホで学祭委員用のツールを開き、QRコードを発行
  2. FZ-N1でそのQRコードを読み込んでスタッフ認証
  3. QRコードの読み込み待機
  4. QRコードが読み込まれたらAPIに送信してAPI側で入場処理
  5. 成功したら成功音+レシートプリンターにイベントで使用するレシートのデータを送信
  6. 失敗したら失敗音を鳴らす
  7. 3に進む(ループ)

Expoが使えない!!

React Nativeを使用する際にExpoは必須とも言えるぐらい重要なものですが、Expoが対応しているAndroidのバージョンは7以上。
それに対して学祭で使用したFZ-N1のAndroidのバージョンは6なのでExpoは使えません...
そんなわけでExpo無しのReact Nativeアプリを作成せざるをえなくなりました。

困ったこと

Expoがあれば、QRコード読み込んですぐにデバッグができたのですが、ExpoがないReact Nativeは不便とかいうレベルではなく、Javaのエラーで苦しんだり、原因がわからないクラッシュだったり、同じ端末で同じことをしている例がないので当然資料もなかったり...とまあ酷かったです。
Expoと今回のを比較するとこんな感じ。

項目 Expo 今回
環境構築 ほとんどの場合はNode.jsで完結 JDK, Android SDK, Gradleをいい感じにしてバージョンを頑張って合わせる
実機テスト Expo GoでQR読むだけ Metroがあったがうまく行かなかったので、毎回ビルドしてinstallする羽目に
設定変更 app.json を書くだけ AndroidManifest.xmlbuild.gradle を直接編集
ライブラリ pnpm dlx expo installしたら勝手にやってくれる Javaのエラーでビルドが落ちることがあるのでpatch-packageでなんとかする
権限管理 設定ファイルに書くだけ Javaコードで許可を求める処理を実装

React Nativeだからjs/tsだけ書ければいいやーではなかった...

助かったこと

React Native上でレシートプリンターの操作をできるパッケージ(Link)が公開されていたので、そこを実装する必要がなくなりました。やったねたえちゃん!
他に助かったこと...?そこになければないですね(絶望)

さいごに

別の記事でも出した通り今年度はやることが多かったため、こんな手間がかかるのは二度とやりたくないです。
まあ来年度も同じ端末使うのでやることになるんですけどね...ははは...
これを読んだ方は、古い端末で試そうとせずに新しめのバージョンのAndroid端末でExpoを使って開発しましょう。

会津大学学園祭実行委員会 テックブログ

Discussion