DC4

1年間毎日コード書いた。

365日を達成したので振り返り。

エビデンス

f:id:Yasun:20150823181327p:plain f:id:Yasun:20150823181333p:plain

始めたキッカケ

1年前に仕事でRubyを扱う事になり、プライベートでの勉強時間を毎日作るためのキッカケ作りとして始めました。

主にやっていた内容

前半

中盤

後半

全期間

  • その時話題だったり興味があったりした言語、ライブラリ等のハンズオン

継続するために工夫した事

やることを常にメモしておく

PC立ち上げて今日は何をやろうかと考えるのはかなり時間を消費しました。

毎日それをやるのはしんどいのでネット上で興味を持った技術記事等を常に草メモへストックしておきました。

やる時間を決める

日々の業務もあるので、時間を作ることに一番苦労しました。

やる時間をルール化しておくことで、少し強引にでも時間を作り続けることが必要でした。

毎朝のゴミ捨てとおなじ感覚でできるよう、日々の生活の中に組み込むことを心がけました。

感想

全然やる気がない日も当然あって、そんな日でも「とりあえず何かコミットして寝るか」という気持ちでコードを書いているといつのまにかやる気が復活していました。

「やらないとやる気は出ない」ってのは本当でした。

始めた理由にも書いたキッカケ作りとしてはとても有効だと思います。

ただ、旅行中とかお酒飲んだ日とかは結構キツかったです。

得たこと

やる前まではここまで続けられると思っていませんでしたが、 やってみると継続することがそこまで苦痛ではなく、自分の新たな一面を見つけることが出来ました。

B3スポーツユーザ向けのWEBサービスをリリースしました。

f:id:Yasun:20150509172133p:plain

この度、B3スポーツユーザ向けのWEBサービスSttend 」をリリースしました。

Sttend?

Sttend

SttendはB3スポーツを楽しむ人に向けて作成した、スポットを中心にユーザー間のつながりを促進するためのWebサービスです。

作った背景

私自身もB3スポーツユーザーです。
B3スポーツに限ったことではありませんが、一人でやるよりも複数人でやった方が当然楽しいです。
ですが人口が少ない競技であることも影響してか、同じ競技のコミニティに出会う確率は中々低いのが現状です。

私自身も環境が変わった際に近辺にどのようなスポットが存在し、どれくらいの人が居て、どの競技が人気なのかといった情報を得ることが難しかったため、暫く足が遠のいてしまいました。

私の場合は運良く同じ競技のコミニティと出会い、 再びB3スポーツを楽しむ事が出来ましたが、同じような状況の人が他にも居るのではないかと考えました。

そこで過去の自分が欲しかったサービスを作成することにしました。

期間

業務終了後の時間と休日で作成して約5ヶ月程かかりました。
アイディア出しや、デザイン作業等の時間が予想以上にかかりました・・・。 放置期間や、RubyRails学習時間もあるので次回はもっと早く作れると思います。

Rails、Ruby関係で最近読んだ本まとめ。

開発着手までにやったこと

サービスを作る際はゆーすけべーさんの実装までにする7つの企画作業を参考にさせて頂いてます。 今回のサービスですと

哲学は スケートは一人で滑るより、複数人で滑った方が圧倒的に楽しい。

イデアとして

  • 全国のスポットが検索できる。
  • スポットに参加予定を書き込める。
  • フォローしているユーザーの参加状況がわかる。
  • フォローしているスポットの参加状況がわかる。 ... etc

といった形で7項目をそれぞれ考えて随時見なおしていました。
この項目に従ってサービスを考えるのはとても考えやすかったです。

Webサービスのつくり方 ~「新しい」を生み出すための33のエッセイ (Software Design plus)

その他にも

をCacooで作成しました。 あまり書きすぎるとメンテナンスしたくなくなるので程々を心がけました。

使っている技術

とよくある構成です。

タスク管理はGithubのissueとEvernoteでやっています。

当初はホスティングにHerokuを使用するつもりでしたが、前から気になっていたSqaleを使用しました。
いまどき Rails で何かつくるなら、VPS より Sqale(スケール)だと思うの

気になることがあり何度か問い合わせメールを送ったのですが、全て1日程で返信して頂けて満足です。 日本語で問い合わせが出来るメリットは大きいですね。

学んだこと

使用しているライブラリの修正

今回使用したJSライブラリにいくつかの不具合があり、それに気がつくまでかなり消耗しました・・・。
使用していたライブラリがGithub上に合ったのでせっかくなのでプルリクを投げた所、あっさりと取り込んで頂けました。
OSSにプルリクを出すことは敷居の高いことだと感じていたのですが、今後も気がついた点は積極的に上げていこうと思いました。

モチベーションの維持

正直やる気がでない日もありました。
そんな中でモチベーション維持に利用したのはGithubLongest streak (草活動)でした。
その時興味ある事や勉強中の何かをGithubへコミットしてSttendの開発作業開始、という習慣を作ることで モチベーションが上がらなくともTermを立ち上げるきっかけとなりました。

個人的な体感ですと勢いでなんとかなる期間は1ヶ月が限度だと感じました。 それ以上の期間が必要な場合はモチベーションを維持させる作戦が必要だと思います。

細かく動かすことが重要

実際に動作する物があるとモチベーションが上がります。 テストを書いてとりあえず動くものを作り、細部を検討してリファクタ。
のサイクルを心がけました。

今後の課題

Homeのデザインが不評なのと実際に想定している使い方(予定の作成)まで辿り着いている方が少ないのでHomeページのリニューアルを予定しています。
ユーザー検索機能の追加等も検討中です。
ユーザーに想定した行動をしてもらうのは中々難しいです...。

おわりに

実はこのサービス、2年前程に一度作成しようとしたのですが挫折しました。 今回のリベンジが成功して本当に良かったです。

一人でWebサービスをリリースするのはやることが多く大変でしたがその分学べることも多かったです。

現在B3スポーツをやっている方、またはこれからやってみようとお考えの方が居ましたら是非一度お試しください!

Sttend バグ報告や改善要望など頂けると助かります。

お腹が痛い人を集計するPonpetterをリリースした。

通勤中に腹痛に襲われる事はよくあると思うのですが、
世の中には一体どれくらいお腹が痛い人が存在するのか気になり集計するWebアプリを作成しました。

Ponpetter

f:id:Yasun:20150315123956p:plain

http://ponpetter.herokuapp.com/

構成

  • Heroku
  • Redis (Redis To Go)
  • Sinatra
  • Thin
  • Eventmachine
  • WebSocket
  • React.js
  • newrelic
  • Travis-ci
    ...

ソース https://github.com/yassun/ponpetter

開発中のトピック

Redis To Go

Heroku上でRedisを使用するためのアドオンです。
無料プラン(nano)を使用する場合でもクレッジカードの登録が必須でした。   nanoはサイズが5MB、コネクション数が最大10となってます。

今回はスケジューラ用のコネクションを必ず確保したかったので、 Webアプリ起動時にスレッドを起動して常駐させる作戦をとりました。

Tweet集計スケジューラ

通常Heroku上でスケジューラを使用する場合はHeroku Schedulerを使用します。 ですが、スケジューラ利用時間もDynoの利用時間に加算されるため750時間の無料時間を超える可能性がありました。

その回避策として、Webアプリ起動時に別スレッドで動き続けるループをEventmachineEM::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)を導入しました。

f:id:Yasun:20150228191545p:plain

そこで作成したPlugin達の紹介。

ruboty-romaji

日本語をヘボン式または訓令式 のローマ字に変換してくれるやつ。

f:id:Yasun:20150228191807p:plain

https://github.com/yassun/ruboty-romaji

ruboty-instagram

instagramから指定したキーワードで画像を検索してくれるやつ。

f:id:Yasun:20150228191836p:plain

https://github.com/yassun/ruboty-instagram

ruboty-xa

文章に草を生やしてくれるやつ。

f:id:Yasun:20150228191852p:plain

https://github.com/yassun/ruboty-xa

ruboty-qanda

Docomo の知識Q&A APIを利用して質問に回答してくれるやつ。

f:id:Yasun:20150228191906p:plain

f:id:Yasun:20150228191918p:plain

https://github.com/yassun/ruboty-qanda

ruboty-kinkakuji

金閣寺の写真が見れるやつ。

f:id:Yasun:20150228192059p:plain