会社員しながら個人開発アプリをストアリリースできた話
こんにちは!Flutterで個人開発しているyotaroです。
会社員をしながらも、個人開発アプリ「QuickYWT」をリリースできました!
今回は、以下の内容をご紹介します。
- 個人開発にチャレンジした背景
- 作ったアプリの概要
- 時短を意識して個人開発で生成AIを活用
- リリースした後のふりかえり
僕のエンジニア経験歴としては、ざっと以下の通りです。
- エンジニア歴:本業経験無し
- ただし、Webアプリの個人開発経験やエンジニアの方と一緒に働く経験は有り
- Flutter歴:約8ヶ月
- 約4ヶ月Udemy勉強+個人開発(挫折)、約4ヶ月QuickYWT個人開発
個人開発にチャレンジした背景
一通りネイティブアプリを作る全工程を小さく体験することが今回の主な目的でした。
前職で、サービス運営側の立場として、スマホのネイティブアプリを作るために、エンジニアの方に開発をお願いする機会が多々ありました。
前職の上司は、自ら手を動かした経験も豊富な元エンジニアの方で、開発視点での問題発生箇所を事前想定する等、他の方と比べても、仕事を効率よく進めている印象を受け、尊敬していました。
僕にはエンジニア経験がほぼないため、上司の動き方や開発側の問題発生原因が深く理解しきれないケースもありました。
そこで、開発の解像度を上げるために、まずは自分で小さなアプリを作って、一通りのアプリ開発の工程を体験することにチャレンジしました。
作ったアプリの紹介
アプリの概要
「QuickYWT」というYWTに沿ってクイックにメモを書くシンプルなアプリを作りました。
もしご興味がある方は、ぜひ以下から試しに利用していただけると、とても嬉しいです!
使いづらかったり、定着しなければ、削除いただいて構いません!
現在は、AppStoreのみ公開となっています。
AppStore:
アプリを作った背景
学びを整理した状態でクイックに書けるアプリが欲しかったため、「QuickYWT」を作りました。
僕は、雑にメモをどんどん書いてしまうタイプで、あまり整理が得意ではありません。
Appleのメモアプリに、どんどんメモを書いた結果、今では、5000以上のメモが残っています。
また、メモの中身を見ると、「ToDo」「願望」「学び」など、様々な性質のメモがごちゃ混ぜになっています...
「ToDo」系のメモは、書いた当日に何回か見返します。
しかし、「学び」系のメモは、様々な性質のメモの中から探す手間もあるため、ほぼ見返しません。
改めて「学び」系のメモを見返してみると、意外と良い発見がメモされていたことに気がつきました。
とはいえ、雑にメモされているため、内容が読みづらいです...
そこで、「学び」系のメモだけをまとめるアプリが欲しくなりました。
さらに、自由フォーマットではなく、「YWT」というフレームワークに沿って、学びを整理した状態で保存できるアプリを考えました。
- Y:やったこと
- W:わかったこと
- T:つぎやること
「YWT」を使えば、「Y:やったこと」を書く必要があるため、「ToDo=これからやること」単体では書けなくなります。
アプリストアで検索しても、期待するアプリがヒットしなかったため、個人開発することにしました。
時短を意識して開発で生成AIを活用
会社員をしながら、プライベートで個人開発をする場合、「時間が足りない問題」との戦いになります。
結果として、単純なアプリでしたが、アプリの企画からリリースまでに約4ヶ月も要しました...
(初回リリース時に機能を盛り込みすぎたことも、時間がかかった要因の一つです。)
時間がかかりすぎると、リリースするモチベーションが下がってきます。
そこで、開発フェーズでも、時短を意識し、生成AI(主にChatGPT GPT-4o)を活用した結果、自分だけでコーディングするよりは、短い時間で多くの機能を開発できたと感じています。
今回は、「コーディング能力向上」が目的ではなく、「アプリを作る全工程を小さく体験する」だったため、自分でコーディングする優先順位は高くありませんでした。
僕の肌感だと、8〜9割ChatGPTにコードを書いてもらい、1〜2割自分自身でコードを書きました。
以下では、新しい機能や画面の開発時に、ChatGPTをうまく活用して開発する個人的なポイントを3つ紹介します。
1. 事前に完成系のイメージを具体化しておく
動くものを早く作りたい気持ちを抑えて、先にアプリの完成イメージを画像やテキストで具体化しました。
完成イメージがあると、ChatGPTへの指示内容も明確になり、結果として開発が効率よく進められたと思います。
例えば、画面のデザインは、Figmaで事前にざっと作っておきました。
上図から「何の画面が必要か」「画面に何の要素が必要か」などが可視化されて、ChatGPTへ指示や相談内容を明確にしやすいです。
例えば、プッシュ通知の機能を作る前には、スプレッドシートで、想定できる仕様を事前に書き出しました。
事前に期待動作を書き出すと、「いつプッシュ通知を送るのか?」「プッシュ通知のメッセージ内容はどうするか?」など細かい要望をChatGPTに明確に伝えやすいです。
これらは、仕様定義にあたる内容だと思います。
コーディングを始める前に、ある程度事前に完成イメージ(≒ゴール)を具体化しておくことで、後戻りを減らせたと思います。
2. アーキテクチャや主要なパッケージを事前に決めておく
「QuickYWT」は、MVVMを採用して作ること、また、ViewModelにRiverpodを利用すること、を事前に決めていました。
フォルダ構成も検討済だったため、必要なファイルの種類や配置場所のイメージを頭で持った状態で、開発に進めました。
その結果、ChatGPTに作成依頼をする範囲(まずModelだけ作ってもらい、次にViewModelを作ってもらう、等)がより明確になり、効率よく進められたと思います。
(今回、初めてアーキテクチャに沿って作りました。今後運用する中で、アーキテクチャの影響がジワジワと出てくると思ってます...)
3. 単体で試して動作を理解する
メインのプロジェクト内で新規機能を最初から作ろうとせず、別の場所で機能単体の動作理解を事前にすることで、後戻りの少ない開発ができたと感じてます。
ChatGPT等の生成AIがコード生成できるが故に、自分で理解していないコードも出てきます。
そのため、「理解してないけど、なんか新規機能が動いた」状態になりがちです。
しかし、機能の動作を理解してないと、アップデートする際などに苦しくなり、後々時間がかかります。
試行錯誤した結果、新規機能を開発する際には、以下の3ステップで進めると、効率よく開発を進められました。
- 作りたい機能だけを動かせるサンプルコードをChatGPTに書いてもらう
- サンプルプロジェクト内で動かして、サンプルコードを触りながら動作を理解する
- 実際のアプリのプロジェクトに移植するために、ChatGPTと一緒にカスタマイズする
肝は、「1」「2」で、追加機能単体で動作を理解する、です。
具体例として、プッシュ通知機能の導入時、ChatGPTに生成していただいたサンプルコードの事例を紹介します。
- まずは、1ファイルで動かせるプッシュ通知機能を作ってもらう
- シミュレータで動かして、コードと触りながら、プッシュ通知の時間を設定箇所・メッセージの設定箇所等を理解する
このプロセスで、「プッシュ通知機能」単体での理解をある程度深め、設定項目の理解や要件の実現に向けたカスタマイズのイメージを湧かせます。
イメージを湧かせた後、3番のプロセスに移ります。
- アプリの要件をなるべく細かくして(曜日単位でスケジュール化、メッセージのカスタマイズ、通知タップ時の遷移先画面、...)コードをカスタマイズしていく
1、2のプロセスで、初めて気がつく要件項目もあり、3のフェーズで、より具体的な指示をChatGPTに出すことができます。
例えば、「通知タップ時の遷移先画面の設定」は、サンプルコードを動かしつつ、パッケージのドキュメントを眺めて、初めて設定できることに気がつきました。
上記3ステップを踏むことで、アプリのプロジェクトファイル内での作業時に後戻りが少なく、全体的には時短になった印象がありました。
期待通りにならないこともある
とはいえ、ChatGPTも完璧ではなく、期待しないコードが生成され、想定時間内に終わらずに、苦しむことも多々ありました。
- バージョンの古い書き方のコードを生成する
- 期待と違う機能を生成する
- 期待しないパッケージを使ってコードを生成する
- ...
例えば、僕はriverpod_generatorを利用していましたが、単純に「riverpodを使って作ってね」と依頼しても、期待通りのコードは得られません。
「riverpod_generatorの書き方に従って...」など、補足する指示を出すと解決するケースもありました。
リリースした後のふりかえり
個人開発としてアプリをリリースした後のふりかえりを「よくできた点」「うまくできなかった点」で3つずつまとめて紹介します。
よくできた点
1. とにかくリリースできたこと
時間はかかりましたが、世の中にアプリをリリースまで実施できたことが、とても自信になりました。
また、アプリをリリースする工程に加えて、アップデートを含めた運用工程も一通り小さく経験でき、当初の目的はある程度達成できました。
リリースまでの一番の課題は、モチベーションの維持でした。
モチベーションを維持できた最大の要因は、コミュニティの力でした。
Flutter大学のSlackで、日々、開発状況をシェアし、色んな方からスタンプやコメントで反応いただけたことで、モチベーションを保てました。
(スタンプやコメントいただいた方、本当にありがとうございました!)
一人でアプリ開発の勉強や個人開発をしているけれど、モチベーションの維持に課題を感じている方は、Flutter大学でも良いですし、何かしらのコミュニティに、一度参加してみることをおすすめします!
僕は、もう少し早く入っておけば良かったと思ってます...笑
2. 自分自身で利用するアプリにできた
僕自身が、「QuickYWT」ヘビーユーザーになっています。
何か体験した後に、忘れたくない、と思ったことを、をささっと書く用に使っています。
今では、YWTの数は、100を超えました。
(直近で、YWT書いている数、少なくなってきてますね...😭)
3. UI周りの見た目の印象を改善できた
最初に作り始めたアプリUIから、見た目の良いUIへ、開発途中に改善できました。
改善するにあたり、マテリアルデザインを軽く勉強し、アプリ内全体で色を統一させたことで、よりUIの印象が良くなりました。
マテリアルデザインを意識するきっかけも、コミュニティ内のSlackの投稿に対して、コメントいただいたことがきっかけでした。
うまくできなかった点
開発中にも様々な課題がありましたが、開発よりも、マーケティングやサービス設計寄りの課題を強く印象に残っています。
1. コミュニティ外でのアプリの訴求ができてない
当たり前のことですが、アプリはリリースしても、認知されなければ、利用されません。
僕の場合、コミュニティ内では、開発過程を含め、日々発信を続けていました。
そのおかげもあり、20以上ダウンロードしていただいてます!(ありがとうございます!)
しかし、コミュニティ外での発信は、全くできておらず、5人ほどの知り合いに使ってもらう程度で、マーケティング系の活動が全くできていません。
本記事は、コミュニティ外への発信の一施策として、挑戦してみました。
「QuickYWT」に興味を持っていただけた方いらっしゃれば、ぜひダウンロードしてみていただければと思います!
2. 「Y:やったこと」の記入がめんどくさいケースがある
QuickYWTを自分自身で利用する中で、「W:わかったこと」をすぐメモしたいのに、「Y:やったこと」を先に書く必要性にハードルを感じるケースがありました。
例えば、ある本を読んで、別のタイミングで学びをメモしたいケースが発生したとき、同じ「Y」を複数回書くケースがあり、手間に感じることもありました。
サービス設計時に具体的な利用イメージを深掘りしないまま開発した結果、「Y:W:T=1:1:1」の設計を採用したことで、自分自身でもアプリの体験に課題を感じる機会が何回かありました。
「どう作るか?」以上に、「何を作るか?」を決める重要性を、より強く感じれた体験でした。
3. こだわって作った機能(ForYou機能)が全く使われない
QuickYWTでは、ForYou機能という書いたYWTを動画のように見返せる機能を作りました。
メモを見返さない課題に対する解決手段として、ForYou機能の開発優先順位は高く設定し、初回リリース時にForYou機能を導入していました。
ForYou機能は、アニメーションを使った機能であり、文字の表示タイミング等、設計から開発まで、1ヶ月ほど時間をかけて作った機能です。
しかし、アナリティクスのデータを見ると、全く使われていません...
僕自身も、ほぼForYou機能を使っていません。
この経験から、本当に必要最低限の「YWTを書く機能」だけでリリースするべきだったと反省しました。
ForYou機能がなければ、1ヶ月早くリリースできたと思います。
さらに、プッシュ通知機能等、他の機能もなくせば、開発自体は、数週間で完結できる規模感でした。
次回のアップデートでForYou機能削除します。利用してみたい方は、お早めにダウンロードをお願いします...笑
最後に
今回は個人開発アプリ「QuickYWT」の紹介や個人開発のふりかえり等をまとめました。
個人開発アプリをリリースし、アップデートも数回実施した結果、開発工程を一通り体験し、開発目線の課題(仕様が曖昧で作れない、バージョン変えると動かない、DBの途中変更が大変、...)も実体験として少し解像度が高まったため、当初目的はある程度達成できたと思います。
さらに、開発視点以外に、サービス設計視点の課題も認識でき、個人開発にチャレンジした甲斐がありました。
個人開発は純粋に楽しくて学びも沢山あり、時間を忘れて没頭する日々でした。直近数ヶ月の時間の流れは、体感とても早かったです。
ただし、実際の仕事で、一人で開発することは稀だと思います。
「チーム開発」の難しさは、「個人開発」と性質の異なり、コミュニケーション等、個人開発だけでは体験できない面もあるので、開発全ての解像度が上がったわけではないです。
(今年、チームを組んで参加したハッカソンで、共同開発の難しさは別物だと実感してます...)
今後の「QuickYWT」ついては、12月末までの利用状況を踏まえて、今後の運営方針(撤退 or 継続)を判断をする予定です。
少しでも興味を持っていただいた方、特に、メモをたくさん取る方、YWTをよく使われる方、日記を取る方、などなど、ぜひダウンロードいただき、試しに触っていただけると嬉しいです!
使いづらければ、すぐアンインストールしていただいてOKです...!
AppStore:
また、アプリ制作にかかった総費用や詳細なアプリ制作のプロセスは、flutter大学のコミュニティ内の個人開発発表会で紹介して、動画のアーカイブもあります。
一事例として、詳細が気になる方は、覗きにきていただければと思います。
Discussion