dataloader.io（powered by MuleSoft）を試してみよう！

# はじめに
　初めまして、「MuleSoft Advent Calendar 2019」に参加させていただきます。川口です。現在、「MuleSoft Certified Developer Level1 [Mule4]」を取得しようと頑張ってますが、プロジェクトワークが忙しくwebassessorに登録している試験日を６回のリスケジュールしています。なかなか暇にならないですね。（笑）
　今回は、「dataloader.io」について書きたいと思います。「あれっ！？」と思う方いらっしゃると思いますが、dataloader.ioはMuleSoftを使って構築したアプリケーションということを知り、テーマに選びました。開発に関係ないテーマで申し訳ございません。最初、知ったときはもう少し開発に近い機能だと思ってました。。。
　さて、「dataloader.io」をご存知ですか？、私は知ったのは最近です。データローダーをダウンロードしようと、クイック検索したところこの機能のことを知りました。
　去年の[Salesforce Winter '19 リリースノート](https://releasenotes.docs.salesforce.com/ja-jp/winter19/release-notes/rn_forcecom_general_integration_page.htm)で[設定]画面で[インテグレーション]というカテゴリが作成され「dataloader.io」というメニューに加わりました。
　Salesforceのメニューに加わってから、時間は経ってしまっているのですが、SalesforceのヘルプでSalesforceへデータをインポートをする方法の一つとして紹介されているので、お客様に紹介できるように機能の特徴やメリット、考慮事項等説明していきます。

# dataloader.ioとは
　dataloader.ioの公式ガイド[Learn dataloader.io in under 20 min!](https://dataloader.zendesk.com/hc/en-us/articles/219333148-Learn-dataloader-io-in-under-20-min-)で、dataloader.ioは、MuleSoftを使ったクラウドサービスです。
　操作は簡単で、ウィザード形式に画面に従って操作することで簡単にデータのエクスポート、インポート、デリートが出来るサービスだと紹介されています。データローダという名前の通りですね。
　また、このサービスの特徴は以下の通りです。

1. **タスク登録** - GUIからタスクを登録し、ルックアップで属性項目を指定して自レコードの登録、参照項目の設定ができます。
2. **外部ストレージサービスの利用** - FTPやDropbox、データベースを選択することができます。ファイルのデータフォーマットはCSV（UTF-8）のみサポートされています。データの投入方法は、直接アップロードする方法とストレージサービスから読み込む方法があります。
3. **スケジュール機能** - 毎時（有償）、日次、週次（有償）、月次（有償）で実行をスケジュールリングできます。 
4. **通知** - 処理結果のメール通知ができます。

### いつからサービスが提供されたか
　Salesforceのメニューとして加わったのは去年の１２月ですが、AppExchangeでは、２０１２年から[dataloader.io](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N30000009w8ZBEAY)）のサービスが提供されています。インテグレーションサービスとして高い評価がついています。

<img width="1356" alt="AppExchange" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/80778232-8124-e5ff-9974-b298495b8c2d.png">

### SalesforceのHelpでデータをインポートするオプションとして紹介
　[データをインポートする方法の選択](https://help.salesforce.com/articleView?id=import_which_data_import_tool.htm&type=5)では、データをSalesforceにインポートするオプションとして紹介されています。その表では、Salesforceのエディションにほぼ全て扱えることや、Salesforceのレコード件数の制約がないこと（dataloader.ioはエディションの制約あり）、対象のオブジェウトの制約がないことが説明されていました。

### 私が考えるお勧めできるポイント
　実際にdataloader.ioを利用した感想は、デスクトップアプリケーションのデータローダ（以下データローダ）をリッチにしたサービスだと感じました。
　データローダは、運用や開発の現場で広く利用されおり、Salesforceのデータを扱う場合に、まず利用される身近なツールです。
　ただ、Salesforceのデータを運用作業で外部で利用する機会が増えてくると、画面操作だけでは対応できなくなってきます。複数のオブジェクトに対して継続的に同じ操作する場合、バッチ化やスケジュール実行を考えます。データローダにはバッチ実行機能がついているのですが、運用担当者が構築するにはパスワード暗号化やXML編集、Dosコマンドの知識が必要ですし、配布後のメンテナンスを考えると色々考えなければいけないことが増え運用が難しくなります。
　dataloader.ioはそのような機能が、画面で簡単に設定できるので、日本語対応ができたら、お客様にぜひお勧めしたいサービスですね。

## 考慮事項
**1.　データをSalesforceにインポートする際に、日本語のヘッダーや値が含まれるとエラーが発生する。**
<img width="382" alt="日本語を含むCSV" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/55c7b493-3892-cf9e-8b3c-7ba65006be5d.png">

**2.　日本の日付フォーマットは、レコードのエラーになる。**
<img width="611" alt="スクリーンショット 2019-12-20 14.09.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/8feed57b-f242-73ec-e205-a13af2c94eab.png">

**3.　dataloader.ioのエディション毎に制約があります。**
　dataloader.ioのエディションには、Free、Professional、Enterpriseの３つがあり、[価格表](https://dataloader.io/pricing)に各エディション毎に制限があります。
　気になる違いは以下の通りです。

- 　月単位でインポートやエクスポート、デリートで処理できる累積レコード件数
- 　アップロードできるファイル最大サイズ
- 　スケジュールできるタスク数
- 　Salesforce接続数
- 　タスクの保持期間
- 　Email通知
- 　サポート

考慮点は以上です。

# 実際に試してみましょう！
今回は、基本機能のエクスポート、インポート、デリートを実行します。

## ログイン
　まずは、dataloader.ioにログインします。
１）　Salesforceの[設定] > [Dataloader.io]クイック検索
２）　[dataloader.io]画面の[dataloader.io]ボタンを押下
<img width="1202" alt="SF画面（dataloader.io）" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/3f75d20b-129e-ff39-b298-f92d42944e96.png">
３）　サードパーティーの[dataloader.io](https://dataloader.io/)のページが表示されます。
４）　右上の[Login with Salesforce]ボタンを押下します。
<img width="1440" alt="dataloader.ioホームページ" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/197fa7f9-7572-a0ef-7c0b-5a9c255589fe.png">
５）　カスタムドメインや接続環境（本番またはサンドボックス）を設定して[Login]ボタンを押下。
※dataloaser.ioのログインはOAuth認証でログインします。
※パスワードをdataloader.ioに入力することはありません。
<img width="350" alt="ログイン画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/dbfee72e-6de8-e2ce-fae5-bbe67bc5f8d3.png">
６)　接続先のSalesforceログインが完了するとOAuth接続の認可の画面が表示されます。
７）　OAuthの範囲を確認し[はい]ボタンを押下します。
<img width="300" alt="スクリーンショット 2019-12-20 22.32.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/75658a30-c3c6-5630-db7f-793be6c37262.png">
８）　dataloader.ioのホーム画面が表示されます。
<img width="1429" alt="スクリーンショット 2019-12-20 22.27.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/4a7bc92b-8af8-53df-b556-e4e6a6e9ca89.png">


以上でログインができました。

## エクスポート
　次に既存のSalesforceデータをエクスポートします。

### 1. タスクの登録
１）　ヘッダーメニューの[NEW TASK]をクリックし、プルダウン[EXPORT]を選択します。
<img width="300" alt="NewTaskメニュー" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/95e43e45-6ae6-a66a-711a-27cdcdc18866.png">
２）　[Export]のウィザード形式のポップアップが表示されます。
３）　接続先の[Connection]を確認します。
４）　Objectで対象のオブジェクトを選択します。キーワード検索やフィルター機能がついています。
<img width="804" alt="スクリーンショット 2019-12-21 0.16.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/afd42112-b8a5-f1b5-7148-e0486d871010.png">
５）　[Fields]一覧に対象オブジェクトと参照先オブジェクトの項目が一覧で表示されています。
６）　[Fields]一覧から項目をチェックします。キーワード検索が利用できます。
７）　[Filter]や[Order by]を任意で設定できます。
８）　設定がリアルタイムに[SOQL Query]に反映されます。インポートの日本語対応が未対応だと考えられるため、このSOQLを変更するとCSVのヘッダーが表示ラベルからAPI名に変更されます。
<img width="800" alt="スクリーンショット 2019-12-20 23.33.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/3c172946-5b10-490c-8927-f9a7ea1883b6.png">
９）　[Summay]画面が表示されます。
１０）　タスクの名前を設定します。日本語は文字化けするので英語名で設定します。また、この名前はエクスポートするファイルの名前に使われます。
１１）　[Schedule Task]を[none]からHourly（有償版）、Daily、Weekly（有償版）、Monthly（有償版）を選択するとタスクのスケジュール登録ができます。Free版は、スケジュールタスクは１つのみ登録可能です。
１２）　実行結果の通知先にメールアドレスを設定する。Free版は１つのみ設定可能です。
<img width="762" alt="スクリーンショット 2019-12-20 23.34.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/96f3d930-d1e4-7937-0993-a2c0713adad6.png">
　ちなみに、Free版で[Schedule Task]を[Daily]以外を選択すると下記のワーニングポップアップが表示されます。
<img width="780" alt="スクリーンショット 2019-12-20 23.34.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/59a3ef41-f15f-c0bf-6869-9698725d5e60.png">
１３）　[Date Format]を設定します。ここではインポートを考慮して[MM/DD/YYYY]を設定します。
１４）　オンラインストレージサービスを設定します。GoogleなどのOpenIDで認証できます。
<img width="1157" alt="Dropbox設定" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/8fcc7391-bb0c-5e4a-eef7-9305dfd4d39b.png">
１５）　Dropboxにログインします。
<img width="496" alt="スクリーンショット 2019-12-20 23.34.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/4debd3a2-a2f4-0dd5-3bb3-fffd84257bd4.png">
１６）　dataloader.ioのアクセスを認可します。
<img width="500" alt="DropboxOAuth認可" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/fcc71d48-fd55-09ea-ea59-ce6a23f9b82d.png">
１７）　タスク一覧が表示され、登録したタスクが確認できます。
<img width="809" alt="スクリーンショット 2019-12-20 23.35.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/a37a7c92-21b2-145c-5238-9d8ec00cb3cf.png">

エクスポートの設定は以上です。

### 2. 出力確認
１）　タスク完了通知が、送信元”notifications@dataloader.io”から通知されます。
<img width="792" alt="スクリーンショット 2019-12-20 23.35.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/95a378de-e22a-0585-ef72-084b41ce899a.png">
２）　直接結果ファイルが、[32 successes]のリンクをクリックするとダウンロードできます。
<img width="804" alt="スクリーンショット 2019-12-20 23.36.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/c163c13a-d1e9-aa80-249e-4d7d77452020.png">
３）　オンライストレージサービスにファイルが格納されていることを確認できます。　
<img width="1196" alt="Dropboxエクスポートデータファイル確認" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/645edf33-449a-03c6-a31e-eb51259fba85.png">
４）　履歴は、タスク一覧でタスクをクリックすると右側に表示されます。
<img width="807" alt="スクリーンショット 2019-12-20 23.36.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/e5d9673d-9fb5-c69f-2365-2d9b4b7da314.png">

## デリート
　Salesforceのデータを削除します。
### 1. タスク登録
１）　ヘッダーメニューの[NEW TASK]をクリックし、[DELETE]メニューを選択する。
<img width="512" alt="NEW TASK" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/782720c8-887c-22de-b7f5-d015bc00b0b1.png">
２）　削除対象のSalesforce接続を確認し対象オブジェクトを選択する。
<img width="806" alt="スクリーンショット 2019-12-21 0.20.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/a1f2e5a6-c4df-8bbc-5773-e6ad6e1f09ae.png">
３）　削除元データを選択する。
<img width="803" alt="スクリーンショット 2019-12-20 23.37.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/52bec4c0-37f6-25fb-0ab9-c63b51532e41.png">
４）　削除レコードのキー項目を設定する。SFIDの項目を設定します。
<img width="802" alt="スクリーンショット 2019-12-20 23.37.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/ceb28a05-df93-aca4-3a6b-10e007b40868.png">
SFID項目意外を選択すると、ワーニングが表示されます。
<img width="804" alt="スクリーンショット 2019-12-20 23.37.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/5dcb8d1c-300b-471c-6195-88051093d37b.png">
５）　[Summay]セクションの[Name]にタスク名を設定する。
<img width="780" alt="スクリーンショット 2019-12-21 0.21.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/131c4a20-74d3-8c87-5eee-22dc3a7d296f.png">

削除タスクの登録手順は以上です。

### 2. 結果確認
１）　タスク一覧でタスクの結果を確認できます。
<img width="807" alt="スクリーンショット 2019-12-20 23.37.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/f0c2f1d1-1084-eaf3-0d52-25c3af20c853.png">
２）　Dropboxを自分のPCとシンクすると結果ファイルがローカルで確認できます。
<img width="770" alt="スクリーンショット 2019-12-20 17.58.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/bea38a10-fd16-584d-391c-c9f7e947c815.png">
３）　結果確認できます。
<img width="688" alt="スクリーンショット 2019-12-20 18.02.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/43ee80ec-4896-fbd9-a2e9-3c2d3c262ba2.png">

## インポート
　Salesforceのデータをインポートします。
　今回の説明では、Insertだけ紹介します。InsertやUpsert、Updateはデータローダと基本的に同じです。
　dataloader.ioの特徴として、外部IDで登録や参照先設定をする意外に、ルックアップで属性項目を指定し設定することが可能です。

### 1. タスク登録
１）　ヘッダーメニューの[NEW TASK]をクリックし、プルダウンメニュー[IMPORT]ボタンを選択する。
<img width="515" alt="ヘッダーメニュー" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/b6fb2bb0-db06-f13b-b594-781f5ac19c85.png">
２）　インポート先のSalesforce接続を確認する。
３）　インポートの[Operation]項目は、[Insert]、[Upsert]、[Update]から選択します。
４）　インポートの対象オブジェクトを選択します。
<img width="802" alt="スクリーンショット 2019-12-21 0.21.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/b5fe982f-6b82-f1be-8816-f5058ff6df14.png">
５）　インポートデータの投入方法を選択します。ここでは、Dropboxを選択します。一度Dropboxの接続設定をすると接続情報はインポートでも利用できます。
<img width="806" alt="投入方法" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/1e04b63c-85c3-213e-41ff-aceeeb592d4f.png">
６）　各項目はクリックしてポップアップの中から項目を選択して設定します。
<img width="802" alt="項目設定（サニ）" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/326c5e28-7165-6347-dcc3-e55daaba081d.png">
７）　参照先IDをルックアップで参照先の名前を指定して設定します。また、複数検索が該当した場合の振る舞いを選択することができる。
<img width="801" alt="ルックアップ（サニ）" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/dc358c73-e3be-3fa3-5d4d-14e23218ca11.png">

### 2. 結果確認
１）　タスク一覧でインポートタスクの結果を確認できます。
<img width="807" alt="インポートの確認（サニ）
" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/6d3f1529-bdaf-4043-bfe7-aa10425426b0.png">

２）　Dropboxでインポート結果のCSVが作成され、各レコード毎の登録ステータスを確認できます。
<img width="1057" alt="ステータス確認" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/03b6ad3f-1f5f-a67a-a8af-12bf523436c9.png">

## 利用状態の確認
dataloader.ioでは、エディション毎に制約があります。[Subscription]画面で利用状況を確認します。
１）　アバターをクリックするとプルダウンメニュー[Settings]を選択する。
<img width="557" alt="スクリーンショット 2019-12-20 23.39.07.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/b550d62b-5821-8a02-b39f-29689858ee1b.png">
２）　[Settings]画面の[Subscription]タブを選択すると利用状態を確認できます。
３）　同じ組織の別ユーザでログインした場合、利用状態は別でカウントされることを確認できました。
<img width="806" alt="利用状況（サニ）" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76270/562adb96-fb2b-7fb7-ad6e-98989a1a7e21.png">


# 最後に
　いかがだったでしょうか？
　冒頭でも説明した通り、実際にdataloader.ioを利用した感想は、デスクトップアプリケーションのデータローダをリッチにしたサービスだと感じました。
　dataloader.ioが日本語対応できたら、Salesforceのデータを操作するオプションの一つとしてぜひ、お勧めしたいですね。では！

## 参考資料
[MuleSoftBlog:Salesforce Solutions from MuleSoft](https://blogs.mulesoft.com/dev/anypoint-platform-dev/salesforce-solutions-from-mulesoft/)