メタデータを使った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 | テラスカイを支える人とテクノロジーの情報を発信する基地局