カテゴリー内の他の記事

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

 (著者:瀧ヶ平 充

Index

はじめに

今回は実運用に近いケースとして、運用中アプリのデータを別ドメインの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ドメイン間のレコードのバックアップ操作、いかがでしたか?

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

このTipsは、cli-kintone Ver 0.10.2 と2020年3月版 kintone で確認したものになります。

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

記事のコメント欄は記事に対するフィードバックをする場となっております。
右の記事フィードバックのためのガイドを参照してコメントしてください。
記事のリンク切れなど、気になる点がある場合も、こちらのフォームからフィードバックいただけますと幸いです。

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の仕様です。

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

 

Avatar
shiro_t

kintone便利に利用させて頂いております。

以前より、cli-kintoneを利用して添付ファイルを含む全体のバックアップを週次で取得しております。
2019年12月頃からだと思うのですが、バックアップに突然大幅に時間がかかるようになり、全取得できずタイムアウトしてしまうことが多くなりました。(タスク継続時間は36時間で設定しております)

  • 02/01 25GB取得し、タイムアウト
  • 02/08 17GB取得し、タイムアウト
  • 02/15 10GB取得し、タイムアウト

となっております。

タスクのタイムアウトで設定しており、cli-kintone側のエラーではないのですが、回線以外の問題で何か上記のような現象が発生するようなヒント、または確認すべき事項等があればと思い、お問い合わせをさせて頂きました。

大変お手数ではございますが、よろしくお願いいたします。

Avatar
cybozu Development team

shiro_t 様

いつもお世話になっております。
cybozu developer network 事務局です。

>バックアップに突然大幅に時間がかかるようになり、全取得できずタイムアウトしてしまうことが多くなりました。

現時点では、ご報告いただいた現象が発生する原因に心当たりがなく、調査を行いたいのですが、
実行したリクエストを、認証情報を隠した上でご教示頂いてもよろしいでしょうか?

お手数ですが、よろしくお願い致します。

Avatar
shiro_t

早々にご回答頂いておりましたのに、確認と返信が遅くなってしまい申し訳ございません。

今回、回線変更等は行っておりませんでしたが、今月ネットワークの再構築を行う機会があり
改善されましたので、コマンドの問題ではない、という判断に至りました。

念のため、コマンドの記載を致します。
以下、コマンドをループ処理で全アプリを週一回全データを取得しております。

cli-kintone.exe -a 【アプリID】 -d 【サブドメイン】 -u 【ユーザーID】 -p 【パスワード】 > 【保存先】/%app_id%.csv -b 【保存先】

解決のご報告が遅くなりましたが、現状上記で問題なく動作しております。

また、7月の上限値に関する更新についてもご対応予定とのことで、心待ちにしております。
(内容について以下でご確認致しました)

https://developer.cybozu.io/hc/ja/articles/202957070-kintone-%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9?page=2#comments

今後ともよろしくお願いいたします。

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