熱量あるうちに仕組みを作っておくと楽

2024/09/21

個人開発の最大の壁はモチベーションだ。個人開発は本業とは別でやる趣味の開発のことだが、平日の朝や夜、土日の時間を使ってやっている。自分の100%好きなものを作るので最初は楽しいが、数週間経つと徐々にその楽しさにも慣れてくる。そして仕事やプライベートが忙しい日々が続くとなかなか時間が取れなくなってきて手が止まり、一度止まるとモチベーションを再燃させるのは難しい。会社の仕事と違い、別にやらなくても良いことだから。モチベーションの曲線をプロットすると最初に山があり、そこから右肩下がりになるのが通常だ。

このモチベーション問題を解決するために自分が考えたのが爆速でリリースすることで、とにかく飽きが来る前に作りきって世に出してしまう。世に出せば使ってくれるユーザーがいたり反応の声があったりするので、また違ったモチベーションを得られる。何を作るかを考えたときにあまりに時間がかかるものは除外し、今の自分が数週間で作れるものに絞って考えていたところがある。これまで過去に20個くらいアプリやWebサービスを作ってきたが、振り返ってみると徐々に難易度の高いものとなっている。最初は公開されているAPIを利用し内容を表示するだけのアプリ、次は自分でデータベースを持つアプリ、次にUIを作り込んだアプリ、次にWebSocketを使ったアプリ。サービス開発では似たようなUIや機構は使いまわせるので、一度作ったものがあれば次回同じような手順は時短できる。これを続けるといろんなものが数週間ほどで作れるようになってくる。

段階的に難易度をあげるのは自分に合ったやり方だったと思うが、もちろん一択の正解ではない。ある友人は元々エンジニアではなかったが、個人的に欲しいアプリがあり、それを作るためにプログラミングを勉強して長い時間をかけてアプリを作った。データベース、認証など、自分なら最初は避けるようなものも時間をかけて作り込み、わからないところは知り合いに聞いて少しずつ前進。そのアプリはリリース後ヒット作となり、多くのユーザーに愛されている。このやり方と比べると自分のは勉強寄りで、幅広い技術や知識をゆっくり積み上げていく方式。友人のやり方は目的にまっすぐで、作りたいものから逆算して必要な技術をピンポイントで学んでいる。どちらが良いということはないが、後者の方が自分のやりたい課題解決に近そうかも?ただ、モチベーションを維持して長く取り組むことが、自分にはやはり難しく感じる。

最近新しく気づいたのが、モチベーションが高い間にリリースだけではなく、仕組みまで整えておくと楽だということ。この仕組みというのはテストコードを書いてサービスが壊れにくくしたり、散らかったコードベースを整理したり、リリース手順をドキュメント化したりとかのこと。リリースまでは一気に作り切ったとしても、実は重要なのはそこからの改善の旅だったりする。日常が忙しくて1ヵ月くらい空くと、過去の自分が書いてたソースコードがよくわからなくなる。そこを読んで思い出すところからのスタートになってしまう。また、いろいろな機能を追加するほどシステムは複雑化するので、バグを生みやすい。ひとつ修正するたびに他の箇所にも影響はないか確認して回るのはエネルギーを消耗し、結果開発効率が落ちてしまう。

最近作ったcastmakeというサービスでは、リリース後の熱量が高い期間で、機能ではなく仕組みを整えることに時間をつかった。それはテストを書いて壊れにくいシステムにしたり、難しいことを考えずボタン一発でリリースできるようにしたり。つまり、もし誰かが開発を手伝ってくれるとして、説明不要でその人に渡せるような状況にした。1人でやってるので渡す先は別にない。ここでいう「その人」とは未来の自分。1ヵ月後の自分がシステムを見た時に迷わず作業に入れるか、それを考えて整えていった。

さて、そこから数ヶ月経ったいま、久しぶりに機能を追加したが作っておいた仕組みの恩恵をかなり受けたと感じる。ソースコードを読み直したり構成を再理解する時間は不要で、何か修正を加えたらテストが自動的に回って壊れていないことを保証してくれる。これまでとは安心感が違う。これまではバグにならないかとビクビクしながら作って確認の工程に多くの時間を割いていたが、今回は作りたい機能について考える時間が増えた。今まで新規で作るのが好きでアップデートを億劫に感じる場面があったが、その正体が分かった気がする。変更して他の箇所が壊れることが怖くて、それを無意識に避けようとしていたんだ。それがわかり、長年のモヤモヤがひとつ解消された気がした。

「熱量あるうちに作り切る」というのは自分の個人開発のテーマだが、そこに「熱量あるうちに仕組みも整えておく」が加わった。こういう仕組みはサービスが小さいうちは導入しやすく、サービスが複雑化していくると入れづらくなる。早めに導入して、その上で伸び伸びと改善していくようにしていきたい。