開発ほぼ未経験兼業主夫が個人開発するために意識していること

# はじめに

この記事は「[個人アプリ/サービス開発の進め方と運用、得た学び 【PR】 Lenovo Advent Calendar 2020](https://qiita.com/advent-calendar/2020/lenovo_app)」の二日目の記事です。

本記事では、時間もない技術もない、でも、
「コード書くのたのしー！なんかアプリとかサービス作りたーい！」
という個人開発してみたい人に向けた、時間捻出とモチベーション維持について自分の経験をもとに３つのポイントを提案してみますので参考にしてもらえればと思います。
（ただし作ったものは特にバズったりはして）ないです。その辺はご了承ください。
個人開発へのハードルを下げたい。


# 忙しい人のための要約

- やる気に左右されないように作業開始時間を決めて習慣化する
- 時間がないから最小限を意識して最短で作りきる
- （特に最初は）気張ったテーマを背負わない


# お前誰よ

趣味で個人開発をやっている者だ。

- 元SIer（コード書かない方）[^1]
- 一瞬だけiOSアプリ開発[^2]
- コールセンター会社でメールサポート業務なう（コード書かない）[^3]
- 娘（３）[^4]
- 共働きのため、2019年5月から育児時短[^5]
- 朝食と洗濯以外はだいたいやってる30代半ば
- 基本的に独学

以下を作りました

- [日ハム応援歌暗記アプリ（非公式）](https://apps.apple.com/jp/app/%E6%97%A5%E3%83%8F%E3%83%A0%E5%BF%9C%E6%8F%B4%E6%AD%8C%E6%9A%97%E8%A8%98%E3%82%A2%E3%83%97%E3%83%AA-%E9%9D%9E%E5%85%AC%E5%BC%8F/id1444539996)
  - Swift
  - iOSアプリ
  - 根本から作り直すため更新停止中
  - [『元SIerおじさんがiOSアプリをリリースするまで2年5ヶ月かかった話』](https://www.shimayu.net/archives/1924)
- [栄冠ナインデータベース](https://github.com/shimayu22/Eikan-Database)
  - Django
  - VPS
  - パワフルプロ野球の栄冠ナインというモードのためのアプリ
  - [『栄冠ナイン攻略の為にセイバーメトリクスを持ち込みたくてデータベースアプリを作った話』](https://note.com/shimayu22/n/n3a320a86a915)
  - [『ConoHaのVPSで複数のDjangoアプリを動かす』](https://qiita.com/shimayu22/items/0720f2525e83b97eb2f9)
- [ぼく将オーダー](https://battingordermaker.web.app/)
  - Vue
  - Firebase
  - 「俺ならこういう打順を組むぜ！」という気持ちを画像化するWebサービス
  - [『NPB開幕が決まったのでWebサービスを作った話』](https://note.com/shimayu22/n/n299e1e9fc9e0)
  - [『【個人開発】爆速でWebサービスを開発した感想と裏側でやったこと』](https://qiita.com/shimayu22/items/73dcbabc7fc5eecff9f2)
- これはサラダですか？
  - Flask
  - heroku
  - どんな画像を送っても「これはサラダです」と返ってくるクソLINEbot
  - [QRコードはこちら](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181775/1749ffe1-524b-812f-f37f-fbd1770d0fba.png)
  - [『LINEbotからの返信をボタンテンプレート（と、URIアクション）にする』](https://qiita.com/shimayu22/items/c599a94dfa39c6466dfa)


[Github](https://github.com/shimayu22)

[^1]: 某メー子で長時間残業でうつ病になり退職を余儀無くされる
[^2]: 当時はObjective-C
[^3]: 某toBアプリケーションのサポート
[^4]: 2020.12.2現在
[^5]: 奥さんは看護師

# その１　時間を捻出する
「暇になったらなんか作りたいな・・・」と思いつつも、全然暇にならずに時代が追いかけてきて、走ることから逃げたくなってる人が多いと思います。
でも時にはムーヴメントを起こさなければなりません。

私も去年の今頃まではあまりまとまった個人開発や勉強もできなかった状況ですが、
転職活動のために少しはコード書かないとなという焦りから一つアプリを作ろうと決意しました。[^6]

しかしながら、時短で仕事して帰ってきて夜まで家事をしているとヘトヘトだったりストレス溜まったりで安定してやる気が出ませんでした。[^7]当たり前だよなぁ？
このままだといつまで経っても始めることすらできないので、習慣化することにしました。[^8]

私がやったことは以下の通りです。
- **仕事と家事の効率を求める**
- **開始時間を決めて遵守する**
- **最低限1日１コミット（または同程度の作業）をする**


## 家事と仕事の効率を求める
まず仕事と家事ですが、時間を決めてその中でやらないといけないことをやることで、
時間の捻出と体力の温存をするわけです。やることは無限にあるけどそもそも身がもたないので・・・。
効率を求めて家事をやる順番を入れ替えてみたりしながらなるべく早くその日の分の家事を終わらせます。
やらないことはやらないと決めることも大切です。
仕事の場合も同様で、残業をしないでさっさと帰らないといつまでも時間はできません。[^9]
仕事を見直してさっさと帰りましょう。残業したってたいして変わらん。


## 開始時間を決めて遵守する
よくやりがちな過ちとして「やる気が出たらやる」があると思いますが、
人間の仕組みとしては「**やるとやる気が出てくる**」のようなのでとにかくやりましょう。
うちの場合は家事を見直した結果、21時半〜22時くらいには奥さんと娘が就寝して[^10]家の状況が落ち着くようになったので、そこから22時までには無理にでも作業を開始するようにしました。
やる気があってもなくてもとにかく「開始する」のが重要です。マジで重要です。[^11]
自分の生活リズムを把握して、この時間からなら安定して開始できそうだな、という時間を見つけてみてください。

また、週末に数時間だけやると、先週何やったっけかと思い出す時間が必要になります。
普段からコードを書くお仕事でなければ基本的な言語の書き方も思い出す必要があります。
わずかな時間しか使えない場合は思い出す時間もバカにならないので、毎日少しずつ取り組む方が結果として作業自体に時間を割くことができます。

## 最低限1日1コミット（または同程度の作業）をする
ただどうしても気分が乗らなく疲労困憊の日もあります。にんげんだもの。
そんな日でも習慣化のため１コミットくらいはしましょう。
１コミットしてから酒を飲むなりゲームをするなり寝るなりすることで、次の日に繋がります。

こういうことやり始めようとすると無性に部屋の片付けとかデータの整理したくなりますが、まずは作業してから取り掛かりましょう。
１ヶ月くらいすると逆にやらないと気持ち悪いくらいになるので進捗もあがってきます。

あとGithubみると大草原不可避なので結構モチベーションあがります。
生い茂る草をみると、今度は途切れさせられないという気分にもなるので今日もやろうという気分になれます。
30日連続目前にうっかりコミット忘れてそこだけ空いちゃった時はモチベ激下がりしたけどね・・・。[^12]
今年の7月くらいからスカスカなのは副業したり勉強に時間を使っているからだから（震え声）

[^6]: なお転職できていない模様
[^7]: 買い物して掃除して夕飯作って食べさせてお風呂入ってる間に片付けしてあがってきた娘着替えさせて髪乾かして歯磨いて寝かせたあとも皿洗いして次の日の用意とか
[^8]: 擦られまくってる手法ですね
[^9]: 主にあの頃の自分へ・・・
[^10]: 21時には寝かせてあげたいが・・・ 
[^11]: 大事なこと（ry
[^12]: コミットしないまま日付をまたいでしまった・・・

# その２　なるべく最短で作りきる
とにかく時間がありません。1日２時間できれば上出来かなというくらい。
あと疲労もあるからそんなに夜更かしもできないし、寝ないと壊れます。実際壊れましたし。
土日も日中は家事や家族サービスがあるので、作業できる時間としては平日と変わりません。[^13]

個人開発は締め切りもありませんので終わりなどはないですが、終わらせることができます。
しっかりとゴールを決めて、そこまで走りきりましょう。

[^13]: 家庭が円満であってこそだから（震え声）

## まずは最低限の機能で作りきる
最初からあんまり規模の大きいアプリ/サービスを作り始めてしまうとエターナること受け合いです。
いくらやってもやっても終わらないのでモチベーションもどんどん使い切ってしまいます。

ついついせっかくの個人開発となると「ぼくのかんがえたさいきょうのアプリ/サービス」を作りたいと考えがちですが、[リーンスタートアップ](https://amzn.to/2Ho1bci)に出てくるMVP（実用最小限の製品）を意識して、まずはリリースすることを目標にやっていきましょう。
「Done is better than perfect.」でもいいですが、とにかく世に出そう。
作ったものは世に出してなんぼです。世に出してから徐々に機能を追加できるのがソフトウェアの良いところ。

## まずは持っている技術で作りきる

ついついせっかくの個人開発となると「使ったことないしDocker使ってみよう！テスト駆動開発だ！いやドメイン駆動開発だ！使ったことないフレームワークだ！AWSだ！CI/CDだ！」となりがちですが、学習コスト爆上がりでいつまで経ってもアプリ/サービス自体にたどり着けません。
もちろん普段から仕事で使っている技術であれば使わない手はありませんが、全く触ったことない技術を使おうとすると手が止まりがちです。
「業務では使ってないけどちょっとずつ勉強してたんだよね」的な技術を使ってみるくらいの方が、最初は変に躓かないで良いかと思います。

特に業務未経験者（私など）は、無理してよく理解していないことを取り入れるよりは、まずは一つ世に出すことでより必要な技術が身に沁みてわかりますしね。
一旦ゴリゴリコードを書いて小規模ながら自分が表現したい形になったあと、今後の機能追加やリファクタリングに備えてテストを書く、でもいいですし、
一旦herokuにデプロイしてから今後に向けてじっくりサーバを整えるでもいいでしょう。まぁだいたいいきなりバズったりせんよ。
新しい技術を試したい気持ちもありますが、欲張りすぎるといつまでもリリースできません。

Qiitaでも「爆速で開発した！」という記事がいくつもありますが、その方々も普段から小さいアプリ/サービスを作っていて、それらを組み合わせることで爆速での開発を実現しています。
シン・テレワークシステムも開発期間が約２週間だそうですが、それも以前から試していた技術を組み合わせて応用したからこそ短期間でリリースできたそうです。[^14]

まずは爆速へ繋がる第一歩を踏み出してみてはいかがでしょうか。

[^14]: [（CEATEC出展）「シン・テレワークシステム」おもしろ開発秘話](https://www.youtube.com/watch?v=yUGoST9MWaM)　より


# その３　最初の頃は作りたいものでいんでないかい？
## 自分以外みんなすごく見えるけどそんなの関係ねぇ
QiitaやTwitterなんかみてると、自分より相当若い人から相当年上の人まで幅広く、世の中に役に立つアプリ/サービスを出してバズっています。人類皆強大。
そういう様を日常的に見ていると、自分も世のため人のため役に立つモノを作らないといけないとか、いやあんなん作れないよとか、こういうの作りたいけど誰も使わないよなとか思うかもしれません。
が、そんなこと考えていたらいつの日かバズるかもしれなかったモノにたどり着きません。

最初の一歩に参考にすべきは[クソアプリ Advent Calendar](https://qiita.com/advent-calendar/2020/kuso-app)かもしれないっすね。
でもよく読むと普通に技術力高いし発想キレてるからなぁ・・・。まぁあれくらい自由な発想で気軽に始めようぜというニュアンスです。

ちなみに私は野球系で作りがちです。[^15]

## リリースまでたどり着くことで分かることもある
「リリースする」ことが重要で、作って終わりかと思ったらちゃんとリリースしようと思うとむしろそっちの方が面倒なことが多いかもしれません。
iOSアプリのリリースとか初回は相当面倒ですからね・・・。
Webサービスであれば他の人も使いやすいUIにしなきゃとかOGP設定した方がいいなってなるし、セキュリティもしっかり対策する必要があるし、使い方とか規約書いたりとかも必要だろうし、マネタイズの余地あればアドセンスとか申し込んでおく必要もあるし。たどり着いたらそこがスタート。

自分の好きな分野の小規模なアプリ/サービスでまず作った後の壁を乗り越えておけば、今後より一層爆速で開発ができます。
作ってリリースしてリアクションをみることで今後どういうの作ったらいいかなと考える材料にもなります。[^16]

[^15]: ちなヤクちなハム
[^16]: 自分はまだ作って楽しい段階なので正直考えてないけど


# 番外編：Qiitaやブログに書くことが見つかる
私も以前は見る専でしたが、２０１９年からQiita投稿するようになりました。[^17]
よくわからん時は調べて、それでもビタッとくる記事なんかがない場合に、自分で試行錯誤したことを書いたりしています。
主に後々の自分用で書いていますが、ありがたいことに参考にしていただいているようで自己顕示欲も満たされて一石二鳥です。
ちなみに現時点で一番閲覧されているのは[『PythonでCSVの列を取得してテキストファイルに出力する』](https://qiita.com/shimayu22/items/4fc6d01a4bf0eef909a0)でした。
あんまり直接的には関係ありませんが、個人開発の副産物みたいな記事なのでセーフ（？）
こうしてアドベントカレンダーに参加するネタも出てきたりして参加できるのでおすすめです。

[^17]: この辺にぃ、社内ネットワークからQiita見れないIT企業あるらしいっすよ

# おわりに
私がここ２年くらいでアプリ/サービスを作り始めた最初のきっかけは現実逃避が原動力でした。
でも作っていくうちにもっともっと昔、メモ帳でHTML書いてた頃のワクワク感を思い出しました。
なんでやらんでもいいようなこういうことをまたやり始めたかっていうと、根底には単純に楽しいということがあったからですね。
開発ほぼ未経験なものでなかなか進捗は出ないですが、マイペースで進んでいきたいと思います。[^18]

このご時世で時間もいつもより多少はあるかもしれませんし、年末年始も近いのでまずは１２時間くらいでできそうなモノを作り始めてみてはいかがでしょうか。[^19]

[^18]: いつかバズりたいンゴねぇ・・・
[^19]: 俺もやったんだからさ（同調圧力）