ローカルで変更を開発してテストする
学習の目的
この単元を完了すると、次のことができるようになります。
- ブランチを作成し、変更をソース制御リポジトリにコミットする。
 - VS Code 向け Salesforce 拡張機能を使用して、Sandbox を承認する。
 - Sandbox から変更を取得する。
 
コードリポジトリを設定する
Zephyrus Relocation Services の開発チームは、GitHub でコードをホストし、作業を確認しています。ソースリポジトリに変更をコミットし、カスタマイズの競合を特定してマージしてから、作業を続けます。
ソース制御リポジトリを作成する
リポジトリは、Juan が開発プロジェクトのソースファイルを整理する場所です。また、Juan は Salesforce DX プロジェクトを作成してこのリポジトリに追加します。
リポジトリには、その目的を反映したわかりやすい名前を付けます。これは内部開発プロジェクトであるため、Juan は Zephyrus の Enterprise アカウントを使用して、language-courses という非公開リポジトリを作成します。
Salesforce DX プロジェクトを作成する
- VS Code を開きます。
 - メニューから、[View (表示)] | [Command Palette (コマンドパレット)] を選択します。
 - コマンドパレットの検索ボックスに、
sfdx projectと入力します。 - [SFDX: Create Project with Manifest (SFDX: マニフェストを使用したプロジェクトの作成)] を選択します。
 - GitHub リポジトリと同じ名前の 
language-coursesを使用し、[Enter (入力)] をクリックします。 - [Create Project (プロジェクトを作成)] をクリックします。
 
プロジェクトファイルを GitHub のリポジトリに追加する
- VS Code で、DX プロジェクトディレクトリを開き、
[Source Control (ソース制御)] アイコンをクリックします。 - [Initialize Repository (リポジトリの初期化)] をクリックします。
 - [変更] の上にマウスポインターを置き、[+] をクリックして、すべての変更をステージングします。
 - リポジトリをコミットするデフォルトブランチ (main など) を受け入れます。
 - コミットメッセージを入力して、
 [Commit (コミット)] アイコンをクリックします。 - [Publish Branch (ブランチを公開)] をクリックします。
 - ブランチを公開する場所を確認します。
 
新しい要件に対応するカスタマイズを作成する
Calvin は営業チームとミーティングを行い、次のリリースの新しい要件を集めました。営業チームからは、語学コースが追加または変更されたときに通知を受信したい、また各コースを教えているのがだれなのかを知りたいという要望がありました。
Juan は、チームが組織開発モデルを使いこなせるようになるために、この要求がうってつけであると考えています。このモデルは、はるかに複雑な開発シナリオにも対応できますが、この単純な一連のステップを利用することで、チームはモデルのワークフローを理解できます。
Ella に割り当てられた作業は、語学コースインストラクターのカスタムオブジェクトを作成し、それをコースレコードにリンクすることです。Juan は、営業チームの別名に通知メールを送信するトリガーを作成します。手順は次のとおりです。
リポジトリをコピーする
まず、Ella は GitHub リポジトリをコピーして、自分用のブランチを作成します。
- コピーするリポジトリ、たとえば 
https://github.com/zephyrus/language-coursesにアクセスします。
ただし、このリポジトリは存在せず、説明のみを目的としたものです。同じ手順を実行する場合は、この手順で作成したサンプルリポジトリで代用してください。また、Juan と Ella という 2 人のデベロッパーのペルソナの作業もシミュレートすることになります。親ディレクトリを個別に 2 つ作成し、それぞれで開発作業を分担することをお勧めします。たとえば、Ella の開発作業を行う場合は、リポジトリをorg-dev-ellaフォルダーにコピーします。Juan の開発作業を行う場合は、リポジトリをorg-dev-juanフォルダーにコピーします。- [Clone or download (クローンまたはダウンロード)] をクリックします。
 - HTTPS URL をコピーします。
 
 - VS Code のコマンドパレットから、[Git: Clone (Git: クローン)] を選択します。
 - [Repository URL (リポジトリ URL)] に、リポジトリへの URL を貼り付けて、[入力] をクリックします。Ella は Juan が作成したリポジトリである 
https://github.com/zephyrus/language-courses.gitをコピーします。 - ローカルファイルシステムで、GitHub リポジトリを配置する場所に移動し、[Select Repository Location (リポジトリの場所を選択)] をクリックします。
 - [Open Repository (リポジトリを開く)] をクリックします。
 - コマンドパレットから、[Git: Create Branch (Git: ブランチを作成)] をクリックします。
 - ブランチ名を入力します。Ella は自分のブランチを 
ella-custom-objectとしました。これで、Ella は自分用のブランチで作業できます。 
Sandbox を承認してログインする
次に、Ella は VS Code を使用して、Developer Sandbox を承認 (ログイン) します。
- コマンドパレットの検索ボックスに、
sfdx authorizeと入力します。 - [SFDX: Authorize an Org (SFDX: 組織を承認)] を選択します。
 - ログイン URL に [Sandbox] を選択します。
 - Sandbox の別名 (
dev_sandboxなど) を入力します。 - Sandbox のユーザー名とパスワードを使用してログインします。
 
カスタムオブジェクトの作成
その後、Ella は Developer Sandbox で Language Course (語学コース) と Language Instructor (語学インストラクター) カスタムオブジェクトを作成します。
- [Setup (設定)] から、[Object Manager (オブジェクトマネージャー)] タブをクリックします。
 - 右上にある [作成] | [カスタムオブジェクト] をクリックします。
 - [Label (表示ラベル)] に、
Language Course Instructor(語学コースインストラクター) と入力します。[オブジェクト名] 項目と [レコード名] 項目は自動的に入力されます。 - [Plural Label (表示ラベル (複数形))] に、
Language Course Instructors(語学コースインストラクター) と入力します。 - [新規カスタムタブウィザードを起動する] チェックボックスをオンにして、[保存] をクリックします。
 - 目的のタブスタイルを選択し (Ella は [プレゼンター] を選択)、オブジェクトを保存できるまで [次へ] をクリックします。
 
カスタム項目を定義する
次に、Ella は Language Course Instructor (語学コースインストラクター) オブジェクトを参照する Language Course (語学コース) オブジェクトのカスタムオブジェクト項目を定義します。
- [設定] から、[オブジェクトマネージャー] | [Language Course (語学コース)] に移動します。
 - [項目とリレーション] をクリックします。名前項目など、すでにいくつかの項目が存在します。
 - [新規] をクリックします。
 - [データ型] で [主従関係] を選択し、[次へ] をクリックします。
 - [関連先] から、[Language Course Instructor (語学コースインストラクター)] を選択して、[次へ] をクリックします。
 - 次のように入力します。
- 項目の表示ラベル: Course Instructor
 - 説明: Teacher for the language course
 
 - 項目を保存できるまで [次へ] をクリックします。
 
変更リストで変更を追跡する
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 プロジェクトに作成します。
- ローカルファイルシステムの DX プロジェクトで、
force-appフォルダーを作成します。 - 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ディレクトリに表示されます。
 
ソース制御リポジトリに対して変更をコミットする
Ella は自分の変更をリポジトリにコミットしてから、Juan に Ella の変更がレビューできるようになったことを知らせるためにプルリクエストを作成します。
- VS Code で、
 [Source Control (ソース制御)] アイコンを選択します。 - コミットコメントを入力し、
 [Commit (コミット)] アイコンをクリックします。 - [はい] をクリックして、ファイルを追加してコミットします。
 - VS Code コマンドパレットから、[Git: Push To (Git: プッシュ先)] を選択します。
 - オリジンリポジトリを選択します。
 
トリガーを作成する
コースが更新されたり、新しいコースが追加されたりすると、トリガーによって営業チームに通知されます。トリガーは、Lightning プラットフォームデータベースで特定のタイプのレコードが挿入、更新、または削除される前または後に実行する Apex コードの一部です。
Juan は、新しいカスタムオブジェクトを含む GitHub リポジトリをコピーして、自分用のブランチを作成します。また、VS Code で自分のトリガーとそれに対応するテストを作成します。
プロジェクトリポジトリを Developer Sandbox にリリースする
まず、Juan は Ella の変更を自分の Developer Sandbox にリリースし、両者の環境を同期させます。
- GitHub リポジトリをコピーします。
 - VS Code で、[Git: Create Branch (Git: ブランチを作成)] を選択して、ブランチの名前を指定します。Juan は自分のブランチの名前を 
juan_apex_triggerにします。 - [SFDX: Authorize an Org (SFDX: 組織を承認)] を選択します。
 - ログイン URL (test.salesforce.com) に、[Sandbox] を選択します。
 - Sandbox の別名 (
dev_sandboxなど) を入力します。 - Sandbox のユーザー名とパスワードを使用してログインします。
 - 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
 
トリガーを構築する
- VS Code の 
juan_apex_triggerブランチで、トリガーを配置するディレクトリを作成します。- 
force-appフォルダーを展開します。 - default を右クリックして、[New Folder (新しいフォルダー)] を選択します。
 - 
triggersと入力します。 
 - 
 - triggers フォルダーを右クリックして、[SFDX: Create Apex Trigger (SFDX: Apex トリガーを作成)] をクリックします。
 - トリガー名に 
LanguageCourseTriggerと入力します。トリガーのコードを入力します。trigger LanguageCourseTrigger on Language_Course__c (after insert, after update, after delete) { // <write your own notification code> } - ファイルを保存します。
 - TestLanguageCourseTrigger というトリガー用のテストを作成します。経験豊富な開発者である Juan は、コードカバー率要件が満たされていることを確認します。
 
変更を Developer Sandbox にリリースする
Juan はトリガーをリリースし、検証とコンパイルを行い、新しいオブジェクトで正しく動作することをテストします。
- VS Code ターミナルで、
triggersフォルダーを右クリックして、[SFDX: Deploy This Source to Org (SFDX: 組織にソースをリリース)] を選択します。または、ターミナルから CLI コマンドを実行することもできます。sf project deploy start --source-dir force-app/main/default/triggers
 - Juan は、すべての変更が取得され、その変更が Sandbox で動作することを確認します。
 - 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 からローカルファイルシステムに取り込みます。変更をソース制御にコミットして、プルリクエストを作成し、コードレビューを要求してから、変更をマスターブランチにマージします。
