sometimes I laugh

高専卒WEBエンジニアがいろいろ残しておくブログ

Railsで好き嫌い管理アプリ作った

https://kobayasitabel.herokuapp.com/

タイトルの通りです。
知人の好き嫌いが激しすぎて何ならば食べられて何ならば食べられないのか判別が難しかったので勢いで作りました。
中身は大したことのない簡単なものですが、Railsの開発の速さと生産性の高さを感じることができたのはいい経験でしたね。

大まかに概要

f:id:watass:20150921185729p:plain

インフラには主にHerokuを使用。DBはHeroku Postgresを使ってデータの永続化。
バックエンドはRailsで記述し、フロントエンドにはちょびっとだけReast.jsを使っています。UIはマテリアルデザインを使ってみたかったのでBootstrap Materialを採用。

機能はメニューの入力に対して食べられる、食べられないを返すだけ。
とはいえ、メニュー登録が手動だと色々萎えるので、Twitterからツイートを引っ張ってきてMeCabで解析して好き嫌い判定データを登録するPerlスクリプトをcronで叩いています。AWSインスタンスを一台立てて、そこにプログラムをおいてあります。

バックエンド

ほとんどコーディングしてません。Scaffoldさまさまです。

Perlスクリプトから叩かれるAPI部分もScaffoldでほとんど完成しているのでそれ使ってます。
せいぜいCSRF対策で弾かれないようにprotect_from_forgeryをexceptしてるぐらい。

フロントエンド

bootstrap-material-designとかreact-railsとかのgemを使ってます。React.jsは使っていますが、Ajaxで判定結果表示するぐらいにしか使っていないので、それはReact.jsを使っているとは言わない、ぐらいのレベルでしかないです。

デザインは特に凝っているわけではありませんが、Bootstrapのありがちデザインから脱出できたのが少し嬉しい。後、モバイルから見てもそこまで崩れないように注意しました。

バッチ処理

正直一番苦労しましたが、バッチ処理PerlがいいよなということでPerlを採用。
Net::Twitterでツイート取ってきて、Text::MeCab構文解析、LWP::UserAgentでAPIを叩きます。MeCab初使用でしたが、結構面白いです。スクリプトはgistにあげてます。

作ってみて

製作期間はがっつりサボって1ヶ月弱ぐらい。
雛形は2,3時間でできていたので、Railsの基本的な部分における生産性の高さには惚れ惚れします。ただ、色々雑な部分も多いのでできればしっかり書き直したいところ。

バッチ処理部分もHeroku上で解決したかったのですが、ちょっとむずかしそうだったのでAWS上で組みました。
非常に簡単にできるので、好き嫌いが多い人は自分の意思表示のためにもHeroku上に作ってみてはいかがでしょうか。