Trello APIを利用してスクリプトからタスクを管理する

「Joel on Software」の著書のJoel氏が立ち上げたFog Creek社のタスク管理ツールtrello。

https://trello.com/

スクラムの**かんばん**を視覚的に再現しつつ、WEBインターフェースで快適に動作する優れたツールです。

「便利とは聞いたことあるけど、既存のプロジェクト管理ツールから移行するのが面倒。」

「物理的に時間的に既存のRedmineやBacklogのチケットをtrelloに移行するのが無理。」

そういう人達のために開発用APIが公開されているためそれを利用すればいっきに**赤い管理ツール**からの移行もできます。

公開されているのはREST APIなので基本はどの言語でも利用できますが今回はRubyからtrello APIを利用する方法を紹介します。

APIドキュメントは以下
https://trello.com/docs/

#1. trelloのアカウントを取得
ここは説明不要なのでSKIP

#2. trelloの開発者用のアカウントを取得
https://trello.com/1/appKey/generate
trelloにログインした状態でブラウザから上記のリンクに飛ぶとアプリケーションキーとシークレットトークンが発行される。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/36931/372552b9-da96-756c-6c6a-99b4c68f1101.png)


#3. アプリケーショントークンを取得する

https://trello.com/1/authorize?key=アプリケーションのkey&name=My+Application&expiration=1day&response_type=token&scope=read,write

上記のURLにブラウザでアクセスすると期限付のアプリケーショントークンが発行される。
上記は1日だが30日にすることも可能。
その場合は「30day」でなく「30days」になるので注意

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

![2.png](https://qiita-image-store.s3.amazonaws.com/0/36931/233bfef6-e1b6-9e2b-e002-af0535d09c12.png)

うまくいくとこんな画面になる。

30日期限の場合はこんな画面になる。

![2s.png](https://qiita-image-store.s3.amazonaws.com/0/36931/eb406898-1c57-6b7d-918b-376cac096b05.png)


「Allow」ボタンを押すとアプリケーショントークンが発行される。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/36931/b1f26cbe-dbbf-aca0-cb25-f8bf4bb764f2.png)


今までの作業で手に入れた以下の3つのキーで今回はtrello APIを利用する(認証方式はいくつかある)
* application_key
* application_secret_key
* application_access_token


#4 Ruby trelloモジュールのインストール

bundlerを入れてGemfileを書いてbundle install

```ruby:Gemfile
source "https://rubygems.org"

gem "ruby-trello"
```

#5 trello APIを利用してボードを作成する
```ruby:create_board.rb
require 'trello'

include Trello
include Trello::Authorization

#認証用の共通ロジック開始
application_key = ""
application_secret = ""
application_token = ""

Trello::Authorization.const_set :AuthPolicy, OAuthPolicy
OAuthPolicy.consumer_credential = OAuthCredential.new application_key, application_secret
OAuthPolicy.token = OAuthCredential.new application_token, nil
me = Trello::Member.find("me")

#認証用の共通ロジック終わり


#ここから個別実装
if ARGV.length < 1
  puts "usage"
  puts "./create_board [board_name]"
  exit
end

board = Board.create(:name => ARGV[0]);
```

以下のコマンドで「trello api」というボードを作る

`bundle exec ruby create_board.rb "trello api"`

![4.png](https://qiita-image-store.s3.amazonaws.com/0/36931/b8e4a3ce-a333-dc67-8fff-4c9d9a2a26ea.png)


#6 trello APIを利用してカードを作成する

```ruby:create_board.rb
#認証ロジックは上記と一緒なので略

#ここから個別実装
if ARGV.length < 3
  puts "usage"
  puts "./create_card [board_name] [list_name] [card_name]"
  exit
end

target_board_name = ARGV[0]
target_list_name = ARGV[1]
card_name = ARGV[2]
board_id = nil
list_id = nil

me.boards.each do |board|
 if board.name == target_board_name
   board_id = board.id
   break
 end
end

puts board_id
unless board_id
  puts "ボードが見つかりません"
  exit
end

Board.find(board_id).lists.each do |list|
  if list.name == target_list_name
    list_id = list.id
    break
  end
end

puts list_id
unless list_id
  puts "リストが見つかりません"
  exit
end

Card.create(:name => card_name, :list_id => list_id)
```

trelloは大きいドメイン順に　*ボード->リスト->カード*　となるため
カードを作るためには**「どのボードのどのリストにカードを作るか？」**の指定が必要になる。

以下のコマンドで「**trello api**ボードの**To Do**リストに**"とりあえず書く"**」カードを作成する

`bundle exec ruby create_card.rb "trello api"  "To Do" "とりあえず書く"`

To Do リストに「とりあえず書く」カードが作成されました。

![5.png](https://qiita-image-store.s3.amazonaws.com/0/36931/72bffc81-1d8a-c4d0-962e-2fb3ee8b112c.png)

「scrum for trello」というブラウザの拡張機能をインストールするとタスクのポイントがふれます。
その場合はカード名の先頭にポイントの数字を入れてカッコでくくります。

`bundle exec ruby create_card.rb "trello api"  "To Do" "(8) むずいUT"`

このコマンドをうつと
ポイントが8ふられたカードが作成されました。

![6.png](https://qiita-image-store.s3.amazonaws.com/0/36931/c810c4b3-d2f1-8d6c-8d13-452ca5e57f5e.png)


上記のスクリプトを利用しカスタマイズすればCSVからいっきにカードを作ったり、赤や緑のプロジェクト管理ツールからの移行も楽にできるでしょう。

Let’s trello!