初めての個人開発アプリリリースとなぜ勉強が遅れたのか

こんにちは、アサノと申します。Qiitaで投稿するのは初めてです。
今回、せっかくの機会なのでFlutter大学のアドベンドカレンダーに参加しました。



今回は、自分が作った個人アプリ開発の経験談と
なぜ勉強が遅れてしまったのかの分析を書きたいと思ってます。

（めちゃくちゃ急いで書いたので誤字とかわかりにくい部分あったらごめんね）



## まずは初めて作ったアプリのことについて
今回作ったのがテレビ番組専用ToDoリストです。ここ最近、TVerなど見逃し配信がスタートしたこともあり、前よりも観たい番組が増えている傾向にあります。配信も期限があり逃してしまうと二度と見れなくなったりサブスクに入らないといけないので自分のために作りました。

###### アイコンとホーム（新規登録・ログイン画面）
最初はGoogleアカウントで認証機能を作っていたのですが、GooglePlayの審査側アプリチェック時に端末２段階認証がデフォ？になっている影響で何回もチェックができないということで弾かれました。早くリリースを目的としていたのでMail/Passの認証に切り替えました。
最低限の実装として、新規登録の際に「空欄」「メルアドに＠が入っているか」「パスワードの文字数と2回同じパスが入力されているか」「パスワードの非表示」をしました。
そこでElevatedButtonのonTapのnull判定もしています。

![App01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/78f15166-e49f-c418-bb3c-c5259609ff06.jpeg)

##### ログイン後のレイアウト
TV番組専用ToDoアプリなので7つの曜日でタブ分けしてあります。下のFABから曜日を登録すると、その曜日のListに並ぶという形です。左上はグラフ。右上はログアウトボタンです。タブバーで横スライドするとAppBarの曜日テキスト表記も変更されます。ここはずっと見える部分なので時間はかかりましたがこだわった部分です。

![App02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/d936f2b4-77f6-0d18-0c85-05ad663730d4.jpeg)

##### ToDoを追加
見る予定の番組をリスト追加する工程です。FABを押すと重ねて表示する方式です。曜日を選ぶ部分は複数選択できるようになっています。月ー金の5つを押すとリスト上では「平日」と表示するなど工夫しています。番組開始時間は初期値をHourだけ現在の時間にしています（ここは00:00でも良かったんですけど勉強のため）。
時間選択はここだけCupetino←MaterialDesignよりもユーザー側が使いやすいため。
時間の横に選択した曜日が表示される仕様。
下に番組名と備考を。下に優先度のスライドバーを加え、単調ではないListになるように心がけました。
00:00-03:00で登録すると深夜番組扱いになり前日の曜日に登録されるようになってます。

![App03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/663c4044-2193-5747-c527-b1d280178b56.jpeg)

##### ToDoの編集
編集・削除は　flutter_slidableを用いて機能を実装。図の通りにアップデートしています。
データベースはCloud Firestoreです。

![App06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/3ff30668-39ad-8644-9c6d-cdcf2fc0af2b.jpeg)

##### グラフ
ワンポイント足したかったので棒グラフの実装をしました。
いらなかったかもしれない
![App05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/e72053bc-b8d6-4e52-e595-bc1b9b9d7918.jpeg)

現時点ではGooglePlayでのみリリースしています
ログインの部分にも書きましたがGoogleアカウントのみ実装した影響で
審査を１週間くらい落とされ続けたのでこれからGoogleアカウントを実装する予定の方は
他の認証方法も追加することを推奨します。


https://play.google.com/store/apps/details?id=asano_app.mi_to_app&hl=en_US

今のところ、アプリ申請時にStoreに載せる写真をミスしているのでアップテートで今後直します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1522217/f047d4a0-2fa4-9fab-7671-bd029a79f4c6.png)



## アプリリリース
認証を変えてアプリ申請したら一発で審査が通りました。GooglePlayで検索してリストの中に自分のアプリが掲載されてい流のを見てちょっと感動しました。このあと、自分のアプリをインストールして動かそうとしたら認証もログイン後のListViewも何もかも崩れまくっていたので急いでアップデートして今は普通に使えるレベルになっています。


## このアプリの改善点
アプリの改善点はないのですが、コードがStatefulで全部書いていて状態管理を全然していないです。ですので次回、個人アプリを作る際はRiverpodとかは使いたいですね。あと1つのDartファイルにコードを書きすぎているのでファイルの粒度を気にして実装をしていきたいなと思いました。自分で見返しても見づらい！！！


## なぜ個人開発が遅れてしまったのか
実はFlutterを勉強し始めて2年半くらい経過していて、Flutter大学に入ったのもそのくらいになります。
今はITエンジニア（アプリ開発ではない）ですが、当時は製造業でITに無縁でした。ですので、周りにも一切ITに詳しい人がいないし自分喪全くわかっていない状況です。勉強の仕方も何もかもわからない状況でした。
しかも当時はFlutterが今ほど流行っておらず、説明動画もあまりありませんでした。Flutterドキュメントはあったが英文やら説明が難しく無意識に避けてしまって。Udemyで説明がわかりにくいのにそれしかないから買ってトレースする時期が長かったです。Flutter大学内でも積極的に絡んでいく性格ではないのでただ入っている状態が長かったです。当時は教材もなかったので。そのようなことが続いてしまって動画のトレースはするけど、トレースだけしているので個人で考えて実装するという時間が少なかったのが個人開発リリースが遅れてしまった理由かと思います。せっかく質問できる環境だったのである程度悩んで調べてわからなかったら聞くという習慣をつけていれば...と思いました。

## 今後の目標
勉強し始めてから2年半かかりましたが、ようやくアプリをリリースできて良かったです。もしかしたらもっと個人開発の開始が遅かったらと思うと怖いですね。個人開発をやってYouTubeとかでFlutterの動画などはたくさん上がっていてトレースして勉強したりするんだけどトレースばっかりやっていて個人開発をしてないと全然身につかないなと思いました。動画の書き方はわかるけど、そのパターンでしか覚えられないので。なので今後はちょっと勉強したら応用して別コードに足してみたりして自分の頭で模索しながら実装していくことを心がけたいです。途中、Macの環境変数がぶっ壊れて終わりじゃん！！となった時もあったけどFlutter大学で質問して解決して今に至ります。ありがたい！エンジニア目指して勉強頑張るぞ！！