読者です 読者をやめる 読者になる 読者になる

kamiのサービス制作ログ

ひとりでサービスを制作している人の作業ログ的なブログ

ニートが1週間でアイデア共有サービスをつくったときの記録

こんにちは、どうしようもないニート無職の@kami30kです。 ここ最近つくっていたサービスをようやくリリースしたので、作業ログ的な記事を書いてみます。

なにをつくったか

今回つくったのは、HIRAMEKI CAFEというサービスのアイデア共有サービスです。 KPT LOGSHOMEI DESIGNにつづいて自身3つめのサービスとなります。

f:id:kami30k:20140611164343p:plain

簡単に説明すると、知っている人は多い(と思う)ideamiのようなサービスです。 ぼくはこのサービスがとても好きだったのですが、最近あまり使われていないようで、とはいえサービス自体のニーズはあると思うので、今回サクッとつくってみました。

機能自体はとてもシンプルで、

  • Twitterで認証する
  • イデアを投稿する
  • グッド(いいね!のようなもの)、コメントなどをつけてもりあがる

だけのサービスです。 一応スマートフォンでも閲覧できるようにしています。

とにかくまずリリースすることだけを目標にしたので、ノーティフィケーションなどはまだついていないです。 テストユーザの方にも意見をいただいたのですが、小さなバグもあるようで、そちらも対処しなければ……。

ぼくはだれか

この手の記事って、書き手がどういう人かが大事とも思うので、簡単に自己紹介させていただきます。 ぼくは26歳のニート無職です。

採用技術

今回、サービスをつくるにあたって、以下の技術を用いました。 Railsじゃない理由は、Sinatraの勉強がしたかったからです。

採用ツール

また、以下のツールを使用しました。 PivotalTrackerからTrelloに移行してしばらくですが、個人的にTrelloの方がだいぶ手に馴染んでます。

ツール選定の基準は、他の人が開発にジョインしても対応できるよう、コラボレーションの面に気をつけました。 といっても、最近のツールであればなんでもいい気がします。

制作プロセス

以下、どうやってサービスをつくったかをつらつらと走り書きしました。 ある程度時系列順になっています。

  • リーンキャンバス作成
  • 新規サービス計画書作成
    • サービスのミッションやCSF(主要成功要因)、SEOTDKなど
  • 関連サービスのデザイン調査
  • デザインの制作方針決定
  • ストラクチャ作成
  • ワイヤーフレーム作成
  • 採用技術決定
  • ネットワーク構成図作成
    • 開発端末/リモートリポジトリ/CI/本番サーバの関係図
  • ストーリーリスト洗い出し
  • ストーリーリストをタスク管理ツールに登録
  • リリーススケジュール作成
  • サーバ契約
  • ドメイン取得
  • デザイン制作
    • 10年前からFireworksのヘビーユーザです
  • コーディング環境構築
  • コーディング
  • データベース設計
  • アプリケーション設計
  • テストケース作成
  • 開発環境構築
    • RailsならVagrant+Chef Soloですが、今回は単にSinatraの準備をしました。 Mac上で直接実装しました。
  • コーディング物をシステムに組み込み
  • 本番環境構築
    • Chef Soloで数分で完了!
  • 独自ドメイン設定
  • デプロイツール設定
  • Unicorn起動関連タスク作成
  • CIツール設定
    • Jenkinsは以前CIサーバとして立てていたので、プロジェクトだけつくった
  • 実装
    • ここに4日くらいかかってる
  • セキュリティチェック
  • 動作確認
    • さすがにIE8は無理でした
  • 本番環境用DBのバックアップ設定
  • リリース時のプロモーション案決定
    • たとえばこの記事もこれのひとつです
  • 公開

リーンキャンバスの作成から公開まで、作業時間でいうと40〜50時間くらいでした。 ニート無職の時間は無限大なのです。

雑記

  • Done is better than perfect
    • これはザッカーバーグの言葉らしいですが、常にこの言葉を念頭において作業しています。 というのも、以前つくったサービスは、1週間でつくるとの宣言をたやすく覆し、軽く1ヶ月かかってしまいました。 最終的にモチベーションはほぼ0でした。 これ以来、「とにかくはやくつくる」ことだけを考えてサービスをつくっています。 たとえば、サービス名は5分で決め、margin1pxのずれにこだわりすぎないようにしました。 もちろん、質がクリティカルに響く部分についてはじっくり考えます。
  • 投稿/消費モチベーションを考える
    • このサービスは、コンテンツの投稿者と消費者(閲覧者)の2者から成り立っています。 なので、「双方にサービスを利用するモチベーションはあるか?」という観点でサービスを設計しました。
  • SQLite Professionalが便利
    • MacApp Storeでインストール可能なSQLite Professionalというクライアントが便利です。 無料版はRead Onlyですが、別にクライアント側で操作はしないので、十分実用的です。
  • SQLiteはバックアップが簡単
    • SQLiteはデータが単なるファイルなので、cronで毎日cpするだけでバックアップになります。 バックアップファイルをMacからsftpで定期的に手元においておくとさらに安心です(個人サービスでのみ許される愚行)。 以前MySQLを使った時はBackup+Wheneverだったので、この点でもSQLiteは軽量アプリケーション向きだと思いました。
  • スマホ向けメニューはSidrで実装
    • ドロワーメニュー作成用のjQueryライブラリにSidrというものがあります。 横幅が960px以下の場合、これでメニューを表示するようにしました。 多少クセがありますが、とても便利です。
  • 無限スクロールはInfinite Scroll
    • Infinite Scrollは意外に簡単に実装できます。 単にページングを実装すればいいです。 ローディングアイコンなども無駄にこだわってみました。
  • VimからAtomに移行した
    • 最近昼食をとりながらRebuildを聞くのが習慣になっているのですが、その中で開発環境の話があり、ぼくもVimじゃなくモダンなツールに挑戦しないと駄目だな〜と思い、Atomに移行しました。 たぶんずっと使うだろうなぁ、と思う程度には馴染んでます(そもそもあんまりVimに慣れてない)。
  • bashからzshに移行した
    • 以前からid:naoyaさんがシェルのTipsについて話しているのを聞いていたので、とうとうzshを入れました。 ただググっていたらoh-my-zshではなくPreztoの方がいいみたいなのでこっちにしました。 結果、とてもよいです。 やっぱりすごい人が採用している技術はなんでもやってみなきゃ駄目だなぁと実感しました。
  • いかにより多くの集中タイムをつくれるかが鍵
    • ひとりでやっていて本当にそうだなぁと思うのは、没入して作業できる時間をいかに確保できるかが大事、だと思います。 デタラメに作業の時間を確保するのではなく、いかに作業自体の時間を短くするか。 作業の時間ではなく質の向上を頑張るべきだと感じました。 時間とクオリティに相関関係はないと思います。
  • 結局「いかにRailsに近づけるか」になってしまう
    • Sinatraで実装したけど、「Modelを分けたい」「Helperがほしい」「ActiveRecordがほしい」という感じで、だんだんRailsな構造になってきました。 ほかにもURLの設計やI18n、Session周りの設定だったり。 じゃあRailsでいいじゃん、という話だけど、Sinatraは「コードを見渡せる感」があって好きです。 Railsの場合、ぼくの技術が足りないのか「Railsに書かされてる感」があります。。。 頑張ります。
  • Sinatraとkaminariは相性が悪い
    • どこかのissueでも見たのですが、kaminariはSinatraに正式に対応してないらしく、実際いくつかの問題がありました。 たとえば、kaminariを使っていないページでlayoutが読み込まれなかったり。 なので、今回はページングにwill_paginateを使いました。
  • RSpec仕様書である
    • ……という話をRebuildの結構前の回で聴いてたのですが、全然仕様書っぽく書けてませんでした。 具体的に言うと-fdオプションをつけたときに仕様書っぽくなるように書けていませんでした。 ちゃんと書きます。
  • yak shavingを避ける
    • 今までは、問題が発生したらとりあえずエラー文でググって、なんか関連しそうなリンク開いて、いつの間にか関係ないページを見て……という問題が頻繁に起こっていました。 これはいかんと思い、とりあえず問題が発生したら「発生した問題」と「考えうる原因」をホワイトボードに明示化し、この原因のみについて解明するようにしました。 これで結構改善しています。 Google先生のおかげで、自分の頭で考えない自分が形成されつつあるので、もっと自分の頭で考えるようにします。
  • テストユーザの方の協力が嬉しい
    • 今回、リリース当日の昼間にTwitterでテストの募集をかけさせていただいたのですが、何名かの方に手をあげていただき、とても親切なフィードバックをいただけました。 こういうやりとりが、サービスづくりの醍醐味かもしれません。 しみじみ。

今後

  • ユーザへのノーティフィケーション機能の実装
  • コメントへのグッド!機能
  • コメントの削除機能
  • アカウントの完全削除機能
  • グッド押下時のアニメーション改善
  • その他いろいろ

おわりに

とはいえ最初にコンテンツがないとアレなので、ぼくの方で一人でせっせとアイデアを投稿してます。 ぜひいろいろ投稿してください!

感想や改善要望、あるいは求人情報は@kami30kまでご連絡ください!