ニートが1週間でアイデア共有サービスをつくったときの記録
こんにちは、どうしようもないニート無職の@kami30kです。
ここ最近つくっていたサービスをようやくリリースしたので、作業ログ的な記事を書いてみます。
なにをつくったか
今回つくったのは、HIRAMEKI CAFEというサービスのアイデア共有サービスです。 KPT LOG、SHOMEI DESIGNにつづいて自身3つめのサービスとなります。
簡単に説明すると、知っている人は多い(と思う)ideamiのようなサービスです。 ぼくはこのサービスがとても好きだったのですが、最近あまり使われていないようで、とはいえサービス自体のニーズはあると思うので、今回サクッとつくってみました。
機能自体はとてもシンプルで、
だけのサービスです。 一応スマートフォンでも閲覧できるようにしています。
とにかくまずリリースすることだけを目標にしたので、ノーティフィケーションなどはまだついていないです。 テストユーザの方にも意見をいただいたのですが、小さなバグもあるようで、そちらも対処しなければ……。
ぼくはだれか
この手の記事って、書き手がどういう人かが大事とも思うので、簡単に自己紹介させていただきます。
ぼくは26歳のニート無職です。
採用技術
今回、サービスをつくるにあたって、以下の技術を用いました。 Railsじゃない理由は、Sinatraの勉強がしたかったからです。
- Ruby
- Sinatra
- SQLite
- Haml/SCSS/CoffeeScript
- nginx/Unicorn
- Capistrano
- Chef Solo
- RSpec/Capybara/FactoryGirl
採用ツール
また、以下のツールを使用しました。 PivotalTrackerからTrelloに移行してしばらくですが、個人的にTrelloの方がだいぶ手に馴染んでます。
ツール選定の基準は、他の人が開発にジョインしても対応できるよう、コラボレーションの面に気をつけました。 といっても、最近のツールであればなんでもいい気がします。
制作プロセス
以下、どうやってサービスをつくったかをつらつらと走り書きしました。 ある程度時系列順になっています。
- リーンキャンバス作成
- 新規サービス計画書作成
- 関連サービスのデザイン調査
- デザインの制作方針決定
- ストラクチャ作成
- ワイヤーフレーム作成
- 採用技術決定
- ネットワーク構成図作成
- 開発端末/リモートリポジトリ/CI/本番サーバの関係図
- ストーリーリスト洗い出し
- ストーリーリストをタスク管理ツールに登録
- リリーススケジュール作成
- サーバ契約
- もちろんみんな大好きさくらのVPS
- ドメイン取得
- デザイン制作
- 10年前からFireworksのヘビーユーザです
- コーディング環境構築
- kami30k/guard-templateを使った(手前味噌ですが……)
- コーディング
- データベース設計
- アプリケーション設計
- テストケース作成
- 開発環境構築
- コーディング物をシステムに組み込み
- 本番環境構築
- Chef Soloで数分で完了!
- 独自ドメイン設定
- デプロイツール設定
- Capistranoを利用
- Unicorn起動関連タスク作成
- CIツール設定
- Jenkinsは以前CIサーバとして立てていたので、プロジェクトだけつくった
- 実装
- ここに4日くらいかかってる
- セキュリティチェック
- 動作確認
- さすがにIE8は無理でした
- 本番環境用DBのバックアップ設定
- リリース時のプロモーション案決定
- たとえばこの記事もこれのひとつです
- 公開
リーンキャンバスの作成から公開まで、作業時間でいうと40〜50時間くらいでした。
ニート無職の時間は無限大なのです。
雑記
- Done is better than perfect
- これはザッカーバーグの言葉らしいですが、常にこの言葉を念頭において作業しています。
というのも、以前つくったサービスは、1週間でつくるとの宣言をたやすく覆し、軽く1ヶ月かかってしまいました。
最終的にモチベーションはほぼ0でした。
これ以来、「とにかくはやくつくる」ことだけを考えてサービスをつくっています。
たとえば、サービス名は5分で決め、
margin
の1px
のずれにこだわりすぎないようにしました。 もちろん、質がクリティカルに響く部分についてはじっくり考えます。
- これはザッカーバーグの言葉らしいですが、常にこの言葉を念頭において作業しています。
というのも、以前つくったサービスは、1週間でつくるとの宣言をたやすく覆し、軽く1ヶ月かかってしまいました。
最終的にモチベーションはほぼ0でした。
これ以来、「とにかくはやくつくる」ことだけを考えてサービスをつくっています。
たとえば、サービス名は5分で決め、
- 投稿/消費モチベーションを考える
- このサービスは、コンテンツの投稿者と消費者(閲覧者)の2者から成り立っています。 なので、「双方にサービスを利用するモチベーションはあるか?」という観点でサービスを設計しました。
- SQLite Professionalが便利
- SQLiteはバックアップが簡単
- スマホ向けメニューはSidrで実装
- 無限スクロールはInfinite Scroll
- Infinite Scrollは意外に簡単に実装できます。 単にページングを実装すればいいです。 ローディングアイコンなども無駄にこだわってみました。
- VimからAtomに移行した
- bashからzshに移行した
- いかにより多くの集中タイムをつくれるかが鍵
- ひとりでやっていて本当にそうだなぁと思うのは、没入して作業できる時間をいかに確保できるかが大事、だと思います。 デタラメに作業の時間を確保するのではなく、いかに作業自体の時間を短くするか。 作業の時間ではなく質の向上を頑張るべきだと感じました。 時間とクオリティに相関関係はないと思います。
- 結局「いかにRailsに近づけるか」になってしまう
- Sinatraとkaminariは相性が悪い
- どこかのissueでも見たのですが、kaminariはSinatraに正式に対応してないらしく、実際いくつかの問題がありました。
たとえば、kaminariを使っていないページで
layout
が読み込まれなかったり。 なので、今回はページングにwill_paginateを使いました。
- どこかのissueでも見たのですが、kaminariはSinatraに正式に対応してないらしく、実際いくつかの問題がありました。
たとえば、kaminariを使っていないページで
- RSpecは仕様書である
- yak shavingを避ける
- 今までは、問題が発生したらとりあえずエラー文でググって、なんか関連しそうなリンク開いて、いつの間にか関係ないページを見て……という問題が頻繁に起こっていました。 これはいかんと思い、とりあえず問題が発生したら「発生した問題」と「考えうる原因」をホワイトボードに明示化し、この原因のみについて解明するようにしました。 これで結構改善しています。 Google先生のおかげで、自分の頭で考えない自分が形成されつつあるので、もっと自分の頭で考えるようにします。
- テストユーザの方の協力が嬉しい
- 今回、リリース当日の昼間にTwitterでテストの募集をかけさせていただいたのですが、何名かの方に手をあげていただき、とても親切なフィードバックをいただけました。 こういうやりとりが、サービスづくりの醍醐味かもしれません。 しみじみ。
今後
- ユーザへのノーティフィケーション機能の実装
- コメントへのグッド!機能
- コメントの削除機能
- アカウントの完全削除機能
- グッド押下時のアニメーション改善
- その他いろいろ
おわりに
とはいえ最初にコンテンツがないとアレなので、ぼくの方で一人でせっせとアイデアを投稿してます。 ぜひいろいろ投稿してください!
感想や改善要望、あるいは求人情報は@kami30kまでご連絡ください!