定期実行でデータの同期を実現するスマートな方法 その1〜cli-kintone編〜
はじめに
こんにちは、クローバの門屋です。
kintoneは単体でも十分便利なものですが、社内のデータと連携して使いたいというシーンはかなりあると思います。
たとえば社内システムの社員マスターや顧客マスターと連携する場合や、集計した結果のみをkintoneに保存したい場合などが考えられます。
自分で実装する場合にはREST APIを使った連携が定石ですが、APIの仕様を理解する必要があるため、敷居の高さを感じる方も多いでしょう。
ここではkintoneのコマンドラインツールのcli-kintoneを定期実行させて、2つのシステム間のデータ同期をとる方法について説明します。
今回はインポートとエクスポートどちらでも流用しやすいように、2つのkintoneのデータを同期するシナリオを考えてみましょう。
シナリオ
2つのkintoneがそれぞれ別のドメインで運用されています。
コピー元のドメインのアプリAから、コピー先のドメインのアプリBへ、前日追加されたデータと前日更新されたデータを同期します。
なにはともあれ、cli-kintoneについて
cli-kintoneは、コマンドライン上からkintoneにデータを入出力できるツールです。
Windows/Linux/Mac版が提供されています。
cli-kintoneの使い方の基本は、次のチュートリアルを参照してください。
はじめようcli-kintone
同期するアプリについて
cli-kintoneを使えば、テーブルや添付ファイルも同期可能です。
ただし、以下のフィールドの同期はできません。
- カテゴリー
- ステータス
- 作業者
また、コピー元アプリとコピー先アプリにはそれぞれ以下の注意点があります。
- コピー元アプリとコピー先アプリで同期するフィールドのフィールドコードは同じ値にします。
- どちらのアプリにも、作成日時フィールドと更新日時フィールドを配置します。
- 顧客コードなど、キーとなるフィールドを用意します。
キーとなるフィールドはアプリの設定で重複を禁止してください。 - コピー元とコピー先の両方のAPIトークンを用意し、それぞれ次の権限を付与してください。
- コピー元のAPIトークン
- 閲覧権限
- コピー先のAPIトークン
- レコード追加
- レコード更新
- アプリ管理権限を設定してください。
- コピー元のAPIトークン
前日追加されたデータを取得する
cli-kintoneを使って前日追加されたデータのCSVファイルを取得するには、次のコマンドを実行します。
|
|
それぞれの変数は次の値を示します。
変数 | 値 |
---|---|
$BASE_URL_A | コピー元アプリのkintoneのURL(例:https://sample-a.cybozu.com) |
$APP_ID_A | コピー元アプリのアプリID |
$API_TOKEN_A | コピー元アプリのAPIトークン |
前日更新されたデータを取得する
同様に、前日更新されたデータのCSVファイルを取得するには、次のコマンドを実行します。
|
|
データを追加、更新する
取得したCSVファイル使って、コピー先のドメインBのアプリを更新します。コマンドは以下のようになります。
|
|
それぞれの変数は次の値を示します。
変数 | 値 |
---|---|
$BASE_URL_B | コピー先アプリのkintoneのURL(例:https://sample-b.cybozu.com) |
$APP_ID_B | コピー先アプリのアプリID |
$API_TOKEN_B | コピー先アプリのAPIトークン |
UNIQUE_FIELD_CODE | キーとなるフィールドのフィールドコード |
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を動かして定期実行させることもできます。
こちらについては以下の記事にまとめましたので、確認してください。
定期実行でデータの同期を実現するスマートな方法 その2〜AWS Lambda編〜
関連Tips
更新履歴
- 2024年6月6日
- cli-kintone v1以上に対応しました。
このTipsは、2024年5月版kintoneとcli-kintone v1.10.13で動作を確認しています。