おやきーずと"One day..."の騒がしい関係

こんにちは、おやきーずの片割れ、変態猫です。
新春カンファレンスが終わって一度解散した「おやきーず」が、実は先週末に再結成致しまして、クックパッドさん主催の開発コンテスト24なるものに応募していました。結果ですか?入賞したのかって?え、それ聞いちゃいますか?ええ、そんな甘い現実は何処にもありませんでしたよ?
まあ、負けた人間がどんな風に負けたか解説するのも、また一興じゃないですかー!


あ、例によってこの反省記事はAtom君の後塵を拝しています。取り敢えず彼のエントリーぺたぺたしておきますね。
おやきーずが『One day...』というアプリを作った話。 via @FromAtom

どうも彼は上のエントリーの中で、

おやきーずのゆかいな仲間たち

  • 変態猫(@Whimsical_Cat)|彼も記事を書くとここにリンクがでます(脅迫)
  • Atom(@FromAtom)

From おやきーずが『One day...』というアプリを作った話。

とか

皆さんのお陰で、楽しい時間を過ごすことができました!本当にありがとうございました!特に変態猫マジ乙。そしてここに書かれてない事は、君が補足してくれると信じているよ(丸投げ)。
From おやきーずが『One day...』というアプリを作った話。

とか、色々と好き勝手書いてくれたようなので、今回のこの記事はAtom君の記事を補うような形にしようかなーと考えています。と言いますか、骨子の部分は例の如く彼が綺麗に掻っ攫ってくれたので、おやきーずが開発コンテスト24にどの様に取り組んだかのオーバービューは、Atom君のエントリーをご覧ください。(丸投げ返し

出来たもの

今回、おやきーずが開発したのは、"One day..."という、悪乗りと深夜テンションと夜空と小鳥の囀りで構成されるシステムです。(半分嘘です
どんな物かは、下のムービーからお察し下さい。ソースコードの開示要求はAtom君までお願いします。あ、バイナリで良ければ僕でも投げつけられます。

え、何これ?

だから悪ノリと深夜テンションによって開発された、夜空と小鳥の囀りで構成されるシステムですってば。冗談だろって?いやー、それが本当なんだなコレが。

さて、いい加減システム概要をお話ししましょうか。この辺り、あんまりAtom君お話ししてませんしね。ま、ムービーで紹介している事が全部といえば全部なんですが、もしかしたら居るかもしれない、この記事を音が出せない職場とか学校とかで見ている人の為に、文章でも説明しておこうかと思います。
長ったらしいのは考えるのが面倒なので、箇条書きで行きましょう。"One day..."とはつまり、

  • Twitterのログを良い感じに綺麗っぽく見せてくれます
  • イメージはビル群と、星空で構成される夜景です
  • 表示できるログは、TL上のTweet数、あなたがRTされた回数、あなたがFavされた回数です
  • 表示するログの切替は左上のアイコンでどうぞ
  • ビル群は今表示しているログを24時間ごとに区切って、ビルの高さとして表現しています
  • お星様がキラリと流れたら、今表示しているログに、新しい何かを受信した事を教えてくれます
  • 右上の月をクリックすると、今表示しているログの総計数だけお星様がキラキラキラッと流れます

あ、文章で満足しないで、是非お家に帰ってから、或いはいま直ぐイヤホンを取り出して、動きが見れる動画もご覧下さいね。

ふーん、どうやって使うの?

朝起きたら、取り敢えずOne dayを起動しましょう。後はそのままパソコンを放っておいて、仕事なり学校に出掛けるだけです。あなたが忙しい一日を終えて家に帰り着く頃には、何もなかった夜景にはビルが乱立し、月を叩けば多くの流れ星が流れてくれることでしょう。

開発風景とか経緯とか

大まかな開発の経緯はAtom君が書いてますので、改めて全てのシナリオを書くような事はしません。おやきーずが『One day...』というアプリを作った話。をご参照下さい。
じゃあ何を書くかって言うと、要は猫視点の感想を書き殴ることで、彼が書き漏らしたことを補完しようというのがこのセクションの目的です。記事補完計画ですね!!(言いたかっただけです

そもそも何がきっかけだったの?

Atom君がボソッと言った、FBでのこの発言に乗ってしまったのが全ての始まりでした。
その後、彼とメールでやり取りをして、「まあ多分参加するよ、きっとする」程度には認識を固めて、テーマ発表の時間を待ちました。

テーマ発表してもAtom君から連絡来ないし、どーしたのかと思っちゃいましたよー。(ニコニコ
# 怒ってないですよ?

作業分担はどうやって決まったの?

日付変更前にボツになった案も、日付変更後に確定した案も、基幹技術(Kinect制御だったりTwitterAPIの使用だったり)に明るかったのはAtom君でした。それと、猫がProcessing童貞で、開発に慣れていなかったってのもあります。そこで、猫は自然とAtomを補助する役割に回ることになりました。その結果、フロントエンドが猫、バックエンドがAtomという、非常に珍しい構図が出来上がります。
デザインに拘りを持つAtomがバックエンドで、ロジックに拘りを持つ猫がフロントエンドってのは、本当に珍しい構図だったんですよ。その割に不自由がなかったのは、作業分担を流動的に組み替えられるペアプロ開発だったのと、相方が勝手知ったるAtom君だったお陰だと思ってます。
# ああ、結局星を降らせるモジュールのウラで動くロジックも猫が書いたので、そこはちょっとした拘りを持って書いています

"One day..."にはどうやって行き着いたの?

日付変更前に自分たちの案の詰まらなさに気付けた猫とAtomは、「Processingを使って簡単にTwitterAPIを呼べるし何か作りたい」的なAtomの発言を受けて、「じゃあその一日のTwitterのログを使って何かするプログラムを組もう」という方向性になった様な覚えがあります。

その後はAtom君が

 1日の終りということもあり、その日最も人気だったツイートを表示してみたり、人気だったユーザを出してみたり、時間毎の人気ツイートを表示してみたりなどというアイディアが出ましたが、どの案でも既存感が拭えずモヤモヤ〜っとしていました。
From おやきーずが『One day...』というアプリを作った話。

と書いている通り、仕様会議がありました。
彼の書き方だと機能主体で検討が進んだように思えますが、実際にはお互いにお絵かきソフトを立ち上げて、UI主体で試行錯誤し、じゃあそのUIにどんな情報を載っけるのかを考える、という流れで検討を進めています。(作ったUIのログは全破棄しちゃった、テヘ☆

作ってて楽しかった?

無茶苦茶。
Atom君はどうも、今回の開発でペアプロ童貞を散らしたそうですが、ペアプロ童貞は散らしたし、Processing童貞Skype越しに夜通し開発童貞まで奪われましたよ?

個人的に開発中のSkype通話やらTwitterの発言やらがカオスで気に入っていたんですが、如何せんSkypeの録音もTwitterのログ取りも忘れていました。検討したUIのログも残していなかったし、今回はログ史上主義者として失格です。後からある人に言われたんですが、USTでもすれば良かったんですかね。(無修正じゃ流せない内容だったと思うけど
あ、あの時間帯(13日の0〜9時くらい)にTLにいらっしゃった方には、ホントに意味不明な発言を繰り返して、ご迷惑をお掛けしました。


それと、Processingで何かを本格的に開発するのは初めてだったんですが、これもやっぱり楽しかったです。
高級なGUIと入出力を、ああも簡単に使えてしまうというのは、何と言うかこう、脳みそが溶け出しそうな気分を味わいました。チェックボックス一つでWinとMacLinux向けにバイナリ出力できた時には、僕の頭蓋骨の中はすっかり空っぽになっていたと思います。煩雑な記述や環境の違いに囚われず、理論と表現の工夫に集中できるっていうのは、何とも得難い体験でした。浸かり過ぎると大変な事になりそうな気がします。

でもダメだったんだよね?

それを言わないで欲しい。(切実

Atomも書いていますが、手持ちの札云々より何より、テーマに対する検討が十分に成されていなかったなと痛感しています。
例えば、3位のChargeBadgeは、一日の終りに誰もがする「充電」という行為を取り上げていて、「誰もが送っている一日の終りに何も変化を加えないままで、そこに+αしてくれる」という点で、非常によく考えられているなと感じました。2位の吾輩は読書中である。明日の朝は早い。も、多くの人がやってしまう、「一日の終りに読書で夜更かし」を上手く解決していたなと思います。*1
後は、まあ、手持ちの札が貧相だったのを言い訳にしたくは無いですが、貧相でしたよね。本当に、自分のWeb開発力とスマホ開発力の無さを恨みました。
# かと言ってローカルアプリのプロかと言われれば、そうでもないのが何ともし難い

ところでどうしても言いたいことって?

ええ、実は開発当時は言えなかったけど、どうしても言いたいことがあったんです。実は"One day..."は非常に致命的な欠陥を抱えている(と猫は思っている)のです。それは何かというと……。


ログを取るために朝からアプリ起動させっぱなしじゃないといけない。ただこの一点に尽きます。だって、起動した直後は更地に星が降るんだもん。一日の終りに軽い気持ちで起動しても、更地しか見えないんだもん。


多分解決策としては、

  1. TwitterAPIをフル稼働させて24時間分遡ってログを得る
  2. サーバーでプログラム走らせておいて、そこから24時間分のログを取得してくる

とかが考えられるんでしょう。ただ、この点は欠陥なんじゃないかと考えた時には、多分解決策に手をつけてる余裕は無いだろうなぁと考えました。作業量と時間の兼ね合いもそうですし、猫はTwitterAPIの特性は詳しく知らないし、何より解決しなくても(24時間走らせておけば)アプリは期待している動作をしてくれる事は明白でした。だから軽くスルーしてボタン制作をしていたような気がします。
# 今思えば、更地になる部分には適当な数値を突っ込んでビルを伸ばしておけば、見た目の問題は解決したのかも知れませんね


まあ、今この記事を書くまではすっかり忘れていた問題なので、解決しなくても気にならない問題ではあるのかなー……。

他に悔い改める事はないかい?

取り敢えず、捕まるような事は仕出かして無い。多分


正直、ビル群に関しては手を抜きすぎたなぁと感じています。後、流れ星が流れ星っぽくない。自動で消えるように調節すれば良かった。流れ星をそれっぽく見せるための似非空気抵抗に関しても、もっと検討の余地があったと感じる今日この頃です。
デザイン方面に関して言えば、月の配置が若干気に入らないのと、左上のアイコンがやっぱダサいですね。UIが非常に分かり難いので、ヘルプページも簡単に作れば良かったなと感じています。
Twitterのクライアント作ってるのに、猫が最近のTwitterAPIを全然知らないというのも問題があったなぁと思います。もともと検索やポストやTL取得をちょこちょこと試しただけなのと、UserStreamが出てから全く触ってこなかったので、バックエンドは全くもって理解不能でした。

さ、それで次は何を直そうか、Atom君?

終わりの振り返り

今回、猫はフロントエンドを担当したわけですが、一番の自信作がアプリのアイコンです。


……いえ、冗談です。あ、アイコンに自信があるのは本当です。
アプリ的に頑張れたなーと思うのは、コードの設計でしょうか。Atom君は拘りと無茶振りの権化(褒め言葉)だと痛感しているので、急な仕様変更にも耐えられるように、考えうる仕様変更を先読みしつつ、出来るだけ使い回しが効くクラス設計、ロジック設計を心がけました。…いえ、嘘付きました、夜でボーっとしてたのもあって、そこまでしっかりは意識してなかったです。ただ、無意識に使い回しやすい設計を心がけられたってのは自信になりました。朝方になって仕様変更が飛んできた時も、3時頃書いたコードが上手く使い回せたので、深夜の自分を褒め称えてた覚えがあります。
自分以外の誰かが利用するモジュールを作るってのは、思い返せば高専3年のプロコンが最初でした。当時はただ単に画像処理のロジックを隠蔽するしか能がなかったのに、随分成長できたものだなぁと思います。それを言葉を通して改めて教えてくれたAtom君と、彼とコンテストに参加できる機会を与えてくれたクックパッドさんには、ただただ感謝です。

*1:一位の作品については、アプリとしての完成度は凄いなと思いつつ、テーマにそっているとは余り考えられませんでした。恐らく、猫が一日の終りにするのは明日の心配であって、今日を回想するといった事がまず無いからかなーと考えています。まあ、2位の作品は本を読まない人には意味が無いし、3位の作品は携帯電話を持たない人には何の利益もありませんから、「感じ方には個人差があります」って奴なんでしょうね。