定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜

フォローする

(著者:クローバ株式会社 門屋 亮

はじめに

こんにちは。クローバの門屋です。kintoneは単体でも十分便利なものですが、社内のデータと連携して使いたいというシーンはかなりあると思います。例えば社内システムの社員マスタや顧客マスタと連携する場合や、集計した結果のみをkintoneに保存したい場合などが考えられます。ふつうはREST APIを使って連携するのが定石なのですが、APIの仕様を理解する必要があるため敷居が高いと思われる方も多いでしょう。

ここではkintoneのコマンドラインツールであるcli-kintoneを定期実行させて、ふたつのシステム間のデータ同期をとる方法について説明します。今回は入力と出力どちらでも流用しやすいように、ふたつのkintoneのデータを同期するシナリオを考えてみたいと思います。

ふたつのkintone がそれぞれ別のドメインで運用されています。ドメインAのアプリAから、ドメインBのアプリBへと、毎日深夜に、前日更新分のデータを同期します。

なにはともあれ、cli-kintoneについて

cli-kintoneはコマンドラインで動作するkintoneのデータ入出力ツールです。Windows/Linux/Mac版が提供されています。cli-kintoneについての説明は以前詳しい記事を書いたので、こちらをご覧下さい。

具体的な活用のしかたはこちらも参考にしてみてください。

kintoneコマンドラインツールでサブテーブルを操作してみた

kintoneコマンドラインツールでデータ登録してみた

kintoneコマンドラインツールでUPSERTしてみた

同期するアプリについて

cli-kintoneを使えばサブテーブルや添付ファイルの入出力も可能であるため、たいていのデータは同期が可能ですが、以下の同期はできません。

  • カテゴリー
  • ステータス
  • 作業者

また以下の注意点があります。

  1. 両方のアプリのフォームに作成日時フィールドと更新日時フィールドを含める必要があります。
  2. 顧客コードなど、キーとなるフィールドを用意する必要があります。キーとなるフィールドはアプリの設定で重複を禁止してください。
  3. コピー元、コピー先両方のAPIトークンが必要です。コピー元のAPIトークンには閲覧権限、コピー先のAPIトークンにはレコード追加、レコード更新、アプリ管理権限を設定してください。

前日追加されたデータを取得する

cli-kintoneを使って前日追加されたデータを取得するには、次のようなコマンドを実行します(前日の日付を2016/11/1としています)。

変数
$DOMAIN ドメイン
$APP_ID アプリID
$API_TOKEN APIトークン

※$DOMAIN_AはドメインAの値を表します

前日更新されたデータを取得する

同様に、前日更新されたデータを取得するには、次のようなコマンドを実行します。

データを追加、更新する前に

次に、取得したデータファイルを使って、ドメインBのアプリに追加、更新するわけですが、注意点があります。

1.CSVファイルに$idフィールドが存在すると、レコード番号でデータが更新される

今回はレコード番号以外のキーフィールドで更新したいわけですから、CSVファイルから$idフィールドを削除する必要があります。cli-kintoneの仕様により、-cオプションでフィールドを指定しない場合、1列目がレコード番号、2列目がリビジョン番号となりますので、これらを削除します。

2.特定キーで更新するには、CSVファイルのヘッダーに「*」をつける

たとえば、フィールドコードが"code", "name", "address"とあって、"code"フィールドをキーにして更新する場合は以下ようになります。

上記2点の変換を行う必要があります。今回はPythonを使って変換スクリプトを書くことにしました。

conv_csv.py

改めて、データを追加、更新する

上で作成したフィルタを使って変換したファイルを使って、ドメインBのアプリを更新します。コマンドは以下のようになります。

ここまでの処理をシェルスクリプトにまとめました

copy2kintone

定期実行する

作成したシェルスクリプトを定期実行するため、cronに登録します。
※linuxの場合、chmod 755 copy2kintone で実行権限を先に付与する必要があります

crontabを編集

これで、毎日午前3時に前日分の同期処理が実行されます。

Windowsサーバの場合はバッチファイルを作成してタスクスケジューラに登録することで同様のことが実現できます。Windowsのシステムと同期するときの注意点としては、同期する側のシステムがShift-JISでCSVを入出力することが多いので、必要に応じて文字コードの変換を行ってください。
※ cronで動かしても実行結果が出ない場合、まず手元でシェルスクリプトを実行し動作確認をしてください。
※ linuxの場合、cron のログを /var/log/syslog で追うことができます。実行結果が出ない場合、ログを確認しましょう。

おわりに

いかがだったでしょうか。cronとcli-kintoneとを組み合わせることで、最小限の手間でデータ同期が実現できることがおわかりいただけたかと思います。これでこれまで埋もれていた社内のデータも有効活用できますね!

え、深夜に動かすサーバがない? そんなときはAWSのlambda上でcli-kintoneを動かして定期実行させることもできます。こちらについてもまた機会があれば書いてみたいと思います。

関連Tips

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

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

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