組織シェイプに基づいたスクラッチ組織の作成手順についてです。
以前2つの記事で組織シェイプに基づいたスクラッチ組織の作成を試してみたのですが、最後まで実行することができませんでした。
Salesforce CLIのコマンドについて勉強していたところ、失敗の原因を解決する方法がわかったので設定手順についてまとめました。
Salesforce組織を用意
Developer Edtion組織かTrailheadのハンズオン組織を用意します。DevHubの有効化と組織シェイプの有効化ができる組織なら問題ないと思います。実際は本番環境組織を使用しますが、勉強用には使わない方が良いと思います。
今回は組織シェイプでどこまでの設定を引き継げるか確認しやすくなるように、アプリケーション設定とかいろいろ設定済みのDeveloper Edtion組織を使用して進めます。
Dev Hubの有効化
改めてですが設定メニューからDev Hubの有効化を行います。スクラッチ組織を作成して管理するのに必要な設定です。
スクラッチ組織の組織シェイプを有効化
Dev Hubの有効化の次は組織シェイプの有効化です。有効化時にDev Hub組織のIDを15桁で登録する必要があります。最大 50 件の Dev Hub 組織を指定できるとのことです。
(Dev Hub組織の有効化は別組織でやってもOKということになります。基本は分ける必要はありません。)
VSCodeでSalesforceプロジェクトを用意
Visual Stdio CodeとSalesforce Extensionsの機能を使ってSalesforceプロジェクトを作成します。
プロジェクトの作成、組織を認証、ソースを組織から取得の流れで作業してソースコード一式を取得できていれば大丈夫です。
ここまでの手順で『sf org list』コマンドを使うとCLI上に認証とAILASの設定ができていることを確認できます。
次に『sf config list』コマンドを使ってtarget-orgとtarget-dev-hubが今回使用する組織に割り当てられているかを確認します。
もし割り当てられていなければ次のように『sf config set』コマンドで割り当て設置を行います。
% sf config set target-dev-hub=<AILAS> % sf config set target-org=<AILAS>
project-scratch-def.jsonの設定
Salesforceプロジェクトのconfigフォルダの中にproject-scratch-def.jsonファイルが用意されています。
このファイルがスクラッチ組織作成時の定義ファイルとなります。
組織シェイプを利用する場合は、元の組織の設定が引き継がれます。そのためファイルの内容は次のようになります。
{ "orgName": "<任意の組織名>", "sourceOrg": "<15桁の組織ID>" }
組織シェイプの設定情報を作成
ターミナルから次のコマンドを実行して組織シェイプの設定情報を作成します。
sf org create shape --target-org <AILAS>
今回はAILASを『demo』としているので次のように実行しました。
sf org create shape --target-org demo
実行後は『sf org list shape』コマンドを実行してください。作成済みの組織シェイプを確認できます。「SHAPE STATUS」がActiveになっていれば利用可能となっています。
スクラッチ組織の作成
ここまでの手順で進めると組織シェイプに基づくスクラッチ組織の作成が実行できる状態となっています。次のコマンドでスクラッチ組織を作成します。
% sf org create scratch -d -f config/project-scratch-def.json -a demo-scratch-org-shape
『-d』はデフォルトの組織を指定という意味です。『-f』で定義ファイルのパス指定を行います。『-a』は作成するスクラッチ組織のエイリアス名のセットです。
コマンドを実行すると次のように処理が開始されます。
この状態でしばらく経つと次のようにエラーが表示されます。処理に時間がかかっているというタイムアウトエラーです。
Error (1): The scratch org did not complete within your wait time
以前試したときは手順が不足しているか設定が正しくできていないことで処理が正常実行されずにタイムアウトエラーになっていると思っていました。ですが、このエラーメッセージ表示は正常な挙動だったみたいです。
このメッセージが表示されたあとも裏側では処理は正常に続いています。アプリケーションランチャーから有効なスクラッチ組織タブを選択してください。
時間経過で有効なスクラッチ組織のレコードが追加されます。
これはスクラッチ組織としては作成されたという扱いになります。ただ、この状態では認証設定等が行われていないので利用することができません。この問題を解決するには『sf org resume scratch』コマンドを使用します。
sf org resume scratch --job-id <スクラッチ組織作成時に表示されるジョブID>
すると、先程タイムアウトで中断したスクラッチ組織の作成の残りの処理が再開されます。
これでスクラッチ組織の認証も行われて利用可能になります。『sf org list』コマンドで表示できれば成功です。
作成したスクラッチ組織へのアクセスは『sf org open』コマンドを使って行います。
% sf org open -o demo-scratch-org-shape -b chrome
スクラッチ組織ユーザのパスワード設定
システム管理者ユーザが1ユーザ作成されています。設定ページからパスワードリセットすることができますが次のコマンドで対応した方が簡単です。
// パスワード生成 sf org generate password --length 12 --target-org demo-scratch-org-shape
これでランダムで生成されたパスワードが管理者ユーザに設定されます。ユーザIDとパスワードが設定されればVSCodeなどで認証操作が可能になります。
作成できたスクラッチ組織について
前回失敗してから改めて組織シェイプについて調べていくつかわかっていたことがあるのですが、改めて作成結果についてまとめます。
組織シェイプは設定情報を引き継ぐものだと思っていました。
具体的には下記のテキスト部分を見て、なんちゃってSandbox的に使えるのかなと思ってました。
本番組織の機能と設定を反映したスクラッチ組織定義を作成するのは容易ではないことは理解しています。スクラッチ組織の組織シェイプを使用すれば、スクラッチ組織定義の作成をお任せいただけます。
そういう用途ではなく、ライセンス情報など限られた情報を引き継げる機能となっています。なのでApexクラスやアプリケーションといった情報は引き継がれていませんでした。
このあたりの情報は通常のスクラッチ組織と同じく自分でデプロイ操作をする必要があるみたいです。(もしかしたらまだ理解していない組織シェイプの設定手順があるかもしれませんが)
まとめ
組織シェイプを試してみようと思ってからだいぶ時間が経過しましたがようやくうまくいきました。Salesforce CLIコマンドについて調べてresumeコマンドが非同期処理の再開コマンドとして用意されているということを知ってしてタイムアウトエラーで失敗していたと思っていたものが正常な挙動だったと理解できました。
resumeコマンドのことを知るまで見逃していたのですが、エラーメッセージのすぐ近くにこのコマンドを実行してくださいと思いっきり表示されてました。
組織シェイプの引き継ぎ情報が想像どおりではなかったのは残念ですが、どういう機能でどのような設定手順かは把握できてよかったです。