レコードのデータを定期的にバックアップしてみよう

目次

はじめに

前回までは、cli-kintoneの基本的な使い方について説明しました。
実際の業務では、kintoneのレコードをバッチ処理でインポートしたりエクスポートしたりするユースケースがあります。
今回は、実運用に近いケースとして、運用中アプリのデータを別ドメインのkintoneアプリにバックアップする例を紹介します。

イメージ

バックアップ先アプリの作成

バックアップ元(マスターアプリ)は データのエクスポート で作成した「顧客リスト」アプリを利用します。
バックアップ先アプリは、マスターアプリをテンプレート化して作成します。

  1. マスターアプリをテンプレート化し、そちらを別ドメインkintone(バックアップ先)に追加します。
    アプリをテンプレート化する方法は次のページを参照してください。
    アプリをテンプレート化してkintoneに登録する (External link)
  2. 登録したテンプレートからアプリを作成します。
  3. アプリ名を「顧客リストのバックアップ」に変更します。
  4. 2つのアプリ間でレコードの同期を取れるように、バックアップ先アプリにバックアップ元のレコードIDを設定するフィールドを追加します。
    フィールド フィールドの種類 備考
    マスターアプリのレコードID 数値 フィールドの設定画面で次の設定をします。
    • フィールドコードをrecordidにします
    • 「値の重複を禁止する」をチェックします。
  5. 「アプリの設定画面」で、APIトークンを発行します。
    APIトークンの発行方法は APIトークンを生成する (External link) を参照してください。
    バックアップするには、レコードの登録・更新・削除などの操作をするので、次のアクセス権限をチェックします。
    • レコード閲覧
    • レコード追加
    • レコード編集
    • レコード削除
    • アプリ管理
information

次のフィールドもバックアップする場合は、「アプリの管理」も選択してください。

  • 作成者
  • 更新者
  • 作成日時
  • 更新日時

レコードのバックアップ(初回のみ)

レコードの内容と添付ファイルをバックアップしてみましょう。

STEP1:バックアップするレコードをエクスポートする

使うコマンドは CSVファイルに出力する 添付ファイルをダウンロードする で学んだコマンドを組み合わせたものです。
データをbackup.csvに出力し、添付ファイルを「attachments」というディレクトリにダウンロードしたいので、cli-kintone.exeを置いたディレクトリに移動し、次のコマンドを実行します。

1
cli-kintone.exe record export --app 299 --base-url https://sample.cybozu.com --api-token APIトークン > backup.csv --attachments-dir ./attachments

実行すると、cli-kintone.exeと同じディレクトリに「attachments」フォルダーとbackup.csvが作成されます。

1
2
3
works # cli-kintone.exeがあるディレクトリ
└─── attachments
└─── backup.csv

特定のフィールドだけをエクスポートする場合は、--fieldsオプションにエクスポートするフィールドのフィールドコードを,(半角カンマ)区切りで指定します。
たとえば、「会社名」「担当者名」「TEL」「メールアドレス」「レコード番号」だけをエクスポートしたい場合、次のように指定します。

1
cli-kintone.exe record export --app 299 --base-url https://sample.cybozu.com --api-token APIトークン --fields "company,name,tel,mail_address,id" > backup.csv --attachments-dir ./attachments
information

バックアップするアプリごとに作業ディレクトリを作成する場合、cli-kintoneをどのディレクトリからでも使えるように、環境変数PATHを通しておけば便利です。
Windows環境の場合、次のコマンドでcli-kintoneを環境変数PATHに追加します。

1
> setx PATH "%PATH%;<cli-kintoneのあるディレクトリ>"

STEP2:バックアップ先にレコードをインポートする

次はエクスポートしたデータをバックアップ先アプリにインポートします。

  1. マスターアプリのレコードIDをバックアップ先アプリのマスターアプリのレコードIDフィールドに出力したいので、1行目のidrecordidに変更して保存します。

    変更前

    1
    
    "id"

    変更後

    1
    
    "recordid"
  2. 次のコマンドでバックアップ先アプリにレコードを登録します。

    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を一括更新キーとします。差分を同期する手順は次のとおりです。

  1. バックアップするレコードをエクスポートする と同じ手順で全データをエクスポートする。

  2. エクスポートしたCSVファイルを開いて、1行目のid部分をrecordidに変更して保存します。

  3. 次のコマンドでバックアップ先にデータをインポートします。

    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に出力しています。

1
2
3
4
5
6
7
8
#!/bin/bash
# 添付ファイルのディレクトリのパス
ATTCHIMENTS_FILE_PATH=./attachments
# CSVファイルのディレクトリのパス
CSV_FILE_PATH=./backup.csv

cli-kintone record export --app 299 --base-url https://sample.cybozu.com --api-token APIトークン --attachments-dir $ATTCHIMENTS_FILE_PATH | sed "1 s/id/recordid/" > $CSV_FILE_PATH
cli-kintone record import --app 303 --base-url https://バックアップ先のサブドメイン.cybozu.com --api-token APIトークン --file-path $CSV_FILE_PATH --attachments-dir $ATTCHIMENTS_FILE_PATH --update-key "recordid"

cronの設定方法

OSがRHEL8またはUbuntu v20以降の場合、次のコマンドでcronの設定と起動ができます。

1
2
crontab -e # cronジョブの定義
systemctl start cron # cronの起動

そのほかのOSでcronを実行したい場合は、実行するOSのコマンドを調べてください。

おわり

今回は、cli-kintoneを使ってkintoneのレコードを定期的にバックアップする方法を紹介しました。
ぜひ試してみてください。

information

このTipsは、cli-kintone Ver 1.8.0と2023年8月版kintoneで動作を確認しています。