Apex Recipes サンプルアプリケーションについて知る
Trailhead Playground に Apex Recipes をインストールしたら、さっそく、提供されたレシピのいくつかを見ていきましょう。このレシピは、有意義な仕事をするのに十分な具体性がありながら、再利用可能に対応できるだけの汎用性も兼ね備えたコードの断片である、インテリジェントな抽象化を表しています。この単元では、外部サービスへの Http コールアウトの実行および持続可能なトリガーの作成という、2 つの抽象化について調査します。
Http コールアウトの実行
サードパーティのサービスに対して Http コールアウトを実行する必要があるのはごく一般的なことです。現在の通貨換算レートを取得するためであれ、会社の ERP システムを更新するためであれ、コールアウトを実行することは開発者が頻繁に行う作業です。コールアウトを実行する Apex コードは単純で、かなり定型的になります。基本のコールアウトコード上にインテリジェントな抽象化を構築することで、コードが少なくなり、テストしやすくなります。Apex Recipes には、コールアウトの実行方法を示すレシピだけでなく、再利用可能でインテリジェントな抽象化を確立する方法を表すコードも含まれています。
Playground 組織を開いて、Apex Recipes を開きます。これを行う手順は、次のとおりです。
- アプリケーションランチャーで [Apex Recipes] を選択します。これで、Apex Recipes Lightning アプリケーションが開きます。
- Apex Recipes はグループに整理されています。[Integration Recipes] の横にある > をクリックします。
- [CalloutRecipes] をクリックします。
特定のレシピをクリックするとすぐに右側にコードが表示されます。コードだけではなく、上部には対応するテストクラス、クラスのドキュメント、関連する他のクラスのタブも表示されます。たとえば 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 で開きます。
- [Trigger Recipes] の横にある > をクリックします。
- [AccountTriggerHandler] クラスをクリックします。
右側に表示されている TriggerHandler
と AccountServiceLayer
という 2 つの関連するコードタブに注目してください。TriggerHandler
タブをクリックします。これは、トリガーハンドラーフレームワーク抽象化の中心部です。run()
が表示されるまで下にスクロールします。このメソッドの switch ステートメントは、AccountTriggerHandler
のさまざまなコンテキストメソッドをコールする機能を担っています。では、メインの AccountTriggerHandler
タブに戻って、AccountTriggerHandler
クラスを見てみましょう。ここには、さまざまなトリガーコンテキストに対応するメソッドがあります。beforeInsert()
が表示されるまで下にスクロールします。beforeInsert()
メソッドは他のクラスのコードをコールします。この場合は、AccountServiceLayer
です。右側のタブをクリックして、incrementCounterInDescription()
メソッドが表示されるまで下にスクロールします。このメソッドには、トリガーで実行したいビジネスロジックが含まれます。このように構築することで、組織内の他の部分で実行する場合にも利用可能なコードをトリガー中に実行させることができます。このアーキテクチャでは、ビジネスロジックの操作順序を開発者が制御でき、テストも容易になります。いいことずくめですね。
まだまだあるその他の機能
Apex Recipes の RestClient
と TriggerHandler
について学びました。ただし、まだまだたくさんあります。アプリケーション全体を通して、FLS と CRUD に従う SOQL クエリの例があります。if
、else
、switch
ステートメントのような条件ステートメントを使用したコード例もあります。Queueables
、Batch
、Scheduled
クラスなどの非同期 Apex の例も用意されています。このサンプルアプリケーションはさらにレシピが追加される予定ですが、すでに Apex の適切なコーディング方法の優れたリファレンスとなっています。
このようなレシピは、特定のタスクを達成する方法だけでなく、より安全で持続可能なコードを記述する方法を理解するのに役立つでしょう。
このステップでは作業内容の確認は行いません。[Verify Step (ステップを確認)] をクリックして、プロジェクトを完了し、バッジを獲得してください。