tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:Salesforce CLI コマンドを試してみました - Part 9

Part 9です。『org Commands』から続きです。

Salesforce Developers

org Commands

組織設定に関するコマンドです。

org assign permset

スクラッチ組織の 1 人以上のユーザーに権限セットを割り当てます。(スクラッチ組織限定らしい)。ユーザを指定する場合は「alias set」コマンドで指定したユーザのエイリアス名を使用する。Salesforceユーザオブジェクトの別名(Alias)項目ではないので注意とのこと。

// DreamHouse と CloudHouse という 2 つの権限セットをデフォルトのスクラッチ組織の元の管理者ユーザーに割り当てます。
sf org assign permset --name DreamHouse --name CloudHouse

// Dreamhouse 権限セットを、エイリアス「my-scratch」を持つスクラッチ組織の元の管理者ユーザーに割り当てます。
sf org assign permset --name DreamHouse --target-org my-scratch

// Dreamhouse 権限セットをデフォルトのスクラッチ組織の指定されたユーザーのリストに割り当てます。
sf org assign permset --name DreamHouse --on-behalf-of user1@my.org --on-behalf-of user2 --on-behalf-of user

org assign permsetlicense

権限セットライセンスをスクラッチ組織の 1 人以上のユーザーに割り当てるコマンドです。

// DreamHouse 権限セットライセンスをデフォルトのスクラッチ組織の元の管理者ユーザーに割り当てます。
sf org assign permsetlicense --name DreamHouse

// 2 つの権限セット ライセンスを、エイリアス「my-scratch」を持つスクラッチ組織の元の管理者ユーザーに割り当てます。
sf org assign permsetlicense --name DreamHouse --name CloudHouse --target-org my-scratch

// Dreamhouse 権限セット ライセンスをデフォルトのスクラッチ組織の指定されたユーザーのリストに割り当てます。
sf org assign permsetlicense --name DreamHouse --on-behalf-of user1@my.org --on-behalf-of user2 --on-behalf-of user3

org create sandbox

サンドボックス組織を作成するコマンドです。Developer Edtionでは使えない(はず)ので気軽には試せなさそう。あとSandbox作成は画面から行った方が間違いがなさそうな気がしました。

// 定義ファイルを使用して Sandbox 組織を作成し、エイリアス「MyDevSandbox」を付けます。Sandbox ライセンスを含む本番組織には、「prodOrg」というエイリアスが付いています。
sf org create sandbox -f config/dev-sandbox-def.json --alias MyDevSandbox --target-org prodOrg

// 定義ファイルを使用する代わりに、名前とライセンスの種類 (開発者) を直接指定して、Sandbox 組織を作成します。Sandbox 組織をデフォルトとして設定します。
sf org create sandbox --name mysandbox --license-type Developer --alias MyDevSandbox --target-org prodOrg --set-default

org create scratch

スクラッチ組織を作成するコマンドです。パッケージ開発とかでまっさらな組織での開発が必要なときにスクラッチ組織を用意して開発する感じです。個人の勉強用ならDeveloper Edtion組織はTrailheadのハンズオン組織で良いと思うのですが、DevOps Centerのように複数組織の開発プロセスを試すときにはスクラッチ組織が役立ちます。

// デフォルトの Dev Hub を使用して Developer Edition のスクラッチ組織を作成し、そのスクラッチ組織にエイリアスを付けます。
sf org create scratch --edition developer --alias my-scratch-org

// 定義ファイルを使用してスクラッチ組織を作成します。エイリアスを使用して Dev Hub を指定し、スクラッチ組織をデフォルトとして設定し、有効期限が 3 日になるように指定します。
sf org create scratch --target-dev-hub MyHub --definition-file config/project-scratch-def.json --set-default --duration-days 3

// プレビューの Enterprise エディションのスクラッチ組織を作成します。Salesforce リリース移行期間中にのみ使用:
sf org create scratch --edition enterprise --alias my-scratch-org --target-dev-hub MyHub --release preview


スクラッチ組織作成に使う定義ファイルは config フォルダにある。(Sandbox作成時の定義ファイルはデフォルトでは作成されないけど、ここに配置すれば良さそう。)


試してみました。

sf org create scratch --target-dev-hub sfdc-my-playground --definition-file config/project-scratch-def.json --set-default --duration-days 3 --alias sfdc-my-playground-scratch
  • DevHub組織 : sfdc-my-playgroundを指定
  • 定義ファイル : config/project-scratch-def.jsonを指定
  • スクラッチ組織 : デフォルトのスクラッチ組織として指定
  • 有効期間 : 3日間として指定
  • エイリアス名 : sfdc-my-playground-scratchと指定


コマンドが長くなるのが気になる場合は省略した宣言も可能です。省略宣言は覚えておいた方が良さそうですsf or。


sf org create scratch -v sfdc-my-playground -f config/project-scratch-def.json -d -y 3 -a sfdc-my-playground-scratch1


作成したスクラッチ組織はアプリケーションランチャーの有効なスクラッチ組織タブで一覧を確認できます。


『sf org list』コマンドでも確認できます。(U)はデフォルト設定されている組織。

有効期間について (--duration-daysの指定)

スクラッチ組織の有効期間は「デフォルト7日」という記載はありました。上限の記載はパッと見は見当たらなかったですが上限はあるようです。14日と指定したところエラーになりました。(たまたまそのタイミングで一時的なエラーが発生したという可能性もあるかも。)

Error (1): An unknown server error occurred. Please try again. If you still see this error, contact Salesforce support for assistance. Include the information from <略>

org create shape

指定されたソース組織に基づいてスクラッチ組織 (組織シェイプ) を作成します。

// エイリアス SourceOrg を使用してソース組織の組織形状を作成します。
sf org create shape --target-org SourceOrg

以前試してタイムアウトエラーでうまく行かなかったのですが、「org resume scrach」コマンドで解決できたかもという状況。別途検証予定で今回はスキップ。

org create user

スクラッチ組織のユーザーを作成するコマンドです。

// デフォルトのスクラッチ組織のユーザーを作成し、このコマンドでユーザー名、ユーザー ID、その他の特性を生成させます。
sf org create user

// ユーザー定義ファイルを使用して、エイリアス「testuser1」のユーザーを作成します。「profileName」オプションを「Chatter Free User」に設定します。これにより、定義ファイルの値も存在する場合、その値が上書きされます。エイリアス「my-scratch」を使用してスクラッチ組織のユーザーを作成します。
sf org create user --set-alias testuser1 --definition-file config/project-user-def.json profileName='Chatter Free User' --target-org my-scratch

// コマンドラインでユーザー名、電子メール、および権限セットの割り当てを指定してユーザーを作成します。ユーザー名がすでに Salesforce に存在する場合、コマンドは失敗します。
sf org create user username=testuser1@my.org email=me@my.org permsets=DreamHouse

// 定義ファイルを使用してユーザーを作成し、指定されたとおりに電子メールの値を設定し (定義ファイル内の値をオーバーライドします)、ユーザーのパスワードを生成します。定義ファイル内のユーザー名が一意でない場合、コマンドは組織 ID を追加して一意にします。
sf org create user --definition-file config/project-user-def.json email=me@my.org generatepassword=true --set-unique-username


スクラッチ組織作成時の定義ファイルのようにconfigフォルダに「project-user-def.json」を作成してコマンド実行に使用する。定義ファイルの宣言方法はどこかで紹介されている感じだと思います。

org delete sandbox

Sandbox組織を削除するコマンドです。

// エイリアス my-sandbox のサンドボックスを削除します。
sf org delete sandbox --target-org my-sandbox

// エイリアスの代わりにユーザー名を指定します。
sf org delete sandbox --target-org myusername@example.com.qa

// 確認を求めずにサンドボックスを削除します。
sf org delete sandbox --target-org my-sandbox --no-prompt

org delete scratch

スクラッチ組織を削除するコマンドです。

// エイリアス my-scratch-org のスクラッチ組織を削除します。
sf org delete scratch --target-org my-scratch-org

// エイリアスの代わりにユーザー名を指定します。
sf org delete scratch --target-org test-123456-abcdefg@example.com

// 確認を求めずにスクラッチ組織を削除します。
sf org delete scratch --target-org my-scratch-org --no-prompt


試してみました。特に難しくなく実行できました。

sf org delete scratch --target-org sfdc-my-playground-scratch


org delete shape

作成した組織シェイプの削除。スクラッチ組織の削除とは別で、組織シェイプのスクラッチ組織を作成する際に使用する組織シェイプ情報を削除するもの。

// エイリアス SourceOrg を持つソース組織のすべての組織図形を削除します。
sf org delete shape --target-org SourceOrg

// プロンプトを表示せずにすべての組織図形を削除します。
sf org delete shape --target-org SourceOrg --no-prompt

org display

組織に関する情報を表示するコマンドです。

// デフォルトの組織に関する情報を表示します。
sf org display

// エイリアス TestOrg1 を持つ組織に関する情報 (sfdxAuthUrl プロパティを含む) を表示します。
sf org display --target-org TestOrg1 --verbose


試してみました。

sf org display -o sfdc-my-playground

組織の重要な情報を表示できます。認証系の情報が含まれるので他の人が見れる状態での実行はNGとの注意書きがありました。

org display user

Salesforce ユーザーに関する情報を表示するコマンドです。

// デフォルトのスクラッチ組織の管理ユーザーに関する情報を表示します。
sf org display user

// 指定したユーザーに関する情報を表示し、JSON 形式で出力します。
sf org display user --target-org me@my.org --json

これもユーザに関するなどの重要な情報を表示できるコマンドでした。デモ中など他の人が見ている場面での実行はNG。

org generate password

スクラッチ組織ユーザーのランダムなパスワードを生成します。

// デフォルトのスクラッチ組織の元の管理者ユーザーのパスワードを生成します。
sf org generate password

// エイリアス「my-scratch」を持つスクラッチ組織の元の管理者ユーザー用に 12 文字を含むパスワードを生成します。
sf org generate password --length 12 --target-org my-scratch

// 小文字、大文字、数字のみを使用して、デフォルトのスクラッチ組織管理者ユーザーのパスワードを生成します。
sf org generate password --complexity 3

// デフォルトのスクラッチ組織で指定されたユーザーのパスワードを生成します。
sf org generate password --on-behalf-of user1@my.org --on-behalf-of user2@my.org --on-behalf-of user3@my.org

スクラッチ組織作成時に管理者ユーザが1ユーザ作成されますが、パスワードは未設定の状態。設定ページからリセットする方法もありますが、このコマンドでランダムなパスワードを生成してセットできるみたいです。パスワードセットについては画面よりコマンドの方が楽そうなので覚えておいた方が良さそう。


コマンド実行試してみました。

// 最初にスクラッチ組織を作成
sf org create scratch -v sfdc-my-playground -f config/project-scratch-def.json -d -y 3 -a sfdc-my-playground-scratch1

// パスワード生成
sf org generate password --length 12 --target-org sfdc-my-playground-scratch1


これでユーザIDとパスワードを使ってVSCodeのSalesforceプロジェクト(開発環境)作成を実施できます。


org list

作成または認証したすべての組織をリストします。

// 作成または認証したすべての組織をリストします。
sf org list

// 期限切れ組織、削除組織、ステータス不明組織を含むすべての組織をリストします。接続ステータスは含めません。
sf org list --skip-connection-status --all

// 組織を一覧表示し、非アクティブなスクラッチ組織に関するローカル組織の承認情報を削除します。
sf org list --clean


実行結果です。スクラッチ組織が存在している場合はそれぞれ表示されます。


org list auth

作成した組織またはログインした組織に関する認証情報を一覧表示します。

// 組織に関するローカル認証情報をリストします。
sf org list auth


基本的には『sf org list』コマンドと同じような感じです。違いは表示される情報に「INSTANCE URL」と「AUTH METHOD」の列が追加されます。

org list metadata

指定されたタイプのメタデータ コンポーネントとプロパティを一覧表示します。

// エイリアス「my-dev-org」を使用して、組織内の CustomObject コンポーネントとそのプロパティを一覧表示します。
sf org list metadata --metadata-type CustomObject --target-org my-dev-org

// デフォルト組織内の CustomObject コンポーネントを一覧表示し、指定されたファイルに出力を書き込み、API バージョン 57.0 を使用します。
sf org list metadata --metadata-type CustomObject --api-version 57.0 --output-file /path/to/outputfilename.txt

// 「folderSales」フォルダに含まれるデフォルト組織のダッシュボードコンポーネントを一覧表示し、指定されたファイルに出力を書き込み、API バージョン 57.0 を使用します。
sf org list metadata --metadata-type Dashboard --folder folderSales --api-version 57.0 --output-file /path/to/outputfilename.txt


実行するとJSON形式でメタデータの情報が表示されました。ターミナルだと表示上限で最初の方が見えなくなったので指定されたファイルに書き込みの機能を使うと良さそうです。

org list metadata-types

組織で有効になっているメタデータ タイプの詳細を表示します。

// API バージョン 57.0 を使用して、エイリアス「my-dev-org」を持つ組織内のすべての既知の有効なメタデータ タイプに関する情報を表示します。
sf org list metadata-types --api-version 57.0 --target-org my-dev-org

// デフォルト組織の Salesforce CLI でまだサポートされていないメタデータ型のみを表示し、結果を指定したファイルに書き込みます。
sf org list metadata-types --output-file /path/to/outputfilename.txt --filter-known

「org list metadata」コマンドと同じような感じで情報を表示できました。

org list shape

作成した組織シェイプ情報を表示できるコマンドです。

// 作成したすべての組織形状をリストします。
sf org list shape

// すべての組織シェイプを JSON 形式でリストし、出力をファイルに書き込みます。
sf org list shape --json > tmp/MyOrgShapeList.json

sf org list users

組織のローカル認証されたユーザーを表示するこまんおです。

// デフォルト組織のローカル認証されたユーザーをリストします。
sf org list users

// 指定された組織のローカル認証されたユーザーを一覧表示します。
sf org list users --target-org me@my.org


実行するとユーザIDやプロファイルといった情報をリスト表示できました。

org login access-token

「org login」は認証系のコマンドです。既存の Salesforce アクセス トークンを使用して組織を承認します。

// https://mycompany.my.salesforce.com で組織を承認します。コマンドにより、アクセス トークンの入力が求められます。
sf org login access-token --instance-url https://mycompany.my.salesforce.com

// プロンプトを表示せずに組織を承認します。事前に SFDX_ACCESS_TOKEN 環境変数をアクセス トークンに設定しておく必要があります。
sf org login access-token --instance-url https://dev-hub.my.salesforce.com --no-prompt

org login device

デバイスコードを使用して組織を承認します。(デバイスコードって使ったこと無い)

// デバイス コードを使用して組織を承認し、組織にエイリアス TestOrg1 を付け、デフォルトの Dev Hub 組織として設定します。
sf org login device --set-default-dev-hub --alias TestOrg1

// 指定したクライアント ID (コンシューマ キー) を使用して、カスタム接続アプリケーションを作成した組織を承認します。
sf org login device --client-id <OAuth client id>

// 指定したインスタンス URL を使用して Sandbox 組織を承認します。
sf org login device --instance-url https://MyDomainName--SandboxName.sandbox.my.salesforce.com

org login jwt

JSON Web トークン (JWT) を使用して Salesforce 組織にログインします。CI/CD スクリプトなど、ブラウザーで対話的にログインできない自動化された環境で使用します。とのこと。

// ユーザー名 jdoe@example.org を使用し、デフォルトのインスタンス URL (https://login.salesforce.org) で組織にログインします。秘密キーはファイル /Users/jdoe/JWT/server.key に保存されており、コマンドはコンシューマー キー (クライアント ID) 04580y4051234051 を持つ接続アプリを使用します。
sf org login jwt --username jdoe@example.org --jwt-key-file /Users/jdoe/JWT/server.key --client-id 04580y4051234051

// 組織をデフォルトとして設定し、エイリアスを付けます。
sf org login jwt --username jdoe@example.org --jwt-key-file /Users/jdoe/JWT/server.key --client-id 04580y4051234051 --alias ci-org --set-default

// 組織をデフォルトの Dev Hub として設定し、エイリアスを付けます。
sf org login jwt --username jdoe@example.org --jwt-key-file /Users/jdoe/JWT/server.key --client-id 04580y4051234051 --alias ci-dev-hub --set-default-dev-hub

// URL https://MyDomainName--SandboxName.sandbox.my.salesforce.com を使用してサンドボックスにログインします。
sf org login jwt --username jdoe@example.org --jwt-key-file /Users/jdoe/JWT/server.key --client-id 04580y4051234051 --alias ci-org --set-default --instance-url https://MyDomainName--SandboxName.sandbox.my.salesforce.com

org login sfdx-url

ファイルに保存されている Salesforce DX 認証 URL を使用して組織を認証します。とのこと。
使うシーン多くなさそうなので省略。

sf org login web

Web上でユーザIDとパスワードを入力して認証処理を実行できるコマンドです。

// フラグを指定せずにコマンドを実行して、デフォルトの Salesforce ログイン ページ (https://login.salesforce.com) を開きます。
sf org login web

// Dev Hub にログインし、デフォルトの Dev Hub として設定し、後でスクラッチ組織を作成するときに参照するエイリアスを設定します。
sf org login web --set-default-dev-hub --alias dev-hub

// Sandbox にログインし、それをデフォルト組織として設定します。
sf org login web --instance-url https://MyDomainName--SandboxName.sandbox.my.salesforce.com --set-default

// --browser を使用して、Google Chrome などの特定のブラウザを指定します。
sf org login web --instance-url https://MyDomainName--SandboxName.sandbox.my.salesforce.com --set-default --browser chrome

// コンシューマ キー (クライアント ID とも呼ばれます) を指定して、独自の接続アプリを使用します。
sf org login web --instance-url https://MyDomainName--SandboxName.sandbox.my.salesforce.com --set-default --browser chrome --client-id 04580y4051234051

一番わかりやすいログインコマンド。ブラウザ指定できるのは便利。

org logout

Salesforce 組織からログアウトします。CLI上の認証削除のコマンドです。

// ログアウトする組織を対話的に選択します。→ターミナル上で操作できる。
sf org logout

// ユーザー名 me@my.org を使用して組織からログアウトします。
sf org logout --target-org me@my.org

// 確認後、すべての組織からログアウトします。
sf org logout --all

// エイリアス my-scratch を使用して組織からログアウトし、確認を求めるプロンプトを表示しません。
sf org logout --target-org my-scratch --no-prompt

org open

CLIで認証している組織を開くコマンドです。

// デフォルトのブラウザでデフォルトの組織を開きます。
sf org open

// Firefox ブラウザでエイリアス MyTestOrg1 を使用して組織を開きます。
sf org open --target-org MyTestOrg1 --browser firefox

// デフォルト組織の Lightning Experience ページのナビゲーション URL を表示しますが、ブラウザでページを開かないでください。
// 使い道がわからないけど、機密性の高い情報が表示できるみたいです。
sf org open --url-only --path lightning

// デフォルト組織の Lightning アプリケーションビルダーでローカル Lightning ページを開きます。
sf org open --source-path force-app/main/default/flexipages/Hello.flexipage-meta.xml

org resume sandbox

サンドボックスの作成ステータスを確認し、準備ができている場合はログインできるコマンドです。組織作成には長い時間がかかる場合があり、タイムアウトした場合はこのコマンドで再開するという感じのようです。

// その名前を使用して Sandbox 作成のステータスを確認し、エイリアス「prodOrg」を持つ本番組織を指定します。
sf org resume sandbox --name mysandbox --target-org prodOrg

// ジョブ ID を使用してステータスを確認します。
sf org resume sandbox --job-id 0GRxxxxxxxx

// 最新のサンドボックス作成リクエストのステータスを確認します。
sf org resume sandbox --use-most-recent

org resume scratch

不完全なスクラッチ組織の作成を再開します。「org resume sandbox」のスクラッチ組織版。

// ジョブ ID を使用してスクラッチ組織の作成を再開します。
sf org resume scratch --job-id 2SR3u0000008fBDGAY

// 最新の不完全なスクラッチ組織を再開します。
sf org resume scratch --use-most-recent

Part 9 のまとめ

「org Commands」のボリュームが多いのでPart 9はここまで。先日組織シェイプをつかったスクラッチ組織作成がうまくいかなったということがあったのですが、「org resume scratch」で解決できそうでした。他にもこういうことできるんだ的なコマンドがいろいろ用意されていたので試してみて良かったという感じでした。