17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SFDXプロジェクトから変更セットを自動作成する

Last updated at Posted at 2020-06-05

はじめに

これからは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組織で適当な名前をつけて空の送信変更セットを作成します。

image.png

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ボタンを押し、指示通りにすすめるとデプロイできます。

image.png

5. 送信変更セットに追加されたことを確認

ちゃんと送信変更セットにコンポーネントが追加されています。

image.png

終わりに

本番組織に直接デプロイするのと何が違うんだって言われるとそんなに違わないのですが、強いて言えば変更セットを介することで本番組織へのリリース作業をエンジニアでなくてもできるというところはメリットでしょう。あとなんかちょっと安心感がある。
Unlocked Packageが普及するまでのつなぎにはなるのではないかと思います。

17
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?