2018-12-20

YetでAnotherなSalesforce Dataloaderを作った

ということでデータローダ作りました。Salesforce Dataloaderができる基本的な機能は踏襲しつつYet Another感出してみました。

あ、この記事は Trailblazer Advent Calendar 2018 第20日目の記事となります。

コンセプト

インストール方法

Linux, macOS向け
$ curl -sL http://install.freedom-man.com/yasd.sh | bash

Windowsユーザ向け(コマンドプロンプトで以下を入力)

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile ^
  -InputFormat None -ExecutionPolicy Bypass ^
  -Command "iex ((New-Object System.Net.WebClient).DownloadString('http://install.freedom-man.com/yasd.ps1'))" ^
  && SET "PATH=%PATH%;%APPDATA%\yasd\bin"

goユーザ向け

$ go get github.com/tzmfreedom/yasd

使い方

クレデンシャルの指定方法は環境変数か、オプション引数で指定します。パスワードは暗号化したものでもOK(後述)
   --username value, -u value   [$SALESFORCE_USERNAME]
   --password value, -p value   [$SALESFORCE_PASSWORD]
   --endpoint value, -e value  (default: "login.salesforce.com") [$SALESFORCE_ENDPOINT]

各コマンドはこんな感じでいけます↓

EXPORT

SOQLを使ってSalesforceからデータを取り出します。SELECT句にワイルドカードも指定可能です。
$ yasd export -q "SELECT * FROM Account"
   --query value, -q value
   --batch-size value          (default: 500)
   --file value
   --format value
   --sheet value               (default: "import")

formatはcsv, tsv, jsonl, json, yaml, xlsx から選択します。

INSERT/UPDATE/DELETE/UNDELETE

ファイルからレコードの作成・更新・削除・復元をします。マッピングファイルはYAMLを使います。以下、insertの例です。
$ yasd insert -t Account -f /path/to/import.csv --mapping /path/to/mapping.yml
   --mapping value
   --debug, -d
   --key value
   --file value, -f value
   --type value, -t value
   --mode value
   --sheet value               (default: "import")
   --success-file value        (default: "./success.csv")
   --error-file value          (default: "./error.csv")
   --insert-nulls

typeにはオブジェクトのAPI参照名を入れます。fileに指定したファイル名の拡張子をもとに良い感じにファイルを読み取ります。

拡張子は csv, tsv, xlsx, json, jsonl, yaml, dat(固定長)が対応しています。

mappingが指定されていなければヘッダ名をAPI参照名としてインポートします。

mappingのYAMLはこんな感じで指定します↓

名前: Name
住所: Address__c

mappingに定義されていない項目はヘッダ名をAPI参照名として扱います。

UPSERT

文字通りupsertします
$ yasd insert -t Account -f /path/to/import.csv --mapping /path/to/mapping.yml --upsert-key ExKey__c

他のDMLのオプションに加えて --upsert-key を指定します。

パスワードの暗号化

パスワードを暗号化して、暗号化したパスワードを使ってコマンドを起動できます。
$ yasd generate-key > /path/to/key # 暗号化キーを生成
$ yasd encrypt --key /path/to/key # 暗号化キーを使ってパスワードを暗号化し、標準出力に暗号化したパスワードを出力
# 対話式でパスワード入力
$ yasd export -q "SELECT * FROM Account" -u xxx@xxx.xxx -p {暗号化したパスワード} --key /path/to/key

暗号化したパスワードを使う場合は各コマンドで --keyオプションを指定します。

Excelファイルの操作

insert例
$ yasd insert -t Account -f /path/to/file.xlsx --sheet {シート名}

export例

$ yasd export -q "SELECT * FROM Account" --sheet {シート名} --format xlsx --file test.xlsx

テクニカルなところ

追加予定の機能(気が乗ったら)

 

ということでYet AnotherなSalesforce Dataloaderの紹介でした〜

ご要望あればissueなりプルリクなり上げてもらえれば👍

このエントリーをはてなブックマークに追加