2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ruby-trelloでTrelloを美味しくいただくサンプルを少々

Last updated at Posted at 2017-02-19

前置き

前回の記事でRubyからTrello APIを使う操作が可能になりました。とはいっても、ボードを作るサンプルだけではさすがに実用性がありません。そこでいくつかの小さなレシピを作ってみることにしました。

事前調査

先行事例は意外と少ないのでドキュメントと格闘することになります。

ruby-trello(ライブラリ)のリファレンスがこちらになります。

Ruby wrapper around the Trello API

ボードやカードをrubyらしくオブジェクトとして操作できます。restの通信もうまい具合に隠蔽してくれます。大抵の要求はこいつが満たしてくれることでしょう。最悪の場合でも、クライアント(Trello.client)から生に近いAPIを発行できるので何とかなります!……とは言ってもTrello APIってば、あまりにも豊富なオプションがあるので、ある程度は仕様を理解していないとつまずいたりします。APIの公式ドキュメントは一通り目を通しておいた方が良いでしょう。

Trello developer API reference

Rubyスクリプト

ドキュメントを読め、読めと言われても、時間ばっかりかかって効率あがらないし、手っ取り早く成果が欲しいよねーーーってことでレシピ集です。

まずは自分探しから

find_me.rb
me = Trello::Member.find('me')
puts me.name

自分がこしらえたボードをリストアップできます。詳細

find_my_boards.rb
me.boards.each do |b|
  puts b.name
end

リストアップはフィルタをかませて絞りこむことができます。この例では、スターをつけたボードだけが出力されます。詳細

find_my_favorite_boards.rb
me.boards(filter: 'starred').each do |b|
  puts b.name
}

ボードのID(urlのhttps://trello.com/b/ の後ろの英数字を組み合わせた文字列)がわかっている場合は、IDから直接取得できます。

find_board_by_id.rb
b = Trello::Board.find('b0ardID')
puts b.name

ボートにぶら下がるカードを取得します。

find_cards.rb
b.cards.each do |c|
  puts c.name
end

フィルターを使って公開中のカードだけ取得します。詳細ArgumentsのShowボタンを押して

find_cards_with_filter.rb
b.cards(filter: 'open').each do |c|
  puts c.name
  puts c.closed?
end

ボードをアーカイブします。カードも同様です。

close_board.rb
b.closed!

アーカイブしたボードを元に戻します。

reopen_board.rb
b.closed=false
b.save

ボードのスターを判定します。理由はわかりませんがスターはreadonlyです。APIにもON/OFFに該当する機能がありませんので、GUIから操作するしかないようです。

board_star.rb
b.starred?

カードをコピーします。コピー元のIDだけでなく、コピー先のリストIDも必要です。省略した時はコピー元のリストでいいと思うんですけどね。詳細

copy_cards.rb
b.cards.each do |c|
  new_card = Trello::Card.create(source_card_id: c.id, list_id: c.list_id)
end

もちろんリストIDを指定すれば、ほかのボードにもコピーできます。

copy_cards.rb
to_list = Trello::List.find('t0ListId')
b.cards.each do |c|
  new_card = Trello::Card.create(source_card_id: c.id, list_id: to_list.id)
end

おまけ

ruby-trelloのオブジェクトはRailsのActiveRecordみたいに親子関係をたどって行けます。

relation.rb
board.cards
card.list.board

これはTrello::BasicDatamany,oneの関係を定義しているからで、Trello::Board,Trello::Cardなどはこれを継承しているからです。

うまいことオプションを渡せない時はTrello::Clientを使うと良いかもしれません。get,findだけでなくpostputもあります。パスにパラメータを渡す形式なので柔軟に指定できると思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?