BacklogWatch
何するものなの
気になる課題をウォッチ1するとコメントがついた時にChromeのデスクトップ通知を出してくれる良い感じの奴です。
ウォッチの方法は各課題のブラウザウィンドウ右下にfixedでがいるのでクリックでウォッチ完了です。(通知出したい場合はAPI Keyの発行とOption設定を忘れずに)
ちなみにウォッチした課題はchrome.storage.sync
に保存されるためGoogleアカウントで同期設定をしていれば他のPCでログインした際もウォッチは引き継げます。
他にも以下の機能もオマケ程度にあります。
- ダッシュボードにお気に入りのプロジェクトを固定表示します。
- ダッシュボードにウォッチ中の課題を固定表示します。
経緯
Backlogでは課題にコメントを追加する際に「コメントをお知らせしたいユーザ」という機能があって、プロジェクトに参加しているユーザを選択するとそのユーザ宛にメールが飛んできたりダッシュボードに通知アイコンが出たりするのですが、そのお知らせをするかしないかはコメントする人の手に委ねられるので「俺は監視したいのにコメントが追えない、かといってメール全チェックは馬鹿らしい…」というジレンマがありました。RedmineからBacklogに移った方はより顕著にそう感じる人もいると思います。
そして色々検討した結果、「Chromeのデスクトップ通知でコメントを飛ばせば冒頭の数行しか表示されないにしろ何となくは何の話なのか掴めるし時間指定で勝手に通知を閉じる事も出来るしうざくないし良いかも」と思いその問題を解決する一つの手段としてChromeの拡張機能で作る事にしました。
以前からBacklogのAPI一覧を眺めては色々弄ってみたい想いを募らせていたので丁度良かったです。
技術的な事
最新のコメントの取捨選択は以下のAPIから取得しています。
通知作成処理の流れ
- ウォッチした際に課題キーを
chrome.storage
に保存する - チェック間隔(1分)毎にstorageにアクセスし課題キーから課題コメントの取得を行う
[
{
"id": 6586,
"content": "テスト",
"changeLog": null,
"createdUser": {
"id": 1,
"userId": "admin",
"name": "admin",
"roleType": 1,
"lang": "ja",
"mailAddress": "eguchi@nulab.example"
},
"created": "2013-08-05T06:15:06Z",
"updated": "2013-08-05T06:15:06Z",
"stars": [],
"notifications": []
},
...
]
- 初回取得時に一番最後に投稿されたコメントの
id
(配列では0番目に位置する)を取得しこれもstorageに保存。 - 次回チェック時にGETする際にクエリパラメータに
minId
を付与し前回取得したコメントのid
を指定する。-
minId
を指定していると指定したid
の数値以上のid
しかオブジェクトを返さない。 - この際に0番目のコメントの
id
が保存していたid
と同一のものだったりするとjsonは空の配列を返す。(サーバにかかる負担少ないように感じて気持ち嬉しい)
-
-
id
が新しいもののコメントをchrome.notifications
で通知を作成する。
本当はFirefoxでも使える拡張機能にしようと考えていたのですが以下のような都合上、全てChrome APIで賄ったほうが楽だなって事で断念しました。
- background pageで常に動作するのはコメントチェックの都合上、Chromeが重くなりかねないのでevent pageにした。
- event pageでは
setTimeout()
が使えないのでchrome.alarms
を使う事にした。 - それに合わせて
indexedDB
で実装していたものを途中でchrome.storage
に切り替えた。-
indexedDB
はデバッグで苦労させられたのも乗り換えた理由の一つです。
-
- それに合わせて
Web Notifications API
ではなくchrome.notifications
を使う事にした。 - 気付いたらChrome APIばかりになっていた(さようならFirefox)
他
GitHubにリポジトリがあるのでソースコードは読めますが去年の秋ぐらいからデスクトップ通知以外の部分を割と自由気ままにのんびりと作ってたのでjsによってちぐはぐな部分が多々有りますがご容赦を…
ピッチをあげたのはnulabが本家本元でウォッチ機能を実装しやがったからです。
コメントでウォッチ機能のAPI開発中、とあるのでもう少し待ってたら本家本元のウォッチ機能を使いつつ、もっと楽に開発出来るようになってたんでしょうね…
あとnulab側で進行中のBacklogの新UIに関する対応はダッシュボードのデザインがβより更に変わるみたいなので、それ待ちです。
少しでもBacklogのAPIを利用したChrome拡張機能を作成する助けになれば嬉しいです。
バグを見つけたり、機能要望とかあればGitHubのIssuesに頂けると喜びます!
-
本記事で言葉にする「ウォッチ」は所謂Backlog標準で実装されているウォッチ機能ではなく、本拡張機能における課題を通知させるための総称。 ↩