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

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

コンセプト

  • 本家より簡単に使えるCLIツールを作る
  • クロスプラットフォーム対応
  • かゆいところに手が届く
    • Excel、JSON、JSONL、YAML、TSV対応(固定長も対応予定)
    • INIファイルではなくYAMLでマッピング
    • エクスポート時のSOQLでワイルドカードが使える

インストール方法

Linux, macOS向け

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

goユーザ向け

使い方

クレデンシャルの指定方法は環境変数か、オプション引数で指定します。パスワードは暗号化したものでもOK(後述)

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

EXPORT

SOQLを使ってSalesforceからデータを取り出します。SELECT句にワイルドカードも指定可能です。

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

INSERT/UPDATE/DELETE/UNDELETE

ファイルからレコードの作成・更新・削除・復元をします。マッピングファイルはYAMLを使います。以下、insertの例です。

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

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

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

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

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

UPSERT

文字通りupsertします

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

パスワードの暗号化

パスワードを暗号化して、暗号化したパスワードを使ってコマンドを起動できます。

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

Excelファイルの操作

insert例

export例

テクニカルなところ

  • クロスプラットフォームでシングルバイナリが簡単に作れるGolangを採用
  • CLIフレームワークは定番(?)のurfave/cli
  • このためにSalesforce SOAP APIのGolangクライアントを作った
  • ワイルドカード表現はかなり手抜きして正規表現で置き換え

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

  • バルクAPI対応
  • タイムゾーン対応(T00:00:00.000Zを自動付与するとか)
  • プロキシ対応
  • リトライのハンドリングとか

 

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

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