はじめに
前回までは、cli-kintoneの基本的な使い方について説明しました。
実際の業務では、kintoneのレコードをバッチ処理でインポートしたりエクスポートしたりするユースケースがあります。
今回は、実運用に近いケースとして、運用中アプリのデータを別ドメインのkintoneアプリにバックアップする例を紹介します。
イメージ
バックアップ先アプリの作成
バックアップ元(マスターアプリ)は
データのエクスポート
で作成した「顧客リスト」アプリを利用します。
バックアップ先アプリは、マスターアプリをテンプレート化して作成します。
- マスターアプリをテンプレート化し、そちらを別ドメインkintone(バックアップ先)に追加します。
アプリをテンプレート化する方法は次のページを参照してください。
アプリをテンプレート化してkintoneに登録する - 登録したテンプレートからアプリを作成します。
- アプリ名を「顧客リストのバックアップ」に変更します。
- 2つのアプリ間でレコードの同期を取れるように、バックアップ先アプリにバックアップ元のレコードIDを設定するフィールドを追加します。
フィールド フィールドの種類 備考 マスターアプリのレコードID 数値 フィールドの設定画面で次の設定をします。 - フィールドコードを
recordid
にします - 「値の重複を禁止する」をチェックします。
- フィールドコードを
- 「アプリの設定画面」で、APIトークンを発行します。
APIトークンの発行方法は APIトークンを生成する を参照してください。
バックアップするには、レコードの登録・更新・削除などの操作をするので、次のアクセス権限をチェックします。- レコード閲覧
- レコード追加
- レコード編集
- レコード削除
- アプリ管理
次のフィールドもバックアップする場合は、「アプリの管理」も選択してください。
- 作成者
- 更新者
- 作成日時
- 更新日時
レコードのバックアップ(初回のみ)
レコードの内容と添付ファイルをバックアップしてみましょう。
STEP1:バックアップするレコードをエクスポートする
使うコマンドは
CSVファイルに出力する
と
添付ファイルをダウンロードする
で学んだコマンドを組み合わせたものです。
データをbackup.csvに出力し、添付ファイルを「attachments」というディレクトリにダウンロードしたいので、cli-kintone.exeを置いたディレクトリに移動し、次のコマンドを実行します。
|
|
実行すると、cli-kintone.exeと同じディレクトリに「attachments」フォルダーとbackup.csvが作成されます。
|
|
特定のフィールドだけをエクスポートする場合は、--fields
オプションにエクスポートするフィールドのフィールドコードを,
(半角カンマ)区切りで指定します。
たとえば、「会社名」「担当者名」「TEL」「メールアドレス」「レコード番号」だけをエクスポートしたい場合、次のように指定します。
|
|
バックアップするアプリごとに作業ディレクトリを作成する場合、cli-kintoneをどのディレクトリからでも使えるように、環境変数PATH
を通しておけば便利です。
Windows環境の場合、次のコマンドでcli-kintoneを環境変数PATH
に追加します。
|
|
STEP2:バックアップ先にレコードをインポートする
次はエクスポートしたデータをバックアップ先アプリにインポートします。
-
マスターアプリのレコードIDをバックアップ先アプリの
マスターアプリのレコードID
フィールドに出力したいので、1行目のid
をrecordid
に変更して保存します。変更前
1
"id"
変更後
1
"recordid"
-
次のコマンドでバックアップ先アプリにレコードを登録します。
1
cli-kintone.exe record import --app 303 --base-url https://バックアップ先のサブドメイン.cybozu.com --api-token APIトークン --file-path ./backup.csv --attachments-dir ./attachments
初回のバックアップはこれで完了です。
差分の同期
マスターアプリのレコードが編集されたり追加されたりした場合、バックアップ先と差分が出てしまうため、定期的に差分を同期する必要があります。
cli-kintone v1以降では、--update-key
に一括更新キーを指定すると、既存レコードの更新と新規レコードの追加はimport
コマンドひとつで実行できます。
今回は、recordidを一括更新キーとします。差分を同期する手順は次のとおりです。
-
バックアップするレコードをエクスポートする と同じ手順で全データをエクスポートする。
-
エクスポートしたCSVファイルを開いて、1行目の
id
部分をrecordid
に変更して保存します。 -
次のコマンドでバックアップ先にデータをインポートします。
1
cli-kintone.exe record import --app 303 --base-url https://バックアップ先のサブドメイン.cybozu.com --api-token APIトークン --file-path ./backup.csv --attachments-dir ./attachments --update-key "recordid"
定期実行
ここまで、cli-kintoneによるデータのバックアップ方法を紹介しました。
差分の同期を定期的に行えば、バックアップを最新の状態に保つことができます。
しかし、こちらの処理を手作業で行うのはとても手間がかかるため、シェルスクリプトによる定期実行をおすすめします。
シェルスクリプトにレコードのエクスポートとインポート用のコマンドを記載し、cronやLaunchdなどの定期実行できるツールで実行時間を指定すると、定期的に自動バックアップができます。
シェルスクリプトの作成
cli-kintoneでは、--update-key
に指定したフィールドと対応付けられたCSVファイルの列の値が一致しない場合、新規レコードとして追加する挙動となっています。
そのため、初回バックアップの
バックアップ先にレコードをインポートする
は、差分同期のコマンドで実行しても、同じ結果になります。
さらに、フィールドコードをid
からrecordid
に書き換える処理も、sed
コマンドで実行できます。
以下は、sample.cybozu.comから(バックアップ先のサブドメイン).cybozu.comにレコードのデータを同期するシェルスクリプトの例です。
7行目のコマンドは、cli-kintoneによる出力結果をパイプラインでつなげ、sedコマンドを使って処理し、CSVに出力しています。
|
|
cronの設定方法
OSがRHEL8またはUbuntu v20以降の場合、次のコマンドでcronの設定と起動ができます。
|
|
そのほかのOSでcronを実行したい場合は、実行するOSのコマンドを調べてください。
おわり
今回は、cli-kintoneを使ってkintoneのレコードを定期的にバックアップする方法を紹介しました。
ぜひ試してみてください。
このTipsは、cli-kintone Ver 1.8.0と2023年8月版kintoneで動作を確認しています。