TrelloにJaveからAPIを使ってカードの起票や取得をしてみる

みんな大好きのタスク管理ツール[Trello](https://trello.com/)は、ユーザインタフェースが使いやすく、見てすぐ使いこなせます。

その[Trello](https://trello.com/)と自分の作っているサービスを連携するためにTrello APIを簡単に使えないかを調べたのでまとめてみました。

# 1.準備

APIを発行するには、IDやパスワードの代わりになるキーとトークンの取得が必要です。
これらをまず取得します。

Trelloにログインします。

```
https://trello.com/app-key
```

にアクセスします。すると、キーが表示されますので、これをメモします。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/54dbeafa-6caf-4932-ff02-b7f465ec3c6b.png)

その後、「トークン」をクリックして、下記のような画面が表示されるので、「許可」をクリックします。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/821f7915-1c5b-84ed-4863-c56a7fdb8115.png)

下記のようにトークンが表示されますので、これをメモっておきます。

![03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/20464/d3997677-b574-a431-f5bf-2ea6f69ae809.png)

このキーとトークンを使い、APIを発行してTrelloにカード起票などを行ないます。

# 2.Javaのラッパーのライブラリを利用する

Githubに[trello-java-wrapper](https://github.com/taskadapter/trello-java-wrapper)というライブラリがあるので、そちらを利用します。

GithubのページにはGradleで記載されていますが、Mavenにもありますので、こちらを利用します。

```
<!-- https://mvnrepository.com/artifact/com.taskadapter/trello-java-wrapper -->
<dependency>
    <groupId>com.taskadapter</groupId>
    <artifactId>trello-java-wrapper</artifactId>
    <version>0.13</version>
</dependency>
```

まず、TrelloImplのインスタンスを作成します。この例では、Apache Httpライブラリに基づいたhttpクライアントを使用しています。

```
Trello trelloApi = new TrelloImpl(trelloKey, trelloAccessToken, new ApacheHttpClient());
```
* trelloKey：Trelloで認証されたユーザーのoauthトークン。
* trelloAccessToken：Trelloで認証されたユーザーのoauthトークン。
* ApacheHttpClient：サポートされているhttpクライアントの1つ。
  ※com.julienvey.trello.impl.httpのパッケージを参照してください。


ちなみに以下のようなエラーが発生する場合は、

```
Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/exc/InputCoercionException
```

Mavenで「com.fasterxml.jackson.core」を追加すると直るかと思います。

```
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.10.2</version>
</dependency>
```

# 3.ボードの一覧を取得する

まずは、ボードの一覧取得はこうなります。
メンバーIDの指定を"me"と記載すると自分自身のボードがすべて取得できます。

```
List <Board> boards = trelloApi.getMemberBoards("me", new Argument("fields", "name"));
```

パラメータに以下を指定しているのは、ボード名が取得できないので、指定する必要があります。

```
new Argument("fields", "name")
```

# 4.リストとカードの一覧を取得する

こちらがボード内のリストを取得する方法になります。

```
List <TList> lists = trelloApi.getBoardLists(boardId);
```
* boardId：取得したボードIDを指定。


こちらがリスト内のカードを取得する方法になります。

```
List <Card> cards = trelloApi.getListCards(listId);
```
* listId：取得したリストIDを指定。

ちなみにこんな感じでコーディングするとすべてのカードが取得できたりします。

```
List <Board> boards = trelloApi.getMemberBoards("me", new Argument("fields", "name"));
for (Board board : boards) {
    board.getName();
    board.getId();
    System.out.println(board.getId() + ":" + board.getName());
    List <TList> lists = trelloApi.getBoardLists(board.getId());
    for (TList list : lists) {
        System.out.println(list.getId() + ":" + list.getName());
        List <Card> cards = trelloApi.getListCards(list.getId());
        for (Card card : cards) {
            System.out.println(card.getId() + ":" + card.getName());
        }
    }
}
```

# 5.カードを起票する

カードを起票する場合はこのように記載します。

```
Card card = new Card();
card.setName("あいうえお");
card = trelloApi.createCard(listId, card); // 登録
card.addComment("コメントを記載");
card = card.update(); // 更新
card.delete(); // 削除
```
* listId：取得したリストIDを指定。

新規でカードを登録する場合はcreateCardでカードを作成して、更新する場合はupdate、削除の場合はdeleteを指定します。

# 6.終わりに

[trello-java-wrapper](https://github.com/taskadapter/trello-java-wrapper)には、一通りのAPIの呼び出しに対応していますので、簡単にJavaからTrelloのAPIを呼び出すことができます。
もし、Trelloをお使いでしたら試してみてはいかがでしょうか。

以下、参考サイト
https://became-free.com/how-to-use-trello-api/
http://blog.serverworks.co.jp/tech/2016/05/16/trello-api/