Oracle DB からデータをkintone に反復同期する（ArcESB）

#Oracle DB からkintone にデータ連携：概要
##要件概要
今回は、既存の基幹システムなどで使っているOracle データベースのデータをCybozu kintone に反復同期する連携を組みます。近年中堅～大企業でもkintone をフレキシブルなサブアプリ環境として利用することが増えています。とはいえ基幹はオンプレにあり、DB はOracle というケースがあります。Oracle とkintone のマスターデータ、トランザクションデータの同期が必要になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/3688139a-6501-ee43-2f40-30e93b1aaa8f.png)



##ArcESB (旧RSSBus Connect） とは
[ArcESB ](https://www.arcesb.com/jp/) は、「メッセージング連携ツール」というカテゴリの製品です。DB、ファイル、クラウドサービスなどのデータを一度XML メッセージに変換し、ビジュアルフローで連携構築が可能です。簡単に言えば、ETL、EDI、ファイル転送、API 管理のすべての機能をシンプルに一つにまとめた次世代データ連携ツールです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/aec99090-aaac-a375-558d-1ee539ecdb0d.png)




#ArcESB のインストール
[ArcESB](https://www.arcesb.com/jp) のサイトから製品をダウンロードします。製品版・評価版が同じビルドなのでダウンロードしましょう。


##ArcESB 本体
製品をデフォルトのままでインストールします。今回はWindows 10 にインストールしました。インストール時にadmin ユーザーのパスワード設定があるので適切なパスワードを設定し、覚えておいてください。
ArcESB にはサーバーが内包されており、インストール完了後にサーバーが起動します。サーバーへのデプロイや設定など不要です。

サーバーが起動すると、ブラウザで管理画面が開きます。admin ユーザーでインストール時に設定したパスワードでログインします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/7d0de349-b8cd-799e-8fb2-3bad4fa9a1d8.png)

次に実際に利用するためにライセンスを入れます。試用版お場合には、30日の試用版をActivate します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/4f745c17-ccd7-b697-1779-98802c0dd8ac.png)

##kintone ポート
Oracle はデフォルトで入っていますが、kintone はオプションポートなので、[Add Connection] からkintone ポートを選択して、インストールします。

![スクリーンショット (4).png](https://qiita-image-store.s3.amazonaws.com/0/116843/962877c2-1a7e-969a-beec-50cf3174b56a.png)

インストール後にRSSBus を再起動することを忘れないでください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/d9a8a990-1fca-e780-93d3-e0b4e2ea2968.png)

これでインストールは完了です。


#Oracle DB からkintone へのレプリケーションフロー設定
では、RSSBus のビジュアルフロー機能を使ってコーディングなしでOracle DB からkintone にデータを反復同期する連携フローを作成します。

##Oracle DB（同期データソース）ポート設定
まずは、同期するデータの元であるOracle DB の設定です。

左側のConnection からOracle のポートをフローデザイナにドラグ＆ドロップします。歯車をクリックするとポートの設定画面が開けます。ここにOracle DB にアクセスするための認証情報を入力します。


* Connection String Type
* Host
* Port
* SID
* User
* Password

![スクリーンショット (8).png](https://qiita-image-store.s3.amazonaws.com/0/116843/22c5882f-678b-ec59-b9f3-449179edf234.png)

入力したらテスト接続を行います。成功したら設定内容を保存します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/8e7a0b0d-6362-1780-6ea2-e4cd689badf7.png)

次にOracle DB の中から同期する項目を指定します。
Oracle DB からはデータを出すので、[Output]マッピングをクリックし、[＋]マークをクリックして、テーブル・ビューの一覧を表示させます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/48ff328d-ff60-fbf7-67f8-ac3fb8ad351c.png)

テーブル・ビューの一覧から同期するテーブルを選択します。
![スクリーンショット (11).png](https://qiita-image-store.s3.amazonaws.com/0/116843/35bb97c5-438c-b6e3-209a-d60974dedc89.png)

次に同期するカラムを選択します。
もし、条件を付けてフィルタリングするなどの必要があれば、カスタムでSQL を書くことで条件指定が可能です。今回は全データを同期するのでカスタムSQL は書きません。


Create を押して、設定が完了です。一度[Save Changes]を押して設定を保存します。

![スクリーンショット (12).png](https://qiita-image-store.s3.amazonaws.com/0/116843/bd72e293-7b6b-a0da-aeed-4949f55dc3bb.png)

次に[Automation]タブで、タイマー起動を設定します。今回はデータを送る側なので、[Send]側の設定を行います。また[Save Changes]を押して設定を保存します。

![スクリーンショット (13).png](https://qiita-image-store.s3.amazonaws.com/0/116843/cd8a53d4-b610-1837-1517-48be19dec131.png)

これでOracle DB 側の設定は終わりです。
これで、Oracle DB データが60分ごとにRSSBus のフォルダにXML 形式で保存されるようになりました。

##kintone（同期先）ポート設定
次にデータを受ける側のkintone の設定を行います。

[Connections] からkintone ポートをドラッグ＆ドロップします。kintone ロゴが英語版ですね。kintone はUS でも展開していて、Kが大文字だったり、ロゴが違ったりするんですね。
![スクリーンショット (15).png](https://qiita-image-store.s3.amazonaws.com/0/116843/4234e996-5973-f340-440d-18779d09a78f.png)


kintone ポートを同期するkintone アカウントに接続します。
入力項目は、以下の3点です。
* URL
* User
* Password

入力したら、テスト接続し、確認後設定を保存します。

![スクリーンショット (16).png](https://qiita-image-store.s3.amazonaws.com/0/116843/8c9c522c-893a-1d7b-08a8-f3b699536093.png)

次にkintone のどのアプリにデータを同期するかを選択します。kintone はデータを受ける側なので[Input]を選択して、[＋]をおして、テーブル・ビューの一覧を出します。
![スクリーンショット (17).png](https://qiita-image-store.s3.amazonaws.com/0/116843/dd058c0b-2bd2-0e5c-8955-a52251a67b75.png)

HREmployee アプリを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/ad7e78ad-8930-7d60-6214-b817907421bf.png)

同様に使うカラムを選択します。
この際に下の[Action]欄で[UPSERT]を選択して、Upsert する際のキーとなるカラムを設定します。今回はEmployeeId をキーに設定します。これを設定しておかないと同期のたびに重複したデータがkintone 側に作成されてしまいます。
![スクリーンショット (20).png](https://qiita-image-store.s3.amazonaws.com/0/116843/8c554ef1-bdcf-a342-22eb-db84af9e2088.png)


確定して、保存します。
これでデータを受ける側のkintone の設定はおわりです。


##XML Map ポートで項目のマッピング実施
最後に、Oracle DB とkintone との項目のマッピングを行います。
通常のMap ポートでも使えますが、新しいXML Map ポートでは、サンプルXML ファイルの自動作成機能や、kintone 側へのUpsert（既存項目はUpdateし、新規項目をInsert する）がデフォルトで用意されていますので、こちらを使います。

Connections からXML Map ポートをドラッグ＆ドロップします。
そして、Oracle DB とXML Map、XML Map とkintone ポートをそれぞれ線でつなぎます。ここで一旦、設定を保存してください。
![スクリーンショット (23).png](https://qiita-image-store.s3.amazonaws.com/0/116843/a1b15077-e1a7-d0c8-c1e9-d910b55ee1e4.png)

XML Map ポートを開きます。すると、Data Source およびDestination のそれぞれのファイルフォーマットが自動的に取り込まれているはずです。

次にMappings 欄で、Source 側のカラムをDestination 側のカラムにマウスでドラッグしてマッピングします。

![スクリーンショット (25).png](https://qiita-image-store.s3.amazonaws.com/0/116843/a948c538-e88c-aec9-7250-d22bab25cd5d.png)

マッピングの完了を確認して、設定を保存します。

![スクリーンショット (26).png](https://qiita-image-store.s3.amazonaws.com/0/116843/8c2dc7d6-be8a-42d4-17d1-9c9070b83bd2.png)

これでマッピング設定が完了です。

#レプリケーションフローをチェック
これまでの設定を動かしてみましょう。

##Oracle Output 画面から手動で実行ボタンを押します。
![スクリーンショット (35).png](https://qiita-image-store.s3.amazonaws.com/0/116843/e15a440d-b148-6e99-05df-841edb3a7b70.png)

すると、[Output]タブに取得されたデータが表示されます。
![スクリーンショット (27).png](https://qiita-image-store.s3.amazonaws.com/0/116843/b6b2b2b8-4567-d1b7-97ad-0c23d841e14e.png)

次にXML Map ポートの[Input]を確認すると、自動的にOracle からのXML が渡され、さらに次のポートに送られます。ステータスが[Unsend]から[Sent]になれば次のポートにデータが送られていることを確認できます。
![スクリーンショット (37).png](https://qiita-image-store.s3.amazonaws.com/0/116843/e281dcfc-fb02-a7be-7a1e-acf4ca92a206.png)

最後に同期先のkintone ポートでも[Input]を確認します。ここから[sent]されるとクラウドのkintone 側にデータが書き込まれます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/116843/ed64a7a7-3dcb-ab39-67ea-a899802b31e1.png)

実際のkintone の画面で確認しましょう。たしかにOracle Db からのデータが入っています。
![スクリーンショット (31).png](https://qiita-image-store.s3.amazonaws.com/0/116843/5b032d9c-59d4-d2a1-9899-bbb146b84073.png)

おわり