第 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 で動作を確認しています。