kintoneでCSV書き出しを使わずにレコード1件を別環境にコピー

# はじめに
kintoneで開発環境・本番環境を用意してアプリを運用している時、
「本番環境のレコード1件でエラーが起きたから、調査のために開発環境にデータコピーしたい」
ってケースがありました。

しかし、常套手段のCSV書き出し->読み込みを行うには
本番環境アプリにレコード書き出しアクセス権を設定する必要があり、
PC内にファイルで一度ダウンロード保存する必要もあり、
情報漏洩のリスクが高まるので軽はずみにはやるのが怖いんですよね。。。

こういうのは「程度の問題」がすごく大きいので、
「レコード1件だけ、PCのクリップボードを介して別環境にコピー」
くらいサクッとできれば便利だし、比較的リスクも低いと思うわけです。

# やり方
ブラウザのコンソールにJavaScriptを書いて、レコードのデータをJSON文字列としてコピーします。
難易度的には、プログラマーでなくてもギリギリ真似できる程度かなーと思います。

1. コピー元のkintoneアプリでレコード詳細画面を開く
1. ブラウザのコンソールに以下を入力

    ```js
JSON.stringify(kintone.app.record.get().record)
```

1. こんな風にJSON文字列が出力されるので、`{`〜`}`までを選択してコピー（最初と最後の`"`は除く）

    ```
"{"レコード番号":{"type":"RECORD_NUMBER","value":"20"},"更新者":{"type":"MODIFIER","value":{"code":"akaza","name":"akaza"}},"作成者":{"type":"CREATOR","value":{"code":"akaza","name":"akaza"}},"更新日時":{"type":"UPDATED_TIME","value":"2018-08-25T00:38:00Z"},"作成日時":{"type":"CREATED_TIME","value":"2018-08-25T00:38:00Z"},"会社名":{"type":"SINGLE_LINE_TEXT","value":"金都運総研"},"部署名":{"type":"SINGLE_LINE_TEXT","value":"情報システム部"},"担当者名":{"type":"SINGLE_LINE_TEXT","value":"下山 達士"},"郵便番号":{"type":"SINGLE_LINE_TEXT","value":"5010001"},"住所":{"type":"SINGLE_LINE_TEXT","value":"岐阜県岐阜市××××"},"TEL":{"type":"SINGLE_LINE_TEXT","value":"090-××××-××××"},"FAX":{"type":"SINGLE_LINE_TEXT","value":"050-××××-××××"},"メールアドレス":{"type":"SINGLE_LINE_TEXT","value":"shimoyama_tatsuhito@example.com"},"会社ロゴ":{"type":"FILE","value":[]},"備考":{"type":"MULTI_LINE_TEXT","value":""},"顧客ランク":{"type":"DROP_DOWN","value":"A"},"$revision":{"type":"__REVISION__","value":"1"},"$id":{"type":"__ID__","value":"20"}}"
```


1. コピー先のkintoneアプリで新規レコード作成画面を開き、`record`変数の値として上記JSON文字列をペースト

    ```js
const record = {"レコード番号":{"type":"RECORD_NUMBER","value":"20"},"更新者":{"type":"MODIFIER","value":{"code":"akaza","name":"akaza"}},"作成者":{"type":"CREATOR","value":{"code":"akaza","name":"akaza"}},"更新日時":{"type":"UPDATED_TIME","value":"2018-08-25T00:38:00Z"},"作成日時":{"type":"CREATED_TIME","value":"2018-08-25T00:38:00Z"},"会社名":{"type":"SINGLE_LINE_TEXT","value":"金都運総研"},"部署名":{"type":"SINGLE_LINE_TEXT","value":"情報システム部"},"担当者名":{"type":"SINGLE_LINE_TEXT","value":"下山 達士"},"郵便番号":{"type":"SINGLE_LINE_TEXT","value":"5010001"},"住所":{"type":"SINGLE_LINE_TEXT","value":"岐阜県岐阜市××××"},"TEL":{"type":"SINGLE_LINE_TEXT","value":"090-××××-××××"},"FAX":{"type":"SINGLE_LINE_TEXT","value":"050-××××-××××"},"メールアドレス":{"type":"SINGLE_LINE_TEXT","value":"shimoyama_tatsuhito@example.com"},"会社ロゴ":{"type":"FILE","value":[]},"備考":{"type":"MULTI_LINE_TEXT","value":""},"顧客ランク":{"type":"DROP_DOWN","value":"A"},"$revision":{"type":"__REVISION__","value":"1"},"$id":{"type":"__ID__","value":"20"}}
```

1. さらに以下を入力

    ```js
kintone.app.record.set({ record })
```

1. 画面の各フィールドに値が入るので、そのまま「保存」ボタンをクリック！

これだけです。サクッと行けますね！

# 注意点（追記）

JavaScriptカスタマイズで「フィールド編集時に別のフィールドを自動変更する」ような処理を仕込んでいると、`kintone.app.record.set({ record })`で一部フィールドが空欄になったり、無限ループしてしまったりする場合がありました。

そんな時は、まず2〜3回連続で`kintone.app.record.set({ record })`を叩いてみましょう。結構うまくいくことが多いです。

それでもダメなら、一時的にJSを無効すれば間違いないですね。でもそこまでするくらいなら素直にCSVインポートした方が良いかもw

この方法は、あくまで「簡単にサクッとコピーする」のが目的なので、何らかの原因でサクッと動かない場合は、早々に諦める方が近道だったりします。臨機応変にいきましょ〜。

# 動画デモ

アプリストアの「顧客リスト」同士でデータをコピーするデモです。
参考にしてみてください。

![kintone-detail-copy.gif](https://qiita-image-store.s3.amazonaws.com/0/24333/b0d60de7-e812-a8e3-357a-c495757b9092.gif)