【Flutter個人開発】最初にやって良かった・やっておけば良かった事などリリース後の振り返り
掲題通り、アプリをリリースした後の振り返りをします。
これから個人開発を始める方の参考になれば幸いです。
最初にやっておけば良かったこと
1. ローカライズ対応(多言語化)
後から追加するのは非常に工数がかかります。
最初から組み込んでおくべきでした。
私は今まさしくこの現実にぶち当たり、大変なので記事の執筆に逃げています。
- flutter_localizations
- easy_localization
- intl
基本何でも良いですが、拘りなければflutter_localizations
が公式パッケージで最も一般的かと思うのでこれで良いかと思われます!
2. 強制アップデート
最初の頃はどうしても細かなバグや機能追加などバージョンアップが多いかと思います。
例えば、↓みたいな感じの「お知らせ機能」作って、バージョンアップしてね〜って促しても良いんですが、アップデートしないユーザーも一定数はいると思うので!
遅かれ早かれ必要なら先にやるべきでした。
3. CDによる自動ビルド
手動ビルドめんどくさいっす!!
ヒューマンエラーの防止にも繋がるし自動化したい!
CIしか入れてない!
- Codemagic
- bitrise
とかあるけど、基本GitHub Actions
で良いかな〜って思います!
4. 広告の導入
リワード入れておけば良かったかな〜。と。
サブスクリプションは後でで良いけど、こっちは先に入れて1円でもお金にしておく仕組みを作っておくべきでした。
先にやって良かったこと
1. MVPで早期リリース
機能を最小限に絞り込むことで、早期リリースしました。
開発期間は2ヶ月です。
作ってくと「あれもこれも」となりますよね。
でも最初は機能を詰め込まず、コア機能に集中してリリースすべきです!
必要なら後でアプデしましょ。
2. 共通のデザインシステムの構築
開発速度の向上をはじめ、一貫したデザイン、デザイン変更時の効率的な対応が可能になります。
↓こういうやつ。
TextStyles の例
abstract final class TextStyles {
static const String _notoSans = 'NotoSansJP';
static const String _roboto = 'Roboto';
const TextStyles._();
// 見出し(18px, Medium)
static const TextStyle h1Med18 = TextStyle(
fontWeight: FontWeight.w500,
fontSize: 18,
height: 1.33, // 24/18 = 1.33
fontFamily: _notoSans,
);
Color の例
abstract final class Colors {
const Colors._();
// メインカラー(白)
static const Color mainColor = Color(0xFFFFFFFF);
// メインテキストカラー(濃いグレー)
static const Color mainTextColor = Color(0xFF575756);
3. 静的解析ルールの設定(analysis_options.yaml)
コード品質を保ち、バグを未然に防ぐために大事っす。
個人開発でも、後から見返した時にコードの品質が保たれていると助かります。
あと、const とかも自動付与出来るのでシンプルに効率良いです。
↓こういうやつ。
# Lintルールの設定
linter:
rules:
# スタイル関連
prefer_single_quotes: true # シングルクォートでないと警告が出る
require_trailing_commas: true # 末尾カンマを必須に
always_use_package_imports: true # インポートは絶対パスにする(相対パスでインポートすると警告が出る)
directives_ordering: true # インポート順序を強制
sort_child_properties_last: true # Widgetのchildを最後に配置
# エラー防止
avoid_annotating_with_dynamic: true # dynamicで型をつけると警告が出る(dynamicアノテーションを禁止)
# パフォーマンス
avoid_unnecessary_containers: true # 不要なContainerを禁止
prefer_const_constructors: true # 可能な場合はconstを使用
prefer_const_declarations: true # 定数宣言にconstを使用
4. バックエンドサービスの選定・一元管理
若干が話それますが、Twitter 徘徊していると下記の記事を見つけました。
SupabaseをただのPostgres DBとして
と使っている..???
なるほど!それも一意見として良いと思います!
でも私はBaaSとして使いたいです!
- 認証
- DB
- ストレージ
全部をSupabase
で使いたいです。
例えばストレージだけS3(AWS)使っても同様の機能を提供出来るでしょう。
しかしその場合、AWSアカウントの作成、IAMの設定やパスワードポリシーの設定、budgetの設定などAWSのアカウント初期設定は結構多いです。
ユーザーからすれば、これらの技術選定はどうでも良い部分です。
正味、大半は我々のエゴです。
であれば、まずはMVPでやってるので出来ることは1つにまとめたい。というのが指針です。
落ち着いたらやること
1. 監視・分析ツール
下記の2つは入れたいな〜と思ってます。
- Firebase Analytics
- Firebase Crashlytics
チケットは切ってます!
やれたらやります!(行けたら行きます論)
2. サブスクリプション
絶対にやりたいです。
アプリで得たお金で肉食いたいです。
まとめ
個人開発では「完璧を目指さず、まずはリリース」が重要ですが、最低限の基盤は整えておくと後が楽になります。
特にデザインシステムとCIは、早期に導入することで効率が大幅に向上しました。
一方で、ローカライズ対応は後から追加すると工数がかかるため、初期段階で検討すべきでした。あとCDも。
次回の個人開発では、これらの経験を活かしてより効率的に進められそうです。
失敗は成功の元!
Discussion