結論
最初に結論を言いますと、
dateLastActivityの日付は信用するな
ということです。
どういうことか気になる方は以下を読み進めていただければと思います。
Trelloとは
みなさん、ほとんどの方がご存知だと思いますが、念のため説明しておきます。
TrelloとはWeb上でタスク管理ができるツールです。
特徴として、個人的に感じるのは「操作性が快適」、「UIが綺麗」、「リロードしなくてもリアルタイム反映」などとにかく使いやすいです。
スクラム開発をする上で、「TODO, DOING, DONE」で分けて毎日の進捗をわかりやすくするカンバンという手法がありますが、それをやるにもとても使いやすく現場でも重宝しています。
TrelloAPIについて
そんなTrelloですが、WebAPIが用意されており、APIを使うことで、カードを自動登録やデータを取得するといったことが可能になります。リファレンスやカードを取得する方法などは本記事では割愛します。きになる方は以下を参考にしていただければと思います。
APIリファレンス
https://developers.trello.com/reference/
Trello API を叩いてカードを作成する方法(curl利用)
https://qiita.com/isseium/items/8eebac5b79ff6ed1a180
やろうとしたこと
では私が何をやろうとしたかというと
TrelloAPIのみを使って、バーンダウンチャートを作る(DBを使わない)
ことです。
DBを使わない理由としては、あまり大規模にしないで、ミニマムで手軽に作りたかったからです。
バーンダウンチャートについては、詳しくは書きませんが、ここら辺を参考にしていただければと思います。
https://backlog.com/ja/help/usersguide/burn-down-chart/userguide289/
簡単に説明すると、
1スプリントのタスク消化状況を一目で見ることができるグラフ
になります。
これを作る上で必要になることは、主に以下の3つです。
- 1スプリント内の稼働日のリスト
- 見積もり時間の合計
- 各稼働日に消化したタスク時間
この中で1と2については、問題なくクリアできました。
しかし、3を取得しようとすると、doneリストの中にあるタスクがいつdoneになったかというタイムスタンプが必要になります。そこで使おうと思ったのが、このdateLastActivityなわけです。
dateLastActivity
TrelloAPIリファレンスを見るとcardオブジェクトのプロパティの一つとして定義されています。
https://developers.trello.com/reference#card-object
ここでのdateLastActivityの説明を見てみると、、
The datetime of the last activity on the card.
アクティビティとは、「カードを移動した」とか「カード内のチェックリスト」を更新したとかいうカードに対するアクションのことです。(だと思っていました。)
つまりdoneに追加されてからカードに対して何もしなければdoneに追加された日付が取れる。(updateのタイムスタンプが取れる!!)と思ってしまいました。
何がまずいか
しかし、いざAPIをコールしてdateLastActivityの値を見てみると、、(出力結果一部抜粋)
あれ、なんかおかしい、、、
コードレビューとか15日よりも前に終わってたきが、、
てかこれらのタスク終わったの全部5月15日12時52分っておかしいやろ!!w
もう一度リファレンスを確認すると下にちゃんとこう書いてありました。。。
Note: There are activities that update dateLastActivity that do not create a corresponding action. For instance, updating the name field of a checklist item on a card does not create an action but does update the card and board's dateLastActivity value.
要するに、「アクションに対応しないactivity以外にもdateLastActivityは更新されることがあるよ」ということです。
ああ、なるほど。。。やはりリファレンスはちゃんと読まないとダメですね
まとめ
まとめると、**dateLastActivityはカードを移動したタイムスタンプに使うことはできないですよ(使わない方が良さそう)**ということです。
そもそもcardオブジェクトにupdateのタイムスタンプつけてくれっていう話ですね