第6回kintoneコマンドラインツールでアプリのバックアップをしてみよう

著者名: 瀧ヶ平 充 (External link)

目次

information

このチュートリアルはver. 0.x.xのcli-kintoneの使い方を紹介しています。
ver.1.0.0以降のcli-kintoneの使い方を紹介するチュートリアルは次のページを参照してください。
はじめようcli-kintone

はじめに

今回は実運用に近いケースとして、運用中のアプリのデータを別ドメインのkintoneアプリにバックアップする例を紹介します。

おおむね以下の図のような操作になります。

今回は以下の順で作業していきます。

  1. バックアップ先のアプリを作る。
  2. cli-kintoneをどのディレクトリからでも実行可能にする。
  3. レコードをバックアップする。
  4. レコードを同期する。

バックアップ先のアプリを作る

バックアップ元のアプリをゼロから別ドメインのkintone上で作成するのはたいへんなので、アプリテンプレートを使って別ドメインのkintoneにアプリを追加します。
アプリテンプレートの作成は アプリをテンプレート化してkintoneに登録する (External link) を参照してください。

2つのアプリ間でレコードの同期を取れるように、レコードIDを入力する数値フィールドをバックアップ先アプリに追加し、「フィールドの設定」で「値の重複を禁止する」を選択しておきます。
フィールドコードは「recordid」にします。

cli-kintoneをどのディレクトリからでも実行可能にする

今まで触れてこなかったのですが、cdなど他のコマンドと同様に、cli-kintoneはどのディレクトリからでも使えるようにできます。

cli-kintoneのあるすべてのディレクトリで操作するとファイルの管理がたいへんになるので、この段階で設定しておきましょう。

環境変数PATHの設定

コマンドライン上で現在のディレクトリに存在しない実行可能なファイルの参照先ディレクトリはPATH という環境変数に設定されています。

環境変数というのはそのコマンドラインシェル上で使われる名前付きの設定情報です。
次のどちらかを行えば、どこからでもcli-kintoneを実行できます。

  • 環境変数PATH にcli-kintoneの入っているディレクトリを追加する。
  • PATH内のディレクトリにcli-kintoneの実行形式ファイルを追加する。

今回は環境変数PATH にcli-kintoneを含むディレクトリを追加してみます。

Linux/Macの場合

コマンドラインからPATHにcli-kintoneのあるディレクトリを追加するコマンドの例です。

1
export PATH=$PATH:<cli-kintoneのあるディレクトリ>

このコマンドを実行すると、そのシェル上の環境変数PATH が更新されます。
ただ、コマンド実行のみでは次にシェルを起動した際、環境変数が更新前の設定に戻ってしまいます。
次回以降も更新後の設定が適用されるように、以下のコマンドを実行してシェルの開始時に読み込まれるスクリプト~/.bash_profileを変更しましょう。

1
echo 'export PATH=$PATH:<cli-kintoneのあるディレクトリ>' >> ~/.bash_profile
Windowsの場合

コマンドラインからPATHにcli-kintoneのあるディレクトリを追加するコマンドの例です。

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

Windowsの場合は「コントロールパネル > システム > システムの詳細設定 > 詳細設定タブ > 環境変数」から環境変数を設定できます。
Windowsで環境変数の設定を誤って壊してしまうと危険なので、慣れないうちはコントロールパネルからの設定をおすすめします。

レコードをバックアップする

先ほどcli-kintoneにPATHを通したので、今回はバックアップするアプリごとにディレクトリを作成し、そこで作業することにします。
前回までの顧客管理アプリを利用する場合、以下のように「customer_list」ディレクトリを作成し、そこに移動するとよいでしょう。

1
mkdir customer_list && cd customer_list

別ドメインのkintoneアプリにレコードをバックアップするので、必要なフィールドを-cオプションで絞り込み、CSVファイルをエクスポートします。

1
cli-kintone.exe --export -a <バックアップ元のアプリID> -d <バックアップ元のドメイン名> -t <バックアップ元のAPIトークン> -e sjis -c "<バックアップしたいフィールドのフィールドコード(カンマ区切り)>" > backup.csv

添付ファイルフィールドを含む場合は、上記のコマンドに-bオプションを追加します。

1
cli-kintone.exe --export -a <バックアップ元のアプリID> -d <バックアップ元のドメイン名> -t <バックアップ元のAPIトークン> -e sjis -c "<バックアップしたいフィールドのフィールドコード(カンマ区切り)>" -b <添付ファイルのエクスポート先ディレクトリ> > backup.csv

今回は、アプリごとにディレクトリを作って行います。
エクスポート先に.を指定して現在のディレクトリ、つまり、アプリに対応するディレクトリへそれぞれエクスポートしてもよいですね。

以降、コマンド表記は添付ファイルを含む場合のみを例示します。

バックアップ先アプリへレコードを登録する

レコードの登録を始める前に、エクスポートしたCSVのフィールドコードをバックアップ先のドメインアプリに合わせます。
今回はアプリテンプレートを利用してバックアップ先を作成したので、この作業は必要ありません。

次に1行目の「$id」の部分を、バックアップ先アプリにあらかじめ作成しておいた「recordid」に置き換えます。

たとえばエクスポートしたCSVの1行目が以下だったとします。

1
"$id", "fieldA","fieldB"

この場合、次のように書き換えます。

1
"recordid", "fieldA","fieldB"

ここまでの作業でCSVの準備ができたので、このCSVでレコードを登録します。

1
cli-kintone.exe --import -a <バックアップ先のアプリID> -d <バックアップ先のドメイン名> -t <バックアップ先のAPIトークン> -e sjis  -b <添付ファイルのエクスポート先ディレクトリ> -f backup.csv

初回のバックアップはこれで完了です。
次はレコードを同期してみます。

レコードを同期する

バックアップ元のレコードが追加・変更されたら、バックアップ先のアプリとレコードを同期します。

今回の方法では、recordidを利用してレコードを同期するため、既存レコードの更新と新規レコードの追加は同時に処理できないため、これらを分けて操作していきます。

STEP1:バックアップ済みレコードを更新する

まずは、バックアップ先アプリの「recordid」フィールドの値をみて、バックアップ済み最新レコードのIDを調べます。
「recordid」の最大値はcli-kintoneからでもクエリを指定してレコード取得すれば調べられますね。

以下のコマンドで表示された値がバックアップ済み最新レコードの「$id」になります。

1
cli-kintone.exe --export -a <バックアップ先のアプリID> -d <バックアップ先のドメイン名> -t <バックアップ先のAPIトークン> -c "recordid" -q "order by $id desc limit 1"

「$id」がその値以下のレコードを抽出すると、バックアップ済みレコードが取れます。
これらをバックアップ元からエクスポートします。

1
cli-kintone.exe --export -a <バックアップ元のアプリID> -d <バックアップ元のドメイン名> -t <バックアップ元のAPIトークン> -e sjis -c "<バックアップしたいフィールドのフィールドコード(カンマ区切り)>" -b <添付ファイルのエクスポート先ディレクトリ> -q "$id <= \"<バックアップ済み最新のレコードID>\""> backedup_records.csv

エクスポートしたCSVの $id の部分を *recordid に修正し、「recordid」フィールドをキーとして指定してレコードを更新します。

1
cli-kintone.exe --import -a <バックアップ先のアプリID> -d <バックアップ先のドメイン名> -t <バックアップ先のAPIトークン> -e sjis  -b <添付ファイルのエクスポート先ディレクトリ> -f backedup_records.csv

STEP2:新規レコードをバックアップする

次に、新規レコードをバックアップ先に追加します。

今度は、「$id」がバックアップ済み最新レコードIDより大きいレコードを抽出して、バックアップ元からエクスポートします。

1
cli-kintone.exe --export -a <バックアップ元のアプリID> -d <バックアップ元のドメイン名> -t <バックアップ元のAPIトークン> -e sjis -c "<バックアップしたいフィールドのフィールドコード(カンマ区切り)>" -b <添付ファイルのエクスポート先ディレクトリ> -q "$id > \"<バックアップ済み最新のレコードID>\"" > new_backup_records.csv

エクスポートしたところで、こちらも「$id」を「recordid」に修正し、バックアップ先のアプリに新たにレコードを登録します。

1
cli-kintone.exe --import -a <バックアップ先のアプリID> -d <バックアップ先のドメイン名> -t <バックアップ先のAPIトークン> -e sjis  -b <添付ファイルのエクスポート先ディレクトリ> -f new_backup_records.csv

この一連の操作を定期的に行えば、バックアップを最新の状態に保つことが可能です。

まとめ

2ドメイン間のレコードのバックアップ操作、いかがでしたか?
こちらの処理を手作業で行うのはたいへんですので、自動化についても次回触れることにして、今回はここまでにします。
次回もお楽しみに。

information

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