kintoneコマンドラインツールでサブテーブルを操作してみた

2015年の kintone Advent Calendarで「[cybozu.com developer networkの使い方（その２）](http://qiita.com/ushiron/items/14903efcd75e8222f8bf)」を紹介したところ、「kintoneコマンドラインツールを使うとサブテーブルが読み込めるんですか？」というお問い合わせをいただきました。おそらく、ブラウザ画面からサブテーブルの読み込みができないので、他の手段を使っても読み込めるようにしたいということかと思います。他の手段ですが、kintoneのREST APIを使えばできますが、もっと便利なツールがあればそれを使いたい！ということで、kintoneコマンドラインツールの使い方を紹介します！

# [簡単！便利！「kintoneコマンドラインツール」](https://cybozudev.zendesk.com/hc/ja/articles/202708214)
次のようなことが Windows, Linux, Macからできるコマンドツールです。

[kintone コマンドラインツール](https://developer.cybozu.io/hc/ja/articles/202708214)をダウンロードしましょう。

- **アプリのレコード取得、登録、更新、削除ができる**
- **CSV形式とJSON形式で出力できる**
- クエリー文字列も指定して絞り込み取得できる
- 認証はユーザー認証、APIトークン認証、Basic認証にも対応している
- UTF-8、Shit-JISなどの文字コードも指定できる

それでは使い方です。
# サブテーブルを書き出してみる
はじめに、サブテーブルが含まれているアプリを作りましょう。
その前に、kintoneの環境を持っていない！という方、[cybozu.com developer network](https://cybozudev.zendesk.com/hc/ja)で無償の開発者ライセンスを取得しておきましょう。

### アプリの構成
>| フィールドコード | フィールドタイプ |
|:-----------|:------------|
| Title      | 文字列（1行）|
| Number     | 数値        |
| SubTitle   | 文字列（1行）|

### レコード登録画面はこんな感じ
※**フィールド名とフィールドコードを同じ**にしています
>![img_20151224213920.png](https://qiita-image-store.s3.amazonaws.com/0/100494/e4507cef-80a1-2ebb-1ca3-3c264f8b0797.png)

### レコードを登録してみよう
こんな感じでサブテーブルにもデータを登録します。
>![img_20151224214211.png](https://qiita-image-store.s3.amazonaws.com/0/100494/053b2987-7a2b-5dbc-e032-30bc8fd67018.png)

### コマンドラインツールに必要な情報は控えておく
>| パラメータ | 値              |ここで実験する値 |
|:----------|:----------------|:------------|
| -a        | アプリID        |82  ※IDはURLに表示されています。         |
| -d        | サブドメイン名   |**sample**.cybozu.com  ※サブドメイン名は各自異なります。
| -t        | APIトークン     |igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w ※アプリの管理画面から発行できます。|

それぞれの値は環境によって異なります。

## データを取得してみる
ここでは Linux上で実行してみました。

```bash:
$ ./cli-kintone -a 82 -d sample -t igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w
```
「Permission denied」となったら、実行権限が問題かもしれませんので、おまじないを。

```bash:
$ chmod +x cli-kintone
```

実行してみましょう。

```bash:
$ ./cli-kintone -a 82 -d sample -t igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w
*,"$id","$revision","SubTitle","Title","Number"
*,"1","1","サブタイトル１","タイトル","100"
,"1","1","サブタイトル２","タイトル","100"
```
**表示されました！**
先頭の「*」が行単位を示していますね。

# いよいよ本題！サブテーブルに読み込んでみる
読み込むCSVファイルの中身はこんな感じ。ファイル名は「import.csv」

```bash:
*,"Title","Number","SubTitle"
*,"タイトル２","200","サブタイトル２－１"
,"タイトル２","200","サブタイトル２－２"
```

実行してみる。

```bash:
$ ./cli-kintone -a 82 -d sample -t igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w -f import.csv
```

**読み込めました！**
![img_20151224224905.png](https://qiita-image-store.s3.amazonaws.com/0/100494/65164ed6-2fdb-1c19-85d7-0d7ece881e5b.png)


# CSVに書き出してみる
\>> output.csv を追加するだけです。

```bash:
$ ./cli-kintone -a 82 -d sample -t igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w >> output.csv
```

**CSVが文字化けする・・・**
「-e sjis」を追加しましょう。

```bash:
$ ./cli-kintone -a 82 -d sample -t igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w -e sjis >> output.csv
```

# 応用でシェルスクリプトにしてみよう
定期的にCSVファイルに出力するためにスクリプトファイルを作ってみましょう。
## Linux の場合
以下のシェルスクリプトをUTF-8で保存しましょう。
ここでのファイル名は「output.sh」にしておきます。

```bash:
#!/bin/sh
# set config
APP_ID="82"
SUB_DOMAIN="sample"
API_TOKEN="igvyXy87s9i1TvwBERABCnxZlNYXsba7d9zM6N7w"
#OUTPUT_TYPE="sjis"
OUTPUT_TYPE="utf-8"
CLI_FILES="cli-kintone"

# find files
BASE_DIR=$(cd $(dirname $0); pwd)
if [ ! -f "$BASE_DIR/$CLI_FILES" ]; then
    echo "Not found $CLI_FILES files."
    exit 1
fi

# select fields
OUTPUT_FIELDS="" #select all fields
#OUTPUT_FIELDS="\$id" #sample:\$id,Title,Number,...

# set datetime file
DATETIME=`date +%Y%m%d%H%M%S.%2N`
OUTPUT_FILE="output$DATETIME.csv"
OUTPUT_PATH=$BASE_DIR/$OUTPUT_FILE

# excute
./$CLI_FILES -a $APP_ID -d $SUB_DOMAIN -t $API_TOKEN -e $OUTPUT_TYPE -c "$OUTPUT_FIELDS" >> $OUTPUT_PATH

echo "Output file: $OUTPUT_FILE"
echo "Finished."

```

## シェルスクリプトを実行してみる

```bash:
$ ./output.sh
```

**できた！！**
output2015~.csv というファイルです。
![img_20151224215913.png](https://qiita-image-store.s3.amazonaws.com/0/100494/23158dbd-4df5-80d1-c95d-f42204608631.png)

## さいごに
いかがでしたでしょうか。WindowsやLinuxの定期タスクを使うとことで、定期的にデータの出し入れができ、基幹システムのフロントにkintoneを使うこともできそうです。