前口上
今日は、1ヶ月振り2回目のエントリとなりましたチーフテクノロジストの稲村です。前回のエントリは『私の出会った、できるプログラマ』でした。
最近はPlay frameworkやCoffeeScriptが楽しいです。
私の担当回では、これから何回かに分けて、社内で使う為のChrome Extensionを作る過程を書いていきたいと思います。ただ、今まさに勉強しつつ作っていこうという段階なので、次回以降方向性が変わる可能性もありますし、最悪断念する可能性も0ではない点ご了承下さい:-)
第1回となる本エントリは、概要の説明と現時点で考えている技術要素について書いておきたいと思います。
何を作るか
一言で言うと『社内のメールに対して「いいね~」できるChrome extension』です。
モンスター・ラボでは社内インフラの1つとして、Google Appsを利用している為、大半のメンバーがブラウザでGmailを使っています。おまけにだいたいChromeです(たぶん)。そこでメールを表示する画面にChrome extensionで「いいね~」というボタンを埋め込み、メールを読んで「わざわざ返信したり声をかける程ではない(もしくはタイミングが無い)けど良いと思った」際に気軽にそれを伝えられるようにしたら、コミュニケーションに役立つのではないかと考えました。
なおこのextensionの企画は『モンスター・アワード』という社内の
『モンスター・アワード』とは?
(モンスター・ラボ 社長ブログより引用)
新規サービス企画を誰でも発表できるカジュアルな場として「モンスター・アワード」という企画コンペを年に2回実施しようというものです。
これまでも月1の全社会議でいつでも新規事業案を出せるような制度はあったのですが、もう少しライトにかつイベント的な要素(ノリ)も入れてやってみようということで、飲食できる場所を貸し切って実施します。
機能概要
- 各メールのヘッダ部分(差出人の横あたり)に「いいね~」ボタンが表示される
- ボタンを押すと、差出人に対して「いいね~」が通知される
- 通知はだいたいリアルタイムにされるので、なんか楽しい
- 「いいね~」した側、された側共に自分の送受信履歴を見る事が出来る
課題
・メールの特定
「いいね~」送信側と受信側で共有されているものとして、メールという事でMessage-IDが候補となります。が、GmailのDOMをちょっと見た感じ、通常の閲覧画面ではMessage-IDは取れなさそうです。また他に何か無いかと見てみましたが、今のところ画面から取れるものでユニークなものは無さそうです。URLのハッシュ値も、送信側と受信側で異なっていました。
という事でいきなりちょっと困りましたが、本extensionのゆるい性格を考えると厳密に特定できなくてもまあ良いかと思えるので、「件名+送信日時」で代用する事にしました。但しいくら社内用とは言え、メールの件名を丸ごと送信したりDBに保存するのはかなり微妙です。それが理由で使われなくなったら本末転倒になってしまいます。よって、件名は受け取った人が「あぁ、あのメールか」とだいたい分かるだろうという事で先頭3文字くらいにしょうと考えています。
なお送信側で後から「いいね~」したメールを確認するのに使えるので、URLのハッシュ値もそれ目的で保存しようと考えています。こちらは本人以外は知っても意味の無い値と思われる為、そのまま保存します。
技術要素
- 画面にボタンを埋め込む
- Chrome extensionのContent Script
- jQueryによるDOM操作
- ボタンが押されたら、差出人、送信日時、URLのハッシュ、件名の1部をサーバに送信する
- XMLHttpRequest
- サーバ側(Play framework予定)
- 自分への「いいね~」を取得し、通知を表示する
- Chrome extensionのBackground Pages
- Chrome extensionのDesktop Notifications
- 通知をリアルタイム化する
最後に
次回から、上記技術要素に沿って書いていきたいと思います。冒頭にも書いた通りまさにこれから作ろうという段階で、次回分だけは一応モノが出来ていますが、それ以外は手付かずです。何が言いたいのかと言うと、たぶん最後まで行くのに3ヶ月くらいかかると思います。
ちなみに名前が「いいね~」になっているのは、「いいね!」よりも更に気軽に送りあいたいという意図です。モンスター・ラボも次第に人が増えて(と言っても30数人ですが)、みんながみんな躊躇わずに全社メールで一言レスできる感じでも無くなってきたので(私は平気でやりますが…)、何かしら軽いコミュニケーション、それもポジティブなものをできないかという事でこんなものを作ろうと思っています。
[モンスター・ラボでは一緒に企画・開発する仲間を募集しています]