個人開発を支えるメンタル

この記事は　個人開発 [#2 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/private-developmen2) の23日目です。

またこの記事は17日に投稿した[KURURU - テスト管理ツールを作った](https://qiita.com/hackpopo/items/5324583372c174066607)で得た個人開発を支えるメンタルについてのお話になります。

ちなみにサービスはこれです。
[KURURU](https://www.kururu.io/)

## 何でこの記事を書くのか
個人開発は**沼**と[フロントエンドの地獄](https://blog.nabettu.com/)の人が言ってました。とくに儲かるわけでも何十時間も投入していて、ぶっちゃけこの時間を受託開発をしていればワイの年収ヤバないと何度思ったことか。。

でもね個人開発はロマンある、、そう信じたい。。
そういう個人開発で散ったさまよえる魂を供養し、個人開発を応援したいというのがこの記事の目的。

## リリースしないと何も始まらない
サービスというのは自分の`localhost`に立てている限りは無価値なんですよね。だから、何が何でもリリースしないといけない。これは個人開発の目的が何であっても共通していること。オレの統計によると個人開発でリリースするだけで上位**５％**の強者になれるみたい。まあ、この数字になんの根拠もないから１０％でも５０％でも好きな数字をいれればいい。

なのでリリース出来ればそれだけで価値がある、圧倒的な感謝になるわけです。
でもね、個人開発を妨げる最大の敵は**やる気**。だいたいは**やる気 = こんなことをやって意味あんのか**という障害を乗り越えないといけない。

## やる気持続させるには
Qitaという技術記事投稿サービスにおいてやる気を支えるにはという記事を書くのは気が引ける。技術関係ないだろと怒る人もいるかもしれない。でもね、個人開発とやる気は密接な関係があって区別して考えるべきではないというのが持論があるんすよ。
ベイスターズ監督のラミちゃんも「[野球は身体的なものよりメンタルな面が大事だと思いますので、そういうところも含めて指導していけたらと思います](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%AC%E3%83%83%E3%82%AF%E3%82%B9%E3%83%BB%E3%83%A9%E3%83%9F%E3%83%AC%E3%82%B9#%E9%81%B8%E6%89%8B%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E7%89%B9%E5%BE%B4)」と言っているし。

じゃあ指導せねばと思い、個人開発の達成するためのやる気を持続させるテクニックを見ていく。

### 目標を実現するにはどうすればいい
それは、

**「目標を紙に書くと実現します」**

やばいこいつと思ったよね。いきなり精神論ですか！？
うん、エンジニアをやっていてエンジニアがこういう訳わからんことを嫌いなのも知ってる。「そういった精神論がブラック企業を助長して…&**^%90」という反論まで推測出来た。個人開発と関係ねえじゃん。

実はこれは元ネタがあって[非常識な成功法則](https://www.amazon.co.jp/dp/B00MY68D9S/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)という本に書いてあること。(タイトルが既に怪しい)
オレも初めて読んだ時はマジで胡散臭いと思った。でもね、その後に書いてある「紙一枚と、数分の時間だけ使えば達成できるのにあなたにどんなリスクがある？」という文面があって図星だったね。科学的・非科学的ということを検証する暇があればすぐに書けばいいし、実現しなくてもまあいっかとなる。少し具体的に書くと、紙に書くことで脳が目標を認識して目標をつながることを自動的に収集してくれるということ。例えば、沖縄旅行を行きたいと思ったら自然と沖縄旅行の記事が目に留まるということ。この本にはもっと詳しく紙に書く効果を書いてあるから興味ある人は読めばいい。

だいたい、個人開発というそのものが非論理的だし、冒頭のその分受託開発すればという話になってくる。それなら、非論理的なことでもとにかく試してみればいいじゃんということになる。

実際、紙に書くという効果は自分の場合１０個書き出して４個は１年で目標を実現した。ちなみに彼女を作るというという目標もあって達成出来た。つまり、個人開発で目標を紙に書けば彼女が作れるということだ。恐ろしい。。

### 開発前の準備
(基本的にこれ以降に書く内容は開発期間が1ヶ月以上かかるのが想定である)

開発着手前には仕様を洗い出しておくことの方が良かった。えっすげえ普通じゃんと思うかもしれないが個人開発でやっていくとついつい手を抜きがちになる。開発しながら仕様を考えればいいと当初オレも考えていた。
ただ、実際にやってみると開発しながら仕様を考えるのは脳のスイッチコストが馬鹿にならない。テンポが悪くなり、進捗が悪くなり、やる気を失い現実を忘れるためゲームをするというコースに突入する。そのため、仕様とワイヤーフレームの作成は開発前に終わらせておく方が良い。
仕様を考えている間に熱が冷めちゃはない？というツッコミもあるが、開発していればどちらにせよ途中で熱は冷めるし、仕様段階でかなり冷めるならばむしろ前向きに考えて着手しなくて良かったと考えられる。

### タスク管理
まずタスク管理はした方が絶対に良い。もし、1ヶ月以内の開発であればしなくても気合で何とかなるかもしれないが、それ以上であればきちんとタスクを切った方が良い。何故、切った方が良いのかは自分のやる気に出来るだけ依存させないことが重要であるから。個人開発はある意味総合格闘技であるため、どうしても自分が不得意な作業もやる必要がある。そういう時は細かくタスクを切りまるで草になったような気持ちでタスクを消化していくしか方法がない。

オレはGithubのプライベートリポジトリで開発して、Projectsの機能でタスクを管理していた。色々タスクツールを試してみたがこれが一番良かった。

### やる気を維持しつつ作業する
タスクによっては完了するまでに時間がかかるタスクもある。そういう時は細かく切った方が良いがタスクを切るのも時間がかかるし、これ以上切れないということもある。
そういう時は、２５分間という**時間**で区切るとよい。いわいるポモドーロテクニックと呼ばれる手法である。
オレの場合、２５分間やってスプラトゥーンを２戦してまた２５分間やって、スプラトゥーンを２戦やって、負けこんでついでに１０戦ぐらいして色々やって乗り越えてきた。

一番やっちゃいけないのは今日はここまでタスクやるぞ、終わんねえ、、マジ個人開発無理という心境になること。ここまでやるという目標を立てて達成出来ない場合高確率で落ち込むので、開発は時間で区切った方が良かった。
週１０時間分を１日で達成するより、２５分間のタスクを毎日やった方が長期的にみるとメリットがある。

### 技術チャレンジ
個人開発において技術的な挑戦をしすぎると時間がかかりやる気が持続しないという通説がある。確かにその通りの面はある。ただ、１ヶ月以内でリリースをするのが条件ならばという話だ。
自分の場合は開発期間が7ヶ月間ぐらいかかった。正直、かなりダレていた時期もあった。しかし、ダレていても技術的な挑戦があれば試してみようと機会を持つようにした。。また、リリース後の運用が本番なので、そこで自分の中で枯れた技術を使用していくのはやる気という面を見てもオレの場合明らかにマイナスであった。
**サービスが伸びすぎていて、新しい技術を試す暇もない**という状況ならまだしも、まだ誰もいない状況ならそこまで枯れた技術で縛りプレイしなくても良くない？とオレは思う。

まあ、これは技術的な挑戦が好きな人向けの話ではある。重要なのは自分にとって何がやる気を上げるのかは把握しておいた方が良い。重要だと感じればそこはぜひ自分のエゴを守ってほしい。


## まとめ
個人開発は結局やる気が持続出来れば何とでもなる。
ただ、持続させるのが難しいだけ。だから、メンタルの持ち上げ方も工夫しないとどんどん下がってしまう。
そういう時は上記のテクニックを使ってメンタルをコントロールするのが良い。