tyoshikawa1106のブログ

- Force.com Developer Blog -

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

Part 6です。『deploy Commands』から続けます。


Salesforce Developers

deploy Commands

ローカル プロジェクトから組織にデプロイするためのコマンドです。このコマンドは git リポジトリ内から実行する必要があります。関数に対してコミットされた変更のみがデプロイされます。`--branch` で特に指定しない限り、アクティブなブランチがデプロイされます。とのこと。開発の際に覚えておくべきコマンドになりそう。

// デプロイします。
sf deploy functions --connected-org org-alias

// 「デプロイブランチ」にデプロイします。
sf deploy functions --connected-org org-alias --branch deploy-branch

// リモート リポジトリを上書きします。
sf deploy functions --connected-org org-alias --force


どれも一度は動かしてみるべきな感じ。まずはSalesforce組織へのデプロイコマンドから試してみます。

sf deploy functions --connected-org sfdc-my-playground


Apexクラス作成コマンドでMyClassを作っていたのでこれをデプロイしてみます。 git リポジトリ内になっている状態で試します。


試してわかるwaringメッセージと実行結果のエラー。(Chrome翻訳でコマンド説明文を読んでいて「Salesforce 関数をローカルプロジェクトから組織にデプロイします。」と書いていたので単純にデプロイコマンドだと思いましたが、正しくは「Salesforce Functions」を ~ 組織にデプロイ」なので説明欄にはきちんと書いてありました。)


warning @salesforce/plugin-functions > jsforce > request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
warning @salesforce/plugin-functions > @heroku/functions-core > yeoman-environment > @npmcli/arborist > @npmcli/move-file@1.1.2: This functionality has been moved to @npmcli/fs
warning @salesforce/plugin-functions > @heroku/functions-core > @salesforce/templates > proxy-agent > pac-proxy-agent > pac-resolver > degenerator > vm2@3.9.19: The library contains critical security issues and should not be used for production! The maintenance of
Installing plugin functions... ⣽ [2/4] Fetching packages...

error cloudevents@6.0.4: The engine "node" is incompatible with this module. Expected version ">=12 <20.0.0". Got "20.5.0"
Installing plugin functions... failed
JitPluginInstallError: Could not install @salesforce/plugin-functions
Code: JitPluginInstallError


@salesforce/plugin-functionsがインストールされていないのでエラーとなっている感じです。インストールコマンドを実行すれば良いのかなと検索して根本的な原因に気づきました。『function』とコマンドに記載されているとおり、Salesforce Functionsの機能に関係するコマンドだったみたいです。


設定メニューに用意されていて問い合わせすれば有効化できるみたいなのですが、普段の開発とは別件になるのかなと思います。


ということでdeployコマンドに関しては上記の確認までで終了です。(Functionsの設定画面初めて見た。)

dev Commands

sf プラグイン開発用のコマンドです。これはGoogle翻訳したページの画面キャプチャを見ればイメージできます。


sf プラグインの開発というのは一般的なSalesforceカスタマイズではそこまで必要にならない場面だと思うので全面的にスキップです。

doctor Commands

Salesforce CLI の問題を診断するためのツールとのことです。Homebrewの『brew doctor』コマンドと同じ感じ。

// CLI ドクター診断を実行します
sf doctor

// CLI ドクター診断と指定されたコマンドを実行し、デバッグ出力をファイルに書き込みます。
sf doctor --command "force:org:list --all"

// 特定のプラグインに対して CLI ドクター診断を実行します。
sf doctor --plugin @salesforce/plugin-source

実行結果はこうなりました。バージョンが古いって出てるように見えます。(ただ sf update は効果なかった。)


実行結果は「1691902828519-diagnosis.json」という感じのファイルが生成されそこに記録されるようです。「-diagnosis.json」のファイルはgitignoreで管理対象外にしたほうが良さそう。


suggestionsのところにチェックすべき詳細が記載されています。Google翻訳してみた結果はこうなりました。


sf updateの効果がなかったので特定のバージョンを指定できるという「sf update -i」を試してみました。


この方法では効果なし。


もしかしてとnpm install コマンドを試してみたところ、うまくいきました。

npm install @salesforce/cli --global

sf updateで効果が無いのが気になる(環境構築失敗してる?)のですが、とりあえずバージョンを上げることはできました。sf doctor → バージョン古い → npm installコマンドで対応していけばいいかなと思います。


問題解決したので改めて「doctor」コマンドを実行。先程の警告は解決したのですが、次の警告メッセージが表示されました。


sfdx-project.jsonファイルで指定しているAPIバージョンが古いという内容。そんなところで宣言しているんだと確認したところ、確かに57.0を指定していました。


APIバージョンの宣言を58.0に修正して再度doctorコマンドを実行。Suggestionsのところに表示されていた警告メッセージはなくなりました。Checkの2行は常に表示されるみたいです。


sf doctorコマンドしっかりメッセージを見ながら作業すれば重要な情報が確認できるコマンドとなっていました。最後に「doctor」コマンドで生成される「-diagnosis.json」ファイルについては確認が終わったら適宜削除していく感じです。とはいえうっかりで git commit の対象に含めてしまう可能性があるので、「.gitignore」に対象外として扱うように追加しておくと良さそうです。


おそらくこれ以外の用途でこの命名のファイルは存在しないと思います。


Part 6 のまとめ

「deploy Commands」「dev Commands」「doctor Commands」の3種類をチェックできました。doctor Commandsはファイル生成があったり、重要な情報の確認ができたりと要チェックなコマンドでした。