Force.com Migration Tool (移行ツール) のメタデータまとめ

# はじめに

[Force.com Migration Tool (Force.com 移行ツール)](https://developer.salesforce.com/page/Force.com_Migration_Tool) は便利ですが、新しいファイルを作成してデプロイしたい時とかに以下のようなことで迷ってしまうことがあります。

- ディレクトリ名はなんだっけ？
- 拡張子はなんだっけ？
- ```package.xml```にはどうやって書くんだっけ？

今回、Force.com移行ツールの機能だけで比較的簡単に確認する方法があったので紹介します。

## インストール方法など

http://help.salesforce.com/apex/HTViewSolution?id=000176910&language=ja

# 確認方法

移行ツールをダウンロードした時に入っているサンプルの```build.xml```から、```describeMetadata```というコマンドを使用します。

```xml:build.xml
<!-- Retrieve the information on all supported metadata type -->
<target name="describeMetadata">
	<sf:describeMetadata username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}"/>
</target>
```

すると、次のような結果がターミナルに出力されます。

```zsh:実行結果
describeMetadata:
[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: InstalledPackage
[sf:describeMetadata] DirName: installedPackages
[sf:describeMetadata] Suffix: installedPackage
[sf:describeMetadata] HasMetaFile: false
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: ************************************************************
[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: CustomLabels
[sf:describeMetadata] DirName: labels
[sf:describeMetadata] Suffix: labels
[sf:describeMetadata] HasMetaFile: false
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: CustomLabel,************************************************************
[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: StaticResource
[sf:describeMetadata] DirName: staticresources
[sf:describeMetadata] Suffix: resource
[sf:describeMetadata] HasMetaFile: true
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: ************************************************************

...

[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: Translations
[sf:describeMetadata] DirName: translations
[sf:describeMetadata] Suffix: translation
[sf:describeMetadata] HasMetaFile: false
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: ************************************************************
[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: ApexClass
[sf:describeMetadata] DirName: classes
[sf:describeMetadata] Suffix: cls
[sf:describeMetadata] HasMetaFile: true
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: ************************************************************
[sf:describeMetadata] ************************************************************
[sf:describeMetadata] XMLName: ApexTrigger
[sf:describeMetadata] DirName: triggers
[sf:describeMetadata] Suffix: trigger
[sf:describeMetadata] HasMetaFile: true
[sf:describeMetadata] InFolder: false
[sf:describeMetadata] ChildObjects: ************************************************************
[sf:describeMetadata] ************************************************************
...
```

何やら色々表示されていますが、  

- ```XMLName```を```package.xml```の```<name>```に
- ```DirName```をディレクトリ名に
- ```Suffix```を拡張子名に

それぞれ指定すれば良いです。

# よく使う項目まとめ

個人的によく使うメタデータを一覧にまとめときます。


| 項目  | ディレクトリ名 | 拡張子名 | ```package.xml```の```<name>``` |
|:-----|:--------------:|:------:|:-------------------------------:|
|Apexクラス|classes|.cls|ApexClass|
|Apexトリガ|triggers|.trigger|ApexTrigger|
|Visualforceページ|pages|.page|ApexPage|
|オブジェクト（標準・カスタム）|objects|.object|CustomObject|
|カスタム表示ラベル|labels|.labels|CustomLabels|
|カスタムタブ|tabs|.tab|CustomTab|
|翻訳ファイル|translations|.translation|Translations|


# 補足
サンプルの```build.xml```には```listMetadata```というコマンドも用意されてます。

```xml:build.xml
<!-- Retrieve the information of all items of a particular metadata type -->
<target name="listMetadata">
	<sf:listMetadata username="${sf.username}" password="${sf.password}" serverurl="${sf.serverurl}" metadataType="${sf.metadataType}"/>
</target>
```
特定のメタデータ（```ApexClass```など）を指定して実行すると、現在その組織に保存されているデータが表示されます。  
ただし、使う時は```build.properties```に

```zsh:build.properties
sf.metadataType = ApexClass
```
などと書いてから。

# 参考
http://www.salesforce.com/us/developer/docs/api_meta/index_Left.htm#CSHID=meta_types_list.htm|StartTopic=Content%2Fmeta_types_list.htm|SkinName=webhelp