yujiroのプログラミング

勉強内容をアウトプットし、サボらないようにする為のブログ

Salesforce ant インストールから使い方まで

\ Follow me!! /

f:id:yujiro0320:20200128113133j:plain

はじめに

javaをインストールできている。私の環境ではこのようなバージョンのjavaが入っている

openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment Zulu13.28+11-CA (build 13.0.1+10-MTS)
OpenJDK 64-Bit Server VM Zulu13.28+11-CA (build 13.0.1+10-MTS, mixed mode, sharing)

手順1(antのインストール)

developer.salesforce.com
上記サイトを基に説明していく。まずantをインストールする。
Apache Ant - Binary Distributions

f:id:yujiro0320:20200213122247p:plain
ダウンロードするのはZipファイルでバージョンはどちらでも良い

手順2(antのインストール)

ダウンロードしたZIPファイルを解凍する。デスクトップに置いていても良いが、/usr/local/binに移動させるのが一般的。図ではfinderのGUIを用いてファイルを移動させた。CUIで移動できるならそっちの方が早い。
f:id:yujiro0320:20200213123446p:plain

手順3(antのインストール)

次に保存したフォルダにパスを通す必要がある。環境変数にパスを記載して通す。.bash_profileファイルを作成する必要があります。
.bash_profileファイルはホームディレクトリに存在。

|--home

f:id:yujiro0320:20200213140349p:plain
隠しファイルが見えない状態になっている場合は以下のサイトから表示させるようにコマンドを入力しておく。【Mac】隠しファイル・隠しフォルダを表示する方法 - Qiita
.bash.profileファイルに以下を記載する

ANT_HOME=/usr/local/bin/apache-ant-1.9.14 ←※保存しているversionによって記載は異なる
export PATH=$ANT_HOME/bin:$PATH

さらに、このコマンド

source ~/.bash_profile

上記コマンドで読み込みをしてくれる。
antツールが正しく読み込まれているかを確認するために、以下コマンドを入力。

ant -version
 

インストールできていればバージョンが表示。

Apache Ant(TM) version 1.9.14 compiled on March 12 2019

手順4(antインストール後の設定)

Ant移行ツールをダウンロードする。
Salesforce Developers
ZIPファイルを解凍すると図のようなファイルが入っている。
f:id:yujiro0320:20200213125022p:plain
このうちsampleは資源を環境からデプロイまたは、ダウンロードする際に使用するために、デスクトップにおいておく。
ant-salesforce.jarは保存するディレクトリを変更しないといけない。
ここに保存

|--usr
    |--local
        |--bin
            |--apache-ant-1.9.14
                |--lib
                    |--ant-salesforce.jar ←ここに保存

写真でも見せておく。
apache-ant.1.9.14(ダウンロードするバージョンによってフォルダ名は異なる)以下のlibフォルダ
f:id:yujiro0320:20200213131516p:plain
これで準備は完了である。

手順5(リトリーブの方法)

sampleフォルダを使用してsalesforceの環境からデータを引っ張っていく。
図を参考にしてbilud.propertiesの記述を変更する。どの組織に繋ぐのかを記載。ログインURLに注意。サンドボックスならtestとなる。
f:id:yujiro0320:20200213132756p:plain

手順6(リトリーブの方法)

環境から資源をダウンロードするのはフォルダはretrieveUnpackagedがデフォルトでなっている。
手順はコード化されておりSAMPLEフォルダ直下にあるbuild.xmlに記載がある。
下記コードはSFDC環境から資源をダウンロードするretrieveUnpackagedの記述。詳しく見てみる

  <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>

unpackaged="unpackaged/package.xml"と記載ある。
記載の通りunpackagedフォルダのpackage.xmlを覗いてみる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <version>47.0</version>
</Package>

ここで記述されているのは2点。ApexClassとApexTriggerの全てを対象とする
何の資源をダウンロードしたいのかを明確にするのはこの場所である。
例えばライトニングコンポーメントの資源を全てダウンロードしたいとなれば以下の記述になる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>*</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>*</members>
        <name>ApexTrigger</name>
    </types>
    <types>
		<members>*</members>
		<name>AuraDefinitionBundle</name>
	</types>
    <version>47.0</version>
</Package>

少し話は戻り、build.xmlをもう一度見てみる。

retrieveTarget="retrieveUnpackaged"

と記載がある。ここにデータを吐き出すよって意味の記載。追加したライトニングコンポーメントはこのディレクトリ以下に溜まっていく。
実際に実行してみる。ターミナルからディレクトリをSAMPLEフォルダまで移動

cd desktop
cd sample

コマンドを以下入力

ant retrieveUnpackaged

これでretrieveUnpackagedフォルダに指定した資源をダウンロードできるようになる。

f:id:yujiro0320:20200213141705p:plain
auraってフォルダが増えてその中に資源が入っている
続いてデプロイについて記述していく。

手順7(デプロイ の方法)

資源をデプロイする方法について記述してみる。
build.xmlファイルをみる。
デプロイにかかる記述はdeployCodeに記載がある。
そのコードを詳しく見てみる。

<target name="deployCode">
      <!-- Upload the contents of the "codepkg" directory, running the tests for just 1 class -->
      <sf:deploy username="${sf.username}" password="${sf.password}" sessionId="${sf.sessionId}" serverurl="${sf.serverurl}" maxPoll="${sf.maxPoll}" deployRoot="codepkg" testLevel="RunSpecifiedTests" rollbackOnError="true">
         <runTest>SampleDeployClass</runTest> 
      </sf:deploy>
    </target>

記載が長いので以下に大事な部分を抜粋。

  <runTest>SampleDeployClass</runTest> は実行するテスト(資源)を指定している

本番環境ではテスト実行は必須だが、開発環境をまたぐ時にわざわざ実行するのも面倒なので

<target name="deployCode">
      testLevel="NotestRun" >
    </target>

に設定すればテストクラスをデプロイ する必要はない。
deployRoot="codepkg" となっているため、codepkgフォルダを覗きにいく
こんなディレクトリ構造になっている。

|--codepkg
    |--classes
    |--triggers
    |--package.xml

先ほどの資源ダウンロード同じように、上記ディレクトリにデプロイしたい資源を入れて送る。
送る内容はpackage.xmlにて記載する。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>SampleDeployClass</members>
        <members>SampleFailingTestClass</members>
        <name>ApexClass</name>
    </types>
    <types>
        <members>SampleAccountTrigger</members>
        <name>ApexTrigger</name>
    </types>
    <version>47.0</version>
</Package>

ここからライトニングコンポーネントを送るように指定するにはこのような書き方になる。

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">

    <types>
        <members>test_kawa</members>
        <name>AuraDefinitionBundle</name>
    </types>
    <version>47.0</version>
</Package>

test_kawaというコンポーネントを追加した。
f:id:yujiro0320:20200217140028p:plain
この場合はコンポーネント単位(フォルダ)
コンポーネントの中身のjsファイル、cssファイルのみなども遅れるとおもうがまだ調べられていない。

|--codepkg
    |--aura
    |--classes
    |--triggers
    |--package.xml

auraに送りたい資源をいれる。
送りたい資源のみをフォルダにいれる。今回はclasses,tirggersは送らないので空にする。
あとは、コマンドを実行する。

ant deployCode