TalendでSalesforceにデータインポート

# はじめに

この投稿はSalesforce Advent Calendar 2022の18日目の記事です。
昨年に続き、今年も投稿させていただきます。

https://qiita.com/advent-calendar/2022/salesforce

以前までは、データローダで、Salesforceにデータの連携をしてきました。
しかし最近は、TalendでSalesforceとのデータを連携することが多いです。
せっかくなので、Talendで簡単なジョブを作成しSalesforceへデータをインポートする流れを、記事にしてみようと思います。

# Talendってなに？
公式サイトでは、下記のように説明されています。

*Talendは、データ統合、データ整合性、データガバナンス、リアルタイムデータ配信のための単一の統合プラットフォームを提供します。*
*- あらゆるデータソースからあらゆるデータデスティネーションに接続*
*- クラウド、オンプレミス、ハイブリッド構成でのデプロイ*
*- データ統合コストの削減*
*- データガバナンスのコンプライアンスにかかる時間を短縮*

要するに、汎用性の高いETLツールです。
ETLツールとは、データを「Extract（抽出）」し、「Transform（加工）」したうえで、「Load（書き出し）」できるツールのカテゴリーの一つを指します。3つの頭文字を略して、ETL（イー・ティー・エル）と称します。
- Extract：抽出
- Transform：加工
- Load：書き出し

Talendは、GUI操作で直感的にわかり易くジョブを作って、データの連携ができる特徴があります。
OSS版の、Talend Open Studioであれば無償で利用可能なので、ETLツールを試してみたい方にもおすすめです。私も無償版ですが、Salesforceとのデータ連携においては十分に重宝しております。必要に応じて、自分でJavaを書いてルーチンを用意しておくことも可能です。

# Talendの環境構築

Oracleのサイトから、ダウンロード&インストールします。
[JDK](https://www.oracle.com/jp/java/technologies/downloads/ "JDK")

Talendのサイトからダウンロード&インストールします。
[Talend Open Studio](https://www.talend.com/products/talend-open-studio/?qt-product_tos_download=3 "Talend Open Studio")


# Salesforce組織を用意

今回は、デモ用のTrailhead Playgroundでテストしていきます。
Trailhead Playgroundを新しく作成して、パスワードのリセットをします。

https://trailhead.salesforce.com/ja/help?article=Find-the-username-and-password-for-your-Trailhead-Playground

今回はSalesforceへデータをインポートする、一連の流れを解説します。

# Talendでプロジェクトを作成

まず、Talendを起動します。
<img width="500" alt="01Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/6721493e-80cd-bd04-60b2-8a1c0b1982ac.png">

Talendが起動したら、「新規プロジェクトを作成」で任意の名前で作成します。
<img width="500" alt="02Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/ee709026-ad28-bef2-d0d0-df626c58c0d9.png">

新規プロジェクトが作成されたら、画面下側の「Start now!」をクリックします。
<img width="500" alt="05Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/57748398-036e-b77a-f8f3-52ffa26d4706.png">

下記のようなTalendの初期画面が開きます。
<img width="500" alt="06Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/ac2e3660-2d79-0622-c927-744ec4bbd197.png">

# Talendを操作してみる

ここから実際の作業解説です。ぜひデータ連携をお時間あるときにご自身の環境でもお試しください。
今回はシンプルに、Salesforceに、取引先をインポートしてみたいと思います。

Talendに慣れていない方は、少しづつ進めてみてください。
逆に、Talendや他のETLツールに慣れている方には、簡単に思えるかもしれません。

### ジョブを作成する

最初に、画面左の「ジョブ」から、「ジョブの作成」を開きます。
<img width="500" alt="07Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/00f1944f-3f78-6fb8-4a6e-8390115a98b3.png">

「新規ジョブ」に任意の名前をつけます。
<img width="500" alt="09Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/0af6a98e-df1b-5de0-04f8-e3f1ab4609e0.png">


新しくジョブが作成されます。
<img width="500" alt="10Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/b19a7ff3-a271-d5de-da2c-96cfb83342bb.png">


### Excelファイルを用意する

下記のような、インポート用のExcelファイルを用意します。
<img width="500" alt="11Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/9160b52f-a174-69c3-da07-084dc8413cc0.png">

画面左のメタデータ>Excelファイルから、「Excelファイルの作成」を開きます。
<img width="500" alt="12Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/da81bc38-9f87-ef5d-0d9a-ccd75fb84b6d.png">

ステップ1of4はそのまま「Next」をクリックして、ステップ2of4に進みます。
ファイルを「参照」して、先程のExcelを選択します。
<img width="500" alt="13Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/c0b65b7e-b710-6003-eb7d-8c18828929d1.png">

ステップ2of4「Next」をクリックして、ステップ3of4に進みます。
プレビューで、「最初の行をカラム名として設定」にチェックを入れます。
<img width="500" alt="14Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/cdae1ad8-ffe5-3d37-582e-ede00709db82.png">


ステップ3of4「Next」をクリック、そのままステップ4of4に進んで「Finish」をクリックします。
<img width="500" alt="15Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/3808ed6b-347e-7ec2-cf29-e0d181ccd3bf.png">

画面左のメタデータ>Excelファイルに、「inAccount 0.1」が作成されます。
<img width="500" alt="15Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/a7aaabc0-33cf-711a-7275-e45345868dc9.png">

「inAccount 0.1」を、中央のデザイナー画面にドラッグ&ドロップして配置します。
[tFileInputExcel]コンポーネントを選択します。
<img width="500" alt="17Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/099722f2-29aa-c2b1-a5cd-af06eb65473a.png">

移行元データを抽出するコンポーネントが、下記の[tFileInputExcel]コンポーネントです。
<img width="500" alt="18Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/271b456f-bb42-c56a-2a59-65f8b08f6d93.png">

### tMapコンポーネントを配置する

次に、中央のデザイナー画面で、「tmap」とタイピングして、[tMap]を選択します。
<img width="500" alt="19Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/5481e6ab-e949-b8fb-b24c-0d4f15eacbf9.png">

「tMap」は、先程の[tFileInputExcel]の連携するデータの、中間役になるコンポーネントです。
<img width="500" alt="20Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/7a6635ef-16dc-a555-b7c2-a335dc45c3b9.png">

[tFileInputExcel]を右クリックして、「ロウ」>「メイン」を選択します。
<img width="500" alt="21Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/48e10b51-a184-ef4e-23fb-ea63e5ba9606.png">

デフォルトで「row1」というルートができるので、マウスで[tMap]に接続します。
この接続で、データをコンポーネントから他のコンポーネントに渡せます。
<img width="500" alt="22Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/ed49ad1f-c0ca-1b80-8654-2ccb33a18ab0.png">

[tMap]内の左側に「row1」が確認できます。
<img width="500" alt="23Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/0f3872d9-4b35-6ae8-9db3-584b10d8fbe8.png">

右上の緑＋ボタンをクリックして、New outputを作成します。名前は任意です。
<img width="500" alt="25Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/adcf4332-8810-0bc9-99a2-ca9975be97d8.png">

[tMap]内でアウトプット先が作成されました。
<img width="500" alt="26Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/0107794f-dac3-0396-de2e-cfe9f59a13ec.png">

左側に「row1」のカラムから、「Name」を右側の「out1」にドラッグ&ドロップします。
<img width="500" alt="27Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/8893751e-4f62-117c-6e4c-c521b71d4722.png">

同じく「Phone」も右側の「out1」にドラッグ&ドロップして、下記のように接続します。
<img width="500" alt="29Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/eb0f6fd8-cd1d-9db4-576d-b6e3baac1d31.png">

### tSalesforceOutputコンポーネントを配置する

最後に、アウトプット用のコンポーネントを作成します。
画面左のメタデータ>Salesforcec>「Salesforce接続」を開きます。
<img width="500" alt="30Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/b11d9a62-7880-6096-ab5f-57576275c463.png">

「Salesforce接続設定」の名前は任意で、該当組織のユーザIDとパスワードを入力します。
<img width="500" alt="31Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/45860617-69c9-0945-cae9-17d3a3e45c2c.png">

今回はデモ用のTrailhead Playgroundでパスワードリセットを使用してます。
詳細は下記をご参照ください。

https://trailhead.salesforce.com/ja/content/learn/modules/trailhead_playground_management/get-your-trailhead-playground-username-and-password

送信されたパスワードリセットから、Playgroundで再ログインをしたら、下記手順でセキュリティトークンのリセットを行います。
*-個人設定から、[クイック検索] ボックスに「リセット」と入力し、[私のセキュリティトークンのリセット] を選択します。*
*-[セキュリティトークンのリセット] をクリックします。Salesforce 個人設定のメールアドレスに新しいセキュリティトークンがメールで送信されます。*
<img width="500" alt="32Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/6c045bfe-0fd3-4d1f-6328-45542dca1ff6.png">

詳細は下記をご参照ください。

https://help.salesforce.com/s/articleView?id=sf.user_security_token.htm&type=5

「Salesforce接続設定」の右側下「セキュリティトークン」に送信された新しいセキュリティトークンを入力します。
<img width="500" alt="33Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/8cc51230-eedd-2e12-d3e1-b0a18bbd65cb.png">

「Test connection」を押下して、接続テストをします。
<img width="500" alt="34Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/78154abf-b15d-fbee-e124-cf5f96bfbda1.png">

下記のように接続テストの成功を確認します。
<img width="500" alt="35Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/060d4055-385f-68b5-9b37-388b024bf518.png">

「Next」で、デフォルトのまま「Finish」をクリックします。
<img width="500" alt="36Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/62489d40-f249-7fbd-bb0f-45d65cf437ac.png">

画面右側の「Salesforce」の下に「Salesforce 0.1」が作成されます。
<img width="500" alt="37Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/3529b922-d858-b5f6-cb25-124c16ce42b2.png">

「Salesforce 0.1」を、中央のデザイナー画面の[tMap]の右側にドラッグ&ドロップして配置します。
[tSalesforceOutput]コンポーネントを選択します。
<img width="500" alt="38Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/c37a5227-5599-650c-203a-862be730e9ce.png">

[tSalesforceOutput]を右クリックして、「ロウ」>「out1」を選択します。
<img width="500" alt="39Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/2a8f5cf2-31d9-98d0-ec74-4dc9a968c58e.png">

先程作成した「out1」というルートができるので、マウスで[tSalesforceOutput]に接続します。
<img width="500" alt="40Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/fe084537-e3ab-6990-79a4-1d84f4ff30fb.png">

[tSalesforceOutput]コンポーネントの、スキーマの編集を開きます。
<img width="500" alt="41Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/a336db16-9b56-4a34-1704-55307c5ddeff.png">

[tSalesforceOutput]コンポーネントの、モジュール名をクリックして、「取引先」にチェックを入れます。
<img width="500" alt="42Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/81d948de-368c-4b8a-5c1b-213392b9ae40.png">

下記のように、モジュール名に"Account"が表示されていることを確認します。
<img width="500" alt="43Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/96c73558-3c88-1c93-a3f9-7024a166c431.png">

[tSalesforceOutput]コンポーネントで、「実行」をクリックします。
<img width="500" alt="44Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/8d274d65-aa20-32c4-1739-3308ccd6555d.png">

「実行」をクリックした後、下記のように表示されたら成功です。
*ジョブ~~~を~~~で開始します。*
*ジョブ~~~が~~~で終了しました。 [終了コード = 0]*
<img width="500" alt="45Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/27b86835-2734-12d6-5d8f-f0b6154308c2.png">

Salesforce組織を確認すると、無事にデータがインポートされました。
<img width="500" alt="46Talend.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/789516/e532aa4b-80f7-eb45-bd7d-6c5074d3f973.png">

# まとめ

ここまで読んでいただき、ありがとうございます！

今回は、初めてTalendに触れる方でも分かりやすいよう、3件の取引先をインポートしました。
もしかしたら、準備や作業手順が多くて面倒に思った方もいるかも知れません。
しかし、データが10,000件、100,000件と増えて、作業の繰り返しが多くなると、ETLツールの効果を実感されると思います。

特に、Talendのデータ連携は、Salesforceでデータが多くなったり、マッピング項目・参照関係が増えて複雑になっても、対応可能範囲が広いですし、慣れてしまえばマッピング作業も楽になります。
今までETLツールを使ったことがなかったという方は、ぜひお試ししてみてください！