[Salesforce DX]Salesforce CLI操作でのエラーに対する対処法

salesforce

どうも!西村祐二@大阪です。

Salesforce CLIを使ってSalesforce環境への接続やデプロイするときなどに
エラーがでたりいろいろ躓くことがあります。
Salesforce CLI自体が最近オープンベータになったばかりで
検索してもあまり情報がなく自力でなんとするしかないことが多々あります。
そんなときに参考となる情報を紹介したいと思います。

躓いたときはとりあえず実行コマンドにヘルプをつけて確認する

sfdxコマンドのヘルプは親切にコマンドの実行例など記載されています。
あまり情報が出回っていない中、かなり参考になります。
躓いたらとりあえず実行コマンドのうしろに--helpをつけて確認してみると答えが書いてるかもしれません。

個人的な体験談として下記のようなことがありました。

「CLIからSalesforce環境にログインできることはわかったけど、SandBox環境に直接ログインするにはどうしたらいいんだろう。
もとのSalesforce環境から辿ってSandBox環境にログインしてCLIとリンクされないなあ」
と悩んでいましたがコマンドのヘルプをみたら答えが書いてました。

$ sfdx force:auth:web:login --help

Usage: sfdx force:auth:web:login [-i <string>] [-r <url>] [-d] [-s] [-a <string>] [--json] [--loglevel <string>]

authorize an org using the web login flow

 -i, --clientid CLIENTID        # oauth client id (sometimes called the consumer key)
 -r, --instanceurl INSTANCEURL  # the login url of the instance the org lives on
 -a, --setalias SETALIAS        # set an alias for for the authenticated org
 -d, --setdefaultdevhubusername # set the authenticated org as the default dev hub org for scratch org creation
 -s, --setdefaultusername       # set the authenticated org as the default username that all commands run against
 --json                         # format output as json
 --loglevel LOGLEVEL            # logging level for this command invocation (error*,trace,debug,info,warn,fatal)

To log in to a sandbox, set --instanceurl to https://test.salesforce.com.

Examples:
   $ sfdx force:auth:web:login -a TestOrg1
   $ sfdx force:auth:web:login -i <oauth client id>
   $ sfdx force:auth:web:login -r https://test.salesforce.com

SandBox環境にログインするには-r https://test.salesforce.comをつければよいということがわかりますね。

sfdx.logを確認する

最近知ったんですが、sfdxにはログを出力する機能があります。
sfdxコマンドを実行すると~/.sfdx/sfdx.logにログが出力されます。
JSON形式でログが出力されるようです。

sfdxコマンド実行時はログを流しておくと躓いたときに原因特定の参考になると思います。

$ tail -f ~/.sfdx/sfdx.log

ログ出力レベルをDebugにしておく

上記と関連するところですが、sfdxコマンドはデフォルトではコマンド失敗するときしかログ出力されないため検証やトラブルシューティングなどの際は --loglevel debugを実行コマンドにつけて実施する方が躓いたときに参考になるかと思います。

参考としてCLIからSalesforce環境にログインするコマンドに--loglevel debugをつけてみます。

$ sfdx force:org:open -u my-sf --loglevel debug

別ターミナルでsfdx.logを流しておきましょう。

$ tail -f ~/.sfdx/sfdx.log

・
・
・
{"name":"sfdx","hostname":"hoge.local","pid":xxxx,"log":"jsforce","level":20,"msg":"<request> method=GET, url=https://xxxxxxxxx.my.salesforce.com/services/data/v40.0","time":"2017-07-25T03:21:58.451Z","v":0}
・
・
・
{"name":"sfdx","hostname":"hoge.local","pid":xxxx,"level":30,"msg":"DONE! Completed 'force:org:open' in 0.555s","time":"2017-07-25T03:21:58.936Z","v":0}

裏でjsforceが使われていることや、ログインのフローがわかるかと思います。

さいごに

いかがだったでしょうか。
当たり前のことかと思いますが、
sfdxコマンド実行時にログが出力されていることなど知らなかったのでブログにしてみました。

誰かの参考になれば幸いです。