皆さんは普段どのようにSalesforce組織へのリリースを行っていますか? 私はこれまで変更セットまたは Antを使ってSandboxや本番組織へのリリースを行ってきました。変更セットはSalesforceの管理画面からGUIを使って対象リソースを選択してリリースできるため手軽さがある一方、Antによるリリースと比べるとリリースする要素を細かく制御できない制約があります。AntによるリリースはメタデータXMLの準備が面倒であり、また最近ではあまり使わなくなったAntの実行環境が必要になります。
そこで今回紹介したいのが、WInter'18から提供されている Salesforce CLI を使った3つ目のリリース方式です。Salesforce CLIはメタデータAPI(mdapi)を包含しているため、コマンドを使ってAnt方式と同様にメタデータXMLを使ったSalesforce組織間のリリース作業を行うことができます。
package.xmlの準備
Salesforce CLIを使ってリリースを行うには、Antによるリリースと同様にリリース対象のリソースを記述した package.xml が必要になります。package.xml はエディタを使って手作業で作成することもできますが、最初に変更セットを作成しその内容をエクスポートすることで、より簡単に作成することが可能です。
1. 送信変更セットの作成
新規に「送信変更セット」を作成し、リリース対象のリソースとプロファイルを追加します。
2. package.xmlの取得
下記のコマンドで、対象組織から変更セットの内容をエクスポートします。コマンドの実行前にこちらの”ログイン”セクションを参照して認証を事前に行っておいてください。
コマンドの実行が完了すると、指定したフォルダにzipファイル(unpackaged.zip)が保存されていますので、解凍します。解凍したのが下記のReleaseSampleフォルダで、package.xmlとそこに指定されたメタデータXMLが含まれます。
package.xmlを取り出して別途保管しておきます。
リリース元組織からのリソースの取得
package.xml は前述したように変更セットから取得できますが、リソースの追加・削除毎に”変更セットを更新” → ”package.xml の取得”という手順は少し面倒なので、一度取得した後は package.xml を直接メンテナンスしておく方法をお薦めします。 package.xml自体をgit等でバージョン管理しておけば、リリースの変更管理も容易になります。
1. 作業フォルダの作成
ローカルに作業フォルダを作成します。ここでは dev-0311 とします。このフォルダにpackage.xmlをコピーします。
2. retrieveコマンドの実行
package.xml と 作業フォルダを指定して、retrieveコマンドを実行します。
コマンドの実行が完了すると、指定したフォルダにzipファイル(unpackaged.zip)が保存されていますので、解凍して下さい。
sandboxのプレビュー期間などの理由でリリース元とリリース先のAPIバージョンが異なる場合は、下記のコマンドで強制的にAPIバージョンを変更することが可能です。package.xmlの指定よりも優先されます。
sfdx force:config:set --global apiVersion=44.0
リリース先組織(sandbox)へのリリース
取得したリソースをリリース先にデプロイします。リリースデータはテキスト形式なので、変更内容をバージョン管理しておきリリース前にdiffによる差分を確認するようにすると、変更内容のみを確実にリリースできると思います。
- <value>
- <fullName>HelloWorld</fullName>
- <default>false</default>
- <label>HelloWorld</label>
- </value>
<value>
- <fullName>AppirioWay</fullName>
+ <fullName>AppirioWay2</fullName>
<default>false</default>
- <label>AppirioWay</label>
+ <label>AppirioWay2</label>
</value>
[diffによる変更内容の確認の例]
メタデータリソースとpackage.xmlを指定してdeployコマンドを実行します。下記のコマンドはデプロイのみ実施しテストを実行しません。
デプロイに失敗すると下記のようなエラーがコンソールに表示されますので、全てのエラーが解消されるまで修正とデプロイを繰り返してください。
=== Status
Status: InProgress
jobid: 0AfN000000mDyvwKAC
Component errors: 0
Components deployed: 1567
Components total: 1585
Tests errors: 0
Tests completed: 0
Tests total: 0
Check only: false
=== Component Failures [1]
TYPE FILE NAME PROBLEM
───── ─────────────────────────── ─────────────── ──────────────────
Error base/objects/Account.object Account.MyId__c Not in package.xml
[デプロイ失敗の例]
本番組織へのリリース
本番組織にデプロイする場合は、テスト実行オプションを付けてリリースを行います。
おわりに
いかがでしたでしょうか。Salesforce CLIを使うことで、従来Antでしか行えなかったpackage.xml ベースのリリース作業をコマンドベースで実施できるようになります。今回ご紹介したコマンドは、CLI mdapiコマンドが提供している機能の一部になりますので、詳しくは公式のコマンドリファレンスを参照してみてください。
SalesforceはDX開発と合わせてCLIによるコマンドライン・インターフェースを精力的に拡張しているように見えますので、今後CLIをつかって実現できることはどんどん拡がっていくと思います。期待しましょう!!
著者について
Naoki Kitaarashi のコンテンツをもっと見る