Salesforce移行ツール(Migration Tool)の最初の一歩

How to use Salesforce Migration Tool for the first time.

Salesforceでの組織間、本番⇔サンドボックス間のリリース、デプロイはMigration Tool (移行ツール)を使うと便利です。

ChangeSetでも可能な部分はありますが、リソースの管理が煩雑になってしまいがち。 その点、Migration Tool を使うと、リリース対象のリソースをファイルに記述しておけるので、リリース漏れも少なく、リソース管理も厳密に行えます。

この記事では、はじめてMigration Tool を使う人のために、その使い方をお伝えします。

Migration Toolの概要

Migration Toolは、Antで動く移行ツールです。Salesforce社がメンテしているので、公式ツールという位置づけですね。

Salesforceでは、本番へのリリースやサンドボックス間のデプロイを行うのに、チェンジセット(ChangeSet)を使ったりしますが、それをコマンドラインで行うツールだと思えば大丈夫でしょう。 コマンドラインで実行できるということは、バッチ化して、定刻実行したりも可能だということなので、使いようによっては便利ですよね。

Migration Tool はMetadataAPIを使ってデプロイ対象のリソースを取得したり、デプロイしたりするので、MetadataAPIと非常に密接な関係があります。 逆に言うと、MetadataAPIを解析すれば、いろんなことができるということなのですが、それはまた、別の機会に。

Migration Toolのインストールとセットアップ

最初にAntのインストール

Migration ToolはJavaのAntで動きますので、実行するためにはAntをセットアップしておく必要があります。

ここから、Antをダウンロードして解凍しておきます。

必要に応じて、ANT_HOMEやJAVA_HOME、PATHなどの環境変数を設定します。

その後、コマンドプロンプトで、「ant -version」を打って、下記のようにバージョン情報が表示されれば、インストール成功です。

いよいよMigration Toolのインストール

では次に、Migration Toolをインストールします。

ここからマイグレーションツールをダウンロードしましょう。

今回は、「 Winter ’17 release .zip (version 38.0)」をダウンロードしました。

インストールする手順はここのページに書いていますが、

手順を追うと、

ファイルを解凍したら、「ant-salesforce.jar」のファイルがあることが分かります。

これがAntタスクの定義のjarなので、これをAntディレクトリの「lib」配下にコピーします。 古いバージョンの「ant-salesforce.jar」がある場合は置き換えてください。

最初のプロジェクトの作成

解凍したフォルダの下に「sample」フォルダがあり、サンプルがあるので、まずはこれをコピーしてシンプルなマイグレーション用のプロジェクトを動かしてみましょう。

今回は「mytest」という名前で「sample」フォルダをコピーしました。「mytest」配下に、以下のファイルがあると思います。

build.properties・・・プロジェクトで使用する変数を定義するファイル

build.xml・・・実際のタスク(デプロイや情報取得など)を定義するファイル

まずは、接続情報を確認・設定するので「build.properties」を開きます。

sf.serverurl = https://login.salesforce.com

という設定がありますが、この設定は本番用なので、Sandboxなら、https://test.salesforce.com に変更しましょう。

次に、接続ユーザとパスワードの設定を行います。

sf.username = <Insert your Salesforce username here>
sf.password = <Insert your Salesforce password here>

上記のところに、ユーザ名とパスワードを設定します。

プロキシーの設定

もし、開発環境がプロキシー・サーバの背後だったら、その設定を以下のプロパティで追加します。

proxy.host = <Insert your Proxy host server here>
proxy.port = <Insert your Proxy port here>

設定を行ったら、その設定を使うための設定を「build.xml」の最後に追記します。

<target name="proxy">
    <property name="proxy.host" value="${proxy.host}"/>
    <property name="proxy.port" value="${proxy.port}"/>
    <property name="proxy.user" value="${sf.username}"/>
    <property name="proxy.pass" value="${sf.password}"/>
    <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${sf.username}" proxypassword="${sf.password}"/>
</target>

あとは、この設定を各Antタスクの

depends=”proxy”

で使うように設定します。(下の例に出てくるので参考にしてください。)

具体的なタスクを作ってみる

では、シンプルなタスクをコピーして、自分のタスクとして動かしてみましょう。

「retrieveUnpackaged」というタスクがシンプルにメタデータを取ってくるタスクなので、これを改造してみることにします。build.xmlの中を見ると、以下のような記述があるはずです。

<target name="retrieveUnpackaged">
  <mkdir dir="retrieveUnpackaged"/>
  <!-- Retrieve the contents into another directory -->
  <sf:retrieve username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" retrieveTarget="retrieveUnpackaged" unpackaged="unpackaged/package.xml"/>
</target>

これをコピーして

<target name="retrieveMyProject" depends="proxy">
<mkdir dir="retrieveMyProject"/>
<sf:retrieve username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" retrieveTarget="retrieveMyProject" unpackaged="myproject/package.xml"/>
</target>

に変更してみました。

次に、unpackagedディレクトリに入っているpackage.xml をコピーして、「myproject」フォルダを作って、そこに入れます。

なお、上記のxmlのタスク設定に出てくるキーワードの意味は、

  • target name・・・このタスクの名前です。「ant 」で実行します。
  • depends・・・このタスクが依存するタスクを指定します。この例では、プロキシー・サーバを経由してSFDCに接続するので、「build.xml」の最後に追記した「proxy」を設定します。
  • retrieveTarget・・・ここには、retrieveしたリソースを置くフォルダを指定します。こ
  • unpackaged・・・ここに指定したxmlファイルを読み込んで、リソースの取得を行います。

では、

作成したmytestフォルダにコマンドプロンプトで移動して、プロンプトから「ant retrieveMyProject」という風にタスク名を指定して起動しましょう。

「ant retrieveMyProject -f build.xml」のように「build.xml」ファイルを指定しても実行可能です。環境を切り替えたりする場合に使えそうですね。

こんな感じにBUILD SUCCESSFUL になったら成功です。

「retrieveMyProject」ディレクトリにpackage.xmlで指定した内容のファイルがダウンロードされているはずです。

次回は、このシンプルなタスクを元に、もっと実践的なタスクを実行していくことにしましょう。