友人との開発で難しかったこと

# 序章

みなさん、プライベートで友人や知り合いと開発を行った経験はありますか？
あるいは、これから始めようと考えている方もいらっしゃるでしょうか？

この記事ではそんな方々に向けて、私の失敗談を通じて友人との開発における難しさを共有しようと思います:angel::v:

今回の開発プロジェクトは最後までいかなかったので、それぞれの課題を解決できていませんが、「今思えばこういうことすればよかったかもしれない」こともあわせて共有するので、なにかしらみなさんのプロジェクトの参考になれば幸いです:thumbsup:

# 始まりの物語
ワイ 「プライベートでなにか開発したくない？」
友人A 「ええやん。ワイは最近仕事でコーディングしてないから、やってみたいな」
友人B 「勉強がてら参加させてや」

こうして、私たちの冒険は始まりました。

# 目の前に立ちはだかる壁
友人と軽い気持ちで始めてみた開発ですが、始めてみるといろんな壁にぶち当たりました。

## もしかして作りたいアプリってあまりない？
私のような`作るものは割と何でも良くて、アプリ開発が好き`な人は、いざ「アプリを作るぞ！」ってなったときに何も思いつかないこともあると思います。
こうなると、無理やり困ってることとアプリをつなげようとしてみたり、「それ誰が使うの？」みたいなアプリに（私は）走りがちです。
こうなると、そもそも「みんなでなにか作る」が破綻してしまいます。
というか、今の私がそんな感じです。ﾀｽｹﾃｰ:ambulance:

<details><summary>解決策</summary>
アプリを作ろうって話が挙がったときは、漠然と「開発がしたいなー」みたいなぼやっとした感覚だった気がします。
面白いアプリや誰かに刺さるアプリを作りたいなら、日常的にアプリについて考える必要があると思いました。

根本的な解決法はわかりませんが、おぼろげながら:point_down:こんな案があるのかなと思います。
- 日常で感じた不満をメモする場を設ける
- ネットでアイディアを公開している人のアイディアを真似する
- 既存のアプリをなぞる（勉強目的であればあり）
</details>

## イケイケドンドン
これは私がそうなりがちなのですが、見切り発車的に開発を始めるのはやめたほうが良さそうです。
あとから聞くと:point_down:こんな意見が...。
- Githubの運用方法がわからない
→個々人やチームごとに文化が異なるので、はじめにすり合わせるべきでした
- 開発の方針が見えないから、どう手を付ければいいかわからない
→スクラム的な感じで、issueを切ってやりたい人がタスクを巻き取ればいいと考えていましたが、プロジェクトが軌道に乗ってない状況では無理な話でした:smiling_imp:

何も決めてないのに前に進むわけ無いですね:thunder_cloud_rain:

<details><summary>解決策</summary>
始まる前に話し合いの場を設けて、どう進めるのか、どういうルールを設けるのかを決めると良いと思います。
決めきれない部分や、不満がある部分はあとからどんどん変えちゃいましょう。

決めた内容はチャットで共有するのでもいいですが、私は口頭で説明して議論したほうがいいと感じました。

</details>

## 技術選定難しい
今回集まった３人はそれぞれが異なるスキルを持っていました。
　私：Python
　友人A：C#
　友人B：Java

こんな状況だったので、なんでもいいよねーっていうことで、今後も流行りそうなGoに決めました。
実際始めてみると、Goと他の３人がやっている言語が違いすぎて、別の言語・フレームワークに鞍替えすることにしました:umbrella:

（Goはいつかやってみたいです。）

<details><summary>解決策</summary>
</details>

## プロジェクトのリーダーが不在
友人同士ということもあり、特にリーダーを決めずにアプリ開発を進めていました。
ただ、リーダーが居ないことにより以下のような弊害が生じました。
- 意見が衝突したときに決める人がいない
- 開発方針が決まらない
- タスクが進まない

友人同士なので、逆に気を使って意見を言えないこともあると思います。
なので、フラットに決めてくれる人がいるほうが、意見を言い合えるんじゃないかと思いました。
リーダーがタスクを割り振るほうが、進めやすい気もしました。
<details><summary>解決策</summary>
誰でもいいのでリーダーを決めてしまいましょう。

リーダーがアプリの設計方針とか、技術選定とか、ルールとか決めちゃってもいいと思います。
タスクも必要であれば振ったほうがいいと思います。
（とはいえ、それぞれ事情があるので、勝手にタスクを割り当てて、終わっていないことを責めるみたいなことにならないようにしたいですね...）

リーダー云々の話とは関係ないですが、振り分けるタスクは小さいほうがいいと思います。
可能であれば1時間以内で終わるものだと最高です:sunny:
（大きいタスクだと腰が重くなってしまうので...:no_good:）

</details>

## 納期あると堅苦しくなっちゃうよね
友人同士で気軽に開発するからー、っていうことで私達は納期を決めずに進めていました。
ただ、納期を設定しないと完成が無限に後ろ倒しになってしまいます:ghost:

<details><summary>解決策</summary>
シンプルに、いつまでに完成させたいか目標を決めましょう。

[ゴールどこ？](#ゴールどこ？)の章に繋がりますが、目標は近めがいいです。
半年後とかにすると、目標が遠すぎて勢いがトーンダウンしてしまいます。

</details>

## 未知に挑戦しすぎ
せっかくプライベートで開発するんだから、新しいこと、モダンなものに手を出したくなりますよね？
この考え方自体はいいことです。ただ、多すぎると重荷になってしまいます。

私たちの場合は、こんなこと:point_down:に挑戦しようとしていましたが、これが原因で進みが遅くなってしまい、結果的にモチベーションが落ちてしまった気がします
- 初めてのスマホアプリ開発
- 初めてのReact(Expo)
- DDDやってみたい
→覚える／考えること多すぎ

<details><summary>解決策</summary>
挑戦は1つか2つに絞りましょう。
そもそも新しい言語、フレームワークに挑戦しているのなら、他の新しいことに挑戦する余裕なんてないです:umbrella2:
</details>

## モチベ保つのむずかしくない？
開発を始めるとモチベーションを保つのに苦労すると思います。
私も最初こそ、なにかタスクを作って取り組んだりしてましたが、次第にやらなくなっていきました。

<details><summary>解決策</summary>
やる気が湧いてくるのを待つ...ではなく、とにかくやるようにするようにしましょう。
1日1行だけでもいいのでコードを書きます。
なんだかんだ1行書いたら、もっとやりたく事が多かったので、有効な手段だと思います。
実際に1行しかかけなくても1年後には365行かけてるので、0よりはマシです:sun_with_face:

[やる気なんて存在しない](https://www.google.com/search?q=%E3%82%84%E3%82%8B%E6%B0%97+%E5%87%BA%E3%81%97%E6%96%B9&rlz=1C1FQRR_enJP948JP948&oq=%E3%82%84%E3%82%8B%E6%B0%97%E3%80%80%E5%87%BA%E3%81%97%E6%96%B9&gs_lcrp=EgZjaHJvbWUyCQgAEEUYORiABDIHCAEQABiABDIHCAIQABiABDIHCAMQABiABDIICAQQABgFGB4yCAgFEAAYBRgeMggIBhAAGAUYHjIICAcQABgFGB4yCAgIEAAYBRgeMggICRAAGAUYHqgCCLACAQ&sourceid=chrome&ie=UTF-8)

</details>

## ゴールどこ？
私達は家計簿を記録するアプリを作成することにしましたが、どこまでどんな機能を盛り込むのか決めていませんでした（たぶん）。
やり始めるとわかるのですが、入れたい機能ってたくさんありますし、UIなんかはこだわろうと思えば一生こだわれます。
こんなふうに、あれもこれもと考えていると、目の前に広がる膨大な量のタスクに圧倒されてしまいます。
その結果、足がすくんで一歩も踏み出せない状況になりかねません。
というか私はなりました。
[未知に挑戦しすぎ](未知に挑戦しすぎ)たのも原因の一つですかね:angel:

<details><summary>解決策</summary>
まずは、ゴールを決めてしまいましょう。
このときに設定するゴールはすぐ達成できるレベルがいいと思います。

例えば、家計簿アプリだったら`買ったものを記録できる`をゴールにするとか。
もう少し詳細にするなら、`どのお店で、いつ、いくら使ったかを記録できる`とか。

このレベルをゴールにしてさっさとリリースしてしまいましょう。
（AppleStoreだと審査が厳しくて通らないこともあるかもしれませんが、その時はその時です）

</details>

# 終章
そんなこんなで、私たち３人で始めたアプリ開発はフェードアウトしていきました。
今でもこの３人でなにか作りたいなとは思っているので、もっと前に進められるような方法とりたいですね:triumph:

ここに挙げた内容がうまく解決できても、新たな課題は出てくると思いますが、それは別のお話:kissing::point_up: