こちらはCrieitで開催されている「アドベントカレンダー」18日目の記事です。何書いてもいいそうなんでちょっとポエミーな記事かきます。
昨日はHataさんの今年スマホアプリを作ってプログラマーになった40代女性の話。でした。 ちょっと感動しました。何を始めるにも遅すぎるなんてことはないですね。
はじめに
まずはこちらの記事をご覧ください。 個人でサービスを作りきるために必要なことが分かりやすくまとめられています。とても有益〜。
さて、そこに書かれているような「小さめ」「短期間」「未経験技術は使わない」といったコツを思いっきり無視したらどうなるでしょうか?
今振り返ると笑い話ですが、私の作ったゲーム投稿サイト「unityroom」の開発がまさにそういうアンチパターンの塊でした。
思い立ってから初期リリースまで1年半もかかりました。 なぜそんなにかかったのか、どうやってモチベーションを維持したのか、そのあたりを思い出しながら書いてみたいと思います。
今日の記事は初期リリースまでの思い出話です。初期リリースから2年経過した現在の構成について興味があれば下記記事もどうぞ。 blog.naichilab.com
目次
実際どれくらいかかったのか
リポジトリや過去ブログを漁ってみました。
- 2014年
- 12月 Rails Tutorial開始した(Railsの勉強)
- 2015年
- 4月 ConoHa VPSにChefでRails環境構築を自動化した(サーバー構築自動化の勉強)
- 6月 ConoHa ObjectStorageを使う方法調べる(ファイルアップロード方法の模索)
- 8月 テスト認定技術者試験(JTSQB)合格(テスト手法に興味を持ち勉強)
- 10月 SASS(CSS)ちょっと学んだ(Webデザインも覚えたくて勉強)
- 11月 ActionMailerと格闘する(このころがたぶんRailsTutorial3周目)
- 12月 Capistrano3でデプロイを自動化した(デプロイ自動化の練習)
- 2016年
- 1月 本格的にunityroomのプロダクトコードを書き始める(やっと開発)
- 2月 RSpec勉強しながらテストコード書く(開発)
- 4月 最低限の機能完成(開発)
- 4月末 一般公開!
日付が分かるものだけを書き出してみたらこんな感じでした。
全部で16ヶ月も...かかっている...
前半1年は勉強しかしてないし本腰入れたのはラスト4ヶ月みたいですね。
どうしてこんなことになってしまったのか...
やりたいことが多過ぎた!
こちらの技術説明記事にも書いたんですが、unityroomを作る前に似たようなサイトを運用していました。(アップロードするファイル形式が違うだけで、どちらも同じゲーム投稿サイトです)
前身となるサイトがあったからこそ、ああしたい・こうしたいという夢が広がっていました。
イケてるデザイン、超使いやすいアップローダ、ユーザー間の交流もしたい。ランキングもつけたいしスマホでも遊びたい、とか。
運用面でも、FTPで更新するのもう嫌だからデプロイ自動化しよう。開発者としてテストとか書けるようになりたいなやってみよう。とか出てくる出てくる。
ここまで盛り込むとどう考えてもWeb開発初心者(PHPちょっとやっただけ、Rails未経験、CSSわからん)が1ヶ月で作れるボリュームではありません。
まぁ初心者が作りたいって思ったらボリュームなんて気にしないですよねw
Rails舐めてた!
Rails楽しそう!で勉強を始めましたが正直なめてました。 Railsチュートリアル3周、入門書を2冊、Progateもやって、ブログ記事読み漁って...それぐらいしてやっと馴染んでくるレベル。
Rubyいれるために rbenv
ってのが出てきて、Rails入れるために bundler
が出てきて、Rails自体にも bundle exec rails xxx
とかってコマンドが無数にあります。
さらにPHPと違って共用サーバーじゃ動かないからVPSが必要で、VPSはOSから入れないといけないからLinuxも勉強して、デプロイするために各種ツールが必要で...。(この辺りは後に全部捨ててHerokuに載せ換えることとなります)
下記記事をみてもらうと分かるんですが、Railsにはとてもたくさんの技術・知識が使われています。
あなたがマスターしたのはいくつ? Railsを習得するために必要な技術要素の一覧 - Qiita
ほんとRails恐ろしい子!
無計画にRailsをやり始め、「これ何だろう?」って立ち止まるたびにググっては横道にそれ、面白いと感じたら本を読む。それを繰り返していった結果、非常に多くの時間を費やしてしまいました。
当然ですが、Railsを使う
ために全て理解・習得する必要はないです。行き詰まってもググれば先駆者の記事が見つかりますし、コピペでもどうにかなることがほとんどです。
私の場合は技術習得に比重を置いたため、学ぶ分野が増えてしまいました。
未経験技術に触れ過ぎた!
Railsでアプリをリリースするだけであれば、CI/CD(自動テストや自動デプロイ等)まで手を出す必要はなかったのですが楽しそうなので寄り道してしまいました。
開発中に触れた未経験な技術を並べてみます。(現在使ってないものも含む)
- Ruby / rbenv / bundler
- Rails / rake / unicorn / puma / gem各種
- Sass(CSS)
- RSpec
- Jenkins / CircleCI
- Capistrano3
- ConoHa / VPS / ObjectStorage
- CentOS / Linuxコマンド各種
- Ansible / Chef
- Heroku / Heroku Pipeline
- Rubymine
書籍が出てるものは買って読んだし、チュートリアルは手を動かしたし、どう使えば開発運用が楽になるか模索していました。
そりゃ時間かかりますよね。
どうして続けられたのか
ふらふらと寄り道しながらもリリースまで続けられた理由を考えてみます。
作りたい具体的なイメージを持ち続けた
前身サイトもゲーム投稿サイトだったので、公開したらどんな感じで使ってもらえるかある程度想像がついていました。
自分もゲームを作っているので、作ったゲームが遊ばれることがどれほど嬉しいか知っています。気軽にゲームを公開してもらいたい。可能ならはじめて公開する場として使ってもらいたい。
開発期間が長期化してもそのイメージがずっとあったので、目標を見失わずに続けられました。
普段飽きやすい私が1年半も作り続けられたのは、やはり自分自身が使いたいものを作っていたからかなと思います。
コツコツ続けた
ちょうど作っていた時期、不幸にも往復5時間かかる職場に通勤していました。(バス+電車+地下鉄+徒歩)まぁ自分で選んだんですけど...
不幸中の幸い(?)、安定して片道1時間電車に座れたのでその時間を開発に当てていました。
1時間っていう時間が「今日はこれをやろう!」と決めてから「ある程度進捗が出はじめる」のにちょうどいいんですよね。
朝進捗があると夜エンジンかかるのも早いです。これが毎日なので少しずつですが着実に進みます。
こんな生活を1年続けたので勤務日だけでも2h*220日=440時間...元気があれば帰宅後や休日もやってたので結構な時間やってますね。
フルタイムの業務に加えて残業60時間+通勤100時間かかってました。なのに電車で寝ないで開発するとか今考えると頭おかしいですね
GitHubに草生やすのも楽しい
naichilab | GitHub (これは2018年のグラフ)
GitHubにはコミットをグラフ化する機能があります。
よーし1コミットだけやるぞ!って机に向かったらめっちゃ捗ったりとかありません??
小さな達成感のコントロール
多くの未経験技術に触れたと書きましたが、どれも楽しみながら学びました。
わかりやすく書かれた入門書を読むことは、比較的安価に達成感を味わえるのでオススメです。
- 達成感①:スラスラ読めるので数日で1冊読み終わる
- 達成感②:知らない技術を分かった気になれる
- 達成感③:上記①②から、着実に進んだと思いこめる
まぁ本読んだだけでは使いこなせないです。それは問題ではなくて、少なからず知識が増えたことを喜ぶことが重要。
メインの開発が行き詰まったとき、しんどい思いしながら続けると病んでしまいます。そういう時はストレス解消だと思って気軽に別の技術に触れています。
ストレス解消できて成長も感じられていい感じ。
焦らない
誰でも無料でサービス開発ができる時代になりました。日々数多くのサービスがリリースされています。
素晴らしい品質のサービスもたくさんあり、自分のサービスと比較すると着眼点・技術力の差に目眩がします。
それでも今の自分に出来ないことは出来ないので焦っても仕方がないです。
1つ1つの開発を急ぐより、多少時間がかかっても着実にリリースすることを重視したいです。出し続けられることの方が大事。
千里の道も一歩から。
楽しく開発して長く続けましょう!!!
まとめ
unityroomの開発が長期化した理由と、モチベーションを保ってリリースできた理由を思い出しながら書いてみました。
人によってモチベーションのコントロール方法は違うと思います。どのような方法が合うのかもやってみないと分からないことが多いです。
今日書いた内容が、1000人に1人でいいのでモチベーションが尽きかけてる人の一助になれば幸いです。
一緒に開発を楽しみましょう〜!!
明日はPorinさんです!お楽しみに!