個人開発するならマインドマップで全てを管理し、最速でアウトプットしろ！

[ひとり開発 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/solo-developer)の21日目の記事になります。

皆さんは個人開発を行う時に開発のタスクや仕様に関する情報を何で管理しているでしょうか？
例えばタスク管理ならよく挙げられるのがTrello、仕様や技術環境に関する開発情報ならGoogleスプレッドシートや単純にメモ帳を使う人もいるかもしれません。

自分が個人開発を始めた時は色々なツールを試していて、しかも情報の種類ごとにツールを使い分けていました。
タスク管理で言えばTrelloの他にもガントチャートを作れる[Brabio](https://brabio.jp/)、あとTODO管理で有名な[Todoist](https://todoist.com/)を使ったこともありました。
機能一覧や仕様詳細、技術スタック、調査事項に関してはGoogleスプレッドシートを使っていましたね。

ただある時「自分がやりたいのは本当にこんなことなんだっけ」という疑問を抱きました。
開発の管理ツール選定やツールを使いこなすことなどはどうでもよく、そもそも本当にやりたいことは「サービス開発」つまり「**コーディング**」です。
もっと落とし込んで言うと「**コーディングに集中する為、それ以外の全てを最速でアウトプットする**」です。

それを実現する為の僕のおすすめが**マインドマップ**です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/35253dba-5250-e9d6-ad8e-3345be5245a0.png)


# マインドマップを使う理由
マインドマップは思考を可視化する為のノート術の一つです。
中央に議題となるメインテーマを配置して、テーマから連想されるアイデアや情報を線で繋げながら、分岐させるように放射状に展開していく思考方法です。
頭の中にあるアイデアや複雑な考えを漏れなく発散し、情報と情報の繋がりを整理する時に役立ちます。

なぜ個人開発でこのマインドマップをおすすめするかと言うと、次の二つのメリットがあるからです。

- **思考を最速で可視化できる**
- **ツールが統一できる**

それぞれについて詳しく説明します。

## 思考を最速で可視化できる
### 思考の発散
突然ですが、今までに会議や話し合いの場で付箋を活用して情報の整理を行ったことはないでしょうか？
発散: まず付箋を用意し、自分の思いつく限りの考えを何でも良いから書いていく。
収束: 各自が書いた付箋を皆で眺め、同じ考え・もしくは似ている考えの付箋を見つけてグルーピングを行う。

この付箋を活用した情報の発散・収束の方法は実は個人開発においても非常に重要な**情報整理術**なのです。
そしてマインドマップであれば情報の発散・収束を最速で実現出来ます。

その有用性を知ってもらう為に、ここから実際に[XMind](http://jp.xmind.net/)というマインドマップツールを用いてどのようにアウトプットするのか、一般的なSNSの開発を例にして説明していきます。

正直ツールに関してはその人が使いやすければ何でも良いと思ってますが、XMindの場合はタスク管理や優先度付けが容易に出来るので個人的におすすめです。

大事なのはマインドマップでどのように思考を可視化するかというプロセスですので、ツールの使い方ではなく具体的な手順に焦点を当てて説明します。
それでは先程話した一般的なSNSの開発を例にして、どんな機能を作れば良いのか機能一覧をマインドマップで作成します。

まずマインドマップで行うことは中心となるメインテーマを決めることです。
今回で言えば機能を網羅することが目的なのでとりあえず「機能」のトピックを置きましょう.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/4e045a33-45fc-d7f5-474b-a02c3322e7b9.png)

次に付箋を書くのと同様に、同じように思いつく限りの考えを何でも良いので項目(サブトピック)を書き出します。

ここで注意しなければならないのが、**思考をゼロベースで最初アウトプットする時は発散だけに集中してなるべくそれ以外は考えないようにしないでください。**
「**の機能って本当にいるのかな」「この考えが生まれたけど整理ってどうすればいいんだろ」とか余計に考えれば考えるほどアウトプットが遅れます。
発散において重要なのは質でなく量です。情報の整理はその後になります。

機能一覧を発散だけ集中してある程度挙げるとこんな感じになりました。
ね、情報がバラバラでしょう(苦笑)
でもこれで良いんです。アウトプットを行い頭の中を空っぽにしてあげるのが最初のステップですから。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/33e5cf91-3f4c-343f-7ec2-cab1f9b8fc53.png" width="300">

ただここまで書いてくると、情報のグルーピング、情報の重複・不要な情報、逆に不足している情報も見えてきます。

### 思考の収束
#### 情報のグルーピング
では情報の整理を行ってみましょう。
ログイン・ログアウト・新規登録を認証系としてグルーピングを行います。
また自分の情報としてマイページ・アカウント設定を「me」という一つのグループにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/91978559-16bc-1151-09b8-aea09eba8e86.png)

あくまで例ですので自分はこういうグルーピングの方が良いというのがあればそれで構いません。
チーム開発とは違って共有する必要が無いので、本棚も自分の好きな本の並べ方があるように、マインドマップにおける情報の整理も自分が分かりやすければそれで良いんです。
ただし自分が分かりやすいのと雑にやって良いは違うので、あまり雑にやりすぎて後で「見返したときにこれどういうことなんだっけ」という事態が無いように気をつけましょう汗

他にも記事・コメント・いいねの要素は関連しているので、記事を親として構成要素とアクションをまとめてみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/4ed84f0e-8f94-d24e-49e6-1e8bffcafb9d.png)

グルーピングを行っている時に必要な情報が思い浮かんだらアウトプットしてあげましょう。
基本は**頭の中に思い浮かんだら即時にアウトプット**です。

機能を掘り下げてどんな要素が必要なのか、ユーザーは何が出来るのかをまとめておくとUIデザインやマークアップ時に全体を把握出来て非常に楽になります。

ここまでで「いや、アウトプットならマインドマップでなくとも出来るんじゃない?」と思った人もいるかもしれません。
確かに発散だけだったらマインドマップでなくとも出来ると言えば出来ます。
マインドマップの良さは実は**収束**にあります。

人の頭の中というのは非常に複雑なものです。
情報は必ずしもスプレッドシートのような表やフラットな階層になっているわけではなく、ネットワークのようにつながっています。
これを理解しないと必ず情報の整理につまづきます。

例えば複雑な情報の構造を表に無理やりあてはめようとしても無理があるからです。
つまり自分の頭の中を整理する為にはアウトプットした上で自分の頭の中にあった情報の同じ結びつきを図として表す必要があります。
だからこそ自由自在に情報と情報を結びつけるマインドマップが適しているのです。

収束を行う際にはどうしても情報のグルーピングを行う為の項目移動・並び替え・階層化が必要になります。
それがマインドマップだと素早く実施出来ます。

#### 情報の補足
項目についてもっと詳細を記述したいケースは日常的にあります。それは仕様だったりタスクだったりします。
例えば上に挙げた認証についてメアド・パスワードの他にGoogleやTwitter認証を行いたいとします。
その場合は随時メモとして記述しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/6f789fd8-634b-381c-3afe-c2b8dcfab2a1.png)

#### 優先度付け
情報のグルーピングや補足により情報の可視化が出来たら各項目に優先度をつけます。
XMindはマーカーという機能を使って各項目にタスク優先度や進捗、その他の目印をつけることが可能です。
まずは大きな階層から始め、終わったら細かいレベルの項目も必要があればつけていきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/779e07c6-255c-5ea3-ca61-2be525c04a7a.png)

以上が基本的な思考の可視化を行う為の発散と収束な手順になります。
一度やったら終わりというわけではなく必要な時に随時発散と収束を行い、思考の整理をしていきます。
そしてそれはTODO・タスク管理についても同様です。

## ツールが統一できる
マインドマップの良い点はサービス概要・開発技術情報・仕様詳細・設計・タスクといった開発の全てを管理出来ることです。
タスクならこのツール、開発情報ならこのツールと使い分ける必要がありません。
情報の種類ごとにシートを分けておけば一つのファイルで開発情報が完結します。

タスク管理に関しても機能一覧と同じようにマインドマップで図式化出来ます。
例えば一から開発を始める時にユーザーの新規登録から行いたい場合は一つのパターンとして機能(新規登録)・全体(基本レイアウト作成)・環境構築で分けます。
※この図は仮にNuxt.jsとFirestoreを組み合わせたアプリ開発の例です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/71113/38e91df4-d94a-b517-5369-ea74298d850c.png)

思考の発散・収束を行った後はタスク管理として何が完了し、今何に着手しているのかマーカーをつけていきます。
図で環境構築の各項目のチェックマークや再生マークがそれです。

非常にシンプルですがこれで十分タスク管理になります。
なぜなら個人開発のタスク管理では

- **「何をしなければいけないか」**
- **「優先度は何か」**
- **「今何に着手して、何が終わっていないか、何が完了しているか」**

の三つだけ把握していれば良いからです。それ以外はオプションです。

開発を行う内に技術の調査や確認点が出てくることももちろんあります。
その場合はタスク管理のシートに含めても良いですし、「調査・確認一覧」といった新しいシートを作っても良いです。
いずれにしても全てマインドマップで記述が可能です。

#最後に
自分はマインドマップを使って開発効率や情報管理の煩わしさが劇的に変わりましたが、人には人のやり方があるのも理解していますし「いや、やっぱ使い慣れているTrelloだね！」というのも全然良いと思います。

ただ個人開発でタスク管理や開発の情報管理どうしようかなと悩んでいる方の何かの助けになれれば幸いです。僕も同じように悩んでいたので。

何か疑問や気になる点があれば気軽にコメントしてください！
それからいいねもお願いしゃっす(ボソっ)