毎年同じ時期にやらなければならない仕事があって、
その仕事を忘れないようにしておきたい。
できれば、

チャットワーク(ChatWork) | ビジネスが加速するクラウド会議室
チャットワークのタスクとして登録しておきたい。
という相談があった。
PHPでチャットワークAPIを介してメッセージを投稿してみる

kintone - サイボウズのビジネスアプリ作成プラットフォーム
相談者は既にcybozeのkintoneを利用していたので、
タスクの登録はkintoneで、
kintoneと連携して指定の日にチャットワークにタスクを登録する
という流れで対応することになった。
今回の記事では上記の要望に対応した時の作業をメモとして残す。

最初にkintone内で新規のアプリを作成して、
上のキャプチャのようにラベル、月と日のカラムを用意した。
月と日のカラムがタスクの登録日の日の指定で、
チャットワークに登録するタスクの内容はラベルになる。
次にkintoneのアプリのカスタマイズで、
指定の時間にJavaScriptのコードが実行出来るか?探してみたけれども見つからず…
というわけで、
Go言語でkintoneのREST APIを利用しデータを取り出して、
Go言語のコードでチャットワークに投稿するという流れを採用した。
kintone REST API一覧 – cybozu developer network
最初に知るべきことは、
Go言語でkintoneのREST APIを介してデータを取得出来るなので
実際にコードを書いてデータを取得してみた。
コードを書く前にkintoneのアプリ内でトークンを発行しておく必要がある。
諸々端折るが、

作成したアプリの設定にAPIの発行に関するページがあるので、
その画面でAPIを発行する。
APIの発行後、コードを書いてみた。
実際のコードは下記の通り
package main
import (
"encoding/base64"
"fmt"
"io/ioutil"
"log"
"net/http"
)
const (
appId = "{kintoneのアプリのID}"
token = "{kintoneのアプリ内で発行したAPIキー"
id = "{kintoneにログインするためのIDで上のAPIキーを発行したアカウントのもの}"
pw = "{上で指定したアカウント用のパスワード}"
)
func main() {
// APIキーを作成した時にURLが指定される
url := "https://********.cybozu.com/k/v1/records.json?app=" + appId + "&limit=100"
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatal(err)
}
req.Header.Add("Cybozu-API-Token", token)
// REST APIを利用する時はIDとパスワードを:で繋いでBASE64したものが必要になる
hash := base64.StdEncoding.EncodeToString([]byte(id + ":" + pw))
req.Header.Add("X-Cybozu-Authorization", hash)
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
body, err := ioutil.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(body))
}
上記のコードを実行すると、下記のようなJSONのデータが返ってくる。
※一部省略
{
"records": [
{
"レコード番号": {
"type": "RECORD_NUMBER",
"value": "3"
},
"month": {
"type": "NUMBER",
"value": "8"
},
"label": {
"type": "SINGLE_LINE_TEXT",
"value": "hogeラベル"
},
"$revision": {
"type": "__REVISION__",
"value": "1"
},
"day": {
"type": "NUMBER",
"value": "10"
},
"$id": {
"type": "__ID__",
"value": "3"
}
}, {
"レコード番号": {
"type": "RECORD_NUMBER",
"value": "2"
},
"month": {
"type": "NUMBER",
"value": "7"
},
"label": {
"type": "SINGLE_LINE_TEXT",
"value": "○○のタスクを追加"
},
"$revision": {
"type": "__REVISION__",
"value": "3"
},
"day": {
"type": "NUMBER",
"value": "18"
},
"$id": {
"type": "__ID__",
"value": "2"
}
}
],
"totalCount": null
}
今回はREST APIで返ってくるJSONのデータまで見たけれども、
Go言語でJSONのデータを扱う時は事前に構造体を設けておいて、その構造体にマッピングする必要がある。
これは次回に触れることにしよう。
- 続く -




