[開発チュートリアル:第三部]パッケージ化してみる〜Salesforce フロー画面コンポーネントを含んだパッケージを作成しよう〜
はじめに
こんにちは、co-meetingにてエンジニアしているハナミズキです。この記事は、「Salesforce フロー画面コンポーネントを含んだパッケージを作成しよう」の第三部です。
[開発チュートリアル:第一部]コンポーネントを作ってみる〜Salesforce フロー画面コンポーネントを含んだパッケージを作成しよう〜
[開発チュートリアル:第二部]入力エリアをカスタマイズしてみる〜Salesforce フロー画面コンポーネントを含んだパッケージを作成しよう〜
[開発チュートリアル:第三部]パッケージ化してみる〜Salesforce フロー画面コンポーネントを含んだパッケージを作成しよう〜
関連するパッケージの紹介:
ここで学習できること
Salesforce CLIを利用したSalesforceパッケージの作り方、リリースの仕方
ロック解除済みパッケージ化しよう
ロック解除済みパッケージ化の基本的な流れは公式ページの<ロック解除済みパッケージのワークフロー>を一度読むことをお勧めします。
チュートリアル第一部、第二部を通して作成したコンポーネントをパッケージ化して、Salesforce組織へインストールできる形に変換しましょう。
ロック解除済みパッケージの作成
VSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行してロック解除済みパッケージを作成します。
sfdx force:package:create --name "Flow Component OuputField Sample" --path force-app --packagetype Unlocked
実行すると以下のようなログが出力されます。
sfdx-project.json has been updated.
Successfully created a package. 0Ho5h0000004CB4CAM
=== Ids
NAME VALUE
────────── ──────────────────
Package Id 0Ho5h0000004CB4CAM
ここで表示されるPackage Idは、のちほどパッケージを削除するときに利用するためメモしておくと便利です。
作成したロック解除済みパッケージリストの確認
VSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行することで作成したパッケージバージョンをリストアップできます。
sfdx force:package:list
実行すると以下のようなログが出力されます。
=== Packages [1]
Namespace Prefix Name Id Alias Description Type
──────────────── ──────────────────────────────── ────────────────── ──────────────────────────────── ─────────── ────────
Flow Component OuputField Sample 0Ho5h0000004CB4CAM Flow Component OuputField Sample Unlocked
ロック解除済みパッケージバージョンの作成
VSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行してロック解除済みパッケージのパッケージバージョンを作成します。
sfdx force:package:version:create --package "Flow Component OuputField Sample" --codecoverage --installationkeybypass --wait 10
実行して成功すると以下のようなログが出力されます。なお、UnofficialSFのパッケージを活用してカスタムプロパティエディタを改修している場合は、この時にエラーが発生します。対策として後述の「UnofficialSFのパッケージをインストールしている場合の作成方法 」を参照してください。
Request in progress. Sleeping 30 seconds. Will wait a total of 600 more seconds before timing out. Current Status='Initializing'
Request in progress. Sleeping 30 seconds. Will wait a total of 570 more seconds before timing out. Current Status='Initializing'
Request in progress. Sleeping 30 seconds. Will wait a total of 540 more seconds before timing out. Current Status='Verifying metadata'
Request in progress. Sleeping 30 seconds. Will wait a total of 510 more seconds before timing out. Current Status='Finalizing package version'
sfdx-project.json has been updated.
Successfully created the package version [08c5h0000004CEwAAM]. Subscriber Package Version Id: 04t5h000000lSVkAAM
Package Installation URL: https://login.salesforce.com/packaging/installPackage.apexp?p0=04t5h000000lSVkAAM
As an alternative, you can use the "sfdx force:package:install" command.
この時に表示されるSubscriber Package Version Idがパッケージをインストールする際に利用する情報なのでメモが必要です。またこちらで表示されているPackage Installation URLを利用すると実際に別の組織にパッケージをインストールできるようになります。
UnofficialSFのパッケージをインストールしている場合の作成方法
UnofficialSFのパッケージをインストールしてカスタムプロパティエディタを使いやすくしている場合は、sfdx-project.jsonを開き、以下のdependenciesプロパティを追記してください。
dependenciesプロパティは他のパッケージへの連動関係を追加するために存在しております。こちらを追加していなければエラー「ERROR running force:package:version:create: cmOutputFieldEditor: No MODULE named markup://c:fsc_pickObjectAndField3 found : [markup://c:cmOutputFieldEditor]」が発生してパッケージバージョンを作成できません。
"packageDirectories": [
{
"path": "force-app",
"default": true,
"package": "Flow Component OuputField Sample",
"versionName": "ver 0.1",
"versionNumber": "0.1.0.NEXT",
"dependencies": [
{
"package": "04t8b000001Eh4YAAS"
},
{
"package": "04t5G000003rUvVQAU"
}
]
}
],
04t8b000001Eh4YAAS:FlowActionsBasePack@3.0.0のパッケージバージョンIDです
04t5G000003rUvVQAU:FlowScreenComponentsBasePack@3.0.6のパッケージバージョンIDです
パッケージ連動関係を指定することで事前に組織に対して、FlowActionsBasePack Version 3.0.0やFlowScreenComponentsBasePack Version 3.0.6をインストールせず当パッケージのみをインストールしようとすると以下のようなエラーが発生するようになります。
作成したロック解除済みパッケージバージョンリストの確認
VSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行することで作成したパッケージバージョンをリストアップできます。
sfdx force:package:version:list --packages "Flow Component OuputField Sample"
実行すると以下のようなログが出力されます。
=== Package Versions [2]
Package Name Namespace Version Name Version Subscriber Package Version Id Alias Installation Key Released Validation Skipped Ancestor Ancestor Version Branch
────────────── ───────── ──────────── ─────── ───────────────────────────── ────────────────────── ──────────────── ──────── ────────────────── ──────── ──────────────── ──────
CM OutputField ver 0.1 0.1.0.1 04t5h000000lSVkAAM CM OutputField@0.1.0-1 false false false N/A N/A
CM OutputField ver 0.1 0.1.0.2 04t5h000000lSWTAA2 CM OutputField@0.1.0-2 false false false N/A N/A
ロック解除済みパッケージのインストール
パッケージインストール検証用スクラッチ組織の作成
検証用にパッケージをインストールするスクラッチ組織を作成します。
sfdx force:org:create --definitionfile config/project-scratch-def.json -a output_field_package_install_SCRATCH
パッケージインストール検証用スクラッチ組織にUnofficialSFのパッケージをインストール
UnofficialSFのパッケージを活用してカスタムプロパティエディタを改修している場合は、先ほど作成したロック解除ずみパッケージをインストールする前にFlowActionsBasePackとFlowScreenComponentsBasePackパッケージをインストールする必要があります。以下のコマンドを使ってインストールしてください。
FlowActionsBasePack
sfdx force:package:install --package 04t8b000001Eh4YAAS -u output_field_package_install_SCRATCH --wait 10 --publishwait 10
FlowScreenComponentsBasePack
sfdx force:package:install --package 04t5G000003rUvVQAU -u output_field_package_install_SCRATCH --wait 10 --publishwait 10
ロック解除済みパッケージのインストール
以下のコマンドの<SubscriberPackageVersionId>を置換して実行し、指定のスクラッチ組織にパッケージをインストールします。
sfdx force:package:install --package <SubscriberPackageVersionId> -u <スクラッチ組織のエイリアス名> --wait 10 --publishwait 10
// 例)sfdx force:package:install --package 04t5h000000lSVkAAM -u output_field_package_install_SCRATCH --wait 10 --publishwait 10
<補足>
以下URLの<SubscriberPackageVersionId>を置換してブラウザのアドレスバーにURLを貼り付けることでも、パッケージをインストールできます。
■本番組織にインストールしたい場合
https://login.salesforce.com/packaging/installPackage.apexp?p0=<SubscriberPackageVersionId>
■Sandboxやスクラッチ組織にインストールしたい場合
https://test.salesforce.com/packaging/installPackage.apexp?p0=<SubscriberPackageVersionId>
上記のURLを利用することで、任意のSalseforce組織にインストールできるようになります。
パッケージのインストール確認
パッケージをインストールした検証用のスクラッチ組織を開きます。
sfdx force:org:open -u output_field_package_install_SCRATCH
[設定] から、[クイック検索] ボックスに「パッケージ」と入力し、[インストール済みパッケージ]を選択します。
以下のように表示されていたらパッケージのインストール成功です。
また、[設定] から、[クイック検索] ボックスに「フロー」と入力し、[フロー]を選択します。
[新規フロー]ボタンを押して、[画面フロー]を選択し、[作成]ボタンをクリックします。[画面]を追加して開いた時に、以下のように左側のリストを一番下までスクロールすると、”カスタム”セクションに今回作成した画面フロー用のコンポーネントCM OutputFieldが存在していることまで確認しましょう。
このように組織の機能拡張できるパッケージを増やしていくことが可能です。
ロック解除済みパッケージのリリース
リリースする準備が整ったら、force:package:version:promoteを使用します。詳細は公式サイト<ロック解除済みパッケージのリリース>を参照してください。
sfdx force:package:version:promote --package <SubscriberPackageVersionId>
// 例) sfdx force:package:version:promote --package 04t5h000000lSWTAA2
実行すると以下のようなログが出力されます。本当にリリースを行うか質問がされるためyを入力してEnterキーを押しましょう。
Are you sure you want to release package version 04t5h000000lSWTAA2? You can't undo this action. Release package (y/n)?: y
Successfully promoted the package version, ID: 04t5h000000lSWTAA2, to released. Starting in Winter '21, only unlocked package versions that have met the minimum 75% code coverage requirement can be promoted. Code coverage minimums aren't enforced on org-dependent unlocked packages.
[コラム]ロック解除済みパッケージのバージョンアップとアップグレードについて
ロック解除済みパッケージをアップグレードする際は、sfdx-project.jsonを開き、versionName、versionNumberを更新して、パッケージバージョンを作成するだけで簡単に対応できます。
例えば以下のようにver 0.1からver0.2に変更してsfdx force:package:version:createを実行すると、新たにver 0.2用のパッケージバージョンが生成されます。
{
"packageDirectories": [
{
"path": "sfdx-src",
"default": true,
"package": "Flow Component OuputField Sample",
"versionName": "ver 0.2",
"versionNumber": "0.2.0.NEXT"
,...省略
インストールについても、パッケージバージョン生成時に発行されるSubscriber Package Version Idを利用して、先ほどの例に従ってコマンドsfdx force:package:installを発行するだけで対象組織のパッケージをアップグレードできます。
今回作成したパッケージは、他のSalesforce組織にもインストール可能であり、外部組織にインストールされたパッケージをアップグレードする際は【転送アップグレード】を行う必要があります。
転送アップグレードのやり方は公式ガイド「パッケージアップグレードの転送」に記載されている通り第二世代管理パッケージと同じやり方です。
少し特殊であり、弊社サイトでも噛み砕いて記載しているので、是非参考にしてみてください。
ロック解除済みパッケージバージョンの削除
パッケージバージョンの削除はVSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行することで対応できます。ロック解除済みパッケージは、リリース済みであろうと削除することができます。詳細は公式サイト<パッケージまたはパッケージバージョンの削除>以下を参照してください。
sfdx force:package:version:delete --package <SubscriberPackageVersionId>
// 例) sfdx force:package:version:delete --package 04t5h000000lSWTAA2
<SubscriberPackageVersionId>がわからない場合は、「sfdx force:package:version:list --packages "Flow Component OuputField Sample"」コマンドを実行して04で始まるIDを確認してください。
ロック解除済みパッケージの削除
パッケージの削除はVSCodeのターミナルを開き(Ctrl+J/Cmd+J)以下のコマンドを実行することで対応できます。関連するすべてのパッケージバージョンが削除されていなければパッケージは削除できないため注意してください。詳細は公式サイト<パッケージまたはパッケージバージョンの削除>以下を参照してください。
sfdx force:package:delete --package <PackageId>
// 例) sfdx force:package:delete --package 0Ho5h0000004CB4CAM
<PackageId>がわからない場合は、「sfdx force:package:list」コマンドを実行して0Hで始まるIDを確認してください。
おわりに
チュートリアルをやってみて、いかがでしたでしょうか。VSCodeを利用して開発したことがある人には開発内容が少し物足りなかったかもしれません。しかし、画面フローに新たにコンポーネントを追加したことがない人、カスタムプロパティエディタを作ったことない人、またパッケージ化をしたことない人には少しは参考になったのではないでしょうか。
なお、ロック解除済みパッケージが生まれた歴史を振り返った時、少し思ったことがあります。
まず、Salesforceでは本番組織をカスタマイズするにあたって、従来、変更セットを利用した組織開発モデルを提供しておりました。今でも活用している組織はたくさんあるのではないでしょうか。
この変更セットを活用したカスタマイズは組織が成長し複数の開発チームが増えるたびに、他のユーザーが行った変更と混ざり合い、変更の追跡が複雑になるというデメリットが存在しております。
そこで「ロック解除済みパッケージを活用したパッケージ開発モデル」が生まれ推奨されるようになったらしいのですが、このパッケージ開発モデルで本番組織のカスタマイズしている組織はどれだけいるのだろうかと感じました。
ロック解除済みパッケージがGA(General Availability)となってから3年。奇しくも私が2019年の夏にSalesforceを始めた時と同じです。開発モデルを変えるような新しい文化が定着するには、メリットが界隈に浸透していなければなかなか定着しません。
ロック解除済みパッケージを使って組織をカスタマイズしているという事例が増えれば増えるほどパッケージ開発モデルも定着していくのかもしれませんね。
しかし、パッケージ開発モデルは開発者向けの知識が必要で、Salesforce管理者目線で考えるとハードルが高そうです。それを考えると変更セットを使った開発モデルはまだまだ廃れることはなさそうですね。このような変更セットの代替としてDevOps Centerという機能がリリース予定です。パッケージ開発とも今後どう関わっていくのか...実際どのような使い勝手になるか分かりませんが、だいぶ便利になりそうなので期待したいです。
最後になりますが、実際に本番組織を活用してパッケージ開発モデルを行うよう着手する際は、Trailheadのモジュール「パッケージ開発モデル」や「パッケージ開発の準備状況」や公式ガイドのロック解除済みパッケージのベストプラクティスも合わせて一読することをお勧めします。
以上です、今回のチュートリアルが皆様の助けになれば嬉しいです。
ではでは!
【GitHub】
https://github.com/co-meeting/flow-component-ouput-field-sample