【備忘録】個人開発をチームで行ったら、初めてアプリをリリースすることができた時に感じこと

# みなさんはプライベートで開発をやったことありますか？
エンジニアの皆さん、プライベートで1度は個人開発をやってみたこと、「**そして挫折したこと**」の経験があるのではないでしょうか？
私も作りかけの個人開発リポジトリに、いくつお墓を立てたか数えきれません...
そんな**個人開発の挫折マスター**である私が、チーム開発で初めてアプリを作り切れた時に「感じたこと」や「考えたこと」を書かせてもらえればと思います。


ちなみに作ったアプリはこちらです！:tada:
![スクリーンショット 2022-10-10 2.07.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/193965a9-cb2c-c89f-ca56-53850267bc92.png)

https://www.slide-commenter.com/

LT会などで発表者が資料の画面共有を行うと思いますが、その資料にコメントを流せるアプリになります！
発表んスライドを盛り上げるのに、よろしければ使ってみてください！

# こんな人に読んでほしい
- プライベートでのアプリ開発に興味がある人
- 個人開発のリポジトリにお墓を立てがちな人
- アプリ開発が好きな人

:::note warn
本記事は筆者の主観が多く含まれています。
:::

# 1. お金をかけないでリリースできる手段を最初に考えよう
個人開発で一番怖いのは、AWS等のインフラサービスを利用する料金の請求回りではないでしょうか？
普段の開発業務では費用が会社負担のため、「**10万円くらいならOKかな..**」という気持ちで運用を開始できますが、個人でそのくらいの金額を負担するとなると相当の覚悟が必要になります。
また個人開発の初期状態ではマネタイズの仕組みも検討できていないケースも多く、「**収益が発生しないのに、費用だけ重なっていく**」という最悪のスパイラスに陥ります。

無料で始められるインフラサービスやマイクロサービスとして、
- [Firebase](https://firebase.google.com/?hl=ja)
- [Supabase](https://supabase.com/)
- [microCMS](https://microcms.io/)
- [Vercel](https://vercel.com/)

など...他にもたくさんあると思います。
もちろん有料のサービスは無料プランでは実現できない、**痒い所に手が届く**ような機能がたくさんあります。
「**インフラ構成簡素化**」と「**料金**」はトレードオフの関係にあるかなと思いますが、開発を始める前にどの程度の料金だったら許容できるか考えてみてはいかがでしょうか。

今回の開発では[Amplify](https://aws.amazon.com/jp/amplify/)という従量課金制のAWS系システムを使用しましたが、料金が膨れ上がるリスクを考えたら[Firebase](https://firebase.google.com/?hl=ja)でも良かったかも？という話も上がりました。

# 2. 個人での開発が続かない人はチーム開発を試すべき
私の個人開発が続かない理由としてよくあったのが、**最初の数日は進むが、その後に燃料が切れてフェードアウト**のパターンです。
これを解消するのにチーム開発はとても有効的だと感じました。
やる気というのは日に日に薄れてゆくものです。
その薄れたタイミングでチームメンバーと会話したり、コミットを見たりすることで「**自分も頑張ろう**」とモチベーションの回復をすることができます。

また個人開発は「**気になる技術に触れることができる**」という大きなメリットがあるのに、開発プロセスが多いことから`キャッチアップに時間がかかるためすぐにリリースできない`、`早くリリースするために今回は利用を諦める`といったことも起こり得ます。
当然のことながらチーム開発を行うと作業分担できるので、自分が挑戦したことのない分野に割ける学習時間が多くなるため上記の事態が発生しずらくなります。

今回の開発で言うと、
- インフラエンジニア　-> Nuxt.js
- バックエンドエンジニア -> Amplify
- フロントエンドエンジニア -> Figma

のように、各々**気になっている技術**や**普段できない開発工程**を経験することができました。
また普段関わらない作業を行うことで、その職域で業務でやっている方がいかに素晴らしい仕事をしているか知ることが出来ます。
(私の場合、デザイナーさんすごい...ってなってました笑)

またそれ以外にも各々の本業分野での知識共有がフラットに行われたりして、自分が知らない分野への知見がとても広がりました。

# 3. タスクはきちんと切ろう
当たり前っちゃ当たり前ですが、きちんとタスクを切って「やるべきこと」、「やりたいこと」の可視化と担当を決めましょう。
普段の業務での開発だと当然やっていると思いますが、個人開発だと疎かになることが多いと思います。
特に複数人で開発する際は、「**誰が**」「**どこまでやるのか**」を明確化しないと特定の人にタスクが集中してしまい空中分解してしまう可能性があります。
今回の開発では、[GithubのProject機能](https://docs.github.com/ja/issues/planning-and-tracking-with-projects/learning-about-projects/about-projects)を使ってタスクの管理を行いましたが、[Notion](https://www.notion.so/ja-jp)のような無料ツールでも全く問題ないかなと思います！

[**Github - Project機能**]
![スクリーンショット 2022-10-14 7.39.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469819/77545bc6-e1fc-6cdd-dfb3-9d27687e21b8.png)

今回の開発の中盤では、あまりタスクの切り分けがきちんと運用できておらず開発スピードが鈍かったように感じました。
その点から後半はタスク切り分けを丁寧に行い、機能改善やタスク切り分けがきちんと行えたため**リリースの目標日**をズラすことなく公開することができました！
特に個人開発はお給料が発生するわけではないので、「**開発のスピード感**」というのは非常に大切だと思います。
前項でも触れましたが、個人開発は「**モチベーションの維持**」が一番の肝だと思います。
繰り返しになりますが、**スピード感の維持**と**本当に必要な機能なのかの可視化**を行うために、タスクの切り分けは絶対にやりましょう。


# 4. チーム開発では意思決定者が必要
今回の主要開発メンバーは4人だったのですが、複数人で開発すると必ず「**異なる意見**」や「**改善要望**」が上がったりします。
例えば、

Aさん：「認証機能をつけた方が企業も使いやすいと思うから入れましょう！」
Bさん：「今回のリリースではユーザーに使ってもらえるか確認したいから、認証はいらないと思います」
Aさん：「◯△×◯△×◯△....」

のような会話は往々にして発生すると思います。
意見の発散はもちろん大事ですが、収束させる人がいないと話し合いの時間を無駄に過ごしてしまいます。
そんな時に、

意思決定者：「今回のリリースでは、アンケートフォームを追加してユーザーの要望を聞こう。その際に認証機能の必要可否も一緒に聞きましょう。」

のような決定を行える人がいると、メンバー間でのわだかまりが出来にくいのかなと思います。

私は今回の開発に途中でJoinしたのですが、既にPOを立てて開発していたので意思決定のフローが構築されており素晴らしいと感じました...！
(業務だとPMやPOが意思決定をしてくれるため、この部分は意外と見落としがちかもしれませんね。)


# 最後に
業務を行いながらプライベートで開発するというのはとても根気のいることかもしれません。
ですが、それ以上に得れる**経験**や**知識**があると思います！
この記事が少しでも個人開発のモチベーションになれば幸いです:star:

一緒に開発をしてくれたメンバーも開発時の感想記事を書いてくれてますので、よろしければ見ていってください！

https://qiita.com/ItsukiN32/items/2c417bbf1cadd3f9ef4c

https://qiita.com/Dai_Kentaro/items/2accfa8cc7d6bb4cda16