TrelloのAPIを手軽に使って完了したタスクを自動アーカイブする

まさくに


TrelloのAPIを手軽に使って完了したタスクを自動アーカイブする

こんにちは。バックエンドエンジニアのまさくにです。

みんな大好き Trello、今年に入って Atlassian に買収され、bitbucket 内でも使用できるようになって……。そうですね、それについては個人的にあまり意味を感じられないんですけど、それでも大好きです。カードを移動するときのあのサクサク感はたまりませんね。

でも、ひとつ面倒くさいことがある。

完了したタスク(カード)をアーカイブするタイミングについていつも迷いません? 教科書的にはあれらタスクを完了するタイミングもひとつひとつ意識的にアーカイブして行くのが正しい手法だと思うんですけれど、その時間も面倒だし、特にお客様と共有していると決め事として話しておく必要が出てきます。

面倒だと感じた瞬間、面倒で死にたくなる。

そういう僕と同型の方のために作りました。「 archive frozen cards 」です。お手元にサーバーをご用意の上、お進みください。

 

これからすること

Trello の指定されたボードの Done リストから、5 日以上動きがないカードを一枚ずつアーカイブ化していきます。これを cron などで実行しておけば、カードでボードが溢れることがありません。

 

開発環境

実行した環境です。なお、ソースコードは こちら に置いてあるので、Gem のバージョンなどはそちらでご確認ください。

$ sw_vers # macのバージョン
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G29
$ rbenv -v # rbenvでrubyを入れています
rbenv 1.1.1
$ ruby -v
ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin16]

 

実行手順

Trello は OAuth のトークンなどをカンタンに取得できる方法が用意されています。この API を使おうシリーズも長らく続けてきていますが、この OAuth トークンを取得する方法が用意されているかどうかで難度が変わる……。

 

consumer key、consumer secretを取得する

まず こちら のページにアクセスしてください。

 
スクリーンショット 2017-10-24 19.23.28

Trello にログイン済みのブラウザであれば、上記のようなページが表示されるかと思います。環境によっては日本語だったりします。

ページ上部の Key と、ページ下部の Secret を保存しておいてください。それぞれ、先の方で Consumer Key と Consumer Secret として扱います。

 

oauth tokenを取得する

次に自分のボードを操作する権限を与えるため、先ほど開いたページの Token をクリックしてください。

 
スクリーンショット 2017-10-24 19.23.28 2

認可ページが表示されるかと思うので、Allow から Trello の操作権限を与えてください。そうすると下記のようなページへリダイレクトされ、トークンが発行されるかと思います。これを OAuth トークンとして扱うので、これも保存しておいてください。

 
スクリーンショット 2017-10-24 19.25.00

 

アーカイブするスクリプトを書く

下記スクリプトで「 5 日以上動きがないカードを一枚ずつアーカイブ化」することができます。これまでに取得したトークンは実行時に標準入力から取得するようにしています。

▼Gemfile

source 'https://rubygems.org'

gem 'ruby-trello'

▼archive_frozen_cards.rb

require 'trello'
require 'time'

BOARD_ID='your_board_id'
LIST_NAME='Done'

print "type your consumer key: "
consumer_key=STDIN.noecho(&:gets).chomp

print "\ntype your consumer secret: "
consumer_secret=STDIN.noecho(&:gets).chomp

print "\ntype your oauth token: "
oauth_token=STDIN.noecho(&:gets).chomp

Trello.configure do |config|
  config.consumer_key = consumer_key
  config.consumer_secret = consumer_secret
  config.oauth_token = oauth_token
end

# ボードを取得
board = Trello::Board.find(BOARD_ID)

# リストのIDを取得
list_id = nil
board.lists.each do |l|
  list_id = l.id if l.name == LIST_NAME
end

exit if list_id.nil?

# リストから5日以上動きのないカードをアーカイブ
list = Trello::List.find(list_id)
list.cards.each do |c|
  if c.last_activity_date.to_date > Time.now.to_date + 5
    c.close!
    print "\narchive card: " + c.name
  end
end
BOARD_IDについて
各BoardにはIDが振られていて、そのIDからアーカイブしたいカードへ辿っていきます。例えば下記のURLの場合、zzzzzzzzがボードIDになります。

https://trello.com/b/zzzzzzzz/test

LIST_NAMEについて
今回は「Done」というリストの中のカードをアーカイブ化しています。もしリストが他の名前だった場合、この値を変更してください。

 

結果

スクリーンショット 2017-10-24 20.11.13

これが

$ bundle install --path vendor/bundler # インストール
・
・
・
$ bundle exec ruby archive_frozen_cards.rb # 実行
type your consumer key:
type your consumer secret:
type your oauth token:
archive card: 青き衣を纏いて金色の野に降り立つ

こうすると

スクリーンショット 2017-10-24 20.12.04

こうなるぞ!

 

まとめ

さすがみんな大好き Trello、API も直感的で扱いやすく、特に困ることがありませんでした。上記のスクリプトをサーバーで日々動作するように設定しておけば、Done のリストに入ったものから順次アーカイブ化がされてくことになります。

Slack 側で Trello と連携しておけば、何かアーカイブ化されたのか見落とすこともなく、たいへん便利になっていくかと思います。

面倒なものはそこそこ自動化して、よい API ライフを!

 

まさくに
この記事を書いた人
まさくに

バックエンドエンジニア

関連記事