【Next.js×Django×Docker】プライベートでの共同開発で初めてリーダーをしたけど7ヶ月かけても形にできず断念した話

# はじめに
私は**Wakreate**というエンジニアのコミュニティを去年の秋に作りました。

https://discord.gg/D48Xcndb


（メンバーは大学生から社会人数年目の方くらいの層です。勧誘も全然してないですし、のらりくらり気ままに活動してるコミュニティなので興味あればぜひ覗いてみてください。）

そこでの活動の一環として、みんなで一緒にアプリを作ってみよう！という話になり、初めてリーダーみたいな立ち位置となって共同開発をすることになりました。（開発メンバーの方、認識間違ってたらごめんなさい笑）

私はバックエンド、他の2人のメンバーがフロントエンドを担当し、計3人のメンバーで開発しました。

しかし、タイトルにあるように、そのアプリを形にすることまでできず、途中で断念することになりました。

今回の記事では、この経験をもとに、**何故形にできなかったのか**、そして**次はどうするべきか**を書いていきたいと思います。

さて、WakreateのDiscordサーバでチャンネルを新たに作成し、こんな会話から開発がスタートしました。
> （私）なにから決めていきましょうか？
> （開発メンバー）要件定義じゃないですかね？
> （私）要件定義って何ですか状態ですw

この会話から分かるように、何からすればいいか全然分かっていない状態からスタートしています。

コーディングや環境整備に関しては経験したことがあるのでこれから書くように色んなことをしましたが、設計やマネジメントなどのことがほぼ分からないレベルという前提で読んでもらえると嬉しいです。

他のメンバーの記事はこちら！

https://blockchainnft.tech/?p=402

# 作ろうとしたアプリ
1人のメンバーが「勤怠管理をエクセルで行っている」という話をしていたのをきっかけに、アプリを作ってその会社に売ろう！と意気込んで、勤怠管理アプリを作ろうとし始めました。

私の担当はバックエンド全般でした。

APIの処理を書いたり、データベース設計をしたり、GithubやDockerを使った開発環境の整備などをしたりしていました。

最終的なシステム構成はこんな感じでした。

![システム構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2906464/6c95d4fc-75f5-28fe-d543-750c56869dc2.png)


実は初期段階では、DjangoではなくFastAPIを使い、さらにSQLは全てベタ書きしていました。当時はデータベースについてちょうど勉強していたので勉強になって良かったは良かったのですが、あまりにも管理が大変。データベースに変更があったときにいちいち一つ一つのSQLを直していってはいくら時間があっても足りないなと感じました。ORMという便利なものがあると知ったのは後のことです。

このままFastAPIで作っても良かったのですが、その期間中にDjangoを触る機会があったので勉強し始め、このアプリでも最終的にDjangoを使いました。

フロントエンド担当が2人いたので、Djangoの初期装備としてブラウザ上の管理者サイトからデータベースを直接いじれることに魅力を感じたからです。

そして、最終的に出来上がったものはこんな感じです。

![スクリーンショット 2023-07-09 224302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2906464/a291783b-4a1d-454d-693b-6c011919e587.png)

画面としてはテンプレートを使っている（？）のでほぼ完成に近い形です。（フロントはお2人に任せていたのでよく分かりません笑）

ただここに書かれているデータは全部ベタ書きで、データベースとの連携は全くできていません。

開発をスタートしてから7ヶ月が経ち、ようやくデータベースとの連携ができました。ユーザの新規登録をして、ログイン処理をするという、側からみるととっても簡単な処理です。

流石にこれ以上やっても形にならなさそうだし、やる気も続かないとのことでここで断念することとなりました。

# 挫折した原因
## Webに関する理解が足りなかった
どういう流れでどんなデータがやり取りされてるのかという知識が足りていませんでした。OSI参照モデルなど、言葉では知っていても理解がちゃんとできていないことが多かったのかなと思います。**何かモノを作り出すためにはちゃんと理解をしておく**必要があるなと身をもって感じました。幸いにも、開発期間中にWiresharkというパケット取得・プロトコル解析ソフトを見る機会があったので、そこでクライアントとサーバ間でやり取りしている生のデータを実際に見てからは少し理解が進みました。

## 期間を決めなかった
初めてなのでどんくらいの期間で作れるか分からなかったため、とりあえず作ろう！と言って期間を決めていませんでした。これがズルズルと開発が長引いた要因の1つかなと思っています。仕事で開発しているわけではないので、**飽きたら次のアプリを作ろう**ともっと軽い感じで開発していってもいいのかなと思いました。

## 習得できてない技術を使おうとしすぎた
Docker, FastAPI, Django, データベースなどバックエンドの技術だけでも割とおなかいっぱいなのに、そこに全く知らなかったNextjsまで入ってきました。かなり大変でした。フロントを担当していた2人も上の4つについてめちゃめちゃ詳しいわけではなかったので、**フロントエンドとバックエンドをつなぐ部分**を実装するのにかなりてこずりました。この部分だけでも画面共有をしながらお互いの知識を共有し合い、一緒にコーディングすればよかったなと思いました。

## 1人で進めすぎた
私はバックエンドを担当していたのですが、やる気ができときにガッと集中して作り込むということをしていました。今思い返すと、これだと他のメンバーと連携がとりづらく、メンバー同士で**認識合わせ**がちゃんとできていなかったのかなとも思ったりしています。

## 形から入りすぎた、先を見すぎた、焦りすぎた
こんな調べたらどこにでもありそうな勤怠管理アプリ、売れるはずありません。にも関わらず、売ることを想定しすぎて、データベースをガッツリ作り込んだり、機能を増やしすきたりしました。最初は機能を最小限にし、ある程度形になったら機能を増やしていこうと思ってはいたのですが、機能を増やしやすいような設計にしようとばかり考えてしまって結局時間がかかってしまいました。**機能を増やしたくなったら新しいアプリを最初から作る**くらいの感じで開発するのがいいんじゃないかなと今は思っています。

# これから共同開発をしようとしている人へ
早くアプリを作って実績を作ったりお金を稼いだりしたいって気持ちはものすごく分かります。

けど、ほんの数ヶ月勉強しただけのほぼ素人が作ったアプリで稼げるようになることなんてほとんどないなとこれまでの経験から感じるようになりました。

これは自分にも言い聞かせたいことですが、**そんなに焦りすぎず、ゆっくり成長していけばいい**のかなーと思います。

# さいごに
今回はプライベートでの共同開発で初めてリーダーをしたけど7ヶ月かけても形にできず断念した話をしました。

聞きたいことがあったり文章のミスがあったりしたときはコメントもらえると嬉しいです！

また、今回学んだことをもとに、今は新しいアプリを作ろうとしています。またひと段落したら記事にするつもりなので、ぜひ楽しみにしていただけたらなと思います。

最後まで読んでいただきありがとうございました。