ruby-trello gem で API を利用して Trello を操作する #trello #ruby #api

## <i class="fa fa-trello" style="font-size:1em;"></i> 概要
ruby-trello gem で API を利用して Trello を操作します

## <i class="fa fa-cloud-download" style="font-size:1em;"></i> Installation

~~~bash
$ gem install ruby-trello
~~~

## <i class="fa fa-files-o" style="font-size:1em;"></i> Usage
### <i class="fa fa-check-circle" style="font-size:1em;"></i> 前提
環境変数の設定に dotenv gem を利用します [^1]
dotenv についてはこちらの記事にまとめてあります。
<i class="fa fa-external-link-square" style="font-size:1em;"></i> [dotenv gem で環境変数をスマートに管理](http://qiita.com/tbpgr/items/b7126c3d2d8f0329b11c)

### <i class="fa fa-lock" style="font-size:1em;"></i> 認証準備
* CONSUMER_KEY / CONSUMER_SECRET の取得

Trello にログイン後、下記 URL より **CONSUMER_KEY** / **CONSUMER_SECRET** を取得します。

<i class="fa fa-external-link" style="font-size:1em;"></i> [https://trello.com/1/appKey/generate](https://trello.com/1/appKey/generate)

* アプリケーショントークンの取得

Trello にログイン後、下記 URL より **OAUTH_TOKEN** を取得します。

https://trello.com/1/authorize?key=your_key&name=My+Application&expiration=1day&response_type=token&scope=read,write

※ expiration を伸ばしたい場合は 1day を任意の設定に変更する。never にすれば期限なし。

![trello_api1.png](https://qiita-image-store.s3.amazonaws.com/0/43480/4b4a509d-cd0a-33f1-8262-485e09ec56ea.png)

* Allow を選択すると以下のような出力を得ます。your_token... の部分にトークンが出力されているのでコピーします

~~~
You have granted access to your Trello information.

To complete the process, please give this token:

  your_token....
~~~

### <i class="fa fa-gear" style="font-size:1em;"></i> .env の設定
.env ファイルを作成し、前述の手順で取得した値を設定します

~~~
TRELLO_CONSUMER_KEY=your_trello_consumer_key
TRELLO_CONSUMER_SECRET=your_trello_consumer_secret
TRELLO_OAUTH_TOKEN=your_trello_oauth_token
~~~

### <i class="fa fa-flask" style="font-size:1em;"></i> 特定のカードの情報を取得するサンプルコード
処理対象のカードは以下。

![trello_api2.png](https://qiita-image-store.s3.amazonaws.com/0/43480/1fcac741-5bb4-f4ff-5748-d82761ec1598.png)

card から以下の情報を取得します

* id
* name
* desc
* checklist
    * name
    * size
    * items
        * name
        * state

~~~ruby
require 'trello'
require 'dotenv'
require 'pp'

Dotenv.load
Trello.configure do |config|
  config.consumer_key = ENV['TRELLO_CONSUMER_KEY']
  config.consumer_secret = ENV['TRELLO_CONSUMER_SECRET']
  config.oauth_token = ENV['TRELLO_OAUTH_TOKEN']
end

card = Trello.client.find(:card, 'card_id')
card_part = {
    id: card.attributes[:id],
    name: card.attributes[:name],
    desc: card.attributes[:desc]
}

pp card_part

checklist = card.checklists.first
checklist_part = {
  name: checklist.attributes[:name],
  size: checklist.attributes[:check_items].size,
  items: checklist.attributes[:check_items].map { |item|
    {
      name: item['name'],
      state: item['state']
    }
  }
}

pp checklist_part
~~~

### :running: サンプルコードを実行します

~~~
{:id=>"card_id",
 :name=>"sample card",
 :desc=>"Sample Description"}
{:name=>"Sample Todos",
 :size=>3,
 :items=>
  [{:name=>"sample list1", :state=>"incomplete"},
   {:name=>"sample list2", :state=>"incomplete"},
   {:name=>"sample list3", :state=>"incomplete"}]}
~~~

## :books: 外部資料
<i class="fa fa-external-link" style="font-size:1em;"></i> <i class="fa fa-trello" style="font-size:1em;"></i> [trello api document](https://trello.com/docs/)
<i class="fa fa-external-link" style="font-size:1em;"></i> <i class="fa fa-github-square" style="font-size:1em;"></i> [ruby-trello GitHub](https://github.com/jeremytregunna/ruby-trello)

## :books: 脚注
[^1]: <i class="fa fa-github-square" style="font-size:1em;"></i>[dotenv GitHub](https://github.com/bkeepers/dotenv)