【個人開発】Flutter と Firebase で夫婦のタスク共有アプリを作った話

# はじめに
先日、夫婦のタスク共有アプリ「[Be a Buddy][appweb]」をリリースしました。
育児、家事、本業の常駐エンジニアのすきま時間で約2年の開発期間をかけた私のエンジニア人生の集大成と言えるアプリになりました。
そこでこの記事では開発期間と今までのキャリアの振り返りをしたいと思います。

# このアプリを開発しようと思ったきっかけ
娘が生まれて半年くらい経ったころから妻との間で家事の連携が取れなくなってきました。具体的にはこのような感じです。

- 食材の買い物の内容がかぶる
- 洗濯機回したけど、ふたりとも干さなかった
- 赤ちゃんのお世話で中途半端になってしまう家事が多発
- 必要なことを話し合う時間が取れない

こういった問題を解決するために、やりかけの家事を共有できたり、パートナーに家事を頼めたり、何かトピック毎に話し合えたりするアプリが欲しくなり開発することにしました。


# 開発に着手する前に
開発するにあたって、これまでの個人開発の経験から、今回の次のような取り組みをしようと思っていました。

- 時間をかける
- 機能とデザインを先に決める
- リリース時点でiOS,Android両方のアプリがある
- マネタイズを目指す

## 時間をかける
個人開発では数時間から数日、長くても１ヶ月くらいのスパンで開発することが多かったです。
しかし最近はユーザーの目も肥えきていると感じるし、単発の機能で継続的に利用してもらえるようなアプリを作れるとは思えませんでした。
今までの個人開発の経験からユーザーのニーズをビシッと単発で把握できていたり、バズるアプリのアイデアを出すことは私にはできないと思っています。
そこで今回はじっくり時間をかけて、ある程度完成度の高いアプリを作ろうと考えました。

## 機能とデザインを先に決める
じっくり時間をかけて必要な機能を持つアプリを作ろうと考えたので、先に機能を決めることにしました。
また開発しながらデザインをすると作業効率が良くないので、デザインも先に決めておこうと思いました。
そこでSketchで作ったアプリの全体像が次のようなものです。
開発しながら微調整はしましたが、最終的に当初の構想とだいたい同じアプリをリリースすることができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/e633e096-87ed-a2e0-0a2c-746be2303de2.png)

## リリース時点でiOS,Android両方のアプリがある
夫婦ふたりで使うアプリなのでiOS,Androidの同時リリースは必須だと考えました。
今までの個人開発の経験から両方のOSそれぞれネイティブで作るのは、それなりに時間がかかるし、1回実装した内容を別の言語でもう1回実装するという行動が、モチベーションを下げます。
そこで今回はクロスプラットフォーム開発をすることにしました。
React Nativeで開発しはじめましたが、FlutterのBeta版の使い勝手に衝撃を受け最終的にFlutterで作り直すことにしました。

## マネタイズを目指す
今までの個人開発もマネタイズを目指していましたが、主にバズる目的でのマネタイズを目指していました。
数日で作ったアプリで100万円くらい広告で稼ぐというイメージです。
結局そんな夢みたいなことは起こりませんでした。今見たら2014年7月〜2019年6月までで、15万円の収入でした。(アプリは10個以上)

今回はバズる夢を見るのではなく必要な機能を持つアプリを作って、じっくり運用していく中でユーザーを増やし広告収入とサブスクリプションによる課金でマネタイズをしようと思って開発をはじめました。

# キャリアの振り返り
過去の個人開発の話をしたのでこれまでのキャリアを少し振り返ってみます。

## 業務
これまで開発を中心にやってきてWeb,iOS,Androidアプリのフルスタックエンジニアとして活動しています。
大学卒業後はたまにニート期間を挟んでこんな感じの経歴です。

- 2年SIerの正社員でメインフレーム中心の業務
- 2年派遣とフリーランスでPHPの開発
- 5年正社員でWeb,iOS,Androidアプリの開発(言語、環境は色々) ← ここで結構力がついた
- 3ヶ月正社員
- 現在再びフリーランスになって4年目(Web,iOS,Androidアプリの開発)

## 個人開発
iOS,Android,Windowsアプリと必要なサーバーサイドの開発をしてきました。
ストアから削除されたものもありますが、改めて振り返ると結構色々作ったなぁと思います。

### iOS
パンの計算機というアプリが今でも1週間60ダウンロードくらいされています。メンテできていないのが申し訳ないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/d6e2429e-9283-d959-fef0-d9ecc2ac183f.png)

### Android
もう今回の「Be a Buddy」以外はメンテしてないからか削除されてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/109249c2-0208-4273-4f55-433478f50140.png)

### Windows Phone
Windows Phoneアプリも4つくらい作りました。iPhoneとAndroidの中間くらいの位置づけで市場とるかなーと思ったんですが、そうはならなかったですね。


# 実際の開発
## 時系列での開発の流れ
### 開発開始〜半年
どんな技術で開発するかと調査し以下の技術で開発しようと思いました。

- React Native
- AWS(API-gateway, lambda, dynamodb, cloud formation, mobile-hub, etc...)

### 半年
Flutterのbeta版のリリースを期に調査してみて、良さそうだったのでFlutterで開発することに変更しました。
また本業でFirebaseを使っており、今回のアプリには特にFirestoreが向いていそうだったので、バックエンドはFirebaseを全般的に採用することにしました。

- Flutter
- Firebase

### 半年〜2年
まだまだ子供も小さいため多くの開発時間をまとめてとることはできません。
月に1度くらいコワーキングスペースに行き数時間まとめて作業しました。
定期的に禁酒期間を設けて、寝かしつけ後に1時間開発するというように、とにかくコツコツ開発し続け、忘れないように、モチベーションを失わないように気を使っていました。

こんな感じで開発開始から約2年かけてファーストリリースまでたどり着くことができました。

## デザイン
マテリアルデザインを採用しています。ガイドラインがはっきりしており、悩む部分が少ないからです。
デザインが本業ではないので、そこでクリエイティビティを発揮することは今回は諦めました。
もちろんデザインもできるようになりたいんですけどね。

## プロモーション
今回は気合を入れて3万円払ってプレスリリースを打ちました。
しかしプレスリリースの転載ページに転載されたくらいで、目に見える効果は感じられませんでした。
https://www.value-press.com/pressrelease/225998

## LP
LPは勉強も兼ねてデザインもコーディングもすべて自分でやりたかったのですが、時間とモチベーションの都合で諦めました。
WIX 有料版(2000円/月くらい)を使ってページを作成しています。
https://www.beabuddy.app/?lang=ja

## ドメイン
beabuddy.appのドメインで運用しています。
問い合わせメールなど `@beabuddy.app` で返したかったので、G suite有料版(680円/1人)を利用しています。
問い合わせメールは1件も来ていません笑 でも良いんです。長期プランだからきっといつか使われる。

## 多言語対応
夫婦の家事の共有というテーマは世界共通かなと思ったのでファーストリリース時点で英語/日本語サポートすることにしていました。
日本語でダメでも英語圏で受けがいいという可能性もありそうだと思っていました。
「日本語でヒットしたら英語化する」としてしまうと、↑この場合の可能性を潰してしまいそうだなと考えて、ファーストリリースから英語/日本語サポートしました。
翻訳はPlay Consoleからアクセスできる有料の翻訳サービスで、全部のリソース合わせて4万円くらいでした。

## Flutterどうだった？
Hot Reloadが神ですね。本当に爆速で開発ができます。
ビルド待ちの数10秒でtwitterに離脱とかがなくなって開発に集中しやすくなりました。
Dartは深追いしてないですが、特に使いにくいという問題はありませんでした。
また何度かFlutter自体のバージョンアップもしましたが、大きなハマりもなくスムーズでした。
本業ではReact Nativeのバージョンアップでかなり苦しんでいるので、この点でもFlutterに大きな魅力を感じています。
ライブラリ無しでiOS/Androidの見た目を統一できるのも素晴らしいです。

次回以降別の個人開発するなら間違いなくFlutterでやると思います。
本業でも要件次第では積極的に採用していきたい気持ちです。

## でリリースしてどうだったの？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18273/ccce9053-37e5-9006-8135-a7d70b1e9ac7.png)
ご覧の通りリリースから2週間経過しても両OS合わせて100ダウンロードに満たないです。

正直なところリリース直後もう少しTwitterやFacebookの拡散でダウンロードが見込めるかなと期待していましたが、あえなく撃沈しました。
しかし今までのヒットしないアプリの開発経験から予想できていたので心は折れていません笑
リリースはスタートで、さらに1年2年かけて夫婦の家事の共有に本当に役立つようなアプリにしていくつもりです。

# まとめ
何かとキラキラした話の多い個人開発の記事ですが、こんな風に日の当たらないアプリを開発し続けている個人開発者もいるのです。
それでも個人開発している理由は、いつか多くの人に使われるアプリを作りたい(稼ぎたい)という思いと、開発すること自体がスキルアップに繋がり、本業の方での収入も上がるからです。

今回の開発ではFlutter、Firebase、G suiteの使い方などが新しく身につきました。

# [追記] 家事の連携が取れるようになったの？
コメント頂いたので追記します。
必要性を感じた時から2年経っているので、話し合いなどでだいぶ解決済みの問題も多いです。
このツールで最近改善したのは次のような点です。
・買い置き系のもの(トイレットペーパーや洗剤)の購入し過ぎがなくなったこと
・幼稚園をどこにするかの相談ができる

# [追記]お仕事募集中
12月以降の開発のお仕事を探しています。
キャリアと希望条件をTwitterに載せているので興味がある方はTwitterでご連絡下さい！
https://twitter.com/sekitaka_1214/status/1166544968128745474?s=21



[appweb]:https://www.beabuddy.app/?lang=ja