ITとは無縁の製造業で営業をしながら、友人とRailsアプリを約半年でリリースしました。
お悩み相談SNS "Probless"
機能:ログイン/投稿/タグ付け/2層コメント/リアルタイムチャット/いいね/通知/検索/フィード/メール認証/理論削除/ + インフラ(AWS/自動デプロイ)
使用技術:Ruby on Rails/PostgreSQL/Action Cable/Elastic Search/Devise 認証/acts-as-taggable-on(タグ付け)/無限スクロール/Bootstrap/AWS/GitHub/独自ドメイン/Circle CI/Nginx/Https 認証
###結論 ~学んだこと~
・本気でユーザーのことを考える -> 役立つと思える -> モチベーションに繋がる
・スクールに通わない道もある
ちなみに過去にも独学でiOSアプリをリリースしたことがあり、今回は二つ目のリリースとなります。
営業マンが独学でiOSアプリをリリースし、レビュー4.5をもらうまで
#開発経緯
転職活動用のポートフォリオを作りたいと友人に話していたところ、作るなら共同でちゃんとしたものを作ろう!ということになり、様々なアイディアを出し始めました。たまたま訪れた既存のお悩み掲示板内の感想欄に、「傷つくコメントをされた」というコメントが多くみられたため、匿名でも親身なアドバイスが得やすい仕組みを備えた相談SNSを考案しました。
###企画段階(1ヶ月)
様々な記事を参考にし、手探りで下記をまとめていきました。
- 解決したい社会課題
- ミッション定義
- ユーザ体験&行動の流れをツリーで定義
- 競合分析(良い点/悪い点/チャンス)
- DB設計
- スケジュールと役割分担
- ワイヤーフレーム作成
- 言語選び
###準備段階(1ヶ月)
Ruby、Python、Phpで迷いましたが、プロゲートでRailsのレッスンがあったためRubyを選択。
私はプロゲートのRailsを2週してから1ヶ月で開発スタートしましたが、
友人はプログラミングの経験無く、プロゲートをやってもらいました。(2-3ヶ月)
###ローカル開発段階(3ヶ月)
早朝や夜にコードを書き、通勤中にエラーを調べる毎日でした。
基本的には私が開発をリードし、友人にはデザインや比較的簡単な部分の実装をする役割分担をしました。
フロントもバックもやること多すぎましたが頑張りました。
GitLab/GitHubで進捗を管理しながらを行いました。
- 私:ログイン [Devise]
- 私:投稿
- 私:コメント
- 私:二層コメント(コメントに対するコメント) [Action Cable]
- 友:投稿やコメント編集の削除
- 私:検索機能 [Elastic Search]
- 友:タグ収集
- 友:タグのカテゴリー分け
- 私:タグ実装 [Act-as-Taggable-on, tag-it.js]
- 友:いいね
- 友:アイコン登録、表示
- 私:AJAX(非同期更新)
- 私:フィードの無限スクロール [kaminari, jscroll.js]
- 友:利用規約
- 友:ロゴ
- 友:色、フォント統一
- 私:レスポンシブ(スマホ)
- 共:バリデーション
- 私:パスワード忘れ、復活
####フィードバック
知人数名に実際に使用して頂き、使用感を確認し改善を行いました。
開発中に考えもしていなかった"気づき"が多く出てきました。
例えば、SNSとすると裏で他のSNSと繋がって個人が特定されるのでは?という不安があり、「匿名」であることをいたるところで強調することにしました。
####学んだこと
- 企画段階でミッションをがっちり定めておかないとブレる
- 本当にこの機能は必要か?判断基準となる
- フロントはBootStrapのテンプレートを使い楽をする
- デザインは配色は既存のサービスを参考にする
- 「実現したいこと」を先に決めてから、「そのために必要な技術」を調べ尽くしてとにかくやる!!
特に難しかったのが、Action Cableでした。
Action CableはWebSocket通信技術を用いてリアルタイムな更新を可能にする機能です。
「相談者」と「コメントした人」との間で、悩みという共通のトピックに対してリアルタイムに会話をして欲しいという想いがあり実装しました。1週間何も進まないようなこともありましたが、英語記事を参考になんとか実装しました。
Action Cable 本番使用時のNginxとCable.ymlの設定
###デプロイ(2ヶ月)
インフラ環境
- AWS
- PostgreSQL
- Nginx
- Puma
- Circle CI
- Elastic Search (一時は実装しましたが、投稿が増えてからマージ予定)
- Route 53 (独自ドメイン)
- Let's Encrypt (SSL)
デプロイはもっと苦労しました。何がわからないのか分からない状況でした。
AWSやLinux基礎の書籍で勉強しました。
###Elastic Search
Elastic Searchは全文検索ツールで、検索結果一つ一つをスコアリングし、最もスコアの高いものから並び替えて表示させることができます。
この機能を利用し、フィード画面に各ログインユーザが最も関心を持つであろう投稿を優先して表示させるような機能を実装しました。
具体的には、下記条件を満たす投稿にはスコアに若干ウエイトをかけるという、アルゴリズムチックな方法で行いました。
ウエイトをかける項目
- 同じ性別の投稿
- 年齢が近い方による投稿
- そのユーザが過去にした投稿やコメントにつけたタグを含む投稿
- 新しい投稿
Elastic Searchで必要なもの
- AWSでノード構築
- AmazonLinuxへインストール、起動(JVM)
- 起動メモリ量設定
- RailsとElasticノードの接続
- 投稿された内容を、ノードにインデックス(Search KickというGemを使用)
しかしせっかく実装し動作確認までしたものの、投稿が増えるまでは威力を発揮しないので、今は一旦取りやめています。
###痛感したこと
どんなに頑張って実装した機能でも、ユーザーに受け入れられなければ自己満足に終わるということです。
元々、友達申請や個人間チャットも一度は苦労して実装していましたが、訪れるユーザーの本質的なニーズを満たす機能に絞りシンプルにすべきだと考え、無くしました。
本質的なニーズ
- 似た悩みを持った人がどう乗り越えたか知りたい → 検索、タグ、フィード機能
- Webを通して誰かに相談したい → 投稿、コメント機能
###その後
Webエンジニアへ転職を決意し、会社を辞めて都内の某著名スクールに通おうとしたところ、スクールの面接で「もう転職活動始めていいよ」と言われてしまい、結局スクール無しで転職活動しました。
現職を辞めてからの転職活動でプレッシャーはありました。
それでも面接にて、事業目線、企画力、自走力、継続力、リサーチ力、共同開発での調整力をご評価頂き、Web系自社開発企業に転職することができました。
やっとスタートラインに立ちました。全力で頑張ります。
更新 21年5月
- 「お悩み相談掲示板」で検索すると、Googleで6番目に出るようになりました。
- 毎日自然に5件程度投稿があるくらいまでに成長しました。1年で合計905件の相談を投稿頂きました。
- しかし、広告モデルではAWSの運営費を全く回収できなかったのと、収益性のある次のアプリ開発に注力したい思いもありサービスクローズさせて頂きました。
- ほぼ毎日来てコメントくださる方もいた中、身勝手な決定で大変申し訳なく思っております。もしこちらにたどり着いておりましたら謝りたいです。。
- サービス開発で実際にユーザーとの関わりが出てくると、その運用責任を強く感じました。次回は長期運用できるかどうかも重要な点として考慮していきます。