はじめに
皆さんはSalesforceの環境間でのリリースでこんな経験はありませんか?
-
レイアウトにボタンを追加したのでリリース資材にページレイアウトを含めていたら、リリース先組織で項目の並び順が変更されていたのを上書きしてしまった。
-
項目レベルセキュリティの設定をリリースしたいけれど、リリース先組織とはログイン IP アドレスの制限等が異なるのでプロファイルをリリース資材に含められない。
今回は、そんな悩み事を解消したリリース手法をご紹介します。
前提条件
-
sfコマンドがインストールされていること
※sfdxコマンドを利用中の方へ
sfdxコマンドはサポートが終了されています。
下記の記事に従って、sfコマンドに移行しましょう。
sfdx (v7) から sf (v2) への移行 -
Salesforce CLIでリリース元組織とリリース先組織が認証済みであること
※VSCodeで認証してあっても大丈夫です。
package.xmlの作成
package.xmlとは、Salesforce組織からメタデータを取得・デプロイするために利用されるXML形式のファイルです。
参考: package.xml マニフェストファイルのサンプル
リリース資材に含めたいメタデータをリストアップして、任意の手法で作成してください。
手打ちしても構いませんし、「Salesforce Package.xml Generator Extension for VS Code」等のツールを使用しても構いません。
メタデータの取得
作成したpackage.xmlを利用して、sfコマンドでメタデータを取得します。
以下のコマンドを、オプションを変えて2回実行し、リリース元組織とリリース先組織からそれぞれ取得します。
メタデータの取得コマンド:
sf project retrieve start --manifest path/to/package.xml --target-metadata-dir output --unzip --target-org org_alias
コマンドのオプションについては以下の通りです。
-
--manifest [ファイルパス]
package.xmlファイルのパスを指定します。 -
--target-metadata-dir [出力先のフォルダ名]
取得したメタデータを保存するフォルダ名を指定します。
わかりやすい名前を指定しましょう。 -
--unzip
メタデータ取得時に自動的に解凍するフラグです。
これを付けないとzipファイルで取得されます。 -
--target-org [組織のエイリアス]
メタデータ取得元の組織を指定します。
メタデータの比較
取得したメタデータを、「WinMerge」や「Compare Folders」といったツールで比較します。
リリース元組織とリリース先組織の間で、想定していない差分がないか確認しましょう。
想定していない差分がある場合、リリース元組織を編集して再度メタデータを取得するか、メタデータを直接編集します。
メタデータの編集
リリース元組織のメタデータを、リリース用の別のフォルダにコピーし、コピーしたファイルを必要に応じて編集します。
取得時、フォルダ構成がoutput(指定したフォルダ名)/unpackaged/unpackaged/
となっているので、最後のunpackagedフォルダをコピーして別の場所に貼り付け、フォルダ名を変更してください。
特にプロファイルについて、ログイン IP アドレスの制限をリリースしたくない場合はloginIpRangesタグの部分、システム管理者権限・一般ユーザ権限をリリースしたくない場合はuserPermissionsタグの部分といったように、不要な箇所を削除します。
メタデータのリリース
リリース用のフォルダのメタデータを、sfコマンドを用いてリリースします。
メタデータの検証
メタデータの検証コマンド:
sf project deploy start --dry-run --metadata-dir release_metadata --test-level RunSpecifiedTests --tests test1 test2 --target-org org_alias
コマンドのオプションについては以下の通りです。
-
--dry-run
検証モードでデプロイを行うフラグです。
これを付けると、変更セットの検証ボタンと同様に、リリース先組織のメタデータを変更せずに検証が行えます。 -
--metadata-dir [リリース用のフォルダ名]
リリース対象のメタデータのフォルダを指定します。 -
--test-level [NoTestRun|RunSpecifiedTests|RunLocalTests|RunAllTestsInOrg]
テストレベルを指定します。
基本的には、指定したテストを実行する「RunSpecifiedTests」を指定すればよいと思います。 -
--tests [テストクラス名1] [テストクラス名2]
実行するテストクラスを指定します。
テストクラスが複数ある場合は、半角スペースで区切って記述します。
もしテストクラス名に半角スペースが含まれる場合は、「"」(ダブルクォーテーション)で囲みます。 -
--target-org [組織のエイリアス]
リリース先の組織のエイリアスを指定します。
検証結果は、リリース先組織の設定画面のリリース状況から確認できます。
メタデータのリリース
検証が成功したら、リリースを実行します。
クイックリリースが可能な場合は、リリース先組織の設定画面のリリース状況からクイックリリースを行いましょう。
Apexクラスが含まれない等でクイックリリースができない場合、前述の検証コマンドから--dry-run
を削除して実行しましょう。
よって、リリースコマンドは以下のようになります。
メタデータのリリースコマンド:
sf project deploy start --metadata-dir release_metadata --test-level RunSpecifiedTests --tests test1 test2 --target-org org_alias
リリース後にリリース先組織からメタデータを取得し、元のリリース先組織のメタデータやリリース元組織のメタデータと比較すると、過不足なくリリースできているか確認できるので、なおよいですね。
おわりに
今回は、Salesforceのメタデータの比較を含んだリリース手法を紹介させていただきました。
皆さんも、本記事の手法でメタデータを比較して、安全にリリースを行ってみませんか。
Flosumの機能については、Flosumのwebサイトをご覧ください。
https://www.terrasky.co.jp/flosum/