Salesforce CLIによるリリース作業

March 20, 2019 Naoki Kitaarashi

皆さんは普段どのように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の取得

下記のコマンドで、対象組織から変更セットの内容をエクスポートします。コマンドの実行前にこちらの”ログイン”セクションを参照して認証を事前に行っておいてください。

sfdx force:mdapi:retrieve  -r ./dev-blogsample -u sand1 -p ReleaseSample
 -r 取得したzipファイルを保管するフォルダ
 -u エイリアス
 -p 変更セットの名前

コマンドの実行が完了すると、指定したフォルダに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コマンドを実行します。

sfdx force:mdapi:retrieve  -r ./dev-0311 -u sand1  -k ./dev-0311/package.xml
 -r 取得したzipファイルを保管するフォルダ
 -u エイリアス
 -k package.xmlを指定

コマンドの実行が完了すると、指定したフォルダに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コマンドを実行します。下記のコマンドはデプロイのみ実施しテストを実行しません。

sfdx force:mdapi:deploy -d ./dev-0311/unpackaged -u sand2 -w -1
 -d リリース対象のリソースを配置したフォルダ(このフォルダ内にpackage.xmlは配置すること)
 -u エイリアス
 -w -1  コマンド実行までの待ち時間 -1 (no limit)
 -c (オプション) このオプションを指定した場合は検証のみで、デプロイは行わない

デプロイに失敗すると下記のようなエラーがコンソールに表示されますので、全てのエラーが解消されるまで修正とデプロイを繰り返してください。

=== 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

 

[デプロイ失敗の例]

本番組織へのリリース

本番組織にデプロイする場合は、テスト実行オプションを付けてリリースを行います。

//特定のテストクラスのみを実行する
sfdx force:mdapi:deploy -d ./dev-0311/unpackaged -u sand2 -w -1 -l RunSpecifiedTests -r TestClassA,TestClassB,...
 -d リリース対象のリソースを配置したフォルダ(このフォルダ内にpackage.xmlは配置すること)
 -u エイリアス
 -w -1  コマンド実行までの待ち時間 -1 (no limit)
 -l テストレベルを指定  RunSpecifiedTests を指定した場合は -r の後に実行するテストクラスをカンマ区切りで指定
 
//全てテストクラスを実行する (managed packageに含まれるテストは除く)
sfdx force:mdapi:deploy -d ./dev-0311/unpackaged -u sand2 -w -1 -l RunLocalTests
 

 

おわりに

いかがでしたでしょうか。Salesforce CLIを使うことで、従来Antでしか行えなかったpackage.xml ベースのリリース作業をコマンドベースで実施できるようになります。今回ご紹介したコマンドは、CLI mdapiコマンドが提供している機能の一部になりますので、詳しくは公式のコマンドリファレンスを参照してみてください。
SalesforceはDX開発と合わせてCLIによるコマンドライン・インターフェースを精力的に拡張しているように見えますので、今後CLIをつかって実現できることはどんどん拡がっていくと思います。期待しましょう!!



 

著者について

Naoki Kitaarashi

アピリオのシニアコンサルとしてクラウドの世界に身を投じてはや5年あまり。プロジェクトでの立場に応じて、アーキテクト、リーダー、デベロッパーと様々なロールの仕事に携わっています。続々と新しいサービスと技術が登場するSalesforceの世界はエンジニアとして常に刺激を持ち続けられるエリアであり、2019年からはMuleSoftソリューションの起ち上げに関わっています。しばらくはAPI-ledなシステム連携を広めることに全力投球!!

Naoki Kitaarashi のコンテンツをもっと見る
戻る
Lightning Web Components入門(5)応用編
Lightning Web Components入門(5)応用編

第5回目の今回は応用編ということで、本格的なLWCの実装時に必要となるテクニックをいくつか紹介します。 コードの共有化 イベントの利用 外部ライブラリの読込み ページ遷移 トーストメッセージの表示 レコードIDの取...

次へ
Salesforce DXの活用
Salesforce DXの活用

Salesforce DX の活用 - Salesforce DXの概念と基本的な使い方を紹介します。

アピリオまでお気軽にお問合せください

ご質問はこちら