はじめに
これからはUnlocked Package(ロック解除済みパッケージ)を使いましょうという話だとは思うのですが、お客様組織でDevHubを有効にしてもらうなどハードルも高く、まだまだ変更セットを使っている方がほとんどだと思います。
しかし、変更セットの作成はなかなかの苦行です。GUIでぽちぽちとコンポーネントを追加する必要があります。追加し忘れて、変更セットのリリースがエラーになった経験のある方もきっと多いでしょう。
この記事ではSFDXプロジェクト形式で管理しているソースコードから変更セットを自動作成する方法を説明します。
※追記2020/06/05 22:12
Salesforce CLIにメタデータAPIのdeployあるのを忘れていて、最初jsforceでデプロイしてたのですが、思い出したので、4-1.を書き換えました。
概要
実は自動作成は嘘で、正確には半自動作成です。
変更セットはメタデータAPIのdeployで更新することができるのですが、変更セットの作成自体を行なうAPIはありません。変更セットの作成だけ手動で行なう必要があります。
基本的な流れとしては、sfdx force:source:convert
でメタデータAPI形式のファイルにして、上記のdeploy
メソッドで変更セットにコンポーネントを追加するという方法で半自動化することができます。
手順
1. 空の送信変更セットを作成する
Sandbox組織で適当な名前をつけて空の送信変更セットを作成します。
2. メタデータAPI形式に変換する
sourcepath
に変更セットに入れたいコンポーネントが入っているディレクトリを指定し、packagename
に先ほど作った変更セット名を指定します。
sfdx force:source:convert \
--sourcepath <変更セットに入れたいコンポーネントが入っているディレクトリ> \
--packagename <変更セット名> \
--outputdir mdapioutput
イメージとしては以下のようなディレクトリ構成を想定しています。そして、package1/main/module1
とかpackage2
とかをsourcepath
に指定します。
.
├── package1
│ └── main
│ ├── module1
│ ├── module2
│ └── module3
├── package2
│ └── main
│ ├── module1
│ ├── module2
│ └── module3
└── sfdx-project.json
mdapioutput/package.xml
は以下のようになり、パッケージ名として変更セット名が入っているのがポイントです。
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<name>AuraDefinitionBundle</name>
<members>XXX</members>
</types>
<types>
<name>ApexClass</name>
<members>XXX</members>
</types>
<version>48.0</version>
<fullName>変更セット名</fullName>
</Package>
mdapioutput
フォルダに変換したファイルを出力するので、.gitignore
に追加しておくとよいです。
3. zipファイルを作成する
メタデータAPI形式のファイルをフォルダごとzipファイルにします。
zip -r ./dist/changeset.zip mdapioutput/
dist
も.gitignore
に追加しておくとよいでしょう。
4. 変更セットにコンポーネントを追加する
CLIかWorkbenchの2つの方法があります。
4-1. CLIで実行
Sandbox組織にログインします。
sfdx force:auth:web:login -a my-sandbox -r https://test.salesforce.com
force:mdapi:deploy
コマンドでデプロイします。
sfdx force:mdapi:deploy --zipfile dist/changeset.zip -w 15
4-2. Workbenchで実行
メタデータAPIのdeployを実行できればいいので、Workbenchでも実行できます。
[migration] > [Deploy]から以下のようにzipファイルを選択し、Nextボタンを押し、指示通りにすすめるとデプロイできます。
5. 送信変更セットに追加されたことを確認
ちゃんと送信変更セットにコンポーネントが追加されています。
終わりに
本番組織に直接デプロイするのと何が違うんだって言われるとそんなに違わないのですが、強いて言えば変更セットを介することで本番組織へのリリース作業をエンジニアでなくてもできるというところはメリットでしょう。あとなんかちょっと安心感がある。
Unlocked Packageが普及するまでのつなぎにはなるのではないかと思います。