Mark Hammer's blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Salesforce Trailhead の(バッド)ノウハウ

※この記事は過去にQiitaに投稿した記事を転記したものです。

はじめに

Salesforceをご利用の方で、操作方法を学ぶためにTrailheadを使用している方も多いと思います。
この投稿では、TrailheadのChallengeやプロジェクトを進めていく中で学んだ(バッド)ノウハウを書いていきます。

まとめ

TrailheadのChallengeハンズオンを実施される方は、以下の設定をすることをおすすめします。

  • ハンズオン組織のユーザ設定で、地域:英語(アメリカ合衆国)、言語:Englishに設定する。
  • 組織情報の「言語のデフォルト値」を英語にする。
  • 項目名、値などに日本語を使用しない。
  • Trailhead Playground組織はできればバッジごとに作成する。
  • 残しておきたいTrailhead Playground組織では、ユーザのパスワードリセットを実施する。

パッケージがインストールできない

このユニットのように、Challengeを進めるうえでパッケージインストールを求められるユニットがありますが、パッケージインストール時にはSalesforceログイン画面が表示され、ユーザ名とパスワードが必要になります。

このとき、Trailheadで取得できるTrailhead Playground組織を使用している場合、自分でパスワードを設定していないため、パッケージがインストールできない状況になってしまいます。
※DeveloperEdition(DE)組織を使用している場合は、ユーザ名とパスワードはお分かりになると思いますので、ログインして対応してください。

現在は以下手順で、ユーザのパスワードリセットを行わなくてもパッケージをインストールすることが可能です。

  1. インストールしたいパッケージのURLを確認する
  2. Trailhead Playground組織へログインする。
  3. Trailhead Playground組織のURLから"~.lightning.force.com/"以降を削除する。
  4. インストールしたいパッケージのURLの"packaging/…"以降を"~.lightning.force.com/"に貼り付け、アクセスする。

具体例

の場合、
https://xxxxxxx.lightning.force.com/packaging/installPackage.apexp?p0=04txxxxxxxxxxxx
にアクセスすることで、パスワード入力せずにパッケージインストール画面になります。

なお、英語ナレッジに記載の通り、管理者権限でパスワードリセットを実施することでも対応可能です。

手順:

  1. Trailhead Playground組織へログイン
  2. 画面右上の 設定 をクリック
  3. Lightning Experienceの場合は ユーザ|ユーザ を、Salesforce Classicの場合は ユーザの管理|ユーザ をクリック
  4. 自分の名前が設定されているユーザにチェックを入れ、「パスワードのリセット」をクリック
  5. 自分のメールアドレスにパスワードリセット用メールが届くため、リンクをクリックし、新規パスワードを設定

※上記の手順でパスワードを設定した後も、「ハンズオン組織を起動」でTrailhead Playground組織へはログインできるのでご安心ください。

ちゃんと設定してもChallengeがクリアできない

Challengeに書いてある通りに設定したはずなのに、「正しいレコードが作成されていません」、「正しく設定されていません」と表示されてしまう場合があります。
そんな場合、ユーザ設定で以下を試すとうまくいくかもしれません。

Trailhead Playground の言語を English (英語) に設定する。

  • 2018/12現在、Challenge説明文には「英語以外の言語で Trailhead を利用するには、この challenge を試行する前に、Trailhead Playground の言語を English (英語) に設定してください。」 の一文が追加されました。

現在日本語環境のTrailhead Playground組織を持つ、または日本語環境のDeveloper Edition組織を英語環境とするには最低限以下対応を行う必要があります。1

  • ユーザ地域を「英語(アメリカ合衆国)」に設定する
  • ユーザ言語を「English」に設定する
  • 組織情報の「言語のデフォルト値」を英語にする
ユーザ地域を「英語(アメリカ合衆国)」に設定する

ユーザ地域での「日本語(日本)」と「英語(アメリカ合衆国)」の違いの1つは、ユーザの名前やリードなどの名前の表記です。
「日本語(日本)」では「姓 名」と表記されますが、「英語(アメリカ合衆国)」では「名 姓」または「姓, 名」です。
Challengeが「ユーザを作成してください」、「リードを作成してください」の場合、日本の「姓 名」の表記だとエラーになる場合があります。
これは、TrailheadのChallenge判定ロジックが「名 姓」で固定されているためだと思われます。

Challengeの問題上、ユーザ地域を「日本語(日本)」に固定するメリットはないため、Challengeでハマらないために、最初から「英語(アメリカ合衆国)」に設定してしまってもいいかもしれません。

例:営業担当がワークスペースで効率的に作業できるようにするのChallengeでの以下エラー

Challenge Not yet complete... here's what's wrong: Could not find a Lead with the name 'Shelley Major' and the Company 'Major Components, Inc.'. (ユーザ地域が「日本語(日本)」だと、Salesforce上では'Major Shelley'と表示されてしまうためのエラー)

ユーザ言語を「English」に設定する

ユーザ言語を変更すると、Salesforce標準設定の名前が変わるものがあります。

例:

  • 標準プロファイル名(例:「システム管理者」と「System Administrator」)
  • オブジェクトの標準項目名(例:商談の「フェーズ」と「Stage」)

TrailheadのChallenge判定ロジックが英語名でチェックしている場合は、正しく設定していてもChallenge失敗となってしまいます。

エラー例:

  • 「指定した項目が設定されていません」エラー
    例:グローバルクイックアクションの作成のChallengeでの以下エラー

    Challenge Not yet complete... here's what's wrong: You do not have the correct account fields in the 'New Detailed Account' publisher action layout

  • 「指定したプロファイルが設定されていません」エラー
    例:組織へのアクセスの制御のChallengeでの以下エラー

    Challenge Not yet complete... here's what's wrong: The user's profile was not set to System Administrator

回避するにはユーザ言語を「English」にすればよいのですが、その場合設定メニューもすべて英語となってしまいます。
英語が不安な方は「日本語」のままでよいですが、上記のようなエラーが発生した場合は、その時だけユーザ言語を「English」にするとChallenge成功するかもしれません。

組織情報の「言語のデフォルト値」を英語にする

ユニットのChallenge、プロジェクトには「表示ラベル(複数形)」、「母音で始まる場合はチェック」を設定するよう指示しているものがあります。
例:プラットフォームイベントの定義および公開のChallenge、猫の品種を認識する Cat Rescue アプリケーションの構築プロジェクトの手順

この設定は組織情報の「言語のデフォルト値」が英語であれば表示されますが、日本で作成した組織では「言語のデフォルト値」は日本語のため、画面に出てきません。そのため、手順通りの設定を行うには「言語のデフォルト値」を変更する必要があります。
「言語のデフォルト値」の設定変更は以下手順にて行えます。なお、この変更を行っても利用中のユーザの言語は日本語のままですのでご安心ください。

  • Salesforce Classic の場合
    1. 設定|組織プロファイル|組織情報 をクリック
    2. [編集]をクリック
    3. 「言語のデフォルト値」を[英語]に変更し、[保存]をクリック
  • Lightning Experience の場合
    1. 画面右上のギアアイコンをクリックし、[設定]をクリック
    2. 会社の設定|組織情報 をクリック
    3. [編集]をクリック
    4. 「言語のデフォルト値」を[英語]に変更し、[保存]をクリック

バッジごとにTrailhead Playground組織を作成する

Challengeには、入力規則、ワークフロー、プロセスビルダーなど、レコード保存の際にエラーにする、またはレコード内容を変更する設定が必要なものがあります。
そのため、Challenge用組織を使いまわすと、前に行ったバッジのChallengeが原因でエラーになる(レコード保存ができない、レコードが書き換えられて期待した項目値にならない)可能性があります。
また、Challengeのためにユーザを作成する必要がある場合、組織のユーザライセンス数には限りがあるため、他のユーザを作成する必要があるChallengeができない可能性もあります。

Trailhead Playground組織は無償で上限なく作成できるため、バッジごとに組織を作成しても問題はありません。
どうしても複数のバッジにまたがってハンズオン用組織を使いまわしたい場合は、以下の対応を行うことをおすすめします。

  • 必須
    • 設定した 入力規則、ワークフロー、プロセスビルダー は全て無効化する。
    • 作成したユーザは無効化する。
  • 推奨
    • 作成したカスタムオブジェクト、カスタム項目は削除する。

注意:1つのTrailheadアカウントに紐づけられるTrailhead Playground組織の上限は10個のため、11個以上作成する場合は以下の手順で組織をアカウントから切断する必要があります。

  1. Trailhead にログインする
  2. 画面右上のアカウント名|Hands-on Orgs をクリックする
  3. Salesforce ハンズオン組織 から切断したい組織の行にある「×」アイコンをクリックし、[切断]をクリック

なお、切断した組織はユーザ名とパスワードが分かっていればログイン画面からログインできますが、パスワードリセットしていない場合は(パスワードリセットに必要な秘密の質問、回答を設定していないため)ログインすることができませんのでご注意ください。

選択リスト項目に、英語の選択リスト値を新しく作成する

日本でTrailhead Playground組織を作成すると、選択リスト値に日本語が設定されているものがあります。(例:見積オブジェクトの「状況」項目)
これは日本語環境で操作したいユーザにはメリットがありますが、『英語環境を前提としたChallenge判定』に対しては「正しく設定したのにエラーになる」原因となります。

例えば 見積テンプレートの設定および契約の追跡 のChallengeでは、選択リスト値として「In Review」を選択する必要がありますが、日本語環境では選択リスト値が「レビュー中」と日本語になっています。「レビュー中」を選択すると以下エラーになります。

Challenge Not yet complete... here's what's wrong: Could not find a Quote for the 'Edge Installation' opportunity with the name 'Diesel Generator and Installation for Edge', a status of 'In Review' and an expiration date of '3/31/2017'.

回避策として新しく選択リスト値を作成(上記の場合は「In Review」を作成)する方法がありますが、その手順は該当ユニットに記載されていませんのでご注意ください。

Lightning アプリケーションビルダーでのページ作成時にAPI参照名を確認する

Challengeには、Lightning アプリケーションビルダーを用いてレコードページを編集、保存するものがあります。
例:Salesforce 組織のページでのフローの表示 では取引先責任者のレコードページをLightning アプリケーションビルダーを用いて設定します。

このときに、Trailhead Playground環境のユーザ言語設定が英語と日本語の場合、Lightning アプリケーションビルダー設定画面で初期に設定される表示ラベルとAPI参照名は、以下の違いがあります。

  • 英語
    • 表示ラベル(Label):Contact Record Page
    • API参照名(Developer Name):Contact_Record_Page
  • 日本語
    • 表示ラベル:取引先責任者 レコードページ
    • API参照名:FlexiPage

Trailheadは英語での設定を想定しているため、日本語環境で正しくページを設定したとしてもAPI参照名がFlexiPageのままだと、以下のように「Contact Record Page」がない、というエラーになります。

Challenge Not yet complete... here's what's wrong: We couldn't find a Record page called "Contact Record Page".

この回避策は、「英語環境で設定する」か「API参照名を変更する」しかありませんが、「API参照名を変更する」場合、具体的に設定すべきAPI参照名はChallenge本文には記載されていません。(英語環境では自動で設定されるからでしょう。)
英語環境で自動設定されるAPI参照名は「表示ラベルのスペースをアンダーバーに置換したもの」であるため、日本語環境で設定する場合はAPI参照名の変更を忘れないように行いましょう。

プロジェクト:書いてある手順の通りに設定してもクリアできない

Trailheadのプロジェクトでは、手順も含め日本語化されているものがあります。
ただ、手順に書かれている設定値も日本語化されているものについて、その手順、設定値通りにするとTrailheadの判定が英語前提のためエラーとなる場合があります。

具体例

  • 日本語版では選択リスト値に日本語を設定するよう記載されているが、その後の手順にて英語の選択リスト値を設定しないとエラー判定になるユニットが存在する。
    • 詳細はこちらを参照してください。
    • ※2017年9月時点で、上記リンクに記載した内容は「設定値を英語で記載する」形で修正されています。
  • 英語版の手順ではSalesforceに設定するテキストのカンマ区切り(,)が、日本語版の手順では読点(、)に置換されている。判定は英語版前提なので、日本語版の手順通りにすると失敗する。
    • 具体例のProject(英語版と日本語版の設定値を見比べてみてください)

基本的にTrailheadの判定は英語前提と思われるため、手順は日本語版でもよいですが、項目名、設定値などは英語版のものを使用することを強くおすすめします。

しかし、イレギュラーとして設定値が英語だとエラーとなってしまう場合も存在したりします。

メジャーバージョンアップによる機能追加、変更に合わせた対応

Salesforceでは、年3回(Winter, Spring, Summer)メジャーバージョンアップが適用されますが、これはTrailhead Playground組織も例外なく適用されます。
通常、メジャーバージョンアップは機能が追加されるため喜ばれるものですが、Trailhead Challengeにおいては「Challenge設定時には想定されていなかった機能が追加、または変更される」ため、対応が必要になるケースがあります。

具体例:

  • Challengeリリース時点では存在しなかった「値セットで定義された値に選択リストを制限します」2 機能がデフォルトで有効となったためにChallengeが成功せず、Challenge成功のため「値セットで定義された値に選択リストを制限します」機能を無効にする作業が追加となった。
  • Web チャットの基礎 > Snap-in チャットへのブランド設定の追加にて、Challenge及びユニット本文に記載されていない"CORS"設定を追加しなければChallengeクリアできない。

Apex、Visualforce等の開発系Challengeについて

TrailheadのChallengeは、Apex、Visualforce等の機能を用いた開発者向けChallengeもあります。
これらのChallengeについては、「メジャーバージョンアップによる機能追加、変更に合わせた対応」を除き、特に(バッド)ノウハウはありません。
これは、開発者向けChallengeの回答には各オブジェクト、項目のAPI参照名を直接指定することが多く、日本語環境であっても英語環境と差異がないためと思われます。
Salesforce開発者にとっては、TrailheadのChallengeはハマりどころの少ない、やりがいのある課題になるでしょう。

追記

上記記載後、以下のコメントをtwiiterでいただきました。

上記は「コードが同じであってもユーザ言語/地域設定等によってChallenge結果が左右されることがない」という意図で記載しましたが、私が確認していないだけで、実際には存在するのかもしれません。
また、「コードの書き方がTrailhead担当者の想定と違う」という理由で失敗になる可能性もあります。
自分は正しいと思うコードなのにChallengeが失敗する場合は、Salesforce Developers Communityサイトの Discussion forum で検索、投稿してみるといいと思います。

追記2

「開発者用Challengeには(バッド)ノウハウはない」と書きましたが、2019/6時点で、【ユーザ言語を「English」に設定する】節の「指定したプロファイルが設定されていません」エラーがApp Development Without Limits > Tune Transactions でも発生することを確認しました。

このChallenge自体にはプロファイルに関する設定はないのですが、Challenge判定時に SELECT Id FROM Profile WHERE Name = 'System Administrator' LIMIT 1 というSOQLが発行されます。
そのときに、日本語環境では'System Administrator'という名前のプロファイルがない、という理由で System.QueryException: List has no rows for assignment to SObject エラーが表示されます。3

Einstein Analytics: 書いてある通りの設定を行ってもクリアできない

Einstein Analytics のデスクトップ探索 モジュールの データエクスプローラになるには で確認した事象です。 このChallengeでは記載された条件に従ってレンズを作成するのですが、単純に条件通り作成するのではダメで、Challengeに記載された通りの順番で設定を行う必要があります。
(このChallengeではグラフ形式指定→横棒に用いる項目指定→棒区分の項目指定→棒の長さに用いる項目指定→ソート順指定→条件指定の順番でなければならない)

コミュニティフォーラムでは、Challenge確認の際にレンズのjsonがSFDC側の期待した回答と一致する必要があるが、設定順によりjson内容が変わるため、結果的に設定が同じであってもSFDC側の期待した回答と一致しなければ不合格となる、という見解が示されておりました。

おわりに

Trailheadの説明は日本語化されているものも多くなりましたが、Challenge判定はまだまだ英語前提のようです。 この投稿が、皆様のTrailheadのChallenge成功に役立つことができれば幸いです。


  1. この対応を行わなくてもクリアできるChallengeももちろんありますが、対応を行わなければクリアできないChallengeが存在する以上、対応することを強く推奨します。なお、ここに記載していないタイムゾーン、メールの文字コードがChallenge判定に影響するケースは現時点では確認できていません。

  2. 選択リスト項目に定義した値以外を設定することを禁止する機能。

  3. Trailhead上にはSystem.QueryException: List has no rows for assignment to SObject エラーしか表示されません。具体的なSOQLを見るには、 開発者コンソールを使ったデバッグ が必要になります。