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

Rails3でアイデア管理アプリ「Bulbo」をつくりました

僕個人が使いたいこともありましてRuby on Rails 3でアイデアを管理するためのWebサービス「Bulbo」をリリースしました。Bulboという名前は電球を意味するスペイン語から。閃きとかピコーンとかそういうわかりやすいイメージで名づけました。

Bulbo

今のところWebのインターフェースしかありませんが、
個人的な興味からiOSのクライアントもしくはモバイルブラウザに対応し
いつでも使えるアプリケーションにしたいと考えています。

機能

そもそもどんなものかをご紹介する必要がありますね。
このアプリケーションはアイデアメモを管理するために使うものです。
何か思いついたらフォームから投稿し、過去のものは一覧で見ることができるというものです。

ぶっちゃけて言えば完全プライベートでTwitterを使えば代用できる可能性もあります。

でも完全プライベートのTwitterではできないこともある!
ので簡単にそれらを紹介しましょう。

セルフいいね

平たく言うと自己評価ができます。
「これいいんじゃない?」って思うものにはたくさんいいねしておきましょう。
連打できるようAjaxにしてありますのでご安心ください。
いいね順で並び替えもできますので意外と実用的です。

スコア

この概念は「アイデアマラソン」という手法にインスパイアされています。
アイデアをたくさん登録していけばスコアが上がっていくよというものなのですが、
単にアイデア数をスコアとしているわけではありません。

Bulboで用いているスコアは

アイデア数 - 経過日数
です。
なにもしないでいると毎日1点ずつ下がっていってしまいます。
1日1つアイデアを出せば0点をキープできるでしょう。
プラスに持っていくためには1日1つ以上アイデアを登録していく必要があるのです。

0点というととても地味ですが0点を1年間キープするだけで1年で365個のアイデアがたまります。
これって実はすごいことじゃないかと僕は思っています。
なかなかの蓄積ではありませんか?

おまけ

CSVでエクスポートができます。
なんと編集機能はまだありません…そのうちやります。

技術ブログなので技術的なこと

これらの構成でサービスを動かしています。

次にHerokuで使用しているアドオンについて触れておきます。

Heroku

BulboはHerokuにホストしています。Herokuをまともに使ったのは初めてなのですが非常に便利ですね。
サーバーのセットアップは要らないし、git pushでデプロイできるし、アドオンでいろいろできるし。

Heroku Postgres Dev

HerokuのDBです。これはだいたい皆使う感じだと思います。

Heroku Schedular Standard

最短10分間隔でタスクを実行できるアドオンです。cronのようなものですね。

なぜこれが必要かというと、、、HerokuではDynoというインスタンスみたいな概念があります。
Dynoを1つ動かしている分にはHerokuは無料と思ってもらって問題ないです。
ですがその場合Dynoはある一定期間アクセスがないと勝手にアイドル状態になります。

アイドル状態からの復帰には20秒〜30秒かかり、最悪です。
開発した自分ですら使いたくなくなるレベルです。
アイドル状態にならないようにするため&またアイドルになっても自動的に復帰させるために
このスケジューラを使って定期的にアプリケーションにリクエストを送ってあげるという用途で使用しています。

アイドリング回避の方法はいくつか選択肢があるようです。
実装が簡単だったことから、Bulboでは次の記事で紹介されている方法をとっています。
scheduler Heroku addonでアプリの起動状態を保つ(アイドルを防ぐ) - 酒と泪とRubyとRailsと

ですが実は効果のほどはよくわかっていません。
今でもたまに20秒近く待つことがあります。これは直近の課題です。

New Relic Stardard

New Relicはパフォーマンス監視のためのSaasです。
HerokuではNew Relicをアドオンとして簡単に導入することができます。
導入はこのあたりを参考に行いました。

Rails + New Relic ならレスポンスタイム等のパフォーマンス監視が簡単にできるよ - 彼女からは、おいちゃんと呼ばれています

例えばOverviewではこんなふうに見ることができます。

細かいところでいえば、どのControllerがどのぐらいのパーセンテージ占めているとか、
どんなクエリが処理に時間がかかっているかなど細かくわかります。
無料版は過去30分のデータしか解析できませんが、この規模のサービスであれば十分だと言えそうな感じです。

PG Backups Auto

一応バックアップぐらいしておこうということで、自動でバックアップを取っておいてくれるアドオンを入れています。
そんなに高機能ではないのでもっとしっかり運用したい場合は別の手段をとったほうがいいかもしれません、、、
というかそういう場合はHerokuを使わないのかもしれないのですが。

Rails

Rails3を使っています。特別なことは行なっていませんので使用したgemを一部紹介する感じにします。

Devise+Omniauth

Bulboはログイン機能つきのアプリケーションです。自分のアイデアが駄々漏れになったら困るので当たり前です。
ログインにはFacebookTwitterのIDが必要です。その部分をOmniauthに任せています。
また、ユーザー認証機能全般をDeviseに任せています。

twitter-bootstrap-rails, less, less-rails

CSS系はTwitter Bootstrapがベースになっています。
そのままではBootstrap感がすごいのでせめて色を変えよう!
ということでkulerで人気のある配色から色をピックアップして配色を決定しました。
https://kuler.adobe.com/

これは余談ですが、次のように言及されている記事を読んで耳が痛いなと思いkulerを使った次第です。

くれぐれも自分で工夫して「B2Bのサイトだから真面目で洗練した雰囲気を出すために青とグレーを基調にして〜」とか考えないでください。
それが間違いの元です。「どんなにしょぼくてもプロがいいといっているんだから自分がやるよりはマシだろう」ぐらいの感覚で選んでください。
自由が一番苦しいのです。

色彩センスのない人がそれなりのWebサイトを作るための秘訣3つ | 高橋文樹.comより

テスト系(RSpec, Capybara, Spork, Guard, Growl)

テストはRSpecとCapybaraを使いました。
テストおっせええと最初は思ったのですがSporkやGuardを組み合わせることでだいぶマシになりました。


皆様、是非触ってみてください by 株式会社CFlat