コメントのバックアップ&リストアのコツ

フォローする

はじめに

コメントの取得と投稿と削除ができるAPIを使えば、コメントのバックアップとリストアが可能です。

万が一の事態でもkintoneのアプリを元の状態に復元できるように、kintone上のレコード情報とコメント情報をお手元のPCに保存(バックアップ)して、それを別のアプリに復元(リストア)します。

完成イメージ

バックアップ側のアプリ

一覧

詳細

リストア側のアプリ

一覧

詳細

コメントリストアのコツ

ポイント(1) リストア先のレコードIDを事前に知る必要がある

APIからリストアされたレコードには新しいIDが割り振られるため、投稿先のレコードIDが変わってしまいます。

このような場合、レコードのリストア完了時にレコード投稿APIが返してくれるレコードIDの一覧と、バックアップしたコメントデータを対応させ、新レコードIDの方にコメントを投稿します。

ポイント(2)メンション情報付きコメントの再現

コメント投稿APIでは、コメントの宛先となるユーザーを指定(メンション)できます が、メンション情報付きコメントをコメント投稿APIを通じてそのままリストアすると、 宛先ユーザーに通知が送られてしまいます。

宛先ユーザーは@が外れた文字列として名前が本文中に入るので、リストア時に宛先ユーザーへの通知を避けたい場合はこちらで代用します。

ポイント(3)コメント投稿者名の再現

APIで投稿したコメントの投稿者は、APIログインに使ったユーザーになります。コメント本文中に投稿者名を加えるなどの対応がリストア時に必要になります。

ポイント(4)投稿時刻の再現

APIによるコメントの投稿日時は再投稿時の日時になります。これは変更できないので、本文中に投稿時刻を埋め込んでリストアすることで回避します。

バックアップ時、時刻はUTCの文字列で届くので、日本時間に直してリストアします。

例)バックアップ元のコメント

例)リストア先のコメント

サンプル実行方法

バックアップ元アプリの設定

サンプルコード sample_1.js をバックアップするアプリに読み込ませます。

レコードのバックアップ

一覧画面のバックアップボタンをクリックして、レコードとコメント両方のバックアップデータをダウンロードします。

リストア先アプリの作成

バックアップ元のアプリをコピーして、同じアプリを作成します。

ビュー作成

バックアップファイルを読み込むためのフォームを作成します。kintoneのレコードの一覧の表示形式を「カスタマイズ」にして、以下のHTMLを記述します。

[sample_form.html]

カスタマイズJS導入

サンプルコード sample_2.js と、jQueryのjsファイル(Cybozu CDN)を、リストア先のアプリに読み込ませます。

  • sample_2.js
  • https://js.cybozu.com/jquery/3.2.0/jquery.min.js

リストア

リストア先のアプリの一覧画面に移動して、先ほど作成したカスタマイズビューを開きます。

レコードとコメントそれぞれの、先ほどダウンロードしたバックアップデータを読み込ませます。
読み込みに成功すると、ファイル選択部分の下のテキストボックスに、読み込んだファイルの内容が表示されます。

レコードとコメントの両方を読み込んだら、リストアボタンを押せば、レコードとコメントの両方がリストアされます。一覧画面に戻ってリストアに成功したことを確認することができます。

サンプルコードの解説

レコードのバックアップ

kintone APIを利用して、バックアップ元からレコードデータを取得します。

[sample_1.js]

コメントのバックアップ

コメントデータの一括取得

コメント取得のAPIでは一度に10個までしか取得できないので、再帰処理で全件取得します。また、コメント取得順に「昇順(asc)」を指定します。

取得したデータの加工

プログラム内で使う配列をそのままファイルに書き込んで(JSON形式で)保存します。

[sample_1.js]-[save-records-and-comments]

バックアップされたデータの読み込み

ユーザーが指定したバックアップファイルを、「リストア」ボタンが押されたタイミングに読み込みます。

[sample_2] - [read-data]

レコードのリストア

レコードのリストアに成功すると、登録されたレコードIDの配列などを保持したオブジェクトが返ってきます。この新IDの配列を利用して、コメントをリストアします。

[sample_2.js] - [restore-record]

コメントのリストア

リストアするコメントの整形

上記ポイント(2)、(3)、(4)に対処します。コメントをリストアするためにmentionsを削除し、日付を追加して、元の投稿者名を入れる処理をしています。

[sample_2.js] - [build-comments]

リストアするコメントデータを探す

バックアップデータの中身は、元のレコードIDをインデックス、そのレコードの全コメントを値とする配列になっていました。

レコードのリストア後に新しいレコードIDを受け取ることができるので、「旧ID」「新ID」「旧IDに対応するコメントデータ」を使って、新IDに対してコメントをリストアします。

[sample-2.js] - [find-comments]

コメントの投稿

コメントのリストアは、レコードのリストア完了後に処理します。レコード投稿API(非同期処理)のコールバックに、コメントのリストアのコードを記述しましょう。

postCommentsは、レコードに対して複数コメントをリストアするための関数です。コメント投稿APIでは一度に一つしか投稿できないため、ループ処理しています。

[sample_2.js] - [post-comments]

最後に

以上でレコードとコメントのバックアップとリストアができました。新しいAPIを使えば、これまでできなかったコメントの操作が色々と便利になりそうです!

サンプルコード

サンプルコードの制限事項

  • 「ファイル」や「計算」のフィールドがあるデータでは動作しません。
    ※リストア側の計算フィールドにもバックアップアプリに使われた数値フィールドと計算式を入れれば使用可能です。(文字列の計算フィールドも同様)
  • 今回のサンプルでは、バックアップ時/リストア時、ともに全てのデータを一度にメモリに読み込んでいます。レコード数が多いアプリでは動作が難しくなります。

参考記事

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

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

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