Skip to main content
Join the Agentforce Hackathon on Nov. 18-19 to compete for a $20,000 Grand Prize. Sign up now. Terms apply.

Apex Recipes サンプルアプリケーションについて知る

メモ

メモ

日本語で受講されている方へ
Challenge は日本語の Trailhead Playground で開始し、かっこ内の翻訳を参照しながら進めていってください。Challenge での評価は英語データを対象に行われるため、英語の値のみをコピーして貼り付けるようにしてください。日本語の組織で Challenge が不合格だった場合は、(1) この手順に従って [Locale (地域)] を [United States (米国)] に切り替え、(2) [Language (言語)] を [English (英語)] に切り替えてから、(3) [Check Challenge (Challenge を確認)] ボタンをクリックしてみることをお勧めします。

翻訳版 Trailhead を活用する方法の詳細は、自分の言語の Trailhead バッジを参照してください。

はじめに

Trailhead Playground に Apex Recipes をインストールしたら、さっそく、提供されたレシピのいくつかを見ていきましょう。このレシピは、有意義な仕事をするのに十分な具体性がありながら、再利用可能に対応できるだけの汎用性も兼ね備えたコードの断片である、インテリジェントな抽象化を表しています。この単元では、外部サービスへの Http コールアウトの実行および持続可能なトリガーの作成という、2 つの抽象化について調査します。

Http コールアウトの実行

サードパーティのサービスに対して Http コールアウトを実行する必要があるのはごく一般的なことです。現在の通貨換算レートを取得するためであれ、会社の ERP システムを更新するためであれ、コールアウトを実行することは開発者が頻繁に行う作業です。コールアウトを実行する Apex コードは単純で、かなり定型的になります。基本のコールアウトコード上にインテリジェントな抽象化を構築することで、コードが少なくなり、テストしやすくなります。Apex Recipes には、コールアウトの実行方法を示すレシピだけでなく、再利用可能でインテリジェントな抽象化を確立する方法を表すコードも含まれています。

Playground 組織を開いて、Apex Recipes を開きます。これを行う手順は、次のとおりです。

  1. アプリケーションランチャーで [Apex Recipes] を選択します。これで、Apex Recipes Lightning アプリケーションが開きます。
  2. Apex Recipes はグループに整理されています。[Integration Recipes] の横にある > をクリックします。 
  3. [CalloutRecipes] をクリックします。

CalloutRecipes クラスが表示されている Apex Recipes のコードビューアー。

特定のレシピをクリックするとすぐに右側にコードが表示されます。コードだけではなく、上部には対応するテストクラス、クラスのドキュメント、関連する他のクラスのタブも表示されます。たとえば CalloutRecipes には、別の関連するクラス RestClient があります。 

CalloutRecipes コードタブで、rawCallout() メソッドが表示されるまで下にスクロールします。このレシピには、必要なオブジェクトの作成、エンドポイントの設定、コールアウトの起動を行う手順が示されています。このクラスの他のメソッドは、get()del()put()post() などのメソッドへのコールを実行します。このようなメソッドは、仮想の親クラス RestClient によって提供されます。RestClient を拡張するクラスは、RestClient が提供するすべてのメソッドを利用すると同時に、必要に応じてメソッドを上書きできます。rawCallout() メソッドと httpGetCalloutToSecondOrg() メソッドを比較すると、このインテリジェントな抽象化によって必要なコード量がいかに削減されているかがわかります。rawCallout() には、応答を処理する前に、コールアウトを実行することに特化した 約 5 行のコードがあります。一方で、httpGetCalloutToSecondOrg() は GET HTTP コールの実行と同じ作業を 1 行で完了します。 

持続可能なトリガーの作成

Apex 開発者の世界では、トリガーはスイス軍のチェーンソー (汎用性がありながら使いにくいツール)です。これがあれば大抵のことは何でもできますが、注意しないと間違った木を切ってしまうこともあります。この点を考慮して、Apex Recipes ではインテリジェントな抽象化としてトリガーハンドラーフレームワークを活用することで、ベストプラクティスに従っています。Apex Recipes には 2 つのトリガーがあり、1 つは取引先で起動し、もう 1 つはカスタムプラットフォームイベントで起動します。Apex Recipes のトリガーハンドラーが優れている点は、両方のユースケースで機能することです。取引先トリガーハンドラーを見てみましょう。

では、次の手順でそのクラスを UI で開きます。

  1. [Trigger Recipes] の横にある > をクリックします。
  2. [AccountTriggerHandler] クラスをクリックします。

Apex Recipes の UI

右側に表示されている TriggerHandlerAccountServiceLayer という 2 つの関連するコードタブに注目してください。TriggerHandler タブをクリックします。これは、トリガーハンドラーフレームワーク抽象化の中心部です。run() が表示されるまで下にスクロールします。このメソッドの switch ステートメントは、AccountTriggerHandler のさまざまなコンテキストメソッドをコールする機能を担っています。では、メインの AccountTriggerHandler タブに戻って、AccountTriggerHandler クラスを見てみましょう。ここには、さまざまなトリガーコンテキストに対応するメソッドがあります。beforeInsert() が表示されるまで下にスクロールします。beforeInsert() メソッドは他のクラスのコードをコールします。この場合は、AccountServiceLayer です。右側のタブをクリックして、incrementCounterInDescription() メソッドが表示されるまで下にスクロールします。このメソッドには、トリガーで実行したいビジネスロジックが含まれます。このように構築することで、組織内の他の部分で実行する場合にも利用可能なコードをトリガー中に実行させることができます。このアーキテクチャでは、ビジネスロジックの操作順序を開発者が制御でき、テストも容易になります。いいことずくめですね。

まだまだあるその他の機能

Apex Recipes の RestClientTriggerHandler について学びました。ただし、まだまだたくさんあります。アプリケーション全体を通して、FLS と CRUD に従う SOQL クエリの例があります。ifelseswitch ステートメントのような条件ステートメントを使用したコード例もあります。QueueablesBatchScheduled クラスなどの非同期 Apex の例も用意されています。このサンプルアプリケーションはさらにレシピが追加される予定ですが、すでに Apex の適切なコーディング方法の優れたリファレンスとなっています。

このようなレシピは、特定のタスクを達成する方法だけでなく、より安全で持続可能なコードを記述する方法を理解するのに役立つでしょう。

このステップでは作業内容の確認は行いません。[Verify Step (ステップを確認)] をクリックして、プロジェクトを完了し、バッジを獲得してください。

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

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

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