Adminとうまく共存するための
ApexプログラミングTips
~ルーキーDeveloperの「その後」のために~
株式会社ユー・エス・イー 畑本貴史
1
自己紹介
はたもと たかし
畑本 貴史
株式会社ユー・エス・イー
サービスデザイン事業部
カスタマーサクセス課 主任
経歴
 2010年~Salesforce開発者(Apex/Visualforceメイン)
 AIアプリコンテスト2018 優勝チーム(ロボホンズ)
 Lightning App Dev Champion
 Salesforce Developer Group Tokyo 運営メンバー ←New!
2
Step0:ルーキー会で学んでコード書けるようになった!
けれど・・・
3
理解した!
好きなもの
自由に書ける!
Salesforceのコー
ディングを学ぶ
んだ・・・
何これ!
動かない!
あなたのコード、本当に「使える」コードですか?
4
あなたが開発したコードを使うのは、
組織のAdminとエンドユーザです。
開発したコードが組織の運用に役に立つよう、「使える」コードを理解しましょう。
Step1:Adminを困らせないためのTips
5
Step1:Adminを困らせないためのTips
あなたのコード、本当に運用組織に送っても大丈夫ですか?
 テストコードはどこ!?
 動作確認したのに、なぜ・・・?
 一括登録できない!?
 トリガの動きが違う!?
6
Step1:Adminを困らせないためのTips
①テストコードはどこ!?
Salesforceの運用環境はApex作成・更新不可
⇒Sandboxでコーディングを進め、運用環境に送る
⇒リリース時にApexテストコードが起動し、
以下の条件を満たさない場合はリリース不可
 テストコードが全てのApexクラスを網羅している
 テストコードのエラー0件
 全体のコードカバレッジが75%以上
(リリース対象Apexクラスと直接関係ないクラスは再テスト不要)
7
Step1:Adminを困らせないためのTips
①テストコードはどこ!?
Apexテストコードは、リリース対象クラスと1:1で作成する
⇒リリース時や改修時、どのテストコードを送れば
コードカバレッジを満たすのかわかりやすい
8
Step1:Adminを困らせないためのTips
②動作確認したのに、なぜ・・・ ?
開発時には主に管理者ユーザ
(すべてのデータを参照・編集可能)を使用し開発している
⇒自分で動作試験を行った段階では問題なし
⇒エンドユーザ(共有権限の影響あり)が操作した場合に
問題発生!?
システム管理者以外のアクセス権が考慮されてなかった・・・
9
Step1:Adminを困らせないためのTips
②動作確認したのに、なぜ・・・ ?
テストコードの中に、代理ログイン試験パターンを入れる
“System.runAs”で囲った範囲内の処理は
別ユーザのアクセス権限で処理される
⇒ユーザ間の挙動の違いも考慮してテストコードを記述する
10
Step1:Adminを困らせないためのTips
③一括登録できない!?
画面からの入力時に動作するApexトリガを作成
⇒画面から更新処理を行った場合は問題なし
⇒データローダで一括更新を行った場合にエラー!?
ガバナ制限に対する考慮が足りなかった・・・
11
Step1:Adminを困らせないためのTips
③一括登録できない!?
ガバナ制限のうち、特にトリガとの関連性が高い事項
 SOQL実行回数:100回
 DML実行回数:150回
データローダの最大バッチサイズ:200件
⇒処理件数1件ごとにSOQLやDMLを実行すると確実にエラー
⇒ループ処理の中でDBにアクセスしてはいけない
トリガのテストコードでは、バッチサイズ(200件)を考慮した
一括登録試験パターンを入れる
12
Step1:Adminを困らせないためのTips
④トリガの動きが違う!?
Sandboxで作ったトリガを運用環境にリリースしたら、
挙動が微妙に違う・・・?
⇒同じオブジェクト、イベントで複数のトリガが起動する際、
起動順序は不明(コードレベルで同じ組織でも異なる場合有)
13
トリガ1 トリガ2
Step1:Adminを困らせないためのTips
④トリガの動きが違う!?
トリガはオブジェクト毎に1件のみ定義し、
ビジネスロジックはハンドラクラスに別途記載する
⇒一つのイベントの中で順次呼び出せば確実に同じ順序で起動する
特に気になる部分は”System.AssertEquals”で値をチェック!
14
トリガ ハンドラ
テストコード大事。
15
Step1:Adminを困らせないためのTips
総括
バグを残したままリリースしないように、
テストコードでしっかりチェックしましょう・・・
Step2:Adminに末長く使ってもらうためのTips
16
Step2:Adminに末長く使ってもらうためのTips
カスタムパラメータを活用しよう
開発時点の仕様をもとに、Apex内部に定数を記述した
⇒その後、動作仕様に関わるパラメータが変わった場合、
Sandboxで修正し再度リリースしないといけない・・・
⇒パラメータがApex外部にあればコードを改修する必要なし!
17
Step2:Adminに末長く使ってもらうためのTips
カスタムパラメータを活用しよう
①カスタム表示ラベル
 1行のテキスト(String)
 システム変数として差し込み可能
 ユーザ表示言語別に定義可能
 パラメータはメタデータ扱い
(メタデータとしてリリース可能)
 ユースケース:表示文言・定数の値
例:外部WebサービスのエンドポイントURL
18
Step2:Adminに末長く使ってもらうためのTips
カスタムパラメータを活用しよう
②カスタム設定
 オブジェクトのレコード形式(1件、カスタム項目定義可能)
 システム変数として差し込み可能
 ユーザ・プロファイル別に定義可能
 パラメータはデータ扱い(メタデータに含まれない)
 ユースケース:特定ユーザのみ有効なフラグ・パラメータ
例:システム管理者のみ入力規則が判定されなくなるフラグ
19
Step2:Adminに末長く使ってもらうためのTips
カスタムパラメータを活用しよう
③カスタムメタデータ型
 オブジェクトのレコード形式(複数件登録可能、カスタム項目定義可能)
 SOQLで取得(ガバナ制限カウント対象外)
 組織内で一意のパラメータ
 パラメータはメタデータ扱い
(メタデータとしてリリース可能)
 ユースケース:マスタデータ、対応付け、ホワイトリスト
例:メールアラートの際、ユーザの所属部署に応じて
CC送信するメールアドレスの一覧
20
Step2:Adminに長く使ってもらうためのTips
カスタムパラメータを作ってみよう
カスタム表示ラベル カスタム設定 カスタムメタデータ型
データの持ち方
1行テキスト 1件のレコード 複数件のレコード
データの使い分け
言語別 ユーザ・プロファイル別
×
(自分で選択する)
メタデータAPIで
データ移行 ○
×
(レコードは別途登録)
○
ユースケース
表示文言
定数の値
特定ユーザ用フラグ
マスタデータ
対応付け
ホワイトリスト
21
カスタムパラメータ一覧
Step3:Adminにもっと活用してもらうためのTips
22
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
Apexクラスの書き方を工夫し、汎用性の高いコードを作ろう
汎用性のあるビジネスロジックは、
イベント処理クラスと分離してハンドラクラスとして記述する
⇒独立したハンドラクラスは、様々なイベントから呼び出せる
 Apexトリガ
 Apexスケジューラ/バッチ
 Visualforce
 Lightning Component
 プロセス、フロー
23
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
ハンドラクラスのお作法
 メンバー変数を使わない(定数は可)
 メソッドはpublic(global) staticで宣言
 DBアクセスを伴うメソッドは複数レコード一括処理
 必要に応じて各種アノテーションを付加
24
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
各種アノテーションを付けることで利用シーンが増える
通常
Apexトリガ、Apexスケジューラ/バッチ、
Visualforce(actionメソッド)で利用可能
@AuraEnabled
Lightning コンポーネント(Aura、LWC)で利用可能
@RemoteAction
Visualforce(Javascipt Remoting)で利用可能
25
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
更に・・・
ビジネスロジックを別のメソッドで呼び出す
@InvocableMethod
プロセス・フローから呼び出し可能
@InvocableVariable
上記メソッド使用時の引数・戻り値
26
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
27
試してみた
実際に動かす
ビジネスロジックの
メソッド
上記メソッドを呼ぶ
@InvocableMethod
メソッド
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
28
Apexアクションとして呼び出せる!
Step3:Adminにもっと活用してもらうためのTips
メソッドの呼び出し方を増やす
その他
@future
Apexメソッドを非同期処理できる (戻り値なし)
⇒高負荷な処理を現行トランザクションから分離
Apex RESTアノテーション全般
ApexメソッドをWebサービスとして公開できる
⇒外部アプリ・サービスからアクセス可能に
29
最後に
開発者よし、Adminよし、ユーザよし
三方よしの開発を心がけましょう!
30
ご清聴ありがとうございました!
31

More Related Content

PPTX
kintoneチームを支えるSeleniumテスト
PDF
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
PDF
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
PDF
MS Officeファイル暗号化のマスター鍵を利用したバックドアとその対策
PPTX
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
PDF
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
PDF
Team Geek「何故チームにリスペクトが必要なのか」 / フォトラクションValues社内勉強会資料
PPTX
Sf素人が2週間でアプリケーションビルダーに挑戦してみた
kintoneチームを支えるSeleniumテスト
[JSUG SpringOne 2021 報告会]見えてきたSpring 6.0の方向性
Yahoo! JAPANが持つデータ分析ソリューションの紹介 #yjdsnight
MS Officeファイル暗号化のマスター鍵を利用したバックドアとその対策
10年以上Java屋してたおっさんが 今年からフロントエンジニアやっている話
R言語で始めよう、データサイエンス(ハンズオン勉強会) 〜機会学習・データビジュアライゼーション事始め〜
Team Geek「何故チームにリスペクトが必要なのか」 / フォトラクションValues社内勉強会資料
Sf素人が2週間でアプリケーションビルダーに挑戦してみた

What's hot (20)

PDF
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
PDF
WebRTCの技術解説 公開版
PDF
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
PDF
ソフトウェア品質技術の歴史を振り返る - ソフトウェア品質測定を中心に -
PPTX
.NET MVC Areas
PDF
はじめてのPRD
PDF
第3回SEMAT勉強会 SEMATエッセンス解説
PPT
試験にでるSpring
PDF
Pull Request & TDD 入門
PDF
メルペイの与信モデリングにおける特徴量の品質向上の施策
PDF
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
PDF
ツイートID生成とツイッターリアルタイム検索システムの話
PPTX
データマイニングの話詰め合わせ
PDF
イッパン的なゴカテイ作ってみた #histudy 2017/08
PPTX
2020/5/22 Account Code 3 - 会計システムアーキテクチャの道程
PDF
何となく勉強した気分になれるパーサ入門
PPTX
데이터를 보는 안목 (Data Literacy)
PDF
技術系文書作成のコツ
PPTX
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
PDF
Tackling Complexity
책 읽어주는 딥러닝: 배우 유인나가 해리포터를 읽어준다면 DEVIEW 2017
WebRTCの技術解説 公開版
情報システム部門のタスク管理とIT全般統制 ~ Excel管理からの脱却 ~ (ITS Redmine #RxTstudy #5)
ソフトウェア品質技術の歴史を振り返る - ソフトウェア品質測定を中心に -
.NET MVC Areas
はじめてのPRD
第3回SEMAT勉強会 SEMATエッセンス解説
試験にでるSpring
Pull Request & TDD 入門
メルペイの与信モデリングにおける特徴量の品質向上の施策
데이터 기반 성장을 위한 선결 조건: Product-Market Fit, Instrumentation, 그리고 프로세스
ツイートID生成とツイッターリアルタイム検索システムの話
データマイニングの話詰め合わせ
イッパン的なゴカテイ作ってみた #histudy 2017/08
2020/5/22 Account Code 3 - 会計システムアーキテクチャの道程
何となく勉強した気分になれるパーサ入門
데이터를 보는 안목 (Data Literacy)
技術系文書作成のコツ
幅広い技術力が身につくSalesforceエンジニアのススメ〜入門編〜
Tackling Complexity
Ad

Similar to Adminとうまく共存するためのApex開発Tips (14)

PDF
Japan Dreamin'2020 Salesforce Adminのおぼえがき(転職・LEXデビュー編)_After_愛おしきテンプレートVer.
PDF
Japan Dreamin'2020 Salesforce Adminのおぼえがき(転職・LEXデビュー編)_Before
PPT
AppExchangeパートナー&デベロッパー第2部:20070523版
PPTX
Salesforce開発のスタート地点で考えたいこと
PDF
アジャイル開発を始めてみませんか?(思い出編)
PDF
Xp Terakoya No02
PPTX
CAのアジャイルな開発の取り組みと周りの環境について
PDF
ワンクリックデプロイ 〜いつまで手でデプロイしてるんですか〜 #devsumiA
PDF
Salesforce開発プロジェクトの進め方とアプリケーションライフサイクルマネジメント
PPTX
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
PDF
アジャイルマニフェストから見るインセプションデッキ
PDF
Salesforce Wednesday - Apex Basic
PDF
アート・オブ・アジャイル・デベロップメント読書会#1
PPT
50代現役SEのつぶやき
Japan Dreamin'2020 Salesforce Adminのおぼえがき(転職・LEXデビュー編)_After_愛おしきテンプレートVer.
Japan Dreamin'2020 Salesforce Adminのおぼえがき(転職・LEXデビュー編)_Before
AppExchangeパートナー&デベロッパー第2部:20070523版
Salesforce開発のスタート地点で考えたいこと
アジャイル開発を始めてみませんか?(思い出編)
Xp Terakoya No02
CAのアジャイルな開発の取り組みと周りの環境について
ワンクリックデプロイ 〜いつまで手でデプロイしてるんですか〜 #devsumiA
Salesforce開発プロジェクトの進め方とアプリケーションライフサイクルマネジメント
仕事の流儀 Vol1 基本編_ver1.1_外部公開ver
アジャイルマニフェストから見るインセプションデッキ
Salesforce Wednesday - Apex Basic
アート・オブ・アジャイル・デベロップメント読書会#1
50代現役SEのつぶやき
Ad

More from Takashi Hatamoto (10)

PDF
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
PDF
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
PPTX
20231212_【オンライン開催】SWTT 2023秋 振り返り会 for Arch-寄稿
PPTX
20230830_ArchitectGroup_SWTT再演(GraphQL)
PPTX
20230424_TDXGG寄稿記事:同期/非同期アーキテクチャの比較
PPTX
20221104_しゃべくりforceのおしゃべり用資料
PPTX
Restriction Rules(制限ルール) 調べてみた
PPTX
DreamTXセッションから読み解くAI活用の現状と展望
PPTX
LEXモバイルから紐解くSalesforceモバイル史
PPTX
SalesforceにおけるCDC(変更データキャプチャ)の実装・活用法について
20240125_SFDG Meetup32寄稿資料_TDX2024に行こう!(TrailblazerDX)
20240125_SFDG Meetup32寄稿_訳あってLWCから添付ファイル上げようとした話
20231212_【オンライン開催】SWTT 2023秋 振り返り会 for Arch-寄稿
20230830_ArchitectGroup_SWTT再演(GraphQL)
20230424_TDXGG寄稿記事:同期/非同期アーキテクチャの比較
20221104_しゃべくりforceのおしゃべり用資料
Restriction Rules(制限ルール) 調べてみた
DreamTXセッションから読み解くAI活用の現状と展望
LEXモバイルから紐解くSalesforceモバイル史
SalesforceにおけるCDC(変更データキャプチャ)の実装・活用法について

Adminとうまく共存するためのApex開発Tips