変更をテストしてリリースする
学習の目的
- リリースされるコンポーネントをリストしたマニフェストファイル (
package.xml
) を作成する。 - 組織への変更のリリースに使用されるコマンドを説明する。
- クイックリリースを使用してリリースを高速化する方法について説明する。
リリースアーティファクトを作成する
開発タスクを完了したところで、Juan と Ella は行った変更を他の開発チームの他のメンバーと共有する環境に移動します。その後、ビルドリリースフェーズに移行し、Developer Pro Sandbox で変更を統合します。
テストが完了したら、Juan は最終的なリリースアーティファクトを作成します。これは、Sandbox と本番組織にリリースされるコンポーネントをリストしたマニフェストファイル (package.xml
) です。マニフェストファイルを使用してコンポーネントを取得することもできます。 次に Juan は Full Sandbox でマニフェストファイルを使用してユーザー受け入れテストを実施します。Juan と Ella は、最終的な検証を行い、問題がないことを確認します。最後に、本番組織へのリリースを計画して実行します。
変更をリポジトリから取得する
Juan は、一元的な情報源 (このリリースに対するすべての変更) が GitHub リポジトリに存在するようになったことを認識しています。
- VS Code で、[Source Control (ソース制御)] アイコン (1) をクリックします。
- [追加アクション] アイコン (2) をクリックし、[Pull from (取得元)] (3) を選択します。
- オリジンを選択します。
- リポジトリには、新しいカスタムオブジェクト、カスタム項目、トリガーが含まれています。Ella と Juan が行った変更はすべてここにあります。
Developer Pro Sandbox を承認する
- VS Code で、Developer Pro Sandbox にログインします。[SFDX: Authorize an Org (SFDX: 組織を承認)] を選択します。
- ログイン URL (test.salesforce.com) に、[Sandbox] を選択します。
- Sandbox の別名 (
dev_pro_sandbox
など) を入力します。 - Sandbox のユーザー名とパスワードを使用してログインします。
リリースアーティファクトを構築する
Juan の最初の作業は、変更を Developer Pro Sandbox にリリースできるように、リリースアーティファクトを構築することです。Juan はマニフェストファイルを作成することにします。このファイルは通常 package.xml
という名前で、リリースするメタデータコンポーネントがリストされています。
- コマンドウィンドウから、Salesforce DX プロジェクトディレクトリが表示されていることを確認します。
- コマンドラインで、
project generate manifest
コマンドのヘルプを表示します。sf project generate manifest --help
--help
で、コマンドの形式を確認できます。Juan は新しいメタデータコンポーネントのみをリリースしたいと考えているため、--metadata
フラグが必要だと判断します。 -
project generate manifest
コマンドを実行し、リリースするコンポーネントを指定します。たとえば、新しい Language Course Instructors (語学コースインストラクター) オブジェクトや変更リスト内のその他の変更などです。sf project generate manifest --metadata CustomObject:Language_Course_Instructor__c --metadata CustomField:Language_Course__c.Course_Instructor__c --metadata ApexTrigger:LanguageCourseTrigger --metadata ApexClass:TestLanguageCourseTrigger
コマンドによって現在のディレクトリにpackage.xml
というマニフェストファイルが生成されます。 - Developer Pro Sandbox で
package.xml
ファイルをテストして、すべてのコンポーネントがリリースされることを確認します。sf project deploy start --manifest package.xml --target-org dev-pro-sandbox
ここで一度止まって、package.xml
ファイルについてじっくり考えてみましょう。 生成したばかりのファイルをテキストエディターで開いてもかまいません。 このファイルには、リリースするメタデータコンポーネントがリストされているだけで、実際の Apex コードやカスタムオブジェクトの完全な構造は含まれていません。 このマニフェストファイルを使用してリリースする場合、deploy コマンドではその時点でローカルプロジェクト内に存在するソースファイルが使用されます。 異なる VCS ブランチからコマンドを実行したり、コンポーネントのローカルソースファイルを変更したりすると、そのファイルが代わりにリリースされます。つまり、マニフェストファイルを使用するときにはリリースする実際のソースファイルに注意してください。
マニフェストファイルを使用してリリース中にコンポーネントを削除することもできます。削除するコンポーネントをリストする破壊的な変更のマニフェストファイルを生成するには、project generate manifest
コマンドの --type
フラグを使用します。その後、このファイルを project deploy start|validate
の削除フラグのいずれか (--post-destructive-changes
など) と併せて指定します。
テスト (Partial) Sandbox でリリースアーティファクトをテストする
Juan は再びコマンドウィンドウまたはターミナルを使用して Salesforce CLI コマンドを実行し、変更をテスト Sandbox にリリースします。Juan は先ほどと同じ project deploy start
コマンドを使用して変更をリリースします。
- Partial Sandbox を承認します。
- Salesforce DX プロジェクトディレクトリが表示されていることを確認します。
- コマンドラインで、deploy コマンドのヘルプを表示します。
sf project deploy start --help
--help
を使用すると、コマンドの形式や含めるべきフラグを知ることができます。具体的には、package.xml
マニフェストファイルを使用してリリースするには--manifest
を使用します。 - 次のように、本番組織にリリースする内容を模倣する deploy コマンドを実行します。
sf project deploy start --manifest package.xml --target-org partial-sandbox --test-level RunSpecifiedTests --tests TestLanguageCourseTrigger
- 必要に応じて、Selenium テストなどの UI テストを実行します。
- 次のように Sandbox を開きます。
sf org open --target-org partial-sandbox
- ユーザー受け入れテストを実施します。
プロセスのこのフェーズで Juan が重視するのは、リリースされるアプリケーションや変更に関連するテストのみであるため、リリースアーティファクト内にあるコードのテストだけを実行します。
Juan のテストが合格すると、テストリリースフェーズに移行し、ステージング Sandbox で回帰テストを実施します。
ステージング (Full) Sandbox でリリースアーティファクトをテストする
インテグレーションテストに基づいて変更を行わなかった場合は、次に Full Sandbox で変更をステージングします。Juan は同様のプロセスに従って、変更を Full Sandbox にリリースします。このフェーズでは、回帰テストを実行し、Juan が変更を本番環境にリリースする方法を模倣します。
テストフェーズでエラーが検出されなかったため、同じ package.xml
ファイルを使用して、テストしたときと同じブランチからリリースするようにします。テストフェーズでエラーがあった場合は、そのエラーを修正してもう一度やり直します。
まず、すべてのテストを実施する組織に対して検証リリースを行うことで、回帰分析を実行します。検証リリースでは、リリースで実行されるテストの結果を検証できますが、いかなる変更もコミットされません。検証によって、別のコンポーネントと連動しているメタデータコンポーネントを忘れていないことや、無効なメタデータがないことも確認できます。すべての回帰テストを実行した後、クイックリリースを実行して、本番環境へのリリースで行う手順を完全に模倣します。Juan はこれをすべて、Salesforce CLI を使用して行います。
ステージング環境でコンポーネントを適切に検証することで、Juan はカスタマイズが本番環境にリリースする際のシステムへのユーザーアクセスをブロックするメンテナンス実施期間を短くすることができます。
- Full Sandbox を承認します。
- ターゲット組織にコンポーネントを保存せずに、すべてのローカル (回帰) テストを実行してリリースを検証します。
sf project deploy validate --manifest package.xml --target-org full-sandbox --test-level RunLocalTests
このコマンドでは、クイックリリースで参照する必要のあるジョブ ID が返されます。検証が成功したということは、すべての Apex テストが合格しており、リリースされるコードの 75% 以上がテスト対象になっているということを意味します。 - 次に、前の手順で返されたジョブ ID を使用して Full Sandbox でクイックリリースを実行します。このクイックリリースは、後で本番組織で行われることを模倣したものです。
sf project deploy quick --job-id <jobID> --target-org full-sandbox
本番組織にリリースする
Juan とチームは、いよいよラストスパートに入ります。Full Sandbox ですべてのテストに合格したため、これで本番組織にリリースする準備が整いました。営業チームは自分たちのビジョンが実現されるのを非常に楽しみにしています。
Juan はリリース実行リストを参照して、リリース前に完了すべきタスクがないことを確認します。準備は整いました。別のリリースを実行したり組織への大きな変更を行ったりしなければ、検証リリースの実行後、10 日間かけて本番環境へのクイックリリースを実施できます。Juan は、ステージング Sandbox との違いによって決して問題が発生しないように本番組織の検証リリースを設定します。問題が発生した場合にトラブルシューティングを行えるように、Juan は検証リリースを営業時間中に実行します。検証が成功したら、お客様への影響を最小限に抑えるために、本番へのリリースはクイックリリースを使用してその日の夜に行います。
- 本番組織に対する承認を行います。
- まず、
project deploy validate
を実行することによって、クイックリリースの検証と設定を行います。sf project deploy validate --manifest package.xml --target-org production-org --test-level RunLocalTests
このコマンドでは、クイックリリースで参照する必要のあるジョブ ID が返されます。 - 次のようにクイックリリースを実行します。
sf project deploy quick --job-id <jobID> --target-org production-org
- 本番組織を開いて、変更が表示されていることを確認します。
リリース実行リストに記載されているリリース後タスクを実施する
Juan は、リリース実行リストをもう一度参照して、本番組織で実行するリリース後タスクを確認します。
フェーズ (前または後) | エンティティ/コンポーネント | メモ | 手順 |
---|---|---|---|
リリース前 | なし | 必要なタスクはありません | なし |
リリース後 | セールスプロファイル | 営業チームがカスタムオブジェクトとカスタム項目を表示できるように、権限を更新します。 | [設定] で、営業チームのプロファイルを編集します。[Language Course Instructors (語学コースインストラクター)] の「参照」アクセス権を付与します。 |
別のロールアウトにも成功!
Calvin は本番組織で簡単なサニティチェックを行います。インストラクターをいずれかのコースに追加し、通知メールが受信箱に送信されることを確認します。
すべての変更がソース制御システムに反映されているため、チームは Calvin にリリースノートに記載する変更の最終的なリストを提供することができます。
Calvin は、新しい通知機能の準備が整ったことを営業チームに通知します。また、Ella と Juan に、Zephyrus の営業チームが最新のコース情報を入手するのに役立つ重要な機能のリリースに成功したことについて感謝を伝えます。Calvin は、変更がリポジトリに保存されるようになったことに満足しており、チームがより多くの作業に取り組む際にリポジトリがもたらす利点を実感しています。