カテゴリー内の他の記事

第6回 アプリのバックアップをしてみよう

フォローする

 (著者:Cstap 瀧ヶ平 充

はじめに

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

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

_.png

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

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

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

バックアップ元のアプリを一から別ドメインのkintone上で作成するのは大変なので、アプリテンプレートを作成してそちらを別ドメインkintoneに追加して作業します。アプリテンプレートの作成はこちらを参照してください。

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

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

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

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

環境変数PATHの設定

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

環境変数というのはそのコマンドラインシェル上で使われる名前付きの設定情報です。

  • 環境変数 PATH  にcli-kintoneの入っているディレクトリを追加する

または

  • PATH 内のディレクトリにcli-kintoneの実行形式ファイルを追加する

このどちらかを行えば、どこからでもcli-kintoneを実行できます。

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

▼ Linux, MacなどでコマンドラインからPATHにcli-kintoneのあるディレクトリを追加する場合

このコマンドを実行すると、そのシェル上の環境変数 PATH  が更新されます。

コマンド実行のみでは次にシェルを起動した際、環境変数が更新前の設定に戻ってしまいます。

次回以降も更新後の設定が適用されるように、以下のコマンドを実行してシェルの開始時に読み込まれるスクリプト ~/.bash_profile  を変更しましょう。

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

Windowsの場合は「コントロールパネル」→「システム」→「システムの詳細設定」→「詳細設定タブ」→「環境変数」から環境変数を設定することもできます。

Windowsで環境変数の設定を誤って壊してしまうと危険なので、慣れないうちはコントロールパネルから設定することをおすすめします。

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

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

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

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

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

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

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

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

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

というCSVであれば、

という形に変更してください。

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

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

レコードを同期する

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

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

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

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

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

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

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

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

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

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

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

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

2ドメイン間のレコードのバックアップ操作、いかがでしたか?

こちらの処理を手作業で行うのは大変ですので、自動化についても次回触れることにして、今回はここまでにします。次回もお楽しみに。

2018/01/18追記:
この記事ではデータのインポート時 -f オプションのみ指定していますが、この実行方法はVersion 0.9.0(2018年1月公開)以降、推奨されません。
Version 0.9.0以降、標準入力からのインポート対応にともない、データのインポート時は、--import オプションもあわせて指定する実行方法を推奨します。
実行例: $ cli-kintone.exe --import -f importdata.csv -a 111 -d dev-demo -t xxxxx
現状は、従来の実行方法でも動作します。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
Tor Solenssen

ご提示いただいている方法を参考に手元のアプリのバックアップ環境の構築を検討しています

コマンドラインツールを使用したダウンロード(添付ファイルを含む)は完了しましたが

バックアップアプリへのインポートの際にエラーが出ます。

メッセージを見ると10MB以上の添付ファイルをインポートするタイミングでエラーとなるようです。

何か仕様に起因するものでしょうか。

状況として10MB以上のファイルのやり取りが必須なため、回避不可なら他の方法で再検討となります。

よろしくお願いします。

Avatar
cybozu Development team

Tor Solenssen様

ご連絡ありがとうございます。

ご報告いただいた現象が発生する原因に心当たりがない状況です。

お手数ですが、詳細なエラー情報をいただくことは可能でしょうか。

よろしくお願いいたします。

Avatar
archit

Tor Solenssenさんと同様な現象が発生しており、アドバイスをいただければと思います。

cli-kintoneを使ってファイルをアップロードする際、10MB以上のファイルがあると以下のようなメッセージが出て処理が停止します。

”2017/09/09 11:51:21 パス\ファイル名 file must be less than 10 MB."

これはcli-kintoneの仕様か、kintone側の仕様なのかどちらでしょうか?

 

Avatar
cybozu Development team

Tor Solenssen様、archit様

archit様にご提供いただいたメッセージで確認させていただきました。
「10MB以上のファイルがあるとメッセージが出て処理が停止する」はcli-kintoneの仕様です。

ご期待に添えずに申し訳ございません。

 

ログインしてコメントを残してください。