Salesforce CLI チートシート

# Salesforce CLI コマンド
コマンドに `-h` のオプションをつけることで、ヘルプを閲覧することが可能。
インストール → [Salesforce CLI](https://developer.salesforce.com/tools/salesforcecli)
公式のリファレンス → [sf | Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_unified.htm)
リリースノート　→ [forcedotcom | releasenotes/README.md](https://github.com/forcedotcom/cli/blob/main/releasenotes/README.md)

## 環境の準備
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf org login web -a [エイリアス]` | Salesforce組織の認証 | `-d` デフォルトのDev Hub組織に指定 |
| `sf org login web -r https://test.salesforce.com/ -a [エイリアス]` | Salesforce組織の認証(sandbox) |  |
| `sf project generate -n [プロジェクト名]` | Salesforce DXプロジェクトの作成(スキャフォールディング) |  |
| `sf org list` | Salesforce CLI で作成・認証した組織の一覧を表示 |  |
| `sf org logout -o [対象組織]` | 認証済みの組織からログアウトする | `-p`で確認をスキップする。<br/>不要になったスクラッチ組織は`force:org:delete`で組織を削除することが推奨される。 |
| `sf org open -o [対象組織]` | Salesforce組織をブラウザで開く |  |
| `sf alias list` | エイリアスの一覧を表示 |  |
| `sf alias set [エイリアス]=[ユーザ名]` | エイリアスの設定<br/>ユーザ名を空欄にするとエイリアスの削除 |  |

## Deploy・Retrieve
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf project retrieve start -d [ファイルパス]` | ソース形式での取得 | `-d [ファイルパス]`<br/>`-x [マニフェストファイルのパス]`<br/>`-m [メタデータタイプ]` |
| `sf project deploy start -d [ファイルパス]` | ソース形式でのデプロイ | `-d [ファイルパス]`<br/>`-x [マニフェストファイルのパス]`<br/>`-m [メタデータタイプ]` |
| `sf project delete source -p [ファイルパス]` | | `-p [ファイルパス]`<br/>`-m [メタデータタイプ]` |
| `sf project deploy validate -d [ファイルパス] -l [テストレベル]` | デプロイの検証を行う | クイックリリースが可能になる |
| `sf project deploy quick -i [検証済みのJOB ID]` | クイックリリース | 検証が成功したリリースのみ使用可能 |

- テストレベルは、`NoTestRun`、`RunSpecifiedTests`、`RunLocalTests`、`RunAllTestsInOrg`が選択可能
- 特定のフローバージョンを取得・デプロイする場合、ファイル名の最後に`-[バージョン番号]`をつける。つけない場合、最新のフロー（有効なフローではない）が対象になる。詳細は[こちら](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_visual_workflow.htm)
    - 例： `sf project retrieve start -m flow:CreateAccountScreen-3`
- `-m`、`--metadata`で指定する値は[こちら](https://github.com/forcedotcom/source-deploy-retrieve/blob/main/src/registry/metadataRegistry.json)を参照

## Dev Hub組織・スクラッチ組織
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf org login web -d -a [エイリアス]` | デフォルトのDev Hub組織を設定 ||
| `sf org create scratch -d -f [スクラッチ組織の設定ファイル] -a [エイリアス]` | Dev Hub組織からスクラッチ組織の作成 | `-d` デフォルトのスクラッチ組織に設定<br/>`-v [Dev Hub組織のユーザ名]`<br/>`--duration-days [日数]`組織の有効期間（1-30） |f
| `sf org open` | ブラウザで組織を開く | -u [ユーザ名・エイリアス] |
| `sf project retrieve start` | スクラッチ組織・Sandboxから変更をプルする | `-o [ユーザ名・エイリアス]` |
| `sf project deploy start` | スクラッチ組織から変更をプッシュする | `-o [ユーザ名・エイリアス]` |
| `sf org assign permset -n [権限セット名]` | 権限セット付与 ||
| `sf org delete scratch -o [対象組織]` | スクラッチ組織を削除する |  |

## パッケージ:package:
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf package list` | DevHub組織のパッケージの一覧を表示 | `-v [Dev Hub組織のユーザ名]` |
| `sf package installed list` | 組織のパッケージの一覧を表示 | `-v [Dev Hub組織のユーザ名]` |
| `sfdx force:package:create -n [パッケージ名] -d [説明] -r force-app -t Unlocked` | ロック解除済みパッケージの作成 | `-v [Dev Hub組織のユーザ名]`<br/>`-r [パッケージの内容を含むディレクトリのパス]` |
| `sfdx force:package:version:create -p [パッケージ名・ID] -d [パッケージの内容を含むディレクトリ] -k [パッケージを保護するキー] -w 10` | パッケージバージョンの作成 | `-v [Dev Hub組織のユーザ名]`<br/>パッケージバージョンは、パッケージ内容および関連するメタデータの固定スナップショット。作成に時間がかかる。|
| `sfdx force:package:install -t [ユーザ名] -p [パッケージバージョン名・ID] -k [パッケージを保護するキー] --noprompt -w 10` | パッケージインストール ||
|`sfdx force:package:version:promote -p [パッケージバージョン名・ID] -v [Dev Hub組織のユーザ名]`| パッケージバージョンを本番環境にリリース可能なステータスに変更する ||
|`sfdx force:limits:api:display`| 一日で作成できるパッケージバージョンの数を確認する| Package2VersionCreatesの行を確認する |

## ファイルの作成
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf apex generate class -n [ファイル名]` | Apexクラスの作成 | |
| `sf apex generate trigger -n [ファイル名] --sobject [オブジェクト名]` | Apexトリガの作成 | |
| `sf visualforce generate page -n [ファイル名] -l [ラベル名]` |  | |
| `sf visualforce generate component -n [ファイル名] -l [ラベル名]` |  | |
| `sf lightning generate component --type lwc -n [コンポーネント名]` | lwcの作成 | |
| `sf lightning generate component -n [コンポーネント名]` | auraコンポーネントの作成 | |

## データのインポート・エクスポート
| コマンド例 | 用途 | 補足 |
|---|---|---|
| `sf data tree export -d [ディレクトリ] -q "クエリ"` | リレーションを維持した形式(.json)でエクスポート | |
| `sf data import -p [JSONファイルのパス]` | リレーションを維持した形式(.json)でインポート | |

## Apexテスト
| コマンド例 | 用途 | 補足 |
|---|---|---|
|`sf apex run test -n [テストクラス名]`|指定したApexテストの実行|カンマ区切りで複数指定可能。クラス名は大文字小文字を区別する。|
|`sf apex run test -t [テストクラス名.テストメソッド名] -r human`|指定したApexテストメソッドを実行|カンマ区切りで複数指定可能。テストクラスも指定可能。|
|`sf apex run test -s [テストスイート名]`|指定したApexテストスイートのテストを実行|カンマ区切りで複数指定可能|
|`sf apex get test -i [テスト実行ID]`|テスト結果を取得する|`-c`カバレッジ率を表示<br/>`-d [出力ファイルパス]`|

## デバッグログ
<!-- 表にするとセルにパイプが使用できないので、リストで記述 -->

| コマンド例 | 用途 | 補足 |
|---|---|---|
|`sf apex list log`|デバッグログの一覧を表示||
|`sf apex get log --log-id [デバッグログのID] -d [保存先のディレクトリ]`|デバッグログの取得|デバッグログのIDは`sf apex list log`で取得可能|
|`sf apex get log --number [取得数] -d [保存先のディレクトリ]`|直近のデバッグログを取得する||
|`sf tail log`|リアルタイムにログを表示|`--color`ログに色をつける<br/>`-d [ログレベル]`ログレベルを指定する|

* 表示件数が多くなるときはtailコマンドで表示件数を減らす。
    * `sf apex list log | tail -5`
    * (PowerShell) `sf apex list log | Select-Object -first 5`

<!-- タイムアウトする
* デバッグのみ表示したい場合はgrepコマンドを使用する。
    * `sf tail log | grep "|USER_DEBUG|"`
    * (PowerShell) `sf tail log | Select-String "\|USER_DEBUG\|"`
-->

## 組織の制限の確認
| コマンド例 | 用途 | 補足 |
|---|---|---|
|`sf apex list log`|組織内の制限に関する情報を表示する||
|`sf limits recordcounts display`|オブジェクトごとのレコード数を表示する||

## その他
* SalesforceCLIのバージョンの確認
    * `sf -v`
* SalesforceCLIの更新
    * `sf update`
* プラグインの一覧を表示
    * `sf plugins`
* Visual Studio CodeのSオブジェクト定義の更新(入力補完の更新)
    * Visual Studio Codeのコマンドパレットから`SFDX: Refresh SObject Definitions`

# 参考
- [Salesforce CLI](https://developer.salesforce.com/tools/salesforcecli)
- リファレンス
    - [sf | Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_unified.htm)
    - [sfdx | Salesforce CLI Command Reference](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference.htm)
- [Salesforce DX 設定ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm)
- [Salesforce CLI ReleaseNotes](https://github.com/forcedotcom/cli/tree/main/releasenotes/sfdx)
- [Salesforce CLI Roadmap](https://github.com/orgs/salesforcecli/projects/2/views/1)