10年前にObjective-Cで開発したiOSアプリをFlutterでリニューアルした話

2013年にObjective-Cで個人開発した「パンの計算機」というアプリを、Flutterでフルリニューアルしてリリースしました。
この10年でアプリ開発の技術もずいぶん変わったように思います。振り返りも兼ねて今回のリニューアルについて記事を書きたいと思います。

# 2013年のアプリ開発とは
2013年...だいぶ昔のような、最近のような... iPhone的にはiPhone5Sが発売された年で、スキュアモーフィズムからフラットデザインへの転換期でもあったと思います。
開発的なところではKotlinやSwiftもない時代でした。RealmやFlutterもありませんでした。Firebaseはrealtime databaseの機能だけあり、Googleに買収される前で今の多機能なFirebasとは違うものでした。

そんな状況だったのでこのアプリではObjective-CとローカルのDBとしてCoreDataを使っていました。

# 古いアプリはどんなアプリ？
以前作ったアプリはiOSのみで以下の機能しかありませんでした。
* パン作りに必要な材料の自動計算をする

パン作りは正確な計量が必要ですが、レシピ記載の分量と異なる量にしたいことがよくありました。
例えばレシピでは4つのパンができるレシピだけど、6個つくりたいなど。
そんな不便を解消したくて、1つの材料の量を変更すると、他の材料の量も自動で計算されるアプリを作りました。

当時のアプリの機能やスクリーンショットは以下のサイトが紹介してくれています。
頑張って木目のような感じを出してデザインした苦労が思い出されます。

https://isuta.jp/category/iphone/2015/12/467165

# きっかけ
設定画面にユーザーアンケートを追加していたのですが、ずいぶんバージョンアップしていない、ほぼ壊れかけたアプリにもかかわらず5年くらいかけてトータルで500件(3日に1回)くらいの回答があつまっていました。
そして2024年の1月に80時間の余暇があったので、一念発起しFlutterで作り直すことにしました。

書いていて思い出しましたが、2022年くらいにも1度リニューアルを試みたことがありました。
その時は英語の勉強を兼ねて英語で発信しながらコーディングするという試みをしていました。
しかし英語で話しながら開発すると、開発に集中しきれず途中でやめてしまいました。
ただこの時にCoreDataからのデータの抽出や、新規のFlutterアプリ内に旧アプリのCoreData関連の処理を移植する部分は実装していたので、今年の開発はちょっと楽になったのでやっていてよかったと思います。

英語で話しながら配信はこんな感じでやっていました。

https://www.youtube.com/watch?v=a0YUBIpOSAc


# 作ったもの
そして今回作ったものは以下になります。
* FlutterでiOS/Androidに対応
* (アンケートで要望の多かった)写真付きレシピの管理機能を追加
* (以前からある)材料の自動計算の機能を維持
* Next.jsで公式Webサイトを作成

https://bakers-note.com/ja

# 開発に使った技術等
## データマイグレーション
正直レガシーなアプリでほぼユーザーもいないと思っていたのですが、エンジニアの良心として旧バージョンからのマイグレーションを実装しました。しかし思いがけず旧バージョンのユーザーさんが多かったようで、マイグレーションを実装していて良かったと思いました。たぶん大切なレシピが消えていたら離脱するユーザーさんが多かったと思います。

## Flutter
いつも通りの感想ですがFlutterは爆速でiOS/Androidの開発が出来て素晴らしいです〜。開発しやすさがiOS/Androidのネイティブに比べて群を抜いていて、なおかつクロスプラットフォーム対応できる優れものです。私はiOSとAndroidもネイティブ言語で開発できますが、新規開発ではまずFlutterを第一に検討します。
状態管理のライブラリとして初めてriverpodを使いました。複数画面でも状態を共有できる大変便利なライブラリでした。

## Firebase
Firebaseは主にAuthentication,Firestore, Cloud Storageあたりを使っています。エミュレータでのセキュリティルールのテストも作ってあります。

## Next.js
クライアント向けサイトを作るのでやはりSEO的にサーバーサイドレンダリングがほしいなと思いました。以前Flutter webでサイトを開発したことがありますが、モバイルアプリ開発に比べて使いにくかったのもあり今回はNext.jsを使いました。
Reactコード上でクライアントサイドとサーバーサイドを意識する必要はありますが、SEOなども考慮したサイトを作るという面で見ると開発効率が高いと思いました。VercelにホスティングすればCI構築の手間がなくてスピーディーにリリースすることができました。

# 競合
2013年にリリースした時点では類似アプリはなかったと記憶しています。
その後いくつかリリースされたようで、日本語でも他の言語でも同様の機能を持つアプリはいくつかあります。ただ写真付きでレシピを管理するところまでやっているアプリはあまり無いようでした。特に日本語版では見当たりませんでした。


# サポート言語
日本語と英語をサポートしています。英語を勉強しているので翻訳サービスに頼らず自分なりの言葉で翻訳してみました。ですが英語ユーザーも1割くらいいるようなので、Play Storeの翻訳サービスあたりを利用しようか検討しているところです。

# リリースしてどうだった
ありがたいことリリースしてからの1ヶ月間でDAU平均が100を超えています~。 
バージョンアップのユーザーさんが多く、10年前競合アプリが無かった時にリリースしていたのが役に立っていたようです。おそらく今同じアプリを新規インストールしても、ここまで短期間でこのようにユーザーを獲得することは難しかったのではないかと思います。10年前の自分を褒めたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/b6a82d26-4d9d-6e7d-20a1-3db0ae836a54.png)

リテンション率も3週目で20%を超えているので、継続して使われているユーザーさんも一定数いると思って良さそうです。嬉しいです。10年以上個人開発していてまともに使われるアプリになったのは初めてです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/6955f0c3-ddb6-4eb7-4d38-853b27a8e658.png)

自分自身の勉強も兼ねて英語もサポートしているので、海外ユーザーも10%程度いるようです。どの程度定着してくれているかは、わからないですが今後の可能性を感じる部分ではあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/8ad99e9f-5322-7a8f-8d7d-ed412c41f68b.png)


# まとめ
10年以上個人開発を続けてまともにユーザーさんが定着したアプリはベーカーズノートが初めてです。このアプリを大切に育ててマネタイズにつなげていきたいなと思います。