エンジニア向け Salesforce 研修

システム開発経験はあるがSalesforce未経験のエンジニア向けの研修資料です。
5日間のカリキュラムで、弊社のSalesforce開発に参加できる状態を目指します。

必須 5日間 SF未経験OK ハンズオン有 課題有 2025年版
5
研修日数
6
主要セクション
5
実践課題
30+
参考リンク
📅
対象者: エンジニア(SF未経験)
ゴール: 弊社のSalesforce開発に参加できる状態になる
📚

1日目

SF基礎・前提知識

🔧

2日目

宣言的開発

💻

3日目

プログラム的開発

🚀

4日目

リリース・弊社環境

🎯

5日目

弊社OP・実践

📝

課題

実践課題5問

📅 研修スケジュール

日程 テーマ 内容
1日目 SF基礎・前提知識 画面操作、オブジェクト、項目、入力規則、プロファイル等
2日目 宣言的開発 ワークフロー、プロセスビルダー、フロー、データ投入
3日目 プログラム的開発 Apex、SOQL、トリガー、バッチ、ガバナ制限
4日目 リリース・弊社環境 変更セット、テストクラス、弊社環境構成、必須設定
5日目 弊社OP・実践 開発プロセス、課題実施

📚 1. SF基礎・前提知識(1日目)

1.1 Salesforceの基本概念

概念説明
マルチテナント複数の顧客が同一インフラを共有
メタデータ駆動設定やカスタマイズがメタデータとして保存
宣言的 vs プログラム的ノーコード(Flow等)とコード(Apex等)の使い分け

開発アプローチの選択基準

アプローチ使用場面
宣言的標準機能で実現可能な場合Flow、入力規則、数式項目
プログラム的複雑なロジック、外部連携Apex、LWC、トリガー
💡
原則: 宣言的 → プログラム的 の順で検討する

1.2 画面操作

Setup(設定画面)

アクセス方法
歯車アイコン → Setup

主要な設定場所:

  • Object Manager: オブジェクト・項目の管理
  • Users: ユーザー管理
  • Profiles / Permission Sets: 権限管理
  • Flows: フロー管理
  • Apex Classes / Triggers: コード管理

1.3 カスタムオブジェクト・カスタム項目

オブジェクトの種類

種類説明
標準オブジェクトSalesforceが提供Account, Contact, Opportunity
カスタムオブジェクト独自に作成(__cサフィックス)MoveIn__c, ServiceGuide__c

項目の種類

項目型説明用途
Textテキスト名前、コード等
Number数値金額、数量等
Date / DateTime日付期日、タイムスタンプ
Checkbox真偽値フラグ
Picklist選択リストステータス、カテゴリ
Lookup参照関係他オブジェクトへの参照
Master-Detail主従関係親子関係(連鎖削除あり)
Formula数式計算値、参照値
Roll-Up Summary積み上げ集計子レコードの集計(Master-Detailのみ)

リレーションの違い

関係LookupMaster-Detail
必須任意必須
削除時参照先は残る連鎖削除
共有設定独立親に従う
積み上げ集計不可可能

数式項目の例

Formula
// 税込金額の計算
Price__c * 1.1

// 条件分岐
IF(Status__c = '契約済', '完了', '未完了')

// 日付計算
TODAY() - CreatedDate

1.4 入力規則

データの品質を保つためのバリデーション機能。条件式(エラーとなる条件)を数式で記述します。

入力規則の例
// 電話番号が空の場合にエラー
AND(
  ISBLANK(Phone),
  ISPICKVAL(Status__c, '契約済')
)
// エラーメッセージ: 契約済みの場合、電話番号は必須です

1.5 プロファイル

ユーザーの権限を制御する基本単位。

権限説明
オブジェクト権限CRUD(作成・参照・更新・削除)
項目レベルセキュリティ(FLS)項目の参照・編集可否
タブ表示設定タブの表示・非表示
アプリケーションアクセス使用可能なアプリ
1日目 参考リンク

🔧 2. 宣言的開発(2日目)

2.1 開発手段の選定基準

選定の順序
入力規則 フロー Apex

レコード操作を起点とするソリューション比較

手段実行速度他レコード操作注意点
Apex トリガ早いほぼ全て可テストクラス必要
フロー遅いほぼ全て可複雑な処理で重くなる可能性
プロセスビルダー遅い主従関係のみ※廃止予定
ワークフロー早い主従関係のみ※廃止予定

2.2 Sandbox について

本番環境のコピーで、開発・テストを行う環境。

種類データ更新頻度用途
Developerメタデータのみ1日1回開発
Developer Proメタデータのみ1日1回大規模開発
Partial Copy一部データ含む5日に1回テスト
Full全データ29日に1回本番検証

2.3 フロー

フローの種類

種類起動タイミング用途
画面フローユーザー操作ウィザード形式の入力画面
レコードトリガーフローレコード操作時トリガーの代替
スケジュールトリガーフロー定期実行バッチ処理の代替
自動起動フロー他から呼び出し再利用可能な処理

レコードトリガーフローの実行タイミング

タイミング説明用途
Before Save保存前(高速)項目値の設定
After Save保存後関連レコード操作、外部連携
2日目 ハンズオン課題
  1. フローの作成
    • レコードトリガーフロー: 取引先作成時に関連レコードを自動作成
    • 画面フロー: 複数項目を入力してレコードを作成
  2. データローダーでのインポート
    • CSVファイルからレコードを一括作成

💻 3. プログラム的開発(3日目)

⚠️
注意: SQLではなくSOQL。構文は似ているがSalesforce専用のクエリ言語です。

3.1 SOQL

SOQL
-- 基本構文
SELECT Id, Name, CreatedDate
FROM Account
WHERE CreatedDate = THIS_YEAR
ORDER BY Name
LIMIT 100

-- 親オブジェクトの参照(リレーション名を使用)
SELECT Id, Name, Account.Name
FROM Contact
WHERE Account.Industry = 'Technology'

-- 子オブジェクトの取得(サブクエリ)
SELECT Id, Name, (SELECT Id, LastName FROM Contacts)
FROM Account

-- 集計関数
SELECT COUNT(Id), SUM(Amount), AVG(Amount)
FROM Opportunity
WHERE StageName = 'Closed Won'
GROUP BY AccountId

3.2 Apex トリガー

レコードの作成・更新・削除時に自動実行されるApexコード。

トリガーコンテキスト

コンテキストタイミング用途
before insert保存前(新規)値の設定、入力検証
before update保存前(更新)値の設定、入力検証
after insert保存後(新規)関連レコード作成、外部連携
after update保存後(更新)関連レコード更新、外部連携
before delete削除前削除検証
after delete削除後関連レコード処理

トリガーの基本構文

Apex Trigger
trigger AccountTrigger on Account (before insert, before update, after insert, after update) {
    if (Trigger.isBefore) {
        if (Trigger.isInsert) {
            // before insert の処理
        }
        if (Trigger.isUpdate) {
            // before update の処理
        }
    }
    if (Trigger.isAfter) {
        // after の処理
    }
}

3.3 ガバナ制限

Salesforceはマルチテナント環境のため、1つのトランザクションで使用できるリソースに制限があります。

制限項目同期非同期解決策
SOQLクエリ数100200ループ内SOQL禁止
SOQL取得行数50,00050,000LIMIT句を付ける
DMLステートメント数150150Listでまとめて実行
DML処理行数10,00010,000バッチ処理で分割
CPU時間10,000ms60,000msMap活用でネストループ削減

バルク化の原則

NG パターン
ループ内でSOQL/DML
OK パターン
ループ外でまとめて実行
OK: バルク化
// OK: ループ外でまとめてSOQL
Set<Id> accountIds = new Set<Id>();
for (Account acc : accounts) {
    accountIds.add(acc.Id);
}
List<Contact> contacts = [SELECT Id, AccountId FROM Contact WHERE AccountId IN :accountIds];

// OK: ループ外でまとめてDML
List<Account> accountsToUpdate = new List<Account>();
for (Account acc : accounts) {
    acc.Name = 'Updated';
    accountsToUpdate.add(acc);
}
update accountsToUpdate;

3.4 バッチ処理

大量データの処理(ガバナ制限を回避)や定期実行ジョブに使用。

バッチ処理の流れ
1. Database.executeBatch() で起動
2. start() で処理対象のクエリを返す(1回)
3. execute() でバッチサイズごとに処理(複数回)
4. finish() で完了処理(1回)
Batch Class
global class MyBatch implements Database.Batchable<sObject>, Schedulable {

    // スケジュール実行用
    global void execute(SchedulableContext sc) {
        Database.executeBatch(new MyBatch(), 200);
    }

    // 処理対象のクエリを返す
    global Database.QueryLocator start(Database.BatchableContext bc) {
        return Database.getQueryLocator('SELECT Id, Name FROM Account');
    }

    // バッチサイズごとに実行
    global void execute(Database.BatchableContext bc, List<Account> scope) {
        // 処理ロジック
    }

    // 完了時に1回実行
    global void finish(Database.BatchableContext bc) {
        // 完了通知など
    }
}
3日目 参考リンク

🚀 4. リリース・弊社環境(4日目)

4.1 変更セット

Sandboxから本番環境へメタデータをデプロイする機能。

変更セットの手順
1. Sandboxで送信変更セット作成
2. コンポーネントを追加してアップロード
3. 本番で受信変更セット取得
4. 検証(テスト実行)→ デプロイ
🚨
本番デプロイの要件:
• 全テストの実行で 75%以上のコードカバレッジ
• 全テストが成功すること

4.2 Apex テストクラス

Test Class
@isTest
private class MyClassTest {

    @TestSetup
    static void setup() {
        // テストデータ作成(全テストメソッドで共有)
        Account acc = new Account(Name = 'Test Account');
        insert acc;
    }

    @isTest
    static void testMethod1() {
        // テストデータ取得
        Account acc = [SELECT Id FROM Account LIMIT 1];

        // テスト実行
        Test.startTest();
        String result = MyClass.doSomething(acc.Id);
        Test.stopTest();

        // 検証
        System.assertEquals('Expected', result, 'Result should match');
    }
}

4.3 弊社システム構成

外部システム
イタンジ / Zoom / LINE / WeChat
↓ API連携
Salesforce
UI Layer: Lightning App / LWC / Visualforce / Flow
Business Logic: Apex Classes / Triggers / Batch Jobs
Data Layer: Standard Objects / Custom Objects
↓ REST API
外部サーバー群
api-server (Cloud Run) / 自動申込 (Lambda) / イタンジCSV (Cloud Run)

4.4 開発環境構築

Salesforce CLI(SFDX)

Terminal
# インストール(macOS)
brew install sf

# Sandbox への認証
sf org login web --instance-url https://test.salesforce.com --alias staging

# 認証済み組織の確認
sf org list

# メタデータの取得
sf project retrieve start --source-dir force-app

# メタデータのデプロイ
sf project deploy start --source-dir force-app

VS Code 拡張機能

  • Salesforce Extension Pack - SF開発の基本機能
  • Apex PMD - 静的解析
  • ESLint - JavaScript/LWC用
  • Prettier - コードフォーマット

🎯 5. 弊社OP・実践(5日目)

5.1 開発フロー概要

要件定義 設計 タスク分解 実装 テスト レビュー デプロイ

5.2 設計書フロー

設計書ワークフロー
/design コマンドで設計書ドラフト作成
PR作成 → レビュー → マージ
/approve-design コマンドで承認
/build コマンドで実装開始

5.3 コミットメッセージ規約

Commit Message
[type]: [簡潔な説明]

[詳細な説明(任意)]

# type の種類:
# feat: 新機能
# fix: バグ修正
# docs: ドキュメント
# refactor: リファクタリング
# test: テスト
# chore: その他

5.4 コードレビューチェックポイント

  • ガバナ制限を考慮しているか
  • バルク化されているか
  • CRUD/FLSを考慮しているか
  • テストが書かれているか
  • 設計書と一致しているか

📝 6. 課題

研修の理解度を確認するための実践課題です。

#課題名目安日程学習目標
1 BtoB用車ディーラー受注管理システムの作成 1-2日目終了後 オブジェクト設計、フロー作成
2 プロセスビルダーとフローの構築 2日目終了後 自動化の理解
3 Apexトリガーの作成 3日目終了後 トリガー、バルク化
4 Apexクラスの作成、テストクラスの構築 3-4日目終了後 Apex、テスト
5 バッチ処理(日報送信バッチ) 4-5日目終了後 バッチ、スケジュール
課題1: 受注管理システムの構築

ER図

取引先 (Account)
取引先名 / 業種 / 住所 / 電話番号
↓ Lookup
受注 (Order__c)
取引先(参照) / 担当社員(参照) / 受注金額 / ステータス / 予算(参照) / 受注日
レコードタイプ: 販売 / リース
↓ Master-Detail
受注明細 (OrderDetail__c)
受注(主従) / 商品(参照) / 数量 / 単価(数式) / 小計(数式) / 税込合計(数式)

作成するもの一覧

  • カスタムオブジェクト(社員マスタ、商品、予算、受注、受注明細)
  • カスタム項目(各オブジェクト)
  • レコードタイプ(受注: 販売/リース、受注明細: 販売/リース)
  • ページレイアウト(レコードタイプ別)
  • タブ(受注明細以外)
  • 入力規則(予算の年月、受注の担当者)
  • 一致ルール・重複ルール(予算、取引先)
課題3: Apexトリガーの作成

要件

請求レコード作成時に、担当部署全員にメール通知を送信するトリガーを実装する。

処理フロー

メール通知トリガー
1. 請求レコード作成 (after insert)
2. 受注から担当社員の部署を取得
3. 同じ部署の社員マスタからメールアドレスを取得
4. メール送信 & 備考に送信先記録

作成するもの

  • 請求オブジェクトに備考項目を追加
  • InvoiceTrigger(トリガー)
  • InvoiceTriggerHandler(ハンドラクラス)
  • InvoiceTriggerHandlerTest(テストクラス)

✅ 研修完了チェックリスト

  • Salesforceの基本概念を理解した
  • カスタムオブジェクト・項目を作成できる
  • フローを作成できる
  • SOQLを記述できる
  • Apexトリガーを実装できる
  • ガバナ制限を理解している
  • テストクラスを作成できる
  • 変更セットでデプロイできる
  • 弊社の開発フローを理解した