Skip to main content

ローカルで変更を開発してテストする

学習の目的

この単元を完了すると、次のことができるようになります。

  • ブランチを作成し、変更をソース制御リポジトリにコミットする。
  • VS Code 向け Salesforce 拡張機能を使用して、Sandbox を承認する。
  • Sandbox から変更を取得する。

コードリポジトリを設定する

Zephyrus Relocation Services の開発チームは、GitHub でコードをホストし、作業を確認しています。ソースリポジトリに変更をコミットし、カスタマイズの競合を特定してマージしてから、作業を続けます。

メモ

重要: このモジュールの主な目的は、組織開発モデルワークフローを示すことです。このモジュールにはハンズオン Challenge はありません。ですが、Trailblazer である皆さんが傍観しているだけということはあまりないでしょう。このモジュールで示された手順を試してみて、ご自身の手順が Ella と Juan の手順と異なる場合には、指針 (メモ) が提供されています。Sandbox は「本当の」開発作業用に残しておいてください。開始する前に、Developer Edition 組織または Trailhead Playground にサインアップして、各 Sandbox の代わりに使用してください。

ソース制御リポジトリを作成する

リポジトリは、Juan が開発プロジェクトのソースファイルを整理する場所です。また、Juan は Salesforce DX プロジェクトを作成してこのリポジトリに追加します。

リポジトリには、その目的を反映したわかりやすい名前を付けます。これは内部開発プロジェクトであるため、Juan は Zephyrus の Enterprise アカウントを使用して、language-courses という非公開リポジトリを作成します。

Salesforce DX プロジェクトを作成する

  1. VS Code を開きます。
  2. メニューから、[View (表示)] | [Command Palette (コマンドパレット)] を選択します。
  3. コマンドパレットの検索ボックスに、sfdx project と入力します。
  4. [SFDX: Create Project with Manifest (SFDX: マニフェストを使用したプロジェクトの作成)] を選択します。
  5. GitHub リポジトリと同じ名前の language-courses を使用し、[Enter (入力)] をクリックします。
  6. [Create Project (プロジェクトを作成)] をクリックします。

プロジェクトファイルを GitHub のリポジトリに追加する

  1. VS Code で、DX プロジェクトディレクトリを開き、[Source Control (ソース制御)] アイコン[Source Control (ソース制御)] アイコンをクリックします。
  2. [Initialize Repository (リポジトリの初期化)] をクリックします。
  3. [変更] の上にマウスポインターを置き、[+] をクリックして、すべての変更をステージングします。
  4. リポジトリをコミットするデフォルトブランチ (main など) を受け入れます。
  5. コミットメッセージを入力して、[Commit (コミット)] アイコン、チェックマーク [Commit (コミット)] アイコンをクリックします。
  6. [Publish Branch (ブランチを公開)] をクリックします。
  7. ブランチを公開する場所を確認します。

新しい要件に対応するカスタマイズを作成する

Calvin は営業チームとミーティングを行い、次のリリースの新しい要件を集めました。営業チームからは、語学コースが追加または変更されたときに通知を受信したい、また各コースを教えているのがだれなのかを知りたいという要望がありました。

Juan は、チームが組織開発モデルを使いこなせるようになるために、この要求がうってつけであると考えています。このモデルは、はるかに複雑な開発シナリオにも対応できますが、この単純な一連のステップを利用することで、チームはモデルのワークフローを理解できます。

Ella に割り当てられた作業は、語学コースインストラクターのカスタムオブジェクトを作成し、それをコースレコードにリンクすることです。Juan は、営業チームの別名に通知メールを送信するトリガーを作成します。手順は次のとおりです。

リポジトリをコピーする

まず、Ella は GitHub リポジトリをコピーして、自分用のブランチを作成します。

  1. コピーするリポジトリ、たとえば https://github.com/zephyrus/language-courses にアクセスします。
    ただし、このリポジトリは存在せず、説明のみを目的としたものです。同じ手順を実行する場合は、この手順で作成したサンプルリポジトリで代用してください。また、Juan と Ella という 2 人のデベロッパーのペルソナの作業もシミュレートすることになります。親ディレクトリを個別に 2 つ作成し、それぞれで開発作業を分担することをお勧めします。たとえば、Ella の開発作業を行う場合は、リポジトリを org-dev-ella フォルダーにコピーします。Juan の開発作業を行う場合は、リポジトリを org-dev-juan フォルダーにコピーします。
    1. [Clone or download (クローンまたはダウンロード)] をクリックします。
    2. HTTPS URL をコピーします。
  2. VS Code のコマンドパレットから、[Git: Clone (Git: クローン)] を選択します。
  3. [Repository URL (リポジトリ URL)] に、リポジトリへの URL を貼り付けて、[入力] をクリックします。Ella は Juan が作成したリポジトリである https://github.com/zephyrus/language-courses.git をコピーします。
  4. ローカルファイルシステムで、GitHub リポジトリを配置する場所に移動し、[Select Repository Location (リポジトリの場所を選択)] をクリックします。
  5. [Open Repository (リポジトリを開く)] をクリックします。
  6. コマンドパレットから、[Git: Create Branch (Git: ブランチを作成)] をクリックします。
  7. ブランチ名を入力します。Ella は自分のブランチを ella-custom-object としました。これで、Ella は自分用のブランチで作業できます。

Sandbox を承認してログインする

次に、Ella は VS Code を使用して、Developer Sandbox を承認 (ログイン) します。

メモ

同じ手順を実行する場合は、Developer Edition 組織または Trailhead Playground を使用してください。ステップ 3 では、[Project Default (プロジェクトのデフォルト)] を選択して、ログイン URL として login.salesforce.com を使用してください。

  1. コマンドパレットの検索ボックスに、sfdx authorize と入力します。
  2. [SFDX: Authorize an Org (SFDX: 組織を承認)] を選択します。
  3. ログイン URL に [Sandbox] を選択します。
  4. Sandbox の別名 (dev_sandbox など) を入力します。
  5. Sandbox のユーザー名とパスワードを使用してログインします。

カスタムオブジェクトの作成

その後、Ella は Developer Sandbox で Language Course (語学コース) と Language Instructor (語学インストラクター) カスタムオブジェクトを作成します。

  1. [Setup (設定)] から、[Object Manager (オブジェクトマネージャー)] タブをクリックします。
  2. 右上にある [作成] | [カスタムオブジェクト] をクリックします。
  3. [Label (表示ラベル)] に、Language Course Instructor (語学コースインストラクター) と入力します。[オブジェクト名] 項目と [レコード名] 項目は自動的に入力されます。
  4. [Plural Label (表示ラベル (複数形))] に、Language Course Instructors (語学コースインストラクター) と入力します。
  5. [新規カスタムタブウィザードを起動する] チェックボックスをオンにして、[保存] をクリックします。
  6. 目的のタブスタイルを選択し (Ella は [プレゼンター] を選択)、オブジェクトを保存できるまで [次へ] をクリックします。
メモ

プロのヒント: schema generate コマンドを使用して新しいカスタムオブジェクト、項目、タブ、プラットフォームイベントのローカルソースファイルを生成することもできます。このモジュールでは [設定] を使用することをお勧めしますが、ぜひ後でコマンドもお試しください。

カスタム項目を定義する

次に、Ella は Language Course Instructor (語学コースインストラクター) オブジェクトを参照する Language Course (語学コース) オブジェクトのカスタムオブジェクト項目を定義します。

メモ

同じ手順を実行する場合、Ella は別のモジュールで Language Course (語学コース) オブジェクトを作成しています。このモジュールでは、このオブジェクトが Ella の Developer Sandbox にすでに存在することを想定しています。続行する前に、このカスタムオブジェクトを作成してください。

  1. [Setup (設定)] から、[Object Manager (オブジェクトマネージャー)] タブをクリックします。
  2. 右上にある [作成] | [カスタムオブジェクト] をクリックします。
  3. [Label (表示ラベル)] に、Language Course (語学コース) と入力します。[オブジェクト名] 項目と [レコード名] 項目は自動的に入力されます。
  4. [Plural Label (表示ラベル (複数形))] に、Language Courses (語学コース) と入力します。
  5. [新規カスタムタブウィザードを起動する] チェックボックスをオンにして、[保存] をクリックします。
  6. 目的のタブスタイルを選択し (Ella は [Chalkboard (黒板)] を選択)、オブジェクトを保存できるまで [Next (次へ)] をクリックします。 
  1. [設定] から、[オブジェクトマネージャー] | [Language Course (語学コース)] に移動します。
  2. [項目とリレーション] をクリックします。名前項目など、すでにいくつかの項目が存在します。
  3. [新規] をクリックします。
  4. [データ型] で [主従関係] を選択し、[次へ] をクリックします。
  5. [関連先] から、[Language Course Instructor (語学コースインストラクター)] を選択して、[次へ] をクリックします。
  6. 次のように入力します。
    • 項目の表示ラベル: Course Instructor
    • 説明: Teacher for the language course
  7. 項目を保存できるまで [次へ] をクリックします。

変更リストで変更を追跡する

Ella はプロジェクトの変更リストを作成して、自分の変更を取得します。

メタデータ型 オブジェクト 変更のタイプ (作成、更新、削除) 詳細
CustomObject Language_Course_Instructor__c 作成 コースの講師の名前を取得するためのオブジェクト
CustomField Course_Instructor__c 作成 Language_Course__c カスタムオブジェクトとの主従関係

Developer Sandbox から変更を取得する

Ella は自分の変更を Sandbox からローカル DX プロジェクトに取り込みます。Ella は自分の変更を追跡しているため、Developer Sandbox から何を取得すればいいのかがわかります。

Sandbox からいくつかのコンポーネントを取得するだけであるため、Ella は VS Code のターミナルを使用して Salesforce CLI の project retrieve start コマンドを実行することにしました。DX プロジェクトで指定されたデフォルトのディレクトリに基づいて、CLI によってソースが force-app フォルダーに配置されます。GitHub では空のフォルダーを追加できないため、Ella は force-app フォルダーをローカルファイルシステムの DX プロジェクトに作成します。

  1. ローカルファイルシステムの DX プロジェクトで、force-app フォルダーを作成します。
  2. VS Code ターミナルで、次のように CLI コマンドを実行し、新しいカスタムオブジェクトとカスタム項目を取得します。
    sf project retrieve start --metadata CustomObject:Language_Course_Instructor__c --metadata CustomField:Language_Course__c.Course_Instructor__c
    Ella は --source-dir の代わりに --metadata を使用しています。--source-dir はファイルシステムにすでに存在するファイルのみを取得することができるためです。カスタムオブジェクトは、force-app/main/default/objects ディレクトリに表示されます。 左側に source:retrieve コマンドの後に作成された新しいディレクトリ構造である force-app/main/default/objects が表示されている VS Code。右側には、コマンドを実行したターミナルウィンドウとその結果の CLI 出力が表示されている。

ソース制御リポジトリに対して変更をコミットする

Ella は自分の変更をリポジトリにコミットしてから、Juan に Ella の変更がレビューできるようになったことを知らせるためにプルリクエストを作成します。

  1. VS Code で、[Source Control (ソース制御)] アイコン [Source Control (ソース制御)] アイコンを選択します。
  2. コミットコメントを入力し、[Commit (コミット)] アイコン [Commit (コミット)] アイコンをクリックします。
  3. [はい] をクリックして、ファイルを追加してコミットします。
  4. VS Code コマンドパレットから、[Git: Push To (Git: プッシュ先)] を選択します。
  5. オリジンリポジトリを選択します。

コードをレビューする

メモ

同じ手順を実行している場合は、このセクションをスキップできます。

  1. プルリクエストを作成します。GitHub リポジトリで、[Compare & pull request (比較とプルリクエスト)] をクリックします。
  2. レビュー担当者を割り当てます。Ella は自分の変更をレビューして承認する作業を Juan に割り当てます。
  3. レビュー担当者へのコメントを入力します。
  4. [Create pull request (プルリクエストを作成)] をクリックします。

Juan がコードをレビューして承認した後、Ella はプルリクエストをマージします。これで、Juan はトリガーの作成を開始できることがわかります。

トリガーを作成する

コースが更新されたり、新しいコースが追加されたりすると、トリガーによって営業チームに通知されます。トリガーは、Lightning プラットフォームデータベースで特定のタイプのレコードが挿入、更新、または削除される前または後に実行する Apex コードの一部です。

Juan は、新しいカスタムオブジェクトを含む GitHub リポジトリをコピーして、自分用のブランチを作成します。また、VS Code で自分のトリガーとそれに対応するテストを作成します。

プロジェクトリポジトリを Developer Sandbox にリリースする

まず、Juan は Ella の変更を自分の Developer Sandbox にリリースし、両者の環境を同期させます。

メモ

同じ手順を実行している場合は、org-dev-juan のような Juan の開発作業用に作成したフォルダーで、以下の手順を実行してください。Juan の Developer Sandbox には、新しい Developer Edition 組織または Trailhead Playground を使用します。

  1. GitHub リポジトリをコピーします。
  2. VS Code で、[Git: Create Branch (Git: ブランチを作成)] を選択して、ブランチの名前を指定します。Juan は自分のブランチの名前を juan_apex_trigger にします。
  3. [SFDX: Authorize an Org (SFDX: 組織を承認)] を選択します。
  4. ログイン URL (test.salesforce.com) に、[Sandbox] を選択します。
  5. Sandbox の別名 (dev_sandbox など) を入力します。
  6. Sandbox のユーザー名とパスワードを使用してログインします。
  7. Ella の変更を Juan の Developer Sandbox にリリースします。objects フォルダーを右クリックして [SFDX: Deploy Source to Org (SFDX: 組織にソースをリリース)] を選択します。または、ターミナルで Salesforce CLI コマンドを実行することもできます。
    sf project deploy start --metadata CustomObject:Language_Course_Instructor__c --metadata CustomField:Language_Course__c.Course_Instructor__c

トリガーを構築する

  1. VS Code の juan_apex_trigger ブランチで、トリガーを配置するディレクトリを作成します。
    1. force-app フォルダーを展開します。
    2. default を右クリックして、[New Folder (新しいフォルダー)] を選択します。
    3. triggers と入力します。
  2. triggers フォルダーを右クリックして、[SFDX: Create Apex Trigger (SFDX: Apex トリガーを作成)] をクリックします。
  3. トリガー名に LanguageCourseTrigger と入力します。トリガーのコードを入力します。
    trigger LanguageCourseTrigger on Language_Course__c (after insert, after update, after delete) {
    // <write your own notification code>
    }
  4. ファイルを保存します。
  5. TestLanguageCourseTrigger というトリガー用のテストを作成します。経験豊富な開発者である Juan は、コードカバー率要件が満たされていることを確認します。

変更を Developer Sandbox にリリースする

Juan はトリガーをリリースし、検証とコンパイルを行い、新しいオブジェクトで正しく動作することをテストします。

  1. VS Code ターミナルで、triggers フォルダーを右クリックして、[SFDX: Deploy This Source to Org (SFDX: 組織にソースをリリース)] を選択します。または、ターミナルから CLI コマンドを実行することもできます。
    sf project deploy start --source-dir force-app/main/default/triggers
    左側にトリガーの source:deploy コマンドの後に作成された新しいディレクトリ構造である force-app/main/default/triggers が表示されている VS Code。右側には、コマンドを実行したターミナルウィンドウとその結果の CLI 出力が表示されている。
  2. Juan は、すべての変更が取得され、その変更が Sandbox で動作することを確認します。
  3. Juan は自分の変更を変更リストに追加します。
メタデータ型 オブジェクト 変更のタイプ (作成、更新、削除) 詳細
CustomObject Language_Course_Instructor__c 作成 コースの講師を取得するオブジェクト
CustomField Course_Instructor__c
作成 Language_Course__c カスタムオブジェクトとの主従関係
ApexTrigger LanguageCourseTrigger 作成 Language_Course__c オブジェクトが作成、更新、または削除されたときに営業チームにメールを送信する
ApexClass TeastLnguageCourseTrigger 作成 トリガーの Apex テストカバー率

ソース制御リポジトリに対して変更をコミットする

Juan は自分の変更をリポジトリにコミットし、プルリクエストを作成します。Ella はコードレビューを実施します。

次のリリースを計画する

Juan と Ella は、今後カスタマイズを行う際にも同じプロセスを実行します。Juan のトリガー作成の作業のように、VS Code でカスタマイズを作成した場合は、検証とテストのために Developer Sandbox にリリースします。

それ以外のことはすべて [設定] を使用するため、ビルダー、ウィザード、宣言型インターフェースを活用できます。その後、行った変更を Sandbox からローカルファイルシステムに取り込みます。変更をソース制御にコミットして、プルリクエストを作成し、コードレビューを要求してから、変更をマスターブランチにマージします。

Salesforce ヘルプで Trailhead のフィードバックを共有してください。

Trailhead についての感想をお聞かせください。[Salesforce ヘルプ] サイトから新しいフィードバックフォームにいつでもアクセスできるようになりました。

詳細はこちら フィードバックの共有に進む