LoginSignup
4

More than 1 year has passed since last update.

kintoneコマンドラインツール cli-kintone を使ってkintoneクエリを理解する

Last updated at Posted at 2019-10-01

環境

  • macOS 10.15.7

説明

cli-kintoneは、kintoneアプリのデータをファイルに入出力することができるコマンドラインツールです。

Windows、Linux、Mac OS X 版があります。
https://github.com/kintone/cli-kintone

Zipファイルを解凍後に、実行ファイルをパスの通ったディレクトリに設置します。
コマンドラインから cli-kintone を打ち込んで Usage が表示されることを確認します。

日本語解説
https://developer.cybozu.io/hc/ja/articles/202957070

英語解説
https://developer.kintone.io/hc/en-us/articles/115002614853

cli-kintoneは Go言語で書かれています。ソースから実行ファイルを生成することも出来ます。

オプション一覧

Usage

Usage:
    cli-kintone [OPTIONS]

Application Options:
    -d=           Domain name (specify the FQDN) 必須。cybozuのドメインを指定します。例)  -d sample
    -a=           App ID (default: 0) (必須)アプリのIDを指定します。例) -a 123
    -u=           User's log in name (準必須)kintoneにアクセスする際にログインパスワードを使うときに指定 例) -u user 
    -p=           User's password(準必須)kintoneにアクセスする際にログインパスワードを使うときに指定 例) -p password 
    -t=           API token(準必須)kintoneにアクセスする際にAPIトークンを使うときに指定 例) -t APIToken 
    -g=           Guest Space ID (default: 0) (任意)kintoneのゲストスペースにアクセスする場合に指定
    -o=           Output format. Specify either 'json' or 'csv' (default: csv) (任意)出力形式を指定。省略時はCSVです。
    -e=           Character encoding. Specify one of the following -> 'utf-8'(default), 'utf-16', 'utf-16be-with-signature', 'utf-16le-with-signature', 'sjis' or
                    'euc-jp' (default: utf-8)(任意)出力形式の文字コードを指定。デフォルトはUTF-8です。--import -f でファイルから読み込んでレコードを追加・編集時は読み込み用のファイルの文字コードを指定します。(例:Shift-JISコードのファイルを読み込む場合。 --import -f import.csv -e sjis)
    -U=           Basic authentication user name (任意)アクセスするkintoneドメインにBASIC認証が設定されている場合に指定。パスワードとセットで使う。
    -P=           Basic authentication password(任意)アクセスするkintoneドメインにBASIC認証が設定されている場合に指定。ユーザー名とセットで使う。
    -q=           Query string (任意)アプリに渡すクエリ文字列。SQLライクな検索絞り込みが出来ます。例) -q "limit 10"
    -c=           Fields to export (comma separated). Specify the field code name (任意)出力する際のフィールドコードをカンマ区切りで指定。省略した場合は全てのフィールドが出力されます。例) -c "$id,文字列1行"
    -f=           Input file path(任意)CSVファイル等からレコードを追加・更新する場合にファイル名を指定。例) -f ./import.csv
    -b=           Attachment file directory (任意)添付ファイルをダウンロードする場合に、ダウンロードするディレクトリを指定。ディレクトリは自動作成される。
    -D            Delete records before insert. You can specify the deleting record condition by option "-q"(任意)レコードを削除する場合に指定。-q オプションを組み合わせて、クエリで絞り込んだ特定のレコードを削除することができる。
    -l=           Position index of data in the input file (default: 1)  (任意)インポートするファイルの読み込み位置を指定することができる。
        --import  Import data from stdin. If "-f" is also specified, data is imported from the file instead(任意)指定すると標準入力からデータを読み込む。
        --export  Export kintone data to stdout(任意)指定すると標準出力にレコードを出力する。

Help Options:(任意)cli-kintoneのオプションを表示する。
    -h, --help    Show this help message

実行例

テスト環境は macOS 10.13.6

レコード取得系

APIトークンを使って最初の10行をCSVで取得する

cli-kintone -a 123 -t API-Token -d Domain -q "limit 10"

APIトークンを使って全てのレコードをCSVでバックアップする

cli-kintone -a 123 -t API-Token -d Domain > backup.csv

Mac OS X にてファイルを確認する
head backup.csv ファイルの先頭から10行表示
tail backup.csv ファイルの最後から10行表示

フィールドコードを指定して標準出力する

cli-kintone -a 123 -t API-Token -d Domain -c "\$id, 顧客名, 提案プラン2, オプション2"

レコードIDのみをCSVで取得する

cli-kintone -a 123 -t API-Token -d Domain -c '$id'

または、ダブルクォーテーションで囲む場合は、$をバックスラッシュでエスケイプする。
cli-kintone -a 123 -t API-Token -d Domain -c "\$id"

シェルのパイプと組み合わせて、ヘッダー行のみを取得する

cli-kintone -a 123 -t API-Token -d Domain | head -1


レコード更新系

シェルのパイプと組み合わせて、新規に追加した自動計算フィールドを更新する

自動計算フィールドを後で追加した場合、レコードの再保存を繰り返す事無く一気に更新を掛けます。

cli-kintone -a 123 -t API-Token -d Domain -c "\$id" | cli-kintone --import -a 123 -t API-Token -d Domain

ファイルを読み込んでフィールドを更新(重複禁止フィールドをキーに指定)

更新用のCSVファイル
キーにするフィールドコードにアスタリスク(*)を付けています。
ファイルの文字コードはShift-JISの場合です。

import.csv
"*顧客コード","引き合い"
"20","電話"
"19",""
"18","メルマガ"
"17",""
"16",""

cli-kintone --import -f import.csv -e sjis -a 123 -t API-Token -d sample.cybozu.com


レコード追加系

ルックアップフィールドを持つアプリにレコードを追加する

ルックアップフィールドには(2019.10.16 現在)APIトークン認証ではレコードの追加・更新ができません。この場合はパスワード認証を使います。

営業支援パックの「案件管理」にレコードを追加します。
フィールドコード顧客名がルックアップ、案件名が必須項目です。

importfile.csv
"顧客名","案件名"
"戸田ネットソリューションズ","新規案件1"
"金都運総研","新規案件2"
cli-kintone --import -a 123 -u 'userid' -p 'password' -d Domain -f ./importfile.csv
: Start from lines: 1 - 3 => SUCCESS
: DONE

スクリーンショット 2019-10-03 12.46.32.png

スクリーンショット 2019-10-03 12.46.48.png

データマイグレーション時の cli-kintone の使いどころ

cli-kintone を使わなくても良い場面も多い訳で、使わざるを得ない場面で利用することになります。

  • 既存のkintoneアプリの一部のフィールドを他のアプリに移行したいが、フィールド名が全て同じの為移行したフィールドの区別が付かない。

スクリーンショット 2019-10-16 11.53.22のコピー.png

こんな時は cli-kintone を使ってフィールドコードを指定してCSV出力した方が早いです。
フィールド名を変更しても良いですが、同じフィールド名で100個とかあったらムリだと思います。

cli-kintone -a 123 -t API-Token -d Domain -c "\$id, 顧客名, 提案プラン2, オプション2"

-c オプションに「出力する際のフィールドコードをカンマ区切りで指定」してやりましょう。

通知について

アプリにてファイル書き出し・読み込みした際は、ユーザーに通知が飛びます。
https://jp.cybozu.help/k/ja/user/notifications/notification_type.html

対して、cli-kintone 等による、API経由のファイル書き出し・読み込みは通知が飛びません。ただし、kintoneシステム管理で REST APIの通知をメールで送信 にチェックしている場合は、メールにて通知がされます。
また、API操作に関しては、cybozu.com運用基盤の監査ログに書き込まれます。

備考

ルックアップの更新にAPIトークン認証が使えない理由

kintoneの APIトークン はアプリ単位の払い出しになっています。
想像ですが、ルックアップはルックアップ元とルックアップ先(更新するアプリ)の少なくとも2つのAPIトークンが必要な為と思われます。
(2019.10.16現在)

おまけ

mac のターミナルで Shift-JIS のファイルを cat する

$ cat sjis.csv
"*�ڋq�R�[�h","��������"
"20","�d�b"
"19",""
"18","�����}�K"

普通にcat すると文字化けするので、nkf で変換します。

$ nkf -v
Network Kanji Filter Version 2.1.5 (2018-12-15)
Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa).
Copyright (C) 1996-2018, The nkf Project.
$ nkf --help
Usage:  nkf -[flags] [--] [in file] .. [out file for -O flag]
 j/s/e/w  Specify output encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF options is -w[8[0],{16,32}[{B,L}[0]]]
 J/S/E/W  Specify input encoding ISO-2022-JP, Shift_JIS, EUC-JP
          UTF option is -W[8,[16,32][B,L]]
$ cat ./csv/sjis.csv | nkf -Sw
"*顧客コード","引き合い"
"20","電話"
"19",""
"18","メルマガ"

cli-kintone に渡すオプションをあらかじめ環境変数にセットする

シェルの環境変数にオプションパラメーターをセットしておきます。

$ app=100
$ echo $app
100
$ APIToken=APIトークン
$ kintoneDomain=sample.cybozu.com
cli-kintone -a ${app} -t ${APIToken} -d ${kintoneDomain} -q "limit 10"

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4