とあるStartupに勤めるエンジニアの技術ブログ

Salesforce、テスト関係の技術ブログなどを書く予定

AntでForce.comのソースコード中の文字列を置換する

Force.comでパッケージ開発しているリリース組織用に名前空間をセットしたり、開発用/テスト用/本番用で外部参照するURLを変えたり、スクリプトをキャッシュさせないためにURL末尾にユニーク文字列を追加したりしたくなることがあります。

そんなときは、Antのreplaceタスクで書き換えてしまうのがお手軽です。

前提とするファイル構成

ここでは下記のようなファイル構成となっているとします。

[プロジェクト]
 ├ build.properties
 ├ build.xml
 ├ [build](自動で作成する)
 ├ [resource]
 | ├ [SampleResource]
 | └ [...]
 └ [src]
  ├ [pages]
  | ├ SampleView.page
  | └ SampleView.page-meta.xml
  ├ [staticresources]
  | ├ SampleResource.resource
  | └ SampleResource.resource-meta.xml
  └ [...]
ソースコード中の文字列を置換する

ここでは名前空間を本番用に置換するためのビルドファイルをサンプルとしました。

そのまま書き換えてしまうとビルドのたびにソースコードが変更されてしまうので、一旦コピーして変換するようにします(ソースコード (1))。

その後、名前空間を本番用に変換します(ソースコード(2))。
ここでは、「NAMESPACE」という文字列を「sampleapp」という文字列に置き換えています。

最後に、ソースコードをデプロイします(ソースコード(3))。

<target name="release">
  <echo message="release: ${now}" />
  <echo message="username: ${sf.username}" />
  <echo message="serverulr: ${sf.serverurl}" />

  <!-- (1)前回のソースコードを削除してソースコードをコピーする -->
  <delete dir="${build.dir}/src" />
  <copy todir="${build.dir}/src" preservelastmodified="true">
    <fileset dir="${src.dir}" />
  </copy>

  <!-- (2)ソースコードを変換する -->
  <replace
    dir="${build.dir}/src"
    token="NAMESPACE"
    value="sampleapp">
    <exclude name="**/*.xml" />
  </replace>

  <!-- (3)ソースコードをデプロイする -->
  <sf:deploy
    username="${sf.username}"
    password="${sf.password}"
    serverurl="${sf.serverurl}"
    maxPoll="${sf.maxPoll}"
    deployRoot="${build.dir}/src"
  />
</target>
まとめ

もうほとんどForce.comは関係なく、Antの話になってしまっていますが、Force.comのパッケージ開発でちょっとAntに詳しくなっておくとリリース作業を大幅に自動化できます。
他の高機能なビルドツールに比べてAntはお手軽に導入でき、学習コストも低いので個人的にはとてもオススメです。

Enjoy Deploying!