こんにちは。バックエンドエンジニアのまさくにです。
みんな大好き 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を取得する
まず こちら のページにアクセスしてください。
Trello にログイン済みのブラウザであれば、上記のようなページが表示されるかと思います。環境によっては日本語だったりします。
ページ上部の Key と、ページ下部の Secret を保存しておいてください。それぞれ、先の方で Consumer Key と Consumer Secret として扱います。
oauth tokenを取得する
次に自分のボードを操作する権限を与えるため、先ほど開いたページの Token をクリックしてください。
認可ページが表示されるかと思うので、Allow から Trello の操作権限を与えてください。そうすると下記のようなページへリダイレクトされ、トークンが発行されるかと思います。これを OAuth トークンとして扱うので、これも保存しておいてください。
アーカイブするスクリプトを書く
下記スクリプトで「 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」というリストの中のカードをアーカイブ化しています。もしリストが他の名前だった場合、この値を変更してください。
結果
これが
$ 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: 青き衣を纏いて金色の野に降り立つ
こうすると
こうなるぞ!
まとめ
さすがみんな大好き Trello、API も直感的で扱いやすく、特に困ることがありませんでした。上記のスクリプトをサーバーで日々動作するように設定しておけば、Done のリストに入ったものから順次アーカイブ化がされてくことになります。
Slack 側で Trello と連携しておけば、何かアーカイブ化されたのか見落とすこともなく、たいへん便利になっていくかと思います。
面倒なものはそこそこ自動化して、よい API ライフを!
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。