開発環境・ツール

相対パスで動かすデータローダのバッチとフォルダ構成

パスをフルパスで書いたバッチは、フォルダを移した日に動かなくなります。データローダとバッチ一式を相対パスでそろえ、フォルダごと移動できる構成を説明します。

2024.02.01

なぜ相対パスにそろえるのか

データローダのコマンドライン実行は、バッチファイルと設定ファイルの組み合わせで動きます。パスをC:\Users\xxxxxxxx\...のようなフルパスで書いてしまうと、フォルダを別のPCや別の場所へ移した日に、そのまま動かなくなります。

バッチファイルと設定ファイルのパスをすべて相対パスでそろえておけば、データローダ一式とバッチ一式をまとめて別の場所へ移しても、書き換えなしで動きます。

フォルダ構成

データローダ本体(dataloader)と、バッチ一式(SalesforceDataInput)を、同じ親フォルダの下にきょうだいとして置きます。

Root
├─ dataloader
│  └─ bin
│     └─ process.bat
└─ SalesforceDataInput
   ├─ insertAccount.bat
   ├─ conf
   │  ├─ process-conf.xml
   │  └─ insertAccount.sdl
   ├─ input
   │  └─ insert
   │     └─ insertAccount.csv
   ├─ output
   │  ├─ success
   │  │  └─ success.csv
   │  ├─ error
   │  │  └─ error.csv
   │  └─ log
   │     └─ executionLog.log
   └─ key
      └─ dataLoader.key

dataloaderとSalesforceDataInputを同じ階層に置きます。この2つがきょうだいの関係であることが、相対パスの前提になります。

⚠️ Rootフォルダごと移動しても、この中の相対的な位置関係が変わらなければ動きます。dataloaderだけを移す、SalesforceDataInputだけを移す、といった片方だけの移動はできません。

バッチファイル

insertAccount.batは、自分がどこに置かれても動くように、自分の場所を基準にパスを組み立てます。バッチファイルの%~dp0は、そのバッチファイル自身が置かれているフォルダを指します。

insertAccount.bat

@echo off
cd /d "%~dp0..\dataloader\bin"
process.bat "..\..\SalesforceDataInput\conf" account_insert

自分の場所(%~dp0)を基準に、データローダ本体へ移動してから実行します。ドライブレターやフルパスは書きません。

process.batの第1引数は、process-conf.xmlが入っているフォルダです。フルパスでも相対パスでも指定できます。ここでは、移動後のdataloader\binを基準にした相対パスにしています。

設定ファイル

マッピングファイルは、項目名の対応だけを書いた単純なテキストです。

insertAccount.sdl

#Mapping values
Name=Name

CSVの列名と、Salesforce側の項目APIの参照名を対応させます。

process-conf.xmlの中のパスも、dataloader\binを基準にした相対パスでそろえます。

process-conf.xml

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="account_insert"
          class="com.salesforce.dataloader.process.ProcessRunner"
          scope="prototype">
        <description>Account insert job</description>
        <property name="name" value="account_insert"/>
        <property name="configOverrideMap">
            <map>
                <entry key="sfdc.debugMessages" value="true"/>
                <entry key="sfdc.debugMessagesFile" value="../../SalesforceDataInput/output/log/executionLog.log"/>
                <entry key="sfdc.endpoint" value="https://xxxx.my.salesforce.com"/>
                <entry key="sfdc.username" value="xxxxxxxx@example.com"/>
                <entry key="sfdc.password" value="xxxxxxxx"/>
                <entry key="process.encryptionKeyFile" value="../../SalesforceDataInput/key/dataLoader.key"/>
                <entry key="sfdc.timeoutSecs" value="600"/>
                <entry key="sfdc.loadBatchSize" value="200"/>
                <entry key="sfdc.entity" value="Account"/>
                <entry key="process.operation" value="insert"/>
                <entry key="process.mappingFile" value="../../SalesforceDataInput/conf/insertAccount.sdl"/>
                <entry key="dataAccess.name" value="../../SalesforceDataInput/input/insert/insertAccount.csv"/>
                <entry key="process.outputSuccess" value="../../SalesforceDataInput/output/success/success.csv"/>
                <entry key="process.outputError" value="../../SalesforceDataInput/output/error/error.csv"/>
                <entry key="dataAccess.type" value="csvRead"/>
            </map>
        </property>
    </bean>
</beans>

1つのbeanが1つの処理に対応します。ここでは取引先へのInsertを1つ定義しています。

⚠️ sfdc.passwordに平文のパスワードをそのまま書きません。次の見出しで作る暗号化キーを使い、暗号化した文字列だけを書きます。

暗号化キーを作る

データローダには、パスワードを暗号化するためのコマンドが用意されています。平文のパスワードをファイルに残さないために使います。

  1. 暗号化キーを作る

    データローダのbinフォルダで、キーファイルを新規に作ります。

  2. パスワードを暗号化する

    作ったキーファイルを使って、実際のパスワードを暗号化します。表示された文字列をコピーします。

  3. process-conf.xmlへ書く

    sfdc.passwordには、コピーした暗号文だけを書きます。process.encryptionKeyFileには、キーファイルの場所を書きます。

encrypt.bat -k ..\..\SalesforceDataInput\key\dataLoader.key

dataloaderのbinフォルダで実行します。キーファイルを新規に作ります。

encrypt.bat -e (実際のパスワード) ..\..\SalesforceDataInput\key\dataLoader.key

実際のパスワードを、作ったキーファイルで暗号化します。表示された文字列がsfdc.passwordに書く値です。

コマンドライン用のインターフェースはWindowsだけで提供されています。macOSでは、GUIのデータローダ自体は使えますが、コマンドラインからの一括実行はできません。

実行して結果を確認する

insertAccount.batをダブルクリック、またはコマンドプロンプトから実行します。処理が終わると、成功・失敗それぞれの結果がCSVに残ります。

success.csv

"ID","NAME","STATUS"
"001XXXXXXXXXXXXXXX","test","Item Created"

Insertに成功した行のIDとステータスが1行ずつ入ります。

error.csv

"NAME","ERROR"

失敗した行だけが、原因のメッセージとともに残ります。すべて成功していれば見出しだけになります。

Salesforce組織に取引先レコードが登録されていることも、あわせて確認します。

ここで間違えやすい

間違い何が起きるか
dataloaderとSalesforceDataInputを別々の階層に移す相対パスの前提が崩れ、ファイルが見つからなくなります
sfdc.passwordに平文のパスワードを書くファイルを開けば誰でもパスワードが読めます。暗号化キーを使います
バッチファイルの場所を%~dp0で参照せず、フルパスのまま書くフォルダを移した日にパスが合わなくなります
データローダのバージョンフォルダ名を古いまま使う組織のAPIバージョンに対応していない可能性があります

確認した環境

  • 2026年9月/Salesforce Summer '26(APIバージョン67.0)時点の公式ガイドで、コマンドラインの構文と暗号化コマンド、対応OSを確認しています。データローダのバージョンはリリースのAPIバージョンに合わせるとされているため、この時期はv67系を使う想定で書いています
  • フォルダ名・バージョンは、ご自身の環境に置き換えてください

まとめ

  • パスをフルパスで書くと、フォルダを移した日に動かなくなります。相対パスでそろえます
  • dataloaderとSalesforceDataInputをきょうだいのフォルダとして置き、この位置関係を保ったまま移動します
  • バッチファイルは%~dp0で自分の場所を取得し、そこを基準にパスを組み立てます
  • sfdc.passwordには平文を書きません。encrypt.batで作った暗号化キーとパスワードの暗号文を使います
  • コマンドラインインターフェースはWindows専用です。macOSではGUI版のみ使えます
  • データローダのバージョンは、組織のAPIバージョンに合わせて選びます

Salesforceの導入・運用についてご相談ください

導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。