作ったもの
bookfull という確定申告補助のアプリをリリースしました。
以下のような機能があります。
- 仕訳の登録
- CSVでの仕訳インポート
- CSVでの仕訳エクスポート
- よく使う仕訳の登録
- 定期的な仕訳の自動登録
- 国税庁のフォーマットをなぞる形で青色申告決算書を作成
- Dropboxへのバックアップ
アプリの説明書は Github に作成しました。
当初は、月100~300円くらいのサブスクリプションにしようかと思っていましたが、成果物への自信を喪失し、急遽無料アプリとなりました。
また、モチベーションを保つのがしんどくなり、一部未実装のままリリースすることとなりました。
(固定資産と減価償却、家事按分の自動計算、自動バックアップとか)
自信喪失やモチベーション低下の理由としては、
- 本業やプライベートが忙しく実装の時間がとれない
- 友人と2人で開発していましたが、どちらも確定申告していないのでアプリの有用性が分からない
(友人はサラリーマン。僕はフリーランスですが諸事情により3ヶ月ほどで法人成りしている)
というものです。
ひょっとしたら全く需要がないかもしれないと思いつつ開発を続けるのはかなりツラいものがあり、とりあえず誰かから率直な意見をいただきたい、と思ったのが記事投稿の背景です。
構成
改めて記載するほどの内容ではないのですが...
フロントが Flutter でバックエンドはありません。データは個人情報を管理したくなかったので、SQLite で端末内に保存しています。
とはいえ、端末紛失や機種変更時のことを考慮するとバックアップ出来ることは不可欠なのでユーザーの Dropbox に保存する仕組みにしています。
学びと反省
Privacy-Policy について
Google Play でリリースするにあたり、Privacy-Policy を有効な URL で公開する必要がありました。
正直、個人開発者にとっては中々面倒でハードルが高いなという印象でしたが、以下サイトで簡単な入力をするだけで自動生成できます。
https://app-privacy-policy-generator.firebaseapp.com/
また、公開はGithubに専用のリポジトリを作成し、そこにマークダウンで記載する形で問題なく審査を通りました。
定例的な場があったのは良かった
個人開発を進めるにあたって、一番の課題はモチベーションの維持だと思っています。
今回、当初は3人いたのが家庭の事情により1人が途中で抜け、1人は本業の案件が炎上してリモートワーク解除になり、僕には子供が生まれて自分の時間など皆無になりました。
実装する間隔が開いてくると、次に手を動かす際に前回どこまでやっていたかの記憶が曖昧なため思い出す作業からスタートすることになり、モチベーションは低下の一途をたどります。
それでもなんとかリリースまで漕ぎ着けたのは、毎週定例をやると決めていたおかげだと思います。
少なくとも定例があるから何とか少しでも進めようと考えたし、進捗が全くなくても定例で話をするから何をやっている途中だったかを定期的に思い出すことが出来ました。
もし1人で開発していたら、直ぐにモチベーションが維持できなくなって投げ出していたことでしょう。
各々が別のアプリを開発するという形でも良いから、個人開発しているもの同士で定期的に進捗を話し合うというのは、モチベーション維持に重要な要素かなと思いました。
ライブラリの選定はもっと検討すべきだった
今回、Flutter 初めてかつ、個人開発に割ける時間も限られているため、とりあえずほぼ素の Flutter で実装しましたが、事前にしっかり調査してもっと活用すべきだったという後悔があります。特に、最後のほうで導入しましたが、json_serializable は最初から使っておきたかったし、freezed も必須だったかなと。
後は、状態管理系もしっかり検討しておくべきでした。状態は全部 StatefulWidget に持ちましたが、例えば勘定科目を編集した際に別ページにある仕訳登録のプルダウンに即時反映したいけどタブが分かれているから出来ないとか、何かとツラさがありました。
今だと Riverpod がデファクトなんでしょうか?本業では React をよく使っているので、Flutter-Hooks というのも気になります。
いずれにしても、時間がないからとこの辺りをおざなりにすると、後々痛い目に合うということですね。
テスト時のモック方法について、もっと事前調査すべきだった
ライブラリの選定にも関係する話ですが。
テスト時のモック方法について特に調査することなく実装開始したので、かなりオレオレな方法でモックしていました。
コードが増えてくるとモック管理が煩雑になってしまい、テストのメンテが負担になってきました。
Flutterだとどういう方法がスタンダードなんでしょう?未だに把握出来ていません。
まとめ
何かと苦労はあったものの、顧客要件に縛られない個人開発というはやっぱり楽しかったというのが一番の感想です。