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のインストールとセットアップ
Migration ToolはJavaのAntで動きますので、実行するためにはAntをセットアップしておく必要があります。
ここから、Antをダウンロードして解凍しておきます。
必要に応じて、ANT_HOMEやJAVA_HOME、PATHなどの環境変数を設定します。
その後、コマンドプロンプトで、「ant -version」を打って、下記のようにバージョン情報が表示されれば、インストール成功です。
では次に、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で指定した内容のファイルがダウンロードされているはずです。
次回は、このシンプルなタスクを元に、もっと実践的なタスクを実行していくことにしましょう。