クックパッドの24contestに参加しました

クックパッドさんは仕事でもプライベートでもお付き合いがあるのですが、そのクックパッドが24時間限定の開発コンテストをやるということで参加しました。
未踏やってる時にどうしてもGAE/JRuby + twitterアプリをやりたかったのですが、それを便乗してやってしまおうということです。
(ちなみに未踏は無事終了しました。)

ネタ

コンテストの課題が「朝起きてから学校や会社に行くまでの時間をより便利にするためには」でした。朝に役立つtwitterアプリ、、ということで最初に思いついたのが、朝気になるのは夜流れてしまったTLの内容だよね!ってことで、夜中の自分のTLを保存できるアプリがあれば嬉しい人いるんじゃないかということで、安易に「丑三つったー」という名前をつけて開発を始めました。

開発した時のメモ

開発時の設計メモをさらしてみます。時間がなくて妥協したものも多いですが、実装もこんな感じになりました。


■仕様
必要
・寝てる間のtweetを保存しておいて起きたときに見るツール
・「おやすみ」ボタンから「おはよう!」ボタンまでのtweetをためる
・デフォルト昨日のが見れる

あるといい
・今までのリンクもあるとよい
・認証はgoogle
twitterの人で絞り込めるといいなぁ
iPhone用画面とか

■設計
<アプリ構成>
・GAE/J with appengine gem
sinatra

<動作>
tweet収集部はcronで1hに1回
- limit 24h
・Web画面では、「おやすみ」か「おはよう!」ボタンがあって、
 おはよう!したら昨日の一覧が見れる。

<モデル>
・user has n tls
- login
・tl has n tweets
- start
- end
tweet
- twitterに準じる http://apiwiki.twitter.com/Return-Values

作業メモ

$ sudo gem install google-appengine
$ appcfg.rb generate_app ushi3tter
$ cd ushi3tter

Gemfileとconfig.ruでsinatraを有効に

Gemfile

# Critical default settings:
disable_system_gems
disable_rubygems
bundle_path ".gems/bundler_gems"

# List gems to bundle here:
gem "dm-appengine"
gem "sinatra"
gem "json-jruby"

json-jrubytwitterのデータパースに必要

config.ru

require 'appengine-rack'
AppEngine::Rack.configure_app(          
    :application => "ushi3tter",           
    :precompilation_enabled => true,
    :version => "1")

require 'app'
run Sinatra::Application

app.rbに実装
モデルとかパスのハンドラとか書く。こちらを参照> ushi3tter/app.rb at master · fujibee/ushi3tter · GitHub

テスト!テスト!!テスト!!!

$ dev_appserver.rb .

ある程度できたらgoogle app engineにアップロード

$ appcfg.rb update .

また実装とテストに戻る

はまりポイント

主にappengine-jrubyではまったんですが、datamapperでモデルにidをSerial型で定義していないと変なエラーが出ます。(30分くらいはまり)
あと、開発環境でモデルが中途半端にできてると壊れるので、clearするような仕組みがあるといいかもしれません。
最大のハマリは、appengine本番にアップしたあと直後は、必要なindexがappengine上で作成されていないため、エラーになります。。
とりあえず必要なindexをgoogleに作成しておいて、開発を進めるのがよいようです。

感想

まずはこのような機会を与えてくれたクックパッドさんに感謝です。
で、このコンテスト127人もの開発者が参加したとのことで、twitter上でその人達が開発している様子が伺えて、それがとてもおもしろかったですね。
もし今度やるときは、もっとネタを練って少しは入賞に手がかかるようにしたいですね。

おまけ

後日、Asakusa.rbで@urekatさんに会っていろいろお話を聞けました。日本のappengine-jrubyの第一人者です。
@masui さんがまとめサイトを作ってくれています。 24contest / Index