dx-org-trial-expiration-check について
Salesforce のトライアル、Developer Edition、scratch org の期限を、個別または認証済み org 全体で確認するスキルです。期限の緊急度順に結果を示し、自動処理向けの出力やバックアップ・更新の案内を提供します。
主な機能
- 01個別、デフォルト、全認証済み org の確認
- 02期限までの日数による絞り込み
- 03期限切れと期限間近の org を優先表示
- 04JSON または CSV レコードの出力
- 05バックアップと更新の案内を表示
- 06cron または CI 向けの期限しきい値設定
活用シーン
- 01Salesforce トライアルの期限切れ確認
- 02指定期間内に期限を迎える org の特定
- 03期限接近の通知をスケジュール
- 04org の期限前にバックアップコマンドを表示
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill dx-org-trial-expiration-checkインストール後、Claude Code で/dx-org-trial-expiration-checkを入力して読み込まれたか確認します。
同梱ファイルscripts/check_expiration.sh
詳細
組織の有効期限チェック
Salesforce 組織の有効期限、残り日数、すでに期限切れかどうかを、単一の組織、デフォルトの組織、または認証済みのすべての組織について確認します。結果は優先順位付けされ(すでに期限切れの組織、期限が最も近い組織を先に表示)、1 行の概要も表示されます。このスキルでは、アラート用の機械可読な出力を生成したり、期限切れリスクのある組織向けにバックアップコマンドを表示したり、期限が迫ったトライアルまたは Developer Edition 組織の更新方法を説明したりすることもできます。
使用するタイミング
次のようなリクエストで実行します。
- 「トライアル組織の期限はいつですか?」/「まだ有効ですか、それとも期限切れですか?」
- 「トライアルの残り日数はどれくらいですか?」
- 「期限が近い組織はどれですか?」/「30 日以内に期限が切れる組織はありますか?」
- 「期限が近い組織についてアラートを設定して」/「cron ジョブを設定して」(
--jsonと--fail-if-expiringを使用します)。 - 「期限が切れる前に組織をバックアップして」(
--preserveを使用します)。 - 「トライアル(または Developer Edition)組織を延長/更新する方法を教えて」(
--renewを使用します)。
このスキルは、トライアルエディション、Developer Edition 組織(TrialExpirationDate があるものすべて)、およびスクラッチ組織(sf org list の expirationDate を使用)を対象とします。
使用しないタイミング
次の場合は、このスキルを実行しないでください。
- Sandbox の更新時期 — これは有効期限ではありません。
- 組織の作成、削除、切り替え — このスキルは有効期限を読み取り、ガイダンスを表示するだけです。組織の作成、削除、更新、アクティブ/デフォルト組織の変更は行いません。(デフォルトの組織を切り替えるには、
dx-org-switchを使用します。) - Salesforce 以外のトライアル — 例:AWS の無料利用枠、Netflix、その他のベンダーのトライアル。このスキルは Salesforce 専用です。
有効期限の判定方法
- トライアル/Developer Edition 組織: 信頼できる情報源は、SOQL(
sf data query)で読み取るOrganization.TrialExpirationDateフィールドです。このフィールドは有料/本番環境の組織ではnullになるため、トライアルの有効期限なしと表示されます。これは想定どおりであり、エラーではありません。 - スクラッチ組織:
sf org listが報告するexpirationDateを使用します(スクラッチ組織に対して SOQL クエリは実行されません)。
手順
-
重要: 日付計算(残り日数、期限切れ、期限間近の警告)、優先順位付け、構造化出力を処理し、macOS と Linux で動作する、同梱のヘルパースクリプトを実行します。スキルのディレクトリから絶対パスを指定して必ず実行してください。
./scripts/はユーザーのカレントディレクトリを基準に解決され、誤ったスクリプトが実行されるか、実行に失敗するため、使用しないでください。実行する前に確認してください:
-
<skill_dir>が相対パスではなく、絶対パス(/で始まる)である - パスがこのスキル専用のディレクトリ(この SKILL.md を含むディレクトリ)を指している
bash "<skill_dir>/scripts/check_expiration.sh" <alias-or-username> # one org bash "<skill_dir>/scripts/check_expiration.sh" # default org (target-org config) bash "<skill_dir>/scripts/check_expiration.sh" --all # every authenticated org bash "<skill_dir>/scripts/check_expiration.sh" --all --within 30 # only orgs expiring within 30 days<skill_dir>は、この SKILL.md を含むディレクトリの絶対パスです。 -
-
スクリプトの出力をユーザーに伝えます。組織のクエリに失敗した場合は、ユーザーが認証できるよう、スクリプトが表示する
sf org login webコマンドを提示します。ユーザーの依頼に応じて、以下の任意フラグを選択します。作業を保存する場合は--preserve、延長方法を尋ねられた場合は--renew、自動化には--json/--csv、cron/CI のゲートには--fail-if-expiringを使用します。
オプション
| フラグ | 目的 |
|---|---|
--all, -a | 認証済みのすべての組織を確認します。 |
--within <days>, -w | N 日以内に期限が切れる組織のみを表示します(すでに期限切れの組織を含み、有料/本番環境の組織は除外されます)。--within=30 も使用できます。 |
--json | 組織レコードの JSON 配列を出力します(データのみ)。 |
--csv | CSV 行を出力します(データのみ)。 |
--preserve | 期限切れ、または期限が迫った組織のバックアップコマンドを表示します。 |
--renew | トライアル/DE の延長と再有効化に関するガイダンスを表示します。 |
--fail-if-expiring[=N] | いずれかの組織が N 日以内に期限切れとなる場合、終了コード 3 で終了します(デフォルトは 7)。 |
--no-scratch | スクラッチ組織を除外します(トライアル/DE のみ)。 |
--help, -h | 使用方法を表示します。 |
フラグの順序は自由で、組み合わせて使用できます(例:--all --within 30 --json)。
優先順位を付けた出力
人が確認する出力は、緊急度の高い順にまとめられます。まず Expired、次に
(7 日以内に期限切れとなり、Warning と表示される)Expiring soon、続いて
Active、No trial expiration、最後に照会できなかった組織が続き、末尾に
1 行の要約が表示されます。
Org expiration status for all authenticated orgs:
Expired:
old-trial trial/DE edition expired 2026-06-20 (EXPIRED 19 day(s) ago)
Expiring soon (within 7 day(s)):
almost-up trial/DE edition expires 2026-07-14 (expires in 5 day(s) Warning)
Active (not expiring soon):
acme-trial trial/DE edition expires 2026-08-15 (expires in 37 day(s))
my-scratch scratch org expires 2026-07-25 (expires in 16 day(s))
No trial expiration (paid/production):
prod no trial expiration (paid/production org)
Summary: 1 expired, 1 expiring within 7 day(s), 2 active, 1 with no expiration.
アラートや cron 向けの構造化出力(--json / --csv)
ダッシュボード、スプレッドシート、または定期実行ジョブでは、--json または --csv を使用して
機械可読レコードを取得できます(説明文は含まれません)。各レコードには org、kind、
expirationDate、daysRemaining(負の値は期限切れ、null は有効期限なし)、
status、orgId が含まれます。出力は決定的で、処理に LLM は必要ありません。
# JSON, filtered to orgs expiring within 30 days:
bash "<skill_dir>/scripts/check_expiration.sh" --all --within 30 --json
cron ウォッチドッグ — --fail-if-expiring[=N] は、いずれかの組織が N 日以内に期限切れとなる場合(デフォルトは 7 日)、終了コード 3 で終了し、stderr に ALERT: 行を出力します。これにより、定期実行ジョブで組織の期限切れ前に通知できます。
# crontab: every morning at 9, alert if anything expires within 7 days
0 9 * * * bash "<skill_dir>/scripts/check_expiration.sh" --all --fail-if-expiring 7 \
|| mail -s "Salesforce org expiring soon" [email protected]
組織の期限切れ前に作業を保全する(--preserve)
組織の有効期限が切れると、そのメタデータとデータにアクセスできなくなります。--preserve は、期限切れが近い組織またはすでに期限切れの組織ごとに、すぐに実行できるバックアップコマンド(メタデータマニフェストと retrieve、および一括データエクスポート)を表示します。コマンドを 表示するだけ なので、内容を確認してからご自身で実行してください。
bash "<skill_dir>/scripts/check_expiration.sh" my-trial --preserve
トライアル/Developer Edition 組織の延長または更新(--renew)
--renew は、組織を維持するための最新の案内を表示し、対応手順をすぐに実行できるよう、リスクのある組織の Org ID も表示します。
- パートナー:
partners.salesforce.com→ Ask Agentforce → 「I want to extend my Trial Org」から Org ID を伝え、Trial Org の延長(最大 +12 か月)を申請します。組織が有効、または期限切れから 30 日未満であれば対象となります。LDV org は対象外です。(Salesforce Help 記事 000387818。) - 非営利団体: Account Executive 宛てに、件名を「Trial Extension」とし、トライアル開始時のメールアドレス、Org ID、ユーザー名を記載してメールを送信します。AMER 地域は Power of Us Desk、その他の地域は My Account サポート/ 1-800-NO-SOFTWARE に連絡します。すでに期限切れでも利用できます。(記事 004754220。)
- Developer Edition: DE 組織にはサブスクリプションの期限はありませんが、長期間非アクティブ(約 180 日間ログインなし)の場合は無効化されます。定期的にログインしてください。ロックされている場合(まだ削除されていない場合)は、Salesforce Customer Support にケースを起票して再有効化を依頼してください。完全に削除された組織は復元できません。
- 標準トライアルのデータ/設定を維持するには、期限切れ前に有料エディションへ移行または加入してください。
終了コード
0成功1組織を照会できなかった(認証/接続エラー)2使用方法が正しくない、または依存関係(sfまたはjq)が見つからない3--fail-if-expiringのしきい値に到達(少なくとも 1 つの組織が期限切れ間近)
両方に該当する場合は、認証エラー(1)より --fail-if-expiring のしきい値到達(3)が優先されます。ウォッチドッグが確実に動作するよう、アラートのシグナルを優先します。到達不能な組織もジョブで検出する必要がある場合は、--json を実行し、終了コードの確認に加えて status: "auth_error" のレコードを確認してください。認証情報に問題がある組織は日付を確認できないため、それだけでは --fail-if-expiring のしきい値到達として扱われない点に注意してください。
数値を指定せずに --fail-if-expiring を指定した場合、後続のすべてが数字の引数は日数として扱われます(例:--fail-if-expiring 12345)。組織のエイリアスが数字のみで構成されるまれなケースでは、組織を先に指定し(check_expiration.sh 12345 --fail-if-expiring 7)、しきい値と誤認されないようにしてください。
認証
組織が認証されていない場合(保存済みの認証情報がない、またはトークンの期限切れ/取り消し)、スクリプトはエラーを黙って無視しません。ログインしてから再実行するための正確なコマンドを表示します。
my-trial not authenticated — no saved credentials for this org
To authenticate, run one of:
sf org login web --alias "my-trial"
sf org login web --alias <my-alias> --instance-url https://test.salesforce.com
Then re-run this check. List existing logins with: sf org list
sf org login web を実行すると、ブラウザーが開き、OAuth フローを完了できます。サンドボックスでは
--instance-url https://test.salesforce.com を使用してください。該当する場合は、カスタムの My
Domain URL も使用できます。
手動での代替手順(スクリプトを利用できない場合)
# Trial/DE expiration for one org (null = not a trial / paid org):
sf data query --query "SELECT Id, TrialExpirationDate FROM Organization" --target-org <org> --json
# Scratch org expiration comes from the org list, not SOQL:
sf org list --json
注意事項
- Salesforce CLI(
sf)とjqが PATH 上にあり、少なくとも1つの認証済み組織(sf org login web)が必要です。 sfコマンドを多数同時に起動しないでください。競合が発生すると CLI の動作が遅くなるため、スクリプトではこの理由から組織を順番に照会します。sf org listにはtrailExpirationDate(誤記に注意)フィールドがありますが、多くの場合nullです。スクリプトは試用版/DE 組織ではこのフィールドに依存せず、信頼性の高い SOQL のTrialExpirationDateを使用します。一方、スクラッチ組織では一覧のexpirationDateを使用します。