B3スポーツユーザ向けのWEBサービスをリリースしました。
この度、B3スポーツユーザ向けのWEBサービス「Sttend 」をリリースしました。
Sttend?
SttendはB3スポーツを楽しむ人に向けて作成した、スポットを中心にユーザー間のつながりを促進するためのWebサービスです。
作った背景
私自身もB3スポーツユーザーです。
B3スポーツに限ったことではありませんが、一人でやるよりも複数人でやった方が当然楽しいです。
ですが人口が少ない競技であることも影響してか、同じ競技のコミニティに出会う確率は中々低いのが現状です。
私自身も環境が変わった際に近辺にどのようなスポットが存在し、どれくらいの人が居て、どの競技が人気なのかといった情報を得ることが難しかったため、暫く足が遠のいてしまいました。
私の場合は運良く同じ競技のコミニティと出会い、 再びB3スポーツを楽しむ事が出来ましたが、同じような状況の人が他にも居るのではないかと考えました。
そこで過去の自分が欲しかったサービスを作成することにしました。
期間
業務終了後の時間と休日で作成して約5ヶ月程かかりました。
アイディア出しや、デザイン作業等の時間が予想以上にかかりました・・・。
放置期間や、Ruby、Rails学習時間もあるので次回はもっと早く作れると思います。
開発着手までにやったこと
サービスを作る際はゆーすけべーさんの実装までにする7つの企画作業を参考にさせて頂いてます。 今回のサービスですと
哲学は
スケートは一人で滑るより、複数人で滑った方が圧倒的に楽しい。
アイデアとして
- 全国のスポットが検索できる。
- スポットに参加予定を書き込める。
- フォローしているユーザーの参加状況がわかる。
- フォローしているスポットの参加状況がわかる。 ... etc
といった形で7項目をそれぞれ考えて随時見なおしていました。
この項目に従ってサービスを考えるのはとても考えやすかったです。
Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)
その他にも
をCacooで作成しました。 あまり書きすぎるとメンテナンスしたくなくなるので程々を心がけました。
使っている技術
- Ruby on Rails 4.2
- Nginx / Unicorn
- MySQL
- Git / GitHub
- AWS
- Newrelic ...etc
とよくある構成です。
タスク管理はGithubのissueとEvernoteでやっています。
当初はホスティングにHerokuを使用するつもりでしたが、前から気になっていたSqaleを使用しました。
いまどき Rails で何かつくるなら、VPS より Sqale(スケール)だと思うの
気になることがあり何度か問い合わせメールを送ったのですが、全て1日程で返信して頂けて満足です。 日本語で問い合わせが出来るメリットは大きいですね。
学んだこと
使用しているライブラリの修正
今回使用したJSライブラリにいくつかの不具合があり、それに気がつくまでかなり消耗しました・・・。
使用していたライブラリがGithub上に合ったのでせっかくなのでプルリクを投げた所、あっさりと取り込んで頂けました。
OSSにプルリクを出すことは敷居の高いことだと感じていたのですが、今後も気がついた点は積極的に上げていこうと思いました。
モチベーションの維持
正直やる気がでない日もありました。
そんな中でモチベーション維持に利用したのはGithubのLongest streak (草活動)
でした。
その時興味ある事や勉強中の何かをGithubへコミットしてSttendの開発作業開始、という習慣を作ることで
モチベーションが上がらなくともTermを立ち上げるきっかけとなりました。
個人的な体感ですと勢いでなんとかなる期間は1ヶ月が限度だと感じました。 それ以上の期間が必要な場合はモチベーションを維持させる作戦が必要だと思います。
細かく動かすことが重要
実際に動作する物があるとモチベーションが上がります。
テストを書いてとりあえず動くものを作り、細部を検討してリファクタ。
のサイクルを心がけました。
今後の課題
Homeのデザインが不評なのと実際に想定している使い方(予定の作成)まで辿り着いている方が少ないのでHomeページのリニューアルを予定しています。
ユーザー検索機能の追加等も検討中です。
ユーザーに想定した行動をしてもらうのは中々難しいです...。
おわりに
実はこのサービス、2年前程に一度作成しようとしたのですが挫折しました。 今回のリベンジが成功して本当に良かったです。
一人でWebサービスをリリースするのはやることが多く大変でしたがその分学べることも多かったです。
現在B3スポーツをやっている方、またはこれからやってみようとお考えの方が居ましたら是非一度お試しください!
Sttend バグ報告や改善要望など頂けると助かります。
GitHub Pages + Middlemanで目に優しくない自己紹介ページを作った。
お腹が痛い人を集計するPonpetterをリリースした。
通勤中に腹痛に襲われる事はよくあると思うのですが、
世の中には一体どれくらいお腹が痛い人が存在するのか気になり集計するWebアプリを作成しました。
Ponpetter
http://ponpetter.herokuapp.com/
構成
ソース https://github.com/yassun/ponpetter
開発中のトピック
Redis To Go
Heroku上でRedisを使用するためのアドオンです。
無料プラン(nano
)を使用する場合でもクレッジカードの登録が必須でした。
nano
はサイズが5MB、コネクション数が最大10となってます。
今回はスケジューラ用のコネクションを必ず確保したかったので、 Webアプリ起動時にスレッドを起動して常駐させる作戦をとりました。
Tweet集計スケジューラ
通常Heroku上でスケジューラを使用する場合はHeroku Scheduler
を使用します。
ですが、スケジューラ利用時間もDynoの利用時間に加算されるため750時間の無料時間を超える可能性がありました。
その回避策として、Webアプリ起動時に別スレッドで動き続けるループをEventmachine
のEM::defer
で作成し、
そこから集計スケジューラを呼び出しました。
HerokuのSinatraにバックグラウンドワーカーを詰め込んで節約
NewRelicを使用してHerokuのアイドル状態を回避
NewRelicのAvailability monitoring
にサイトURLを指定することにより定期的にリクエストが来るためアイドル状態になる事を回避できます。
NewRelicの導入方法については公式を参照 https://devcenter.heroku.com/articles/newrelic#ruby-installation-and-configuration
Websocket
Heroku上でWebsocket
に対応したアプリを作成する方法については公式にfaye/websocket
を用いた詳細な解説とサンプルアプリがあったのでそちらを参考にしました。
https://devcenter.heroku.com/articles/ruby-websockets
https://github.com/heroku-examples/ruby-websockets-chat-demo
React.js
最初はjQueryで実装していたのですが、せっかくなので最近話題のReact.js
に変更しました。
ページ構成要素も少ないので簡単に対応できました。
グラフ描画やwebsocketの接続等のsetState
で変更させない部分について等、
まだまだセオリーが掴めてないです。
Travice CI
phantomjs
のバージョン問題でReact.js
のテストが失敗する事象にとてもハマりました。
後日、解決策をQiitaに書きました。
Travis Ci上でReact.jsのプロジェクトをPhantomJSでテストした場合にFailする現象
まとめ
こんなにお腹が痛い人がいるとは思いませんでした。
かぐや姫の御門登場時にすごい勢いで増えてウケました。
よろしければトイレでツイートしてみてください!
最近作ったRubotyのPlugin等
しばらく前ですが、Slackに音也(Ruboty)を導入しました。
そこで作成したPlugin達の紹介。
ruboty-romaji
日本語をヘボン式または訓令式 のローマ字に変換してくれるやつ。
https://github.com/yassun/ruboty-romaji
ruboty-instagram
instagramから指定したキーワードで画像を検索してくれるやつ。
https://github.com/yassun/ruboty-instagram
ruboty-xa
文章に草を生やしてくれるやつ。
https://github.com/yassun/ruboty-xa
ruboty-qanda
Docomo の知識Q&A APIを利用して質問に回答してくれるやつ。
https://github.com/yassun/ruboty-qanda
ruboty-kinkakuji
金閣寺の写真が見れるやつ。