ぼちぼちクラウド

クラウド系SEのぼちぼち技術ブログ

メタデータを使ったSalesforceのリリース

Salesforceのリリースを行う際、変更セットでは資産の変更点がわからず、思わぬ変更が反映されたり、リリース漏れが発生したりすることがあります。

そこでVSCodeを使ったメタデータによる検証を実施してみます。

手順

デベロッパ環境①②を用意

・①で資産の追加などを行い、メタデータで①と②の差分を確認する

・変更を①から②に反映する

・①②の差分がなくなったことを確認する


デベロッパ環境MYDev2(①)とMYDevCopy(②)を下記から取得しました。

Developer Edition Signup | Salesforce Developers

Dev2での準備作業

まずは下記をDev2で実施

・プロファイル作成

・アプリケーション作成

・Apex作成

・取引先リストビュー作成

次に、Dev2からメタデータを取得します。

コマンド

sf project retrieve start --manifest C:\Users\user\OneDrive\デスクトップ\workspace\mydev2\manifest\package.xml --target-metadata-dir outputdev2 --unzip --target-org mydev2

※注意:末尾は組織のエイリアス。大文字小文字を区別する

※ちなみにpackage.xmlは「Salesforce Package.xml Generator Extension for VS Code」という拡張機能をインストールし、 「SFDX Package.xml Generator: Choose Metadata Components」というコマンドで編集しています

→force-app等と同じ階層にoutputdev2フォルダができた!

DevCopyでの作業

まずdev2との差分を確認するため、package.xmlをmydev2からコピー上書き

Copy環境のメタデータ(リリース前)を取得

sf project retrieve start --manifest C:\Users\user\OneDrive\デスクトップ\workspace\mydevcopy\manifest\package.xml --target-metadata-dir outputcopyBefore --unzip --target-org mydevcopy

WinMergeでdev2と比較していく

→たしかに追加したリソースの分だけ差分が出ている!

DevCopyへの差分反映

検証→リリースの2段階に分けて行う

<準備1>

リリース用の別フォルダを用意。(dev2のworkspaceの配下)

dev2のメタデータの「unpackaged」フォルダをリリース用フォルダにコピーする

※取得時に階層がunpackaged/unpackagedとなっているので、最後のunpackagedをコピーし、名称を変更する

<準備2>

リリース用フォルダのpackage.xmlの編集。リリース対象のみ記載する(対象外のリソースは除外)

<検証>dev2のTERMINALから下記コマンドを実行

sf project deploy start --dry-run --metadata-dir リリース用\20240129_dev2からリリース --test-level RunLocalTests --target-org mydevcopy

※Apexをリリースする場合(指定テストクラスを実行する場合)は--testsの後ろにクラス名を記述(スペースで区切る) sf project deploy start --dry-run --metadata-dir リリース用\20240129_dev2からリリース --test-level RunSpecifiedTests --tests test1 --target-org mydevcopy

検証結果はリリース先(②)で確認する。

残念ながら初回はエラー発生。

In field: utilityBar - no FlexiPage named UtilityBar found

FlexiPageもDev2のpackage.xmlに追加し、再度メタデータを取得し、リリース対象に追加することにします。

package.xmlにはリリース対象のみ記載しておきます。

<2回目の検証> 標準のリストビューがpackageにないと怒られてしまったので、書き足してみます。

<3回目の検証> 成功です!ターミナルにDry-run complete.と表示されます。

<リリース> Apexをリリースした場合はブラウザからクイックリリースできます。

今回はApexは対象外としたため、コマンドでリリースします。

※検証コマンドから「--dry-run 」を除外する

sf project deploy start --metadata-dir リリース用\20240129_dev2からリリース --test-level RunLocalTests --target-org mydevcopy

リリースが完了したら、リリース先環境のメタデータを取得し、リリース元と改めて比較してみます。

sf project retrieve start --manifest C:\Users\user\OneDrive\デスクトップ\workspace\mydevcopy\manifest\package.xml --target-metadata-dir outputcopyAfter --unzip --target-org mydevcopy

差分がなければ無事リリース完了となります。

参考:テラスカイ社のブログ メタデータの比較とリリース - TerraSkyBase | テラスカイを支える人とテクノロジーの情報を発信する基地局