tyoshikawa1106のブログ

- Force.com Developer Blog -

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

Part 1の記事の続き。Part 1ではSalesforce CLIの最初に覚えておくと良さそうなコマンドを記載しました。Part 2はリファレンスサイトの内容を試していきます。

Salesforce CLI Command Reference

alias Commands

認証した組織に対してエイリアスを設定したりするためのコマンドです。

alias list

設定したエイリアスの一覧を表示できる。

% sf alias list

alias set

Part 1で紹介。エイリアス名を設定できる。

% sf alias set <エイリアス名>=<認証組織のユーザID>

alias unset

Part 1で紹介。登録済みのエイリアス名を削除できる。

% sf alias unset <エイリアス名>

analytics Commands

次のコマンドで「Analytics テンプレートの生成」ができるそうです。Analytics Cloudを使っているユーザのための機能だと思います。

% sf analytics generate template --name myTemplate --output-dir force-app/main/default/waveTemplates


作業用フォルダを用意してそのディレクトリで実行してみました。


force-appフォルダと配下のファイルが生成されました。


VSCodeのマニフェストファイルからプロジェクトを作成のAnalyticsテンプレートと同じだと思います。(選択したことなかったテンプレート)

apex Commands

apexクラスを作成したりログを出したりできるコマンド。クラスやトリガの作成はVSCodeの拡張子の機能でやるので使うことはあまりなさそう。ここから先はVSCodeを起動してSalesforceプロジェクト内でコマンドを実行します。(認証組織も選択済の状態となっていることを確認)


apex generate class

apexクラスを生成するコマンド。実行すると現在のディレクトリにファイルが生成されます。

% sf apex generate class --name MyClass

Salesforceプロジェクトのクラスファイルの配置は「forceapp/main/default/classes」のは以下に作成する必要があります。なのでcdコマンドでそのディレクトリに移動してコマンド実行します。(classes以外のディレクトリで実行してもファイル作成自体はエラーにならずに処理される。)


パラメータを付与することで指定のディレクトリにファイル生成することも可能です。

% sf apex generate class --name MyClass --output-dir force-app/main/default/classes


生成されたファイルは次のようになっています。


このコマンドでできるのはローカル上にファイルを生成するまでです。Salesforce側には反映されていない状態となっています。(別途デプロイコマンドで組織にアップロードする。)

apex generate trigger

上のクラス作成コマンドのApexトリガバージョンです。これもたぶんVSCodeの機能で作成する形になりそう。

// 現在のディレクトリにトリガファイルを作成
% sf apex generate trigger --name MyTrigger
// 指定のディレクトリにトリガファイルを作成
% sf apex generate trigger --name MyTrigger --output-dir force-app/main/default/triggers
// 作成時にオブジェクトや実行タイミングを指定
% sf apex generate trigger --name MyTrigger --sobject Account --event "before insert,after insert"


apex log list

最初に覚えるべきapex logコマンド。これでログIDを取得できる。

% sf apex log list

apex get log

デバッグ ログを取得できるコマンド。表示内容は開発者コンソールのLogタブと同じ。

% sf apex get log --log-id 07L5j00000EzmjZEAR


取得したログをローカルファイルに保存することもできる。

% sf apex get log --output-dir logs --number 1 

logsフォルダが作成されてログファイルが格納されます。

Salesforceプロジェクトでは「.gitignore」でlogsフォルダは対象外と指定されているのでgitの差分として扱われたりしません。


最初開発者コンソールのログ機能の方がデバッグフィルタもあるし使いやすそうと思ったのですが、ローカルに保管して確認できるので便利そうです。一応単発的には開発者コンソールログも右クリックからダウンロード自体は可能です。(ただこの方法だと保管場所がバラバラになりやすそう。)


apex test run

Apexテストを実行するコマンド。他のtestコマンドを実行するためのID情報を取得するのにも必要。

% sf apex test run


開発者コンソールでテスト実行するのと同じ。ただし、上記の実行方法だと全件テスト実行される。


フラグを指定して特定クラスのみテストしたりといった使い方をする。

// デフォルト組織で指定された Apex テストクラスを実行し、結果を人間が判読できる形式で表示します。
% sf apex run test --class-names HelloWorldControllerTest --class-names HelloDevOpsCenterControllerTest --result-format human

// 指定された Apex テストスイートをデフォルト組織で実行し、コードカバレッジの結果と追加の詳細を含めます。
% sf apex run test --suite-names MySuite --suite-names MyOtherSuite --code-coverage --detailed-coverage

// デフォルト組織で指定された Apex テストを実行し、結果を人間が判読できる出力で表示します。
% sf apex run test --tests MyClassTest.testCoolFeature --tests MyClassTest.testAwesomeFeature --tests AnotherClassTest --tests namespace.TheirClassTest.testThis --result-format human

// 指定されたユーザー名、指定されたテストレベルで組織内のすべてのテストを実行します。出力を指定したディレクトリに保存します。
sf apex run test --test-level RunLocalTests --output-dir <path to outputdir> --target-org me@my.org


2つのテストクラスを対象にテスト実行。apex get test コマンドで実行結果を表示する。

apex run test コマンドはいろいろあるみたいだけど、今回はここまで。

apex get test

apex test run コマンドなどからテスト実行した際に確認できるID情報を使ってテスト結果を表示できる。

% sf apex get test --test-run-id <test run id>


実行結果をjUnit形式にしたいときは次の書き方

% sf apex get test --test-run-id <test run id> --result-format junit


JSON形式は次の書き方。キャプチャ取るほどではなさそう。

sf apex get test --test-run-id <test run id> --code-coverage --json


結果をjunitやJSON形式にできるのはファイル保存する形で実行して実行結果を連携するとかの用途かと思います。


『--code-coverrage』でカバー率を出すのは役立ちそう。

% sf apex get test --test-run-id <test run id> --code-coverage

apex run

Apexコードを任意実行する。開発者コンソールのExcecute Anonymous Windowと多分同じ。


SalesforceDXプロジェクトに「scripts/apex」というディレクトリがあります。その中にある.apexファイルを実行するためのコマンドです。

% sf apex run --file scripts/apex/hello.apex


実行結果は次のとおり。前回は処理されたコードの内容。その後は実行結果のログが表示されました。


プロジェクトメンバーが共通で使用するようなapexコードを保管してrunコマンドで実行できるのは便利なので重要度高めのコマンドだと思います。(開発者コンソールはApexコードの実行はできるけど保管はできないので共通で使用する用途には向かない。)

apex tail log

デバッグログを有効にして、ターミナルにログを表示します。

// デバッグログをアクティブ化します。
% sf apex tail log

// デバッグ レベルを指定します。
% sf apex tail log --debug-level MyDebugLevel

// トレース フラグの設定をスキップして、デフォルトの色を適用します。
% sf apex tail log --color --skip-trace-flag


実行してみたところ、ターミナルの中で処理が開始されました。(待機モードみたいな状態になる)。その状態でVisualforceページを動かしてみるとリアルタイムでログ出力が行われました。「apex get log」は指定したログIDのログを出力するコマンドでしたが、こちらは操作結果をすぐにログで見たいときに使う感じのようです。

まとめ

「alias Commands」「analytics Commands」「apex Commands」と3種類をざっくり試してみました。apex run コマンドが特に覚えておくと良いコマンドだと思います。長くなったのでPart 2の内容はここまで。