Nativeに移行した2022-08-30僕が日曜開発しているプロジェクトに、自分の家族内で使う家庭内iPhoneアプリがある。そもそもその存在についてブログに書いたことが無かったのだが、もともとはかなり昔にKyashがクレジットカードから送金できなくなった1とき、その機能に頼っていた家庭内のお金のやりとりの移行先として自前で用意したものだ。2020Twitterを遡ってみると、2020年の後半に開発を始めていたらしい。SwiftUIを採用して、PS5で遊びながら作ったようだ。Nativeでフルスクラッチで作り直した。その感想なんかを記しておこうと思う。Nativeの方が優れている!!」みたいな理由ではない。いや、まぁ正直に言うと、SwiftUIの「なぜか構造体のinitで与えるプロパティとmutableメソッドコールで与えるプロパティがあって、その違いはよくわからん」という点について愚痴を言うことはあるけれども、だからSwiftUIは駄目だとか言う気はない。Nativeにしたかというと、1つはいつもの「やってみたかったから」ではあるが、今回は、「業務でReact使っているし圧倒的に慣れているから」である。面白くなくて申し訳ない。しても「アプリの構造をガッツリ作り直したいなぁ」と思ったときに、SwiftUIに慣れてなすぎて「どこでどうやってstateを保持して、どれを反映させて画面を遷移させてるんだっけ?」みたいなのがパっと分からなかったり、BindingとかObservableObjectとか忘れてて、「こんな感じだっけな?」って雰囲気で書いてみても思ったように動かなかったりする。普段から触ってないからしょうがない。フレームワークなんてそんなもんだ。WebのReactは普段から触っているので、何をどう書いたらどうなるか、動かさなくてもだいたい想像できるぐらいには練度が高い。日曜開発なので慣れていないものに触るという素振りも大事だが、今回のアプリに関しては、「普通に家庭内で使っていて、普通に運用や改善をしたい」という要求を満たすために、効率も取りたかったというわけだ。Native製の方を稼働に乗せた。やり始める前に僕が想定していたよりはずっと早いのは間違いない。Reactの練度をそのまま活かせたという感覚が非常に強い。Navigationだけは事前にドキュメント読み込んだり検証したりして設計方針をある程度固めた。これは奏功したと思う。Native関係ないところも一応挙げておくと、サーバサイドをしっかり作ってるからというのはある。GraphQL上の型をそのままFragmentにしてTypeScript上の型に落とし込めが基本うまく行くのはAPI設計次第だというのが良く分かった。Swiftを使っていたが、その値をreact-native-keychainで読めた。前バージョンをv1.0、新バージョンをv2.0にしておけば、両方共TestFlightで有効になり、もし新で不具合があってもv1.0に戻すだけですぐ使えるようになることを保証できた。macは寿命か・・・?ビルド中はクリスタルコンフリクトをしている。インストールサイズが増えたこれも仕組み的には仕方ない。言っても機能がとても少なくアプリアイコン以外のアセットは含まない本アプリでこの程度の差なので、実質気にならないんじゃないかな。Nativeでもクロスプラットフォームにはならなかったというかしなかった。Nativeがんばってると思う。WSL2で開発できると嬉しいというのはあるのでそのうち挑戦してもいいとは思うけど、動作確認やリリース作業はmacでやるしかないので、そこまで乗り気ではない。Nativeに移行した総じて、良かったこれから、ユーザビリティ向上のためにアプリに改善を加えていく予定なので、それが良い感じかどうかはまた後日Footnotes今どうなったかは知らないのでご注意を。↩nisshiee.orgTOPaboutblog。