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

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

AntでForce.comのStatic Resourceファイルを作成する

Force.comで開発していく上で、Static Resourceファイルを作成するのは手動で行うには面倒です。

Static Resourceファイルはファイル拡張子だけ変更してアップロードしてしまう方法もありますが、そうしてしまうとどんどんファイル数が多くなってしまいので、ZIP圧縮でファイルを一つにまとめてしまったほうがすっきりします。

とはいえ、JavaScriptCSSを変更するたびに手作業で 不要ファイルを除去→ZIP圧縮→ファイル名変更 するのはさすがに厳しいです。そこで、AntでStatic Resourceファイルを作成させてしまえばいいんじゃないか、というわけです。

前提とするファイル構成

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

[プロジェクト]
 ├ build.properties
 ├ build.xml
 ├ [build](自動で作成する)
 ├ [resource]
 |  ├ [SampleResource]
 |  └ [...]
 └ [src]
    ├ [staticresources]
    └ [...]

Antの呼び出し部分

以下のようにarchiveタスクにリソース名(SampelResource)を指定すると、src/staticresource/SampelResource.resourceを作成するようにAntマクロを作成してみました。中間ファイルとしてbuild以下にZIP圧縮前のファイルをコピーしています。

<target name="make">
  <archive resource="SampleResource" />
</target>

Antマクロ

実際にStatic Resourceファイルを作成しているAntマクロは下記のようになっています。属性として指定されたリソース名に基づいて処理を実行します。一旦build以下にStatic Resourceに含めたいファイルのみコピーしてからZIP圧縮していますので、不要なファイルを開発組織にデプロイすることもなくなります。

<macrodef name="archive">
  <attribute name="resource" />
  <sequential>
    <echo message="compress: @{resource}" />
    <delete dir="${build.dir}/@{resource}" />
    <copy todir="${build.dir}/@{resource}" preservelastmodified="true">
      <fileset dir="${resource.dir}/@{resource}">
        <patternset>
          <include name="**/*.gif"/>
          <include name="**/*.png"/>
          <include name="**/*.js"/>
          <include name="**/*.css"/>
        </patternset>
      </fileset>
    </copy>
    <zip
      basedir="${build.dir}/@{resource}"
      destfile="${src.dir}/staticresources/@{resource}.resource"
    />
  </sequential>
</macrodef>

元ファイルは こちら です。

まとめ

これでStatic Resourceファイルを手軽に作成できるようになりました。
本格的にやるのであればGruntなどを使ってもいいところですが、インストールするものが多くなってしまうので、Antでちゃちゃっとやるのもいいと思います。

Enjoy Deploying!