higitime.jpについて


先日のエントリの通り、ドリコムAward on Rails への応募作品として作成しました。
僕が前から欲しかったものでもあるので、自分で使ってみてそこそこ便利なアプリケーションになったと思います。(僕と同じように、この種のアプリケーションを使いたいという人がいるかどうかはかなり疑問ですが。)

URL

PC: http://hightime.jp/
携帯: http://hightime.jp/mobile/login/


携帯からのユーザ登録はできません。携帯版は、PC でユーザ登録してから利用可能になります。

サンプルユーザ

ユーザ名: testing
パスワード: testing


上記のユーザ名、パスワードでログインすれば、ユーザ登録なしに、どのようなアプリケーションか試すことができます。是非お使い下さい。


ログインはこちらから
http://hightime.jp/login

どういうアプリケーション?

ストップウォッチで計った時間を記録していく、というシンプルなアプリケーションです。
(この計った時間を、以下「ベル」と呼びます。)


画面構成は、twitter のようにユーザごとのホームで「ベル」の一覧が表示され、「ベル」ごとに個別のページがあります。タイムラインはありません。
サンプル: http://hightime.jp/satoship

何ができるの?

例えば、

  • 本を 1 冊読むのにどのくらいの時間が掛かるかを計ることができる
  • ブログを読んでいる時間を計っておいて、「へー、自分で感じているよりも時間を割いていないんだな」と新たな発見があるかもしれない
  • やりたくないこと(風呂掃除とか)の時間を毎回計っておいて、「今日は前回よりも早く終わらせてやる」とつまらないことを少しだけ楽しくやれるようになるかもしれない
  • お茶の水-新宿間などで、「みんな快速に乗ってるけど、実際どれだけ違うんだろうか」という疑問の答えが簡単に出る(もちろん、実際に計ってみれば分かることですが、快速で計って、次に各駅に乗った時には快速の時の時間を忘れているという事態にも対応可能)
  • 会社から自宅までの時間を計ることができる
  • 朝起きて携帯から「スタート」し、会社について PC から「ストップ」し、ベッドからデスクまでの時間を計れるかもしれない
  • 帰省時間を記録しておいて、毎回「ええと、実家までどれくらい掛かるんだったかな」という記憶の呼び出しをしなくてよくなるかもしれない
  • ブログを書く時間を計っておいて、「ブログを書くと時間がかかるから今日はやめよう」と考えるところ、なんとなく時間が掛かるというのではなく、前回はどのくらい掛かったか、というのを元に判断することができるかもしれない

などなど

注意すること

  • プライベート機能がないため、誰かに見られて困る情報は書き込まないようにして下さい。
  • 携帯のURLは、利便性のため、毎回ログインの必要ない「非公開 URL」を使用しています。よって、誰にも教えないように気をつけて下さい。また、「非公開 URL」は、アクセス不可能な URL ではないので、他の誰かにアクセスされる可能性があります。

その他の機能

タグ機能

タグによる絞り込みができます。


複数タグによる絞り込みは、ディレクトリ構造ではなく、以下のようにアンダースコア("_")で繋げて使用します。

http://hightime.jp/satoship/reading_feed
http://hightime.jp/satoship/from_company_to_home

AutoPagerize に対応

class に指定しただけですが、いい感じの位置に挿入されるように、フッターとページネーションを調整しました。
参考: http://d.hatena.ne.jp/swdyh/20070701/1183239979

作成の動機

僕は記憶力が悪い上に面倒くさがりです。


なので、例えばブログを書こうとか家計簿を書こうとか思った時に、「待てよ、今それをやったら今日は終わってしまうんじゃないだろうか」という考えが脳裏に浮かび、そんなことを考えている内に、無駄な時間を過ごしてしまうというようなことが多々あります。


そこで、そういう時間を毎回計っておいて、平均値を出しておけば、予定も立てやすくなるんじゃないかなと思いました。また、「何ができるの?」で箇条書きにしたことを実際にやりたい、というのも動機になりました。


とはいうものの、単純に何をするのにどのくらい時間が掛かるか、という情報を記録するのもおもしろいんじゃないかなと思ったのが 1 番の動機です。

技術的な話

使用したプラグインやサービス

レンタルサーバ

初めさくらインターネットを予定していましたが、rails アプリは CGI になってしまい、あまり早くなかったので、ここにしました。当然、レンタルサーバなので、TextDrive もそれほど早くはありませんでした。ただ、ActionMailer をほぼ設定なしで使えるというメリットがあります。

rails プラグイン

タグ機能を追加するプラグインです。
Railsレシピ には、acts_as_taggable が説明されていましたが、acts_as_taggable_on_steroids の方がいいよと書いてあったので、こちらを使いました。

携帯電話関連のプラグインです。
全角カタカナを半角にし、文字コードShift_JIS に変換する処理にしか使用していませんが、他にもたくさん便利な機能があります。

画像生成サービス

今後

Award on Rails の審査中はアップデートできないと思いますが、その後の予定。

  • プライベート機能
  • タグで絞り込んだ一覧の、合計時間や平均時間を表示したい
  • 「ベル」同士の時間を計算して次のようなことが分かる表示をしたい
    • いつも 3 ヶ月おきに髪を切ってるから、そろそろ髪を切るころだな

Ruby on Rails で開発した感想

  • rails 自体が徹底した DRY かつ富豪プログラミングなので*1、実装方法には迷わず富豪的な方を選ぶようにした。
  • rails の使い方は、書籍等で学習できるが、もちろん自分がやりたいことができないという局面が多々あるため、railsソースコードを素早く調べながら開発できる環境を揃えた方がよいと思った。
  • まずは、プラグインとして開発して、ビジネスロジックをアプリケーション側に移動するという流れもよいかもしれないと思った。
    • そうすることで、別の視点でロジックを分割しやすい
    • 例えば、このアプリケーションでは、「非公開 URL」を、アカウントの有効化、パスワードの再設定、携帯の 3 つで使っているので、あとから抽象化したが、さらにプラグイン化したくなった。だったら、共通部分をプラグイン化するよりも、ビジネスロジック部分を非プラグイン化した方が、多分楽だし、構造的に考えやすいのではないかと思った。

*1:例えば http://d.hatena.ne.jp/elm200/20070724/1185282738 から引用 > "get post put delete head と5種類しかリクエストがないのだから普通に def でメソッド定義してもよさそうなものだが、潔癖なまでに繰り返しを嫌う Rails の特徴がよく現れている"