【Flutter】はじめての個人開発日記

## はじめてのモバイルアプリをリリースしました
今年の8月にはじめてのモバイルアプリをリリースしました。
これからも機能を増やしたり改良したりしていきたいですが、はじめての個人開発でいろいろ苦戦したので、その過程をシェアしたいと思います。

## どんなアプリ？
「ヤモリメモ」という、買い物メモを家族や一緒に住んでいる人と共有できるアプリです。
将来的に、月毎の支出の遷移グラフ機能や、家事をした日付機能なども追加していきたいという思いがあり、「家を守るメモ」という意味で、「ヤモリメモ」という名前にしました。（イモリを飼っているので、何か関連する名前にしたいという気持ちもありました。）
Flutterで作成し、FirebaseのFirestoreDBとAuthentication, Clashlyticsを使っています。

iPhone:

https://apps.apple.com/jp/app/%E3%83%A4%E3%83%A2%E3%83%AA%E3%83%A1%E3%83%A2/id1643898056


Android：

https://play.google.com/store/apps/details?id=com.yamorimemo.shopping_list&hl=ja&gl=US


## なぜ作ろうと思ったか

・買い物メモを一緒に住んでいる人と共有したかった。
・自分はiPhone、相手はAndroidなので、どちらでも使えるアプリがよかった。GoogleKeepの中に買い物メモを作成していたが、GoogleKeepを開く→買い物メモを開くの2Step必要なのが少し面倒だった。
・１週間に１度まとめ買いをするので品数が多く、上から順番に買っていけばよいようにしたかった。（例えば野菜は上に、牛乳は最後に来てほしい。）以前は手で並べ替えていたが、面倒に感じていた。かといってばらばらに書くと、後から最初の売り場に戻ることになったりして面倒だった。
・仕事でFlutterアプリの担当になり、勉強として何か作ってみたかった。

## 開発着手〜リリースまでの記録
開発着手〜リリースまでの流れを、記載してみます。引用は当時の開発日記からです。仕事の繁忙期など数ヶ月空いてしまっている時期もあり、ストアリリースまでに1年以上という超スローペースでした。

### 2021年10月
仕事でFlutterアプリの担当になる。UdemyでKBoyさんの動画を見て、学習を始める。Android Studioの使い方なども説明してもらえてありがたかった。また、Flutter大学などFlutter関連コミュニティの存在を知ることができたこともよかった。

https://www.udemy.com/course/kboyflutteruniv/

### 2022年7月
7月〜8月が業務が忙しくない期間のため、アプリを作ろうとし始める。

>2022.7.31
>FireStoreのプロジェクトを追加して、初期化までやった。
>→多分使えるはずなので、次はこれでデータ追加してみる。

FireStroreDB×Flutterの構成がよく使われているようだったので、使ってみることにしたが、NoSQLははじめてだったので、Firebaseが出している公式の動画を視聴。わかったようなわからないような・・・。

https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s


### 2022年8月
仕事に余裕がある時期で、１週間に１・2回はさわれていたよう。ただ、FireStoreDBの接続など苦戦した覚えがある。

>2022.8.10
>そしてFlutterの教科書を発見。無料ですごい。ものすごくわかりやすい！読む。
>https://zenn.dev/kazutxt/books/flutter_practice_introduction/viewer/chapter2>_setstate#stateful%E3%81%AAwidget%E3%82%92%E8%BF%BD%E5%8A%A0

注：現在は有料。しかし、有料で然るべき内容だと思う。

>2022.8.14
>ようやくリスト取得できるようになった。。
>しかし、愚かにも今までの部分を書き直してしまったため、チェックして消すのができなくなった。追加もソース変わってしまったのでできなくなった。
>再発防止のためにGithubにリポジトリ作った。

### 2022年9月

ユーザー登録は無い状態だが、アプリを開いた人全員（匿名ログイン）が同じ買い物リストを見る・更新することはできるようになったので、自分たちで使い始めた。WindowsPCしか持っていなかったため、iOSアプリがビルドできず驚いた。AppleDeveloperProglamの年会費が高くてまた驚いた。

>2022.9.4~9.7
>AppDIstributionで配布・CodeMagicの設定→iosのアプリをビルドできるようになった。
>AppleMembershipの設定
>CodeMagicがとても便利。Mac買うまではこれで・・・。

### 2022年10月
使ってみて気がついた点を改良。自分が更新した後に他の人が更新するとアプリを再起動しなければ反映しないことがわかり、引っ張って更新・バックグラウンドから帰ってきたら更新を実装し、自分たち用の買い物メモとしてはそれなりに使えるようになる。

### 2022年11月〜12月
ひとまず自分たちで使えるようになったことと、仕事が忙しくなったことで作業せず。

### 2023年1月
新年で心機一転、かつ異動や転職を視野に入れ始めたこともあり、ストアリリースを目指して、ユーザー登録など他のユーザーが使えるように修正しはじめる。

> 2023.1.3
>忘れてしまってわけがわからないので、この方式で書き直してみる？
>https://qiita.com/MLLB/items/c4066203f6534e57370b

>2023.1.22
>リスト番号の生成で、RDBでいうシーケンス値を使いたかったが、firestoreだとそういう機能がなさそうで詰
>まる。uidを使おうかとも思ったけど、漏れていいのかわからないので、
>本日＋ランダムな文字列10桁とかでいいかな。


### 2023年2月 
ずっと迷っていたけど、セールのタイミングでMacBookAirを買った。ただでさえ設定関連があまり得意ではないので、Windowsではどうやるのか？を調べるのが無駄に感じたため思い切った。

>2023.2.18
>とりあえずMacでショートカットキー調べたりインストールしたり。
※思ったよりもWindowsと違い焦った・・・。

### 2023年3月
ユーザーごとにリストの登録ができるようになったよう。この時期は仕事が忙しく、作業は少なめ。

>2023.3.21
>エラーなんとか全部消して、ユーザー登録→買い物リスト登録ができるようになった。がんばったーーーー。コードめちゃくちゃだけど、とりあえず。。

### 2023年4月
日数は少なめ。１度Qiitaに投稿してみたらハードルが下がり、学んだことを少しQiitaに投稿してみるようになった。

>2023.4.29
>5時間くらいやった。非常に有意義だった。
>新規登録のユーザーでログインできるようになった。
>nullの扱いについて、公式ドキュメント読んで、Qiitaに投稿してみた。理解できた気がする。

### 2023年5月
この時期も仕事が忙しく日数は少なめ。GWにまとめて作業した。SendGridを使って招待メールを送れるようにしたよう。Firebaseの機能で、ログアウトなどはすごく簡単に実装できて驚いた覚えがある。

### 2023年6月
仕事が少し落ち着いたことと、転職したいという気持ちが固まったので、せっかくならそれより前にリリースしたいと思い、ペースをあげた。

>2023.6.6
>クラスを作っただけだけど、久しぶりに触ってえらい。

>2023.6.30
>20時くらいに仕事終われると、のんびりした後でもちょっとだけ作業できてとてもよい。

### 2023年7月
7月中にリリースしたいと思い（結局8月になった）、仕事も若干落ち着いたので、業務後にも作業できた。

>2023.7.1
>先週ストレスがなかったおかげで早起きでき、朝から昼過ぎくらいまで作業。
>ようやく共有停止ができるようになった。
>７月中には一度荒削りでも公開したい。

>2023.7.13
>ようやく共有・登録まわりおわった。。めんどうだった。
>最近、fireStoreDBのよさわかってきた。いちいちテーブルとかカラム作らずに、実装側だけで足せるのは楽だ。ただ、sqlみたいな、データ抽出とか更新の手段がほしいが。あるのかな、知らないだけで。

>2023.7.19
>ログイン状態をチェックして初期画面を変えようとしたら、
>変更を全部戻しても、パスワード間違いでログインできなくなった・・・・なんで・・・・。

>2023.7.23
>ログインできなかったのは、なんとfirebaseのログイン関数の引数にパスワードとして、メールを渡していたか>らだった。。なんてことだ。。
>なおった。色もなおった。進捗はないが、なおってよかった・・・。
>仕事早くならないとやばいので、来週はスピードも意識したい。

※このしょうもないミスにより1日以上無駄にした。

>2023.7.30
>両国の湯ワークへ。引き続き実機で起動するのに試行錯誤・・・・。
>つらい。
>実機で起動したと思ったら、ローカルのエミュレータが動かなくなった。
>しかも実機もデバッグモードで動かせず、意味がない。

※結局Macに実機につないで確認するのは諦め、未だにApp Distributionで配信している。。

>2023.7.31
>ローカルのエミュレータが動くように試行錯誤。。
>色々やったすえに、Flutter cleanやったらなおった。なぜ・・・。
>つらかった。。これからは困ったらとりあえずFlutter Cleanしとこう。。

### 2023年8月
リリースに向けて細々と修正して追い込み。なんとかリリースできた。起動時の自動ログインや、開発と本番のFirebaseプロジェクトを分けるなど、細々と苦戦。審査自体は意外に一度のリジェクトだけで通ってよかった。

>2023.8.5
>FutureBuilderがうまく使えて、うまく自動ログインできるようになった〜〜〜！久しぶりの進捗。うれしい！！忘れないうちにQiitaにまとめよう！！

※結局まだまとめていない・・・。

>2023.8.8~8.9
>環境切り替えで苦戦。。
>クラッシュリティクスがすごい。でも、つらい。。。

>2023.8.10
>ようやく本番と開発うまくわけられたーーー！！！！はず。
>よかった・・・！

https://qiita.com/sioiriomame/items/8ee0c7c52896d1a1aec1

>2023.8.26
>AppleStore審査に出しましたーーーー！！通ってくれ。
>ページがエラーになるのも、すぐAppleさんが直してくれた！ありがたい。
>GooglePlayの審査にも出した。意外と手間取ったーー。。

※なぜかAppStoreコネクトでアプリ画面を開くとエラー画面になっていたが、サポートに連絡したら1日で直してくださり、ありがたかった。

>2023.8.29
>アップルの審査で早速リジェクトされたので、ユーザー削除機能作成

>2023.8.30
>Appleの申請通ったーー！うれしい。

### 2023年9月〜10月
就職活動の方を優先していたので、DBバックアップの設定のみ。家族と前職の職場の人にインストールしてもらえた。家族からはフィードバックがありうれしい。

### 2023年11月
転職の合間のお休みで、家族からのフィードバックや、後回しにしていたフォントやアイコンを修正し、共有の仕方画面を作成。ぎりぎり11月中にアップデートできた。

>2023.11.13
>フォントとアイコンを変えた。ようやく変えられてうれしい。
>プチトラブルがあったので、Qiitaも２個投稿した。

### これからも改善や機能追加をしていきたいと思います！

## やってよかったこと
### 開発記録をつけた
ClickUpというツールでタスク管理をしており、そのDocに簡単な記録をつけていました。
![スクリーンショット 2023-12-10 0.32.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661656/9b3e4d58-79b4-2e88-1b69-a6d831023837.png)


リリースまで１年以上かかり、しばらく触らない期間もありましたが、１年くらい少しずつ進んでいると思うと、やる気を保つことができました。

### 早めに使ってもらった
ユーザー登録機能は後回しにして、まずは自分と一緒に住んでいる人だけで使えるようにして、AppDistributorで配布しました。毎日のように使っていることで、「こうした方が良い」という案も出てきましたし、常に存在を意識できてよかったです。

### Macを買った
やはりiPhone周りの設定はMacが標準で、Macですら各種設定に苦戦していたので、買って良かったと思います。また、次の会社でも開発PCがMacだったため、少しでも使い慣れておいてよかったと思います。

### 締切が発生した
やったことではありませんが、せっかくなら転職活動開始前に公開したいという気持ちがあり、7月8月は追い込みをしてなんとか公開できました。締切がなかったら、設定周りに苦戦した時に心が折れていたかもしれない・・・。

## 反省点
### FireStoreDBの構造をしっかり考える
前述のFirebase動画をみて、なんとなくで構造を考えてしまいましたが、セキュリティルールの設定しやすさを考慮した方がよかったと思います。次にFirestoreDBを使う場合は、もう一度以下の記事を読んでから構造を考えたいです。

https://qiita.com/KosukeSaigusa/items/18217958c581eac9b245

### コメントはしっかり書く
どうしても個人開発だと、空白の期間が空いてしまうことが多く、次に見た時に忘れていることもあるので、コメントはしっかり書いた方がよいと思いました。わかりやすい設計になるように見直しもしたいです。

### 1日15分でも進められることはある
7月8月の追い込み期間に入るまでは、１５分じゃあまりできることないし・・・。と休日にまとまった時間を取れる時に作業をしていましたが、追い込み期間にやってみると、１５分でも意外に細々と進められると感じました。


## まとめ
まだまだわからないことや、改良したいこと、追加したい機能はたくさんありますが、自分で日常的に使うアプリを自分で作れたことは、自信になりましたし、業務ではやったことのなかった設定周りや、他のソースのコピーで書いていた状態管理周りも勉強になり、愛着も湧いて作って良かったと思います。もしよかったら使ってみてもらえるとうれしいです。