業務外の【プライベートなチーム開発】は大変だという話【作成したアプリ有り】

## 「プライベートで開発しようよ！」

会社の同僚やエンジニア仲間で話をしていると、**「今度、誰々とアプリを作ろうと思っている」**、**「今ある計画が動いている」** なんて話をよく耳にします。
しかし、半年後ぐらいに今どうなっているの？と聞いてみると、ホスティングされている開発途中の成果物がみることができれば良い方で、**大体頓挫している**ような気がします。
どんなクオリティのものであれ、とりあえず**リリースまで漕ぎ着けるというのはかなり珍しい**ケースでしょう。
なので、プライベート開発で形にしている人というのはそれだけで素晴らしいのだと。
偉いのだと。
というわけで、↓ **こういうものを作りました**:tada:

https://slide-commenter.com/

こちらは、スライドについてコメントが飛ばせるというアプリです！


今回は、チーム開発でアプリを作ったけど、それをどうやって形にしたかと、それをやり切るための難しさみたいなものを振り返りたいと思います。

## はじまり

ある日、メンターであるDさんと雑談をしている中で、こんな話をしていました。
　
me
「全然関係ないんですけど、**何かプライベートで作ってみたいサービスとかってあります？**」
Dさん
「ありますあります。〇〇なサービスが作ってみたいです。絶対需要あると思うんですよね」
me
「いいですねー、私も××なサービスを作ってみたいって構想があったりします」
Dさん
「いいですねー」
me
「いいですねー」
Dさん
「...」
me
「...」
Dさん
「なんかこう、勉強がてら**一緒に作ってみたりします？**」
me
「**やっちゃいますか**」

そんな流れで、とりあえず作るかも？という雰囲気が発生し、ふわっとするのかなと思いきや、
Dさんの抜群の**ブルドーザのような突進力**であれよあれよと進んでいきました。
DさんはAWSのIAMや、Githubのレポジトリ、プロジェクトの管理方法の準備、ドキュメントの整備などを進め、
プライベート開発に興味がありそうな人に声をかけ、**気がついたら**5人で構成された**チームができあがっていました**。
まるで**キューピー3分クッキングをみているような感覚**でした。


![スクリーンショット 2022-10-02 15.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/e4860f40-b958-48af-8595-04a1ab31f6db.png)


## 何を作るの？

チームができたものの、何を作るかまでは決まっていませんでした。
そこで、ひとまずは簡単そうで**チーム開発の練習になりそう**だということで、メンバーの Hさん が温めていた、 **『スライド形式で発表する際に、聴講者からのコメントをリアルタイムで流せるサービス』** を作ってみることにしました。
それが冒頭にある [SlideCommenter](https://www.slide-commenter.com/) です。
私が触ってみたいという要求から、 技術スタックとして AmplifyCLI が採用されました。

## 動き出し

案は決まったのですが、最初の `create nuxt-app` から誰も手をつけない、残った最後のケーキの一切れをみんなでにらめっこしているような状態が少し続きました。
私は、 Amplify を触ってみたいという意欲がかなり強かったので、とりあえず下地でもつくるかということで、Amplify Backend の基礎となる部分を作りました。
その頃はデザインもなにも決まっていなかったのですが、今回のアプリはそんなに複雑なことはしていないので、必要そうな最低限のバックエンドとフロント部分を作りました。
（多分使い慣れている人だったら一瞬でできる内容です笑　知識がほぼ0からやると結構時間がかかるんですよね...笑)

全然関係ないですが、 Amplify CLI のこれさえあればなんでも作れる感に感動して、Amplify のドキュメントをずっと眺めていました。
最新のドキュメントと古いドキュメントがあって、古いドキュメントの方にしか書かれていない使い方があったり、Amplifyのバージョンが違うと挙動がかなり変わったりするのでハマりました笑

![スクリーンショット 2022-10-02 3.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/d6d2f763-3658-8289-0f28-ea09a3cc2176.png)



## 減速

そんな流れで最初の方はガシガシ作ることができていました。

しかし、 Amplify が関係する部分を一通り終えて、基本的な仕組みを作った後から **開発にエネルギーがいるかも...** と感じ始めていました。

元々は一人で全部作り切っちゃおうぐらいの気持ちでした。

ただ、開発をしてみてわかったのですが、Amplify には強い興味があっても、Nuxt.js にはあまり興味を持てなかったのでした。

元々 Next.js は触っていたので、同じようなことをするだけだと思っていたのですが、
私にとっては、同じようなことをもう一度調べ直すような感覚に陥り、心理的な学習コストが高く感じてしまっていました。

また、ちょうどその頃から仕事が忙しくなり、心理的な余裕がなくなってきたのも大きな原因の一つでした。

こうして、プロジェクトの開発速度が減速しはじめたのでした。

![スクリーンショット 2022-10-02 15.09.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632997/162b1d80-b896-3568-eca7-0ff65f74e873.png)

## どうなってしまうのか！?

開発がぬるっとはじまって、そのままぬるっと進んでいくかのように見えたのですが、実際に開発してみて**継続させるのは難しい**思いました。
なんなら、この頃は**アプリ完成しないかも**なぁ...と、うっすら不安に思っていました。
「どうなってしまうのか?!」と書いてはいますが、結果的にアプリは形になってます笑
端的に言えば、メンバーの Dさんが 色々調整していただいたおかげで、新しいメンバーYさんを誘い、開発速度の維持を回復してくださりました。
この辺りのチームビルドについて **何を意識していたのか** については Dさん の記事にて記載されています！
Yさんはプライベート開発には興味があるけど、個人開発ではモチベーションが続かないが、**チーム開発だとモチベーションを維持できるというフロントエンドの方**でした。
なので、 Yさんによって、私の食指が伸びなかった箇所を補ってくださったのでした！

## 自分に対する考察

**興味があることに関して**は、 **やってみよう！** となりますが、そうでないことに関しては、とてもハードルが上がるのだなと思いました。
**業務が終わって疲れている状態**で、**任意開発**となるとなかなか取り組むのにも**ハードルが高い**ように思います。
また、これは私個人の感覚ですが、途中までコミットしていたのにコミット速度が遅くなるとどこか後ろめたい気がしてきて、それがモチベーションが下がって...のスパイラルを産むような気がします。

そういう意味で言うと、チーム開発より、**個人開発の方がモチベーションは保ちやすい**ような気がします。

興味という点で言うと、元々私がバックエンドというのもあり、AWSと親和性が高い Amplify は馴染みがあったのですが、**元々強い興味がない方にとって**は Firebase の方が馴染みがあるようで、そういう面では他の人が**触りにくい技術スタックを選んでしまった**ことも、チームとしての開発速度を遠回しに下げてしまったのかなと思います。
というわけで、今回の自分自身の開発速度の推移から、**開発速度を下げないため**には**以下が必要**なのではないかと思いました。

## 開発速度を下げないコツ

- 最小公倍数のみんなにとって**ハードルの低い技術スタック**を選定する
- 各個人の**興味の対象や有無**を明確にする
- とにかく**モチベーションに焦点**を当てる
- **メンバーを追加**できる体制をつくる


## まとめ

以上です！
このあたりはなんとなく事前に想像ができる点ではありますが、**いざ経験してみるとその重要さが身に染みました**。笑
この辺りの知見が誰かの役に立てば幸いです。

## 開発メンバー関連リンク

この経験について開発に携わったメンバーの記事へのリンクも貼っておきます！
それぞれの**感じ方が異なって**てなかなか面白いです笑

チームビルドをしたDさんの記事
https://qiita.com/Dai_Kentaro/items/2accfa8cc7d6bb4cda16

開発後半、主となって色々対応してくださった Yさんの記事
https://qiita.com/takusan64/items/1035ae5f0ac57cdf64bd