Appirio's Tech Blog

2011年5月26日木曜日

Force.com移行ツールを使用したSalesforceメタデータのデプロイ

Force.com 移行ツール(以下、移行ツール)は、Salesforceが提供するコマンドラインのツールで、Java/Apache Antをベースに、Force.com上のMetadata(Apex Classや、Visualforce PageおよびCustom Objectなど)を操作するためのツールです。

最新の移行ツールは、SalesforceのOrgから入手が可能です。Spring '11では、"ユーザーメニュー" -> "開発" -> "ツール" -> "Force.com 移行ツール"からダウンロードすることができます。

なお、移行ツールではjarファイルが提供されているのみですので、移行ツールを使用するには、Apache AntとJava Runtimeが必要です。それでは実際に移行ツールを使用して、Salesforce間でのDeployについてご紹介しましょう。

さて、Deployを実行するにはどのような作業が必要でしょうか。大きくは、次の4つのStepが必要です。

Step 0: 移行ツールの動作環境を準備する。
Step 1: Deploy対象のMetadataを特定し、package.xmlファイルを作成する。
Step 2: 移行ツールの動作を指定するbuild.xmlファイルを作成する。
Step 3: 移行ツールと1)のpackage.xmlを使用して、Deploy元の環境からDeploy対象のMetadataを取得する。
Step 4: 移行ツールと1)のpackage.xmlと3)を使用して、Deploy先へDeployする。

もちろん、これ以外に準備情報として、Deploy元やDeploy先のLogin情報なども必要です。

Step0: 移行ツールの動作環境を準備する。

Salesforceからダウンロードした移行ツールを解凍すると、ant-salesforce.jarファイルがあります。このファイルをApache Antをインストールしたフォルダのlibへコピーします。これで準備は完了です。なお、Antが起動するかどうかは、"ant -version"コマンドを実行します。
> $ANT_HOME/bin/ant -version
Apache Ant version 1.8.1 compiled on April 30 2010

Step1: Deploy対象のMetadataを特定し、package.xmlファイルを作成する。

今回のDeployでは、以下の4つのMetadataをDeployします。

1) Apex Class
MyApexClass1
TestMyApexClass1 --- MyApexClass1のTest Class

2) Visualforce Page
MyVFPage1

3) Custom Object
MyCustomObj1__c

これらをDeployするには、package.xmlというXMLファイルを使用して、DeployするMetadataの定義(設定)を行います。今回の4つのMetadataを表現するpackage.xmlは、以下のような構造になります。

File 1: package.xml
 <?xml version="1.0" encoding="UTF-8"?>
 <Package xmlns="http://soap.sforce.com/2006/04/metadata">
     <types>
         <members>MyApexClass1</members>
         <members>TestMyApexClass1</members>
         <name>ApexClass</name>
     </types>
     <types>
         <members>MyVFPage1</members>
         <name>ApexPage</name>
     </types>
     <types>
         <members>MyCustomObj1__c</members>
         <name>CustomObject</name>
     </types>
     <version>20.0</version>
 </Package>
<types>〜</types>の部分にMetadataを<members>として、またそのタイプを<name>として指定します。 今回は、2つのApex ClassをDeployします。その場合は、<members>タグを2つ繰り返して記述します。

Step 2: 移行ツールの動作を指定するbuild.xmlファイルを作成する。

続いては、build.xmlファイルを作成します。build.xmlでは、移行ツールがどのような操作(処理)を行うかを記述するためのファイルです。 Step3では、Deploy元の環境からMetadataを取得する作業を行います。まずは、Step3で使用するための情報を記述していきましょう。

File2: build.xml
 <project name="移行ツール Sample 2011/05/11" default="retrieveMetadata" basedir="." xmlns:sf="antlib:com.salesforce">
     <property file="build.properties"/>
     <property environment="env"/>
  
  <!-- Retrieve Metadata -->
     <target name="retrieveMetadata">
        <sf:retrieve username="${sf.from.username}" password="${sf.from.password}" serverurl="${sf.from.serverurl}" retrieveTarget="src" unpackaged="src/package.xml"/>
     </target>
 </project>
ここでポイントとなるのは、"sf:retrieve"です。"sf:retrieve"を指定することによりMetadataを取得することができます。また、usernameやpasswordなどの属性の他、 retrieveTargetにはMetadataを保存するフォルダを、unpackagedにはStep1で作成したpackage.xmlを指定します。

Step 3: 移行ツールと1)のpackage.xmlを使用して、Deploy元の環境からDeploy対象のMetadataを取得する。

いよいよMetadataを取得する準備が整いましたが、その前にSalesforceへのLogin情報についても確認しておきましょう。 Login情報は、build.propertiesファイルに設定します。

File3 :build.properties
sf.from.username = myuser1@myorg.com.mysandbox
sf.from.password = mypass123securitytoken12345
sf.from.serverurl = https://test.salesforce.com
build.propertiesでは、key=valueの形式で値の定義を行います。ここでは、"sf:retrieve"で使用されているsf.from.xxxの3つの値を定義しています。 ("sf.from"としているのは、Login情報は、Deploy元の情報であるということを確認しやすくするために設定しています。この後のStepで、Deploy先のLogin情報もこのファイルに追記します。)

それでは、Metadataを取得してみましょう。
 > $ANT_HOME/bin/ant retrieveMetadata
 Buildfile: $SOME_PATH/build.xml

 retrieveMetadata:
 [sf:retrieve] Request for a retrieve submitted successfully.
 [sf:retrieve] Request Id for the current retrieve task: 04sA0000002vs2uIAA
 [sf:retrieve] Waiting for server to finish processing the request...
 [sf:retrieve] Request Status: Completed
 [sf:retrieve] Finished request 04sA0000002vs2uIAA successfully.

 BUILD SUCCESSFUL
 Total time: 17 seconds
実際にMetadataが取得されたかどうか、確認してみましょう。
Metadataは、build.xmlの"retrieveTarget"で指定したフォルダに作成されています。Apex Classは、classesフォルダの下に、Visualforce Pageは、pagesフォルダの下に、また、Custom Objectは、objectsフォルダの下にそれぞれ作成されています。



Step 4: 移行ツールと1)のpackage.xmlと3)を使用して、Deploy先へDeployする。

最後に、Deployを行います。ここで必要な作業は、Deploy先のログイン情報と、Deployのためのbuild.xmlの設定を追加します。まずは、build.propertiesにDeploy先の情報を追加します。ここでは、先ほどと同じファイルに追記することにします。

File4 :build.properties
## From Org
sf.from.username = myuser1@myorg.com.mysandbox
sf.from.password = mypass123securitytoken12345
sf.from.serverurl = https://test.salesforce.com

## To Org
sf.to.username = myuser1@myorg.com
sf.to.password = mypass123securitytoken12345
sf.to.serverurl = https://login.salesforce.com
続いて、build.xmlの追加です。Deployする場合は、"sf:deploy"を使用します。

File5: build.xml
 <project name="移行ツール Sample 2011/05/11" default="retrieveMetadata" basedir="." xmlns:sf="antlib:com.salesforce">
     <property file="build.properties"/>
     <property environment="env"/>

  <!-- Retrieve Metadata -->
     <target name="retrieveMetadata">
        <sf:retrieve username="${sf.from.username}" password="${sf.from.password}" serverurl="${sf.from.serverurl}" retrieveTarget="src" unpackaged="src/package.xml"/>
     </target>
     
  <!-- Deploy Metadata --> 
  <target name="deployMetadata" >
        <sf:deploy username="${sf.to.username}" password="${sf.to.password}" serverurl="${sf.to.serverurl}" deployRoot="src" />
  </target>
 </project>
追記するのは、<target name="deployMetadata">の部分です。属性として、usernameやpasswordを指定します。さらに、先ほどStep3で取得したMetadataファイルを保存したフォルダを、"deployRoot"により指定します。

それでは、実際にDeployしてみます。
 > $ANT_HOME/bin/ant deployMetadata
 Buildfile: $SOME_PATH/build.xml

 DeployMetadata:
 [sf:deploy] Request for a deploy submitted successfully.
 [sf:deploy] Request Id for the current deploy task: 04sF0000002pmSsIAI
 [sf:deploy] Waiting for server to finish processing the request...
 [sf:deploy] Request Status: Completed
 [sf:deploy] Finished request 04sF0000002pmSsIAI successfully.

 BUILD SUCCESSFUL
 Total time: 20 seconds
Deployが終了しました。
それでは、Deploy先のSalesforceにLoginし、DeployされたMetadataが存在するかを確認してみましょう。この例では、最終更新日がDeploy作業を行った時間になっています。


このように、Mingration Toolを使用することで、Salesforce間でのMetadataの移行が簡単に行うことができます。
是非、実践してみてください。

Posted by Shiroo Takayuki (Appirio Japan)

0 コメント:

コメントを投稿

 
2006-2011 Appirio Inc. All rights reserved.
アピリオ | リソースセンター(英語) | お問い合わせ先 | 採用情報 | プライバシーポリシー(英語)