💻

Flutterを学習してから個人開発アプリをリリースするまでの道のり

2022/06/23に公開
2

はじめに

先日、初めて個人開発アプリをリリースしました。
この記事では、Flutterの学習開始からアプリリリースまでの道のりをまとめていきます。

Flutterに興味を持ちアプリを開発したいと思っている方の参考になればと思いこの記事を書きました。

Flutterの学習について

なぜFlutterを学習しようと思ったか

まず、FlutterはYouTubeでKBOYさんの動画を見て知りました。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCevPBAKPBSgJIHU-vSeltlw/featured

そこから、モバイルアプリ開発Flutterに興味を持ち、

  • 新しい技術ってなんかカッコいい
  • Googleが作ってるってことはイケてる?
  • 公式YouTubeがおしゃれで良さそう

みたいな軽い気持ちでFlutterを勉強してみようと思いました。

そして実際にFlutterをやってみると、簡単にUIを構築でき、これなら自分1人でアプリを作れるんじゃないかと思い本格的に学習しようと思いました。

どうやって学習したか

学習初期

前述したKBOYさんが運営するYouTubeチャンネルのFlutter大学の動画と、
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCReuARgZI-BFjioA8KBpjsw

Udemyの↓有料動画で初歩的な学習を行いました。
https://www.udemy.com/course/flutter-bootcamp-with-dart/

どちらも、実際に手を動かしながら動画を一通り見るというかなりオーソドックスな方法で学習しました。

時期でいうと2020年12月頃〜2021年1月頃、時間でいうと約30時間前後がこのフェーズに要したかと思います。

その他、勉強させていただいた記事や教材は↓です。
https://medium.com/flutter-jp/flutter-learning-c5640c5f05b9
https://zenn.dev/umatoma/books/1f4cb2404f3fa9
https://zenn.dev/riscait/books/flutter-riverpod-practical-introduction

学習中期〜

上記の学習を終えてからは、実際にアプリの開発に入りました。
そして、「〇〇機能を実装したい → やり方がわからない → 調べる」 のサイクルを何度も何度も繰り返して、少しずつできることが増えていきました。

今思えば、このフェーズに入ってからは学習しているという感覚は徐々に薄れていき、早くアプリをリリースしたいという思いでコードを書くようになっていきました。

作ったアプリについて

どんなアプリか

作ったのはレシピを管理するアプリで、現在はiOS版のみリリースしています。
https://apps.apple.com/jp/app/myrecipe-レシピ記録アプリ/id1627427244

機能は、

  • レシピの保存・更新・削除・読み取り・検索
  • メールアドレス・Googleアカウント・Appleアカウントでのユーザー認証
  • 記録したレシピをカートに入れると、カートに入っているレシピの材料を計算して買い物リストを作ってくれる

といったものがあります。

アプリ画像

レシピ一覧画面 レシピ検索画面 買い物リスト画面

なぜ作ったか

きっかけは、知り合いからレシピを管理するアプリを作って欲しいと言われたことです。

そこから、実際にリリースされているレシピ管理アプリをいくつか使ってみて、保存したレシピをもとに必要な材料を計算して買い物リストを作ってくれる機能を高精度で実装したら便利なんじゃないかと思い作りました。

どうやって作ったか

使った技術は↓です。

  • Flutter
  • Firebase
    • Authentication
    • Firestore Database
    • Storage

状態管理はRiverpodを使いました。

また、開発環境と本番環境を分けるためにdart-defineを使用したり、静的解析のために pedantic_mono というパッケージを使用したり、ローカルデータベースとしてhiveを使用しました。

  • dart-defineの参考記事

https://zenn.dev/riscait/articles/separating-environments-in-flutter

  • pedantic_monoの参考記事

https://medium.com/flutter-jp/analysis-b8dbb19d3978

  • hiveの参考記事

https://docs.hivedb.dev/#/
https://zenn.dev/adjaper/articles/7bc1934c938518

どのくらいの期間で作ったか

このアプリを作ろうと思ったのが2021年8月頃で、リリースしたのが2022年6月頃です。
そのため、10ヶ月程度の期間で作りました。

とはいっても、本格的に開発を進めていったのは2022年3月頃からで、それまでは月に数回ちょっとコードを書く程度でした。

所要時間でいうと、おそらく150〜300時間程度かと思います。

苦労したこと

モチベーションの維持

先にも書きましたが、レシピ管理アプリの開発には約10ヶ月かかりました。
最初の頃は月に1回程度しかコードを書かないこともめずらしくなく、最初の7ヶ月くらいはほとんど何もやっていないような状態でした。

また、レシピ管理アプリを作る前に途中で開発を頓挫したアプリも2,3個あり、アプリを作り始めた頃は継続的にコードを書くことが全くできていませんでした。

この頃は、作っているアプリは全くの無価値なんじゃないかと自信がなくなったり、技術的な壁にぶつかったり、仕事やプライベートが忙しいと甘えていたりとモチベーションの維持にかなり苦労しました。

そんな中、とにかく1週間気合を入れてコードを書いてみたら、コードを書くことが習慣化され、モチベーションがどうのという考えがほとんどなくなりました。
この 「一定の期間とにかく集中すること」 は、自分の中でかなり効果があったので、モチベーション維持に悩まれている方は是非試してみてください。

コードを書くことが習慣化されてからは、技術的な壁にぶつかると、独特の快感みたいなものを感じるようになりました笑

やりたいことが次々湧いてくる

これは今でも苦労していることです。
というかむしろ、今のほうが苦労しているかもしれません。

個人開発を始めてから、

  • あの機能もこの機能も追加したい
  • アーキテクチャを整えたい
  • もっと読みやすいコードにしたい

などの欲求が果てしなく湧いてきます。
これらの欲求は、成長するためには必要だと思いますし、追求すること自体とても楽しいです。
でも、全部叶えようとすると、どんどんリリースが遠のきますし、自分はできない人だと悲観的になってしまうこともありました。

なので、リリースまでに実装する機能を最低限に絞るとにかく動くようにする、などある程度の割り切りが重要だと身を持って実感しました。

余談ですが、自分への覚書として涅マユリさんが残した名言を引用させていただきます。

我々科学者にとって、完璧とは絶望だヨ。
引用:BLEACHより

リリース後の1週間

AppStoreにリリースしてから、何人かの知人に実際にアプリを使ってもらいました。
その中で、使いにくかったところや、欲しい機能など様々なフィードバックをいただき、その検討や実装を行いました。
また、リリース直後に静的解析ツールを導入し、それに伴うエラーの解消にかなり苦労しました。
そして追い打ちをかけるように、リリース直後に不具合がいくつか見つかり、最初の1週間はほとんどFlutterに拘束されていました。

今後やりたいこと

myRecipeに追加したい機能

今後、↓の機能を追加していく予定です。

  • 各レシピにタグをつける機能
  • 様々な条件でレシピを絞り込む機能
  • カートに追加するレシピのセットを設定する機能
  • アプリ内で使用するフォントを選べる機能
  • レシピを友達と共有する機能

また、ゆくゆくはサブスクリプションを導入してマネタイズもしていきたいと思っています。

他に作りたいアプリ

次はFlutterを初めて間もない頃に挫折した 「欲しい物管理アプリ」 を作りたいと思っています。
まだまだ、構想段階ですが、本当に欲しいものかどうかを見極めて衝動買いを防げるようなアプリにしたいと思っています。

他には、最近流行ってる(?)Flutterでのゲーム開発もやってみたいです。

発信

ZennやTwitterで発信していきたいと思っています。

発信することが大事だと知っていながら、
Flutterを知ってから初記事(この記事)を発信するまで、1年半ほどかかってしまいました。

これからは、批判や失敗を恐れずに、技術的な記事を定期的に書いていきたいと思います。

おわりに

アプリの個人開発はとても楽しいことでした。

Flutterを知ったのが2020年12月頃、アプリをリリースしたのが2022年6月頃なので、決して順調に進められたわけではありませんが、それでもやってよかったと心から思っています。

まだまだ初心者ですが、どんどん進化していきたいと思います。
この記事が、どこかで誰かのお役に立てれば非常に嬉しいです。

ご覧いただき、ありがとうございました!

Discussion

mqkotoomqkotoo

”記録したレシピをカートに入れると、カートに入っているレシピの材料を計算して買い物リストを作ってくれる” という機能が画期的でとても良いと思いました!引き続きアプリ開発頑張りましょう!