<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Apex &#8211; AI開発実践ラボ</title>
	<atom:link href="https://creativecontentlabtokyo.com/tag/apex/feed/" rel="self" type="application/rss+xml" />
	<link>https://creativecontentlabtokyo.com</link>
	<description>AIで、作る力を手に入れる。</description>
	<lastBuildDate>Sat, 04 Apr 2026 21:09:25 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>AIエディタを使ったVibe codingの実際の開発事例（ユースケース）</title>
		<link>https://creativecontentlabtokyo.com/development-use-case-vibe-coding/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 05:14:11 +0000</pubDate>
				<category><![CDATA[生成AI（Generative AI）]]></category>
		<category><![CDATA[AIエディタ]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[LWC]]></category>
		<category><![CDATA[Vibe coding]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[ユースケース]]></category>
		<category><![CDATA[生成AI]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5524</guid>

					<description><![CDATA[AIエディタを使ったVibe codingの実際の開発事例（ユースケース） Lightning Web Componentの開発例 要件：顧客管理ダッシュボード…]]></description>
										<content:encoded><![CDATA[<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">AIエディタを使ったVibe codingの実際の開発事例（ユースケース）</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Lightning Web Componentの開発例</h3>
<p class="whitespace-normal break-words"><strong>要件：顧客管理ダッシュボードの作成</strong></p>
<p class="whitespace-normal break-words">自然言語での要求：</p>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"取引先の情報を表示し、関連する商談と取引先責任者を
タブ形式で切り替えて表示できるダッシュボードコンポーネントを作成したい。
リアルタイムでデータを更新し、Excel出力機能も必要。"</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>AIエディタによる段階的実装</strong></p>
<p class="whitespace-normal break-words"><strong>ステップ1: 基本構造の生成</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">html</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-html"><span class="token">&lt;!-- accountDashboard.html --&gt;</span>
<span class="token">&lt;</span><span class="token">template</span><span class="token">&gt;</span>
    <span class="token">&lt;</span><span class="token">lightning-card</span> <span class="token">title</span><span class="token">=</span><span class="token">"</span><span class="token">顧客管理ダッシュボード</span><span class="token">"</span> <span class="token">icon-name</span><span class="token">=</span><span class="token">"</span><span class="token">standard:account</span><span class="token">"</span><span class="token">&gt;</span>
        <span class="token">&lt;</span><span class="token">div</span> <span class="token">slot</span><span class="token">=</span><span class="token">"</span><span class="token">actions</span><span class="token">"</span><span class="token">&gt;</span>
            <span class="token">&lt;</span><span class="token">lightning-button</span> 
                <span class="token">label</span><span class="token">=</span><span class="token">"</span><span class="token">Excel出力</span><span class="token">"</span> 
                <span class="token special-attr">onclick</span><span class="token special-attr">=</span><span class="token special-attr javascript language-javascript">{</span><span class="token special-attr javascript language-javascript">exportToExcel</span><span class="token special-attr javascript language-javascript">}</span>
                <span class="token">variant</span><span class="token">=</span><span class="token">"</span><span class="token">brand</span><span class="token">"</span><span class="token">&gt;</span>
            <span class="token">&lt;/</span><span class="token">lightning-button</span><span class="token">&gt;</span>
        <span class="token">&lt;/</span><span class="token">div</span><span class="token">&gt;</span>
        
        <span class="token">&lt;</span><span class="token">lightning-tabset</span><span class="token">&gt;</span>
            <span class="token">&lt;</span><span class="token">lightning-tab</span> <span class="token">label</span><span class="token">=</span><span class="token">"</span><span class="token">取引先情報</span><span class="token">"</span> <span class="token">value</span><span class="token">=</span><span class="token">"</span><span class="token">account</span><span class="token">"</span><span class="token">&gt;</span>
                <span class="token">&lt;</span><span class="token">c-account-detail</span> <span class="token">account-id</span><span class="token">=</span><span class="token">{accountId}</span><span class="token">&gt;</span><span class="token">&lt;/</span><span class="token">c-account-detail</span><span class="token">&gt;</span>
            <span class="token">&lt;/</span><span class="token">lightning-tab</span><span class="token">&gt;</span>
            
            <span class="token">&lt;</span><span class="token">lightning-tab</span> <span class="token">label</span><span class="token">=</span><span class="token">"</span><span class="token">商談</span><span class="token">"</span> <span class="token">value</span><span class="token">=</span><span class="token">"</span><span class="token">opportunities</span><span class="token">"</span><span class="token">&gt;</span>
                <span class="token">&lt;</span><span class="token">c-opportunity-list</span> <span class="token">account-id</span><span class="token">=</span><span class="token">{accountId}</span><span class="token">&gt;</span><span class="token">&lt;/</span><span class="token">c-opportunity-list</span><span class="token">&gt;</span>
            <span class="token">&lt;/</span><span class="token">lightning-tab</span><span class="token">&gt;</span>
            
            <span class="token">&lt;</span><span class="token">lightning-tab</span> <span class="token">label</span><span class="token">=</span><span class="token">"</span><span class="token">取引先責任者</span><span class="token">"</span> <span class="token">value</span><span class="token">=</span><span class="token">"</span><span class="token">contacts</span><span class="token">"</span><span class="token">&gt;</span>
                <span class="token">&lt;</span><span class="token">c-contact-list</span> <span class="token">account-id</span><span class="token">=</span><span class="token">{accountId}</span><span class="token">&gt;</span><span class="token">&lt;/</span><span class="token">c-contact-list</span><span class="token">&gt;</span>
            <span class="token">&lt;/</span><span class="token">lightning-tab</span><span class="token">&gt;</span>
        <span class="token">&lt;/</span><span class="token">lightning-tabset</span><span class="token">&gt;</span>
    <span class="token">&lt;/</span><span class="token">lightning-card</span><span class="token">&gt;</span>
<span class="token">&lt;/</span><span class="token">template</span><span class="token">&gt;</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>ステップ2: JavaScriptコントローラーの実装</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">javascript</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-javascript"><span class="token">// accountDashboard.js</span>
<span class="token module">import</span> <span class="token imports">{</span> <span class="token imports maybe-class-name">LightningElement</span><span class="token imports">,</span><span class="token imports"> api</span><span class="token imports">,</span><span class="token imports"> wire</span><span class="token imports">,</span><span class="token imports"> track </span><span class="token imports">}</span> <span class="token module">from</span> <span class="token">'lwc'</span><span class="token">;</span>
<span class="token module">import</span> <span class="token imports">{</span><span class="token imports"> refreshApex </span><span class="token imports">}</span> <span class="token module">from</span> <span class="token">'@salesforce/apex'</span><span class="token">;</span>
<span class="token module">import</span> <span class="token imports">getAccountData</span> <span class="token module">from</span> <span class="token">'@salesforce/apex/AccountDashboardController.getAccountData'</span><span class="token">;</span>
<span class="token module">import</span> <span class="token imports">exportAccountData</span> <span class="token module">from</span> <span class="token">'@salesforce/apex/AccountDashboardController.exportAccountData'</span><span class="token">;</span>
<span class="token module">import</span> <span class="token imports">{</span> <span class="token imports maybe-class-name">ShowToastEvent</span> <span class="token imports">}</span> <span class="token module">from</span> <span class="token">'lightning/platformShowToastEvent'</span><span class="token">;</span>

<span class="token module">export</span> <span class="token module">default</span> <span class="token">class</span> <span class="token">AccountDashboard</span> <span class="token">extends</span> <span class="token">LightningElement</span> <span class="token">{</span>
    @api accountId<span class="token">;</span>
    @track accountData<span class="token">;</span>
    wiredAccountData<span class="token">;</span>

    @<span class="token">wire</span><span class="token">(</span>getAccountData<span class="token">,</span> <span class="token">{</span> <span class="token literal-property">accountId</span><span class="token">:</span> <span class="token">'$accountId'</span> <span class="token">}</span><span class="token">)</span>
    <span class="token">wireAccountData</span><span class="token">(</span><span class="token parameter">result</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">this</span><span class="token">.</span><span class="token property-access">wiredAccountData</span> <span class="token">=</span> result<span class="token">;</span>
        <span class="token control-flow">if</span> <span class="token">(</span>result<span class="token">.</span><span class="token property-access">data</span><span class="token">)</span> <span class="token">{</span>
            <span class="token">this</span><span class="token">.</span><span class="token property-access">accountData</span> <span class="token">=</span> result<span class="token">.</span><span class="token property-access">data</span><span class="token">;</span>
        <span class="token">}</span> <span class="token control-flow">else</span> <span class="token control-flow">if</span> <span class="token">(</span>result<span class="token">.</span><span class="token property-access">error</span><span class="token">)</span> <span class="token">{</span>
            <span class="token">this</span><span class="token">.</span><span class="token method property-access">showToast</span><span class="token">(</span><span class="token">'エラー'</span><span class="token">,</span> result<span class="token">.</span><span class="token property-access">error</span><span class="token">.</span><span class="token property-access">body</span><span class="token">.</span><span class="token property-access">message</span><span class="token">,</span> <span class="token">'error'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>

    <span class="token">async</span> <span class="token">handleRefresh</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token control-flow">try</span> <span class="token">{</span>
            <span class="token control-flow">await</span> <span class="token">refreshApex</span><span class="token">(</span><span class="token">this</span><span class="token">.</span><span class="token property-access">wiredAccountData</span><span class="token">)</span><span class="token">;</span>
            <span class="token">this</span><span class="token">.</span><span class="token method property-access">showToast</span><span class="token">(</span><span class="token">'成功'</span><span class="token">,</span> <span class="token">'データが更新されました'</span><span class="token">,</span> <span class="token">'success'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span> <span class="token control-flow">catch</span> <span class="token">(</span>error<span class="token">)</span> <span class="token">{</span>
            <span class="token">this</span><span class="token">.</span><span class="token method property-access">showToast</span><span class="token">(</span><span class="token">'エラー'</span><span class="token">,</span> <span class="token">'データの更新に失敗しました'</span><span class="token">,</span> <span class="token">'error'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>

    <span class="token">async</span> <span class="token">exportToExcel</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token control-flow">try</span> <span class="token">{</span>
            <span class="token">const</span> result <span class="token">=</span> <span class="token control-flow">await</span> <span class="token">exportAccountData</span><span class="token">(</span><span class="token">{</span> <span class="token literal-property">accountId</span><span class="token">:</span> <span class="token">this</span><span class="token">.</span><span class="token property-access">accountId</span> <span class="token">}</span><span class="token">)</span><span class="token">;</span>
            <span class="token">// ファイルダウンロード処理</span>
            <span class="token">const</span> link <span class="token">=</span> <span class="token dom">document</span><span class="token">.</span><span class="token method property-access">createElement</span><span class="token">(</span><span class="token">'a'</span><span class="token">)</span><span class="token">;</span>
            link<span class="token">.</span><span class="token property-access">href</span> <span class="token">=</span> <span class="token">'data:application/vnd.ms-excel;base64,'</span> <span class="token">+</span> result<span class="token">;</span>
            link<span class="token">.</span><span class="token property-access">download</span> <span class="token">=</span> <span class="token template-string template-punctuation">`</span><span class="token template-string">account_</span><span class="token template-string interpolation">${</span><span class="token template-string interpolation">this</span><span class="token template-string interpolation">.</span><span class="token template-string interpolation property-access">accountId</span><span class="token template-string interpolation">}</span><span class="token template-string">_data.xlsx</span><span class="token template-string template-punctuation">`</span><span class="token">;</span>
            link<span class="token">.</span><span class="token method property-access">click</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
            
            <span class="token">this</span><span class="token">.</span><span class="token method property-access">showToast</span><span class="token">(</span><span class="token">'成功'</span><span class="token">,</span> <span class="token">'Excelファイルをダウンロードしました'</span><span class="token">,</span> <span class="token">'success'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span> <span class="token control-flow">catch</span> <span class="token">(</span>error<span class="token">)</span> <span class="token">{</span>
            <span class="token">this</span><span class="token">.</span><span class="token method property-access">showToast</span><span class="token">(</span><span class="token">'エラー'</span><span class="token">,</span> <span class="token">'Excel出力に失敗しました'</span><span class="token">,</span> <span class="token">'error'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>

    <span class="token">showToast</span><span class="token">(</span><span class="token parameter">title</span><span class="token parameter">,</span><span class="token parameter"> message</span><span class="token parameter">,</span><span class="token parameter"> variant</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">this</span><span class="token">.</span><span class="token method property-access">dispatchEvent</span><span class="token">(</span><span class="token">new</span> <span class="token">ShowToastEvent</span><span class="token">(</span><span class="token">{</span>
            <span class="token literal-property">title</span><span class="token">:</span> title<span class="token">,</span>
            <span class="token literal-property">message</span><span class="token">:</span> message<span class="token">,</span>
            <span class="token literal-property">variant</span><span class="token">:</span> variant
        <span class="token">}</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>ステップ3: Apexコントローラーの実装</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">public</span> <span class="token">with sharing</span> <span class="token">class</span> <span class="token">AccountDashboardController</span> <span class="token">{</span>
    
    <span class="token annotation">@AuraEnabled</span><span class="token">(</span>cacheable<span class="token">=</span><span class="token">true</span><span class="token">)</span>
    <span class="token">public</span> <span class="token">static</span> <span class="token">AccountDataWrapper</span> <span class="token">getAccountData</span><span class="token">(</span><span class="token">Id</span> accountId<span class="token">)</span> <span class="token">{</span>
        <span class="token">try</span> <span class="token">{</span>
            <span class="token">if</span> <span class="token">(</span><span class="token">!</span>Schema<span class="token">.</span>sObjectType<span class="token">.</span>Account<span class="token">.</span><span class="token">isAccessible</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
                <span class="token">throw</span> <span class="token">new</span> <span class="token">AuraHandledException</span><span class="token">(</span><span class="token">'取引先への読み取り権限がありません'</span><span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>

            <span class="token">Account</span> account <span class="token">=</span> <span class="token sql language-sql">[</span>
                <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> BillingAddress</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Phone</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Website</span><span class="token sql language-sql">,</span> 
<span class="token sql language-sql">                       AnnualRevenue</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> NumberOfEmployees</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Industry
</span>                <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Account 
</span>                <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :accountId 
</span>                <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
            <span class="token sql language-sql">]</span><span class="token">;</span>

            <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span> opportunities <span class="token">=</span> <span class="token sql language-sql">[</span>
                <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> StageName</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Amount</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> CloseDate
</span>                <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity 
</span>                <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> AccountId </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :accountId 
</span>                <span class="token sql language-sql">ORDER</span> <span class="token sql language-sql">BY</span><span class="token sql language-sql"> CloseDate </span><span class="token sql language-sql">DESC</span>
                <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">10</span>
            <span class="token sql language-sql">]</span><span class="token">;</span>

            <span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span> contacts <span class="token">=</span> <span class="token sql language-sql">[</span>
                <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Email</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Phone</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Title
</span>                <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Contact 
</span>                <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> AccountId </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :accountId 
</span>                <span class="token sql language-sql">ORDER</span> <span class="token sql language-sql">BY</span><span class="token sql language-sql"> LastModifiedDate </span><span class="token sql language-sql">DESC</span>
                <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">20</span>
            <span class="token sql language-sql">]</span><span class="token">;</span>

            <span class="token">return</span> <span class="token">new</span> <span class="token">AccountDataWrapper</span><span class="token">(</span>account<span class="token">,</span> opportunities<span class="token">,</span> contacts<span class="token">)</span><span class="token">;</span>
            
        <span class="token">}</span> <span class="token">catch</span> <span class="token">(</span><span class="token">Exception</span> e<span class="token">)</span> <span class="token">{</span>
            <span class="token">throw</span> <span class="token">new</span> <span class="token">AuraHandledException</span><span class="token">(</span><span class="token">'データの取得に失敗しました: '</span> <span class="token">+</span> e<span class="token">.</span><span class="token">getMessage</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>

    <span class="token annotation">@AuraEnabled</span>
    <span class="token">public</span> <span class="token">static</span> <span class="token">String</span> <span class="token">exportAccountData</span><span class="token">(</span><span class="token">Id</span> accountId<span class="token">)</span> <span class="token">{</span>
        <span class="token">try</span> <span class="token">{</span>
            <span class="token">AccountDataWrapper</span> data <span class="token">=</span> <span class="token">getAccountData</span><span class="token">(</span>accountId<span class="token">)</span><span class="token">;</span>
            
            <span class="token">// Excel生成ロジック（簡略化）</span>
            <span class="token">String</span> csvData <span class="token">=</span> <span class="token">generateCSVData</span><span class="token">(</span>data<span class="token">)</span><span class="token">;</span>
            <span class="token">return</span> EncodingUtil<span class="token">.</span><span class="token">base64Encode</span><span class="token">(</span><span class="token">Blob</span><span class="token">.</span><span class="token">valueOf</span><span class="token">(</span>csvData<span class="token">)</span><span class="token">)</span><span class="token">;</span>
            
        <span class="token">}</span> <span class="token">catch</span> <span class="token">(</span><span class="token">Exception</span> e<span class="token">)</span> <span class="token">{</span>
            <span class="token">throw</span> <span class="token">new</span> <span class="token">AuraHandledException</span><span class="token">(</span><span class="token">'Excel出力に失敗しました: '</span> <span class="token">+</span> e<span class="token">.</span><span class="token">getMessage</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>

    <span class="token">private</span> <span class="token">static</span> <span class="token">String</span> <span class="token">generateCSVData</span><span class="token">(</span><span class="token">AccountDataWrapper</span> data<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">String</span><span class="token">&gt;</span> csvLines <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">String</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// ヘッダー</span>
        csvLines<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">'タイプ,名前,ステージ/タイトル,金額/メール,完了日/電話'</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 取引先データ</span>
        csvLines<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">String</span><span class="token">.</span><span class="token">format</span><span class="token">(</span><span class="token">'取引先,{0},{1},{2},{3}'</span><span class="token">,</span> 
            <span class="token">new</span> <span class="token">String</span><span class="token">[</span><span class="token">]</span><span class="token">{</span>
                data<span class="token">.</span>account<span class="token">.</span>Name<span class="token">,</span>
                data<span class="token">.</span>account<span class="token">.</span>Industry<span class="token">,</span>
                <span class="token">String</span><span class="token">.</span><span class="token">valueOf</span><span class="token">(</span>data<span class="token">.</span>account<span class="token">.</span>AnnualRevenue<span class="token">)</span><span class="token">,</span>
                data<span class="token">.</span>account<span class="token">.</span>Phone
            <span class="token">}</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 商談データ</span>
        <span class="token">for</span> <span class="token">(</span><span class="token">Opportunity</span> opp <span class="token">:</span> data<span class="token">.</span>opportunities<span class="token">)</span> <span class="token">{</span>
            csvLines<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">String</span><span class="token">.</span><span class="token">format</span><span class="token">(</span><span class="token">'商談,{0},{1},{2},{3}'</span><span class="token">,</span> 
                <span class="token">new</span> <span class="token">String</span><span class="token">[</span><span class="token">]</span><span class="token">{</span>
                    opp<span class="token">.</span>Name<span class="token">,</span>
                    opp<span class="token">.</span>StageName<span class="token">,</span>
                    <span class="token">String</span><span class="token">.</span><span class="token">valueOf</span><span class="token">(</span>opp<span class="token">.</span>Amount<span class="token">)</span><span class="token">,</span>
                    <span class="token">String</span><span class="token">.</span><span class="token">valueOf</span><span class="token">(</span>opp<span class="token">.</span>CloseDate<span class="token">)</span>
                <span class="token">}</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
        
        <span class="token">return</span> <span class="token">String</span><span class="token">.</span><span class="token">join</span><span class="token">(</span>csvLines<span class="token">,</span> <span class="token">'\n'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>

    <span class="token">public</span> <span class="token">class</span> <span class="token">AccountDataWrapper</span> <span class="token">{</span>
        <span class="token annotation">@AuraEnabled</span> <span class="token">public</span> <span class="token">Account</span> account <span class="token">{</span> <span class="token">get</span><span class="token">;</span> <span class="token">set</span><span class="token">;</span> <span class="token">}</span>
        <span class="token annotation">@AuraEnabled</span> <span class="token">public</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span> opportunities <span class="token">{</span> <span class="token">get</span><span class="token">;</span> <span class="token">set</span><span class="token">;</span> <span class="token">}</span>
        <span class="token annotation">@AuraEnabled</span> <span class="token">public</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span> contacts <span class="token">{</span> <span class="token">get</span><span class="token">;</span> <span class="token">set</span><span class="token">;</span> <span class="token">}</span>
        
        <span class="token">public</span> <span class="token">AccountDataWrapper</span><span class="token">(</span><span class="token">Account</span> acc<span class="token">,</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span> opps<span class="token">,</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span> cons<span class="token">)</span> <span class="token">{</span>
            <span class="token">this</span><span class="token">.</span>account <span class="token">=</span> acc<span class="token">;</span>
            <span class="token">this</span><span class="token">.</span>opportunities <span class="token">=</span> opps<span class="token">;</span>
            <span class="token">this</span><span class="token">.</span>contacts <span class="token">=</span> cons<span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Apex クラスの実装例</h3>
<p class="whitespace-normal break-words"><strong>要件：複雑な承認プロセスの自動化</strong></p>
<p class="whitespace-normal break-words">自然言語での要求：</p>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"商談の金額に応じて、異なる承認者ルートを自動設定し、
承認状況をリアルタイムで追跡できるシステムを実装したい。
承認者の不在時は代理承認者に自動エスカレーションする機能も必要。"</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>AIエディタによる実装</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">public</span> <span class="token">class</span> <span class="token">OpportunityApprovalManager</span> <span class="token">{</span>
    
    <span class="token">// 承認ルール設定</span>
    <span class="token">private</span> <span class="token">static</span> <span class="token">final</span> <span class="token">Map</span><span class="token">&lt;</span><span class="token">Decimal</span><span class="token">,</span> <span class="token">String</span><span class="token">&gt;</span> APPROVAL_RULES <span class="token">=</span> <span class="token">new</span> <span class="token">Map</span><span class="token">&lt;</span><span class="token">Decimal</span><span class="token">,</span> <span class="token">String</span><span class="token">&gt;</span><span class="token">{</span>
        <span class="token">100000</span> <span class="token">=</span><span class="token">&gt;</span> <span class="token">'MANAGER_APPROVAL'</span><span class="token">,</span>
        <span class="token">500000</span> <span class="token">=</span><span class="token">&gt;</span> <span class="token">'DIRECTOR_APPROVAL'</span><span class="token">,</span>
        <span class="token">1000000</span> <span class="token">=</span><span class="token">&gt;</span> <span class="token">'VP_APPROVAL'</span><span class="token">,</span>
        <span class="token">5000000</span> <span class="token">=</span><span class="token">&gt;</span> <span class="token">'EXECUTIVE_APPROVAL'</span>
    <span class="token">}</span><span class="token">;</span>
    
    <span class="token annotation">@InvocableMethod</span><span class="token">(</span>label<span class="token">=</span><span class="token">'承認プロセス開始'</span><span class="token">)</span>
    <span class="token">public</span> <span class="token">static</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> <span class="token">initiateApprovalProcess</span><span class="token">(</span><span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalResult</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">ApprovalRequest</span> request <span class="token">:</span> requests<span class="token">)</span> <span class="token">{</span>
            <span class="token">try</span> <span class="token">{</span>
                <span class="token">ApprovalResult</span> result <span class="token">=</span> <span class="token">processOpportunityApproval</span><span class="token">(</span>request<span class="token">.</span>opportunityId<span class="token">)</span><span class="token">;</span>
                results<span class="token">.</span><span class="token">add</span><span class="token">(</span>result<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span> <span class="token">catch</span> <span class="token">(</span><span class="token">Exception</span> e<span class="token">)</span> <span class="token">{</span>
                <span class="token">ApprovalResult</span> errorResult <span class="token">=</span> <span class="token">new</span> <span class="token">ApprovalResult</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
                errorResult<span class="token">.</span>success <span class="token">=</span> <span class="token">false</span><span class="token">;</span>
                errorResult<span class="token">.</span>message <span class="token">=</span> <span class="token">'エラー: '</span> <span class="token">+</span> e<span class="token">.</span><span class="token">getMessage</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
                errorResult<span class="token">.</span>opportunityId <span class="token">=</span> request<span class="token">.</span>opportunityId<span class="token">;</span>
                results<span class="token">.</span><span class="token">add</span><span class="token">(</span>errorResult<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
        <span class="token">}</span>
        
        <span class="token">return</span> results<span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">private</span> <span class="token">static</span> <span class="token">ApprovalResult</span> <span class="token">processOpportunityApproval</span><span class="token">(</span><span class="token">Id</span> opportunityId<span class="token">)</span> <span class="token">{</span>
        <span class="token">// 商談データの取得</span>
        <span class="token">Opportunity</span> opp <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Amount</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> OwnerId</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> StageName</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Account</span><span class="token sql language-sql">.</span><span class="token sql language-sql">OwnerId
</span>            <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :opportunityId 
</span>            <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">// 承認レベルの決定</span>
        <span class="token">String</span> approvalLevel <span class="token">=</span> <span class="token">determineApprovalLevel</span><span class="token">(</span>opp<span class="token">.</span>Amount<span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 承認者の特定</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span> approvers <span class="token">=</span> <span class="token">getApprovers</span><span class="token">(</span>opp<span class="token">,</span> approvalLevel<span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 承認プロセスの作成</span>
        <span class="token">Approval</span><span class="token">.</span><span class="token">ProcessSubmitRequest</span> req <span class="token">=</span> <span class="token">new</span> <span class="token">Approval</span><span class="token">.</span><span class="token">ProcessSubmitRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        req<span class="token">.</span><span class="token">setComments</span><span class="token">(</span><span class="token">'システムによる自動承認申請'</span><span class="token">)</span><span class="token">;</span>
        req<span class="token">.</span><span class="token">setObjectId</span><span class="token">(</span>opportunityId<span class="token">)</span><span class="token">;</span>
        req<span class="token">.</span><span class="token">setSubmitterId</span><span class="token">(</span>UserInfo<span class="token">.</span><span class="token">getUserId</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        req<span class="token">.</span><span class="token">setProcessDefinitionNameOrId</span><span class="token">(</span><span class="token">'OpportunityApprovalProcess'</span><span class="token">)</span><span class="token">;</span>
        req<span class="token">.</span><span class="token">setSkipEntryCriteria</span><span class="token">(</span><span class="token">false</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 承認申請の実行</span>
        <span class="token">Approval</span><span class="token">.</span><span class="token">ProcessResult</span> result <span class="token">=</span> Approval<span class="token">.</span><span class="token">process</span><span class="token">(</span>req<span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 結果の作成</span>
        <span class="token">ApprovalResult</span> approvalResult <span class="token">=</span> <span class="token">new</span> <span class="token">ApprovalResult</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        approvalResult<span class="token">.</span>success <span class="token">=</span> result<span class="token">.</span><span class="token">isSuccess</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        approvalResult<span class="token">.</span>opportunityId <span class="token">=</span> opportunityId<span class="token">;</span>
        approvalResult<span class="token">.</span>processInstanceId <span class="token">=</span> result<span class="token">.</span><span class="token">getInstanceId</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        approvalResult<span class="token">.</span>message <span class="token">=</span> result<span class="token">.</span><span class="token">isSuccess</span><span class="token">(</span><span class="token">)</span> <span class="token">?</span> 
            <span class="token">'承認プロセスが開始されました'</span> <span class="token">:</span> 
            <span class="token">'承認プロセスの開始に失敗しました: '</span> <span class="token">+</span> <span class="token">String</span><span class="token">.</span><span class="token">join</span><span class="token">(</span>result<span class="token">.</span><span class="token">getErrors</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">', '</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 承認状況の追跡レコード作成</span>
        <span class="token">createApprovalTracking</span><span class="token">(</span>opp<span class="token">,</span> approvers<span class="token">,</span> result<span class="token">.</span><span class="token">getInstanceId</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">return</span> approvalResult<span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">private</span> <span class="token">static</span> <span class="token">String</span> <span class="token">determineApprovalLevel</span><span class="token">(</span><span class="token">Decimal</span> amount<span class="token">)</span> <span class="token">{</span>
        <span class="token">if</span> <span class="token">(</span>amount <span class="token">==</span> <span class="token">null</span><span class="token">)</span> <span class="token">return</span> <span class="token">'MANAGER_APPROVAL'</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Decimal</span><span class="token">&gt;</span> thresholds <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Decimal</span><span class="token">&gt;</span><span class="token">(</span>APPROVAL_RULES<span class="token">.</span><span class="token">keySet</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
        thresholds<span class="token">.</span><span class="token">sort</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">Decimal</span> threshold <span class="token">:</span> thresholds<span class="token">)</span> <span class="token">{</span>
            <span class="token">if</span> <span class="token">(</span>amount <span class="token">&lt;=</span> threshold<span class="token">)</span> <span class="token">{</span>
                <span class="token">return</span> APPROVAL_RULES<span class="token">.</span><span class="token">get</span><span class="token">(</span>threshold<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
        <span class="token">}</span>
        
        <span class="token">return</span> <span class="token">'EXECUTIVE_APPROVAL'</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">private</span> <span class="token">static</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span> <span class="token">getApprovers</span><span class="token">(</span><span class="token">Opportunity</span> opp<span class="token">,</span> <span class="token">String</span> approvalLevel<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span> approvers <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// ユーザーの役職情報を取得</span>
        <span class="token">User</span> owner <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> ManagerId</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Department
</span>            <span class="token sql language-sql">FROM</span> <span class="token sql language-sql">User</span> 
            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :opp</span><span class="token sql language-sql">.</span><span class="token sql language-sql">OwnerId 
</span>            <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">switch</span> <span class="token">on</span> approvalLevel <span class="token">{</span>
            <span class="token">when</span> <span class="token">'MANAGER_APPROVAL'</span> <span class="token">{</span>
                <span class="token">if</span> <span class="token">(</span>owner<span class="token">.</span>ManagerId <span class="token">!=</span> <span class="token">null</span><span class="token">)</span> <span class="token">{</span>
                    approvers<span class="token">.</span><span class="token">add</span><span class="token">(</span>owner<span class="token">.</span>ManagerId<span class="token">)</span><span class="token">;</span>
                <span class="token">}</span>
            <span class="token">}</span>
            <span class="token">when</span> <span class="token">'DIRECTOR_APPROVAL'</span> <span class="token">{</span>
                <span class="token">// 部門ディレクターを検索</span>
                <span class="token">List</span><span class="token">&lt;</span><span class="token">User</span><span class="token">&gt;</span> directors <span class="token">=</span> <span class="token sql language-sql">[</span>
                    <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span> <span class="token sql language-sql">User</span> 
                    <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%Director%'</span> 
                    <span class="token sql language-sql">AND</span><span class="token sql language-sql"> Department </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :owner</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Department 
</span>                    <span class="token sql language-sql">AND</span><span class="token sql language-sql"> IsActive </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">true</span>
                    <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">3</span>
                <span class="token sql language-sql">]</span><span class="token">;</span>
                <span class="token">for</span> <span class="token">(</span><span class="token">User</span> director <span class="token">:</span> directors<span class="token">)</span> <span class="token">{</span>
                    approvers<span class="token">.</span><span class="token">add</span><span class="token">(</span>director<span class="token">.</span>Id<span class="token">)</span><span class="token">;</span>
                <span class="token">}</span>
            <span class="token">}</span>
            <span class="token">when</span> <span class="token">'VP_APPROVAL'</span> <span class="token">{</span>
                <span class="token">// VP以上の役職者を検索</span>
                <span class="token">List</span><span class="token">&lt;</span><span class="token">User</span><span class="token">&gt;</span> vps <span class="token">=</span> <span class="token sql language-sql">[</span>
                    <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span> <span class="token sql language-sql">User</span> 
                    <span class="token sql language-sql">WHERE</span> <span class="token sql language-sql">(</span><span class="token sql language-sql">UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%VP%'</span> <span class="token sql language-sql">OR</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%Vice President%'</span><span class="token sql language-sql">)</span>
                    <span class="token sql language-sql">AND</span><span class="token sql language-sql"> IsActive </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">true</span>
                    <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">5</span>
                <span class="token sql language-sql">]</span><span class="token">;</span>
                <span class="token">for</span> <span class="token">(</span><span class="token">User</span> vp <span class="token">:</span> vps<span class="token">)</span> <span class="token">{</span>
                    approvers<span class="token">.</span><span class="token">add</span><span class="token">(</span>vp<span class="token">.</span>Id<span class="token">)</span><span class="token">;</span>
                <span class="token">}</span>
            <span class="token">}</span>
            <span class="token">when</span> <span class="token">'EXECUTIVE_APPROVAL'</span> <span class="token">{</span>
                <span class="token">// 役員クラスを検索</span>
                <span class="token">List</span><span class="token">&lt;</span><span class="token">User</span><span class="token">&gt;</span> executives <span class="token">=</span> <span class="token sql language-sql">[</span>
                    <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span> <span class="token sql language-sql">User</span> 
                    <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%Executive%'</span> 
                    <span class="token sql language-sql">OR</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%CEO%'</span>
                    <span class="token sql language-sql">OR</span><span class="token sql language-sql"> UserRole</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Name </span><span class="token sql language-sql">LIKE</span> <span class="token sql language-sql">'%President%'</span>
                    <span class="token sql language-sql">AND</span><span class="token sql language-sql"> IsActive </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">true</span>
                    <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">5</span>
                <span class="token sql language-sql">]</span><span class="token">;</span>
                <span class="token">for</span> <span class="token">(</span><span class="token">User</span> exec <span class="token">:</span> executives<span class="token">)</span> <span class="token">{</span>
                    approvers<span class="token">.</span><span class="token">add</span><span class="token">(</span>exec<span class="token">.</span>Id<span class="token">)</span><span class="token">;</span>
                <span class="token">}</span>
            <span class="token">}</span>
        <span class="token">}</span>
        
        <span class="token">return</span> approvers<span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">private</span> <span class="token">static</span> <span class="token">void</span> <span class="token">createApprovalTracking</span><span class="token">(</span><span class="token">Opportunity</span> opp<span class="token">,</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span> approvers<span class="token">,</span> <span class="token">Id</span> processInstanceId<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalTracking__c</span><span class="token">&gt;</span> trackingRecords <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalTracking__c</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">Id</span> approverId <span class="token">:</span> approvers<span class="token">)</span> <span class="token">{</span>
            <span class="token">ApprovalTracking__c</span> tracking <span class="token">=</span> <span class="token">new</span> <span class="token">ApprovalTracking__c</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
            tracking<span class="token">.</span>Opportunity__c <span class="token">=</span> opp<span class="token">.</span>Id<span class="token">;</span>
            tracking<span class="token">.</span>Approver__c <span class="token">=</span> approverId<span class="token">;</span>
            tracking<span class="token">.</span>ProcessInstanceId__c <span class="token">=</span> processInstanceId<span class="token">;</span>
            tracking<span class="token">.</span>Status__c <span class="token">=</span> <span class="token">'Pending'</span><span class="token">;</span>
            tracking<span class="token">.</span>CreatedDate__c <span class="token">=</span> <span class="token">System</span><span class="token">.</span><span class="token">now</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
            trackingRecords<span class="token">.</span><span class="token">add</span><span class="token">(</span>tracking<span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
        
        <span class="token">if</span> <span class="token">(</span><span class="token">!</span>trackingRecords<span class="token">.</span><span class="token">isEmpty</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
            <span class="token">insert</span> trackingRecords<span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>
    
    <span class="token">// 代理承認者への自動エスカレーション</span>
    <span class="token annotation">@future</span>
    <span class="token">public</span> <span class="token">static</span> <span class="token">void</span> <span class="token">checkForEscalation</span><span class="token">(</span><span class="token">Set</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span> processInstanceIds<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">ProcessInstance</span><span class="token">&gt;</span> processes <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span> <span class="token sql language-sql">Status</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> CreatedDate</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> TargetObjectId
</span>            <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> ProcessInstance 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">IN</span><span class="token sql language-sql"> :processInstanceIds
</span>            <span class="token sql language-sql">AND</span> <span class="token sql language-sql">Status</span> <span class="token sql language-sql">=</span> <span class="token sql language-sql">'Pending'</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">ProcessInstance</span> process <span class="token">:</span> processes<span class="token">)</span> <span class="token">{</span>
            <span class="token">// 24時間経過した場合のエスカレーション</span>
            <span class="token">if</span> <span class="token">(</span>process<span class="token">.</span>CreatedDate<span class="token">.</span><span class="token">addHours</span><span class="token">(</span><span class="token">24</span><span class="token">)</span> <span class="token">&lt;</span> <span class="token">System</span><span class="token">.</span><span class="token">now</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
                <span class="token">escalateToDelegate</span><span class="token">(</span>process<span class="token">.</span>Id<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
        <span class="token">}</span>
    <span class="token">}</span>
    
    <span class="token">private</span> <span class="token">static</span> <span class="token">void</span> <span class="token">escalateToDelegate</span><span class="token">(</span><span class="token">Id</span> processInstanceId<span class="token">)</span> <span class="token">{</span>
        <span class="token">// 現在の承認者を取得</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">ProcessInstanceWorkitem</span><span class="token">&gt;</span> workitems <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> ActorId</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> ProcessInstanceId
</span>            <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> ProcessInstanceWorkitem 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> ProcessInstanceId </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :processInstanceId
</span>        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">ProcessInstanceWorkitem</span> workitem <span class="token">:</span> workitems<span class="token">)</span> <span class="token">{</span>
            <span class="token">// 代理承認者を検索</span>
            <span class="token">List</span><span class="token">&lt;</span><span class="token">User</span><span class="token">&gt;</span> delegates <span class="token">=</span> <span class="token sql language-sql">[</span>
                <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span> <span class="token sql language-sql">User</span> 
                <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> ManagerId </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :workitem</span><span class="token sql language-sql">.</span><span class="token sql language-sql">ActorId 
</span>                <span class="token sql language-sql">AND</span><span class="token sql language-sql"> IsActive </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">true</span>
                <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
            <span class="token sql language-sql">]</span><span class="token">;</span>
            
            <span class="token">if</span> <span class="token">(</span><span class="token">!</span>delegates<span class="token">.</span><span class="token">isEmpty</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
                <span class="token">// 代理承認者に再アサイン</span>
                <span class="token">Approval</span><span class="token">.</span><span class="token">ProcessWorkitemRequest</span> req <span class="token">=</span> <span class="token">new</span> <span class="token">Approval</span><span class="token">.</span><span class="token">ProcessWorkitemRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
                req<span class="token">.</span><span class="token">setComments</span><span class="token">(</span><span class="token">'自動エスカレーション: 代理承認者へのアサイン'</span><span class="token">)</span><span class="token">;</span>
                req<span class="token">.</span><span class="token">setAction</span><span class="token">(</span><span class="token">'Reassign'</span><span class="token">)</span><span class="token">;</span>
                req<span class="token">.</span><span class="token">setWorkitemId</span><span class="token">(</span>workitem<span class="token">.</span>Id<span class="token">)</span><span class="token">;</span>
                req<span class="token">.</span><span class="token">setNewActorIds</span><span class="token">(</span><span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">&gt;</span><span class="token">{</span>delegates<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>Id<span class="token">}</span><span class="token">)</span><span class="token">;</span>
                
                Approval<span class="token">.</span><span class="token">process</span><span class="token">(</span>req<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
        <span class="token">}</span>
    <span class="token">}</span>
    
    <span class="token">// データクラス</span>
    <span class="token">public</span> <span class="token">class</span> <span class="token">ApprovalRequest</span> <span class="token">{</span>
        <span class="token annotation">@InvocableVariable</span><span class="token">(</span>required<span class="token">=</span><span class="token">true</span><span class="token">)</span>
        <span class="token">public</span> <span class="token">Id</span> opportunityId<span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">public</span> <span class="token">class</span> <span class="token">ApprovalResult</span> <span class="token">{</span>
        <span class="token annotation">@InvocableVariable</span>
        <span class="token">public</span> <span class="token">Boolean</span> success<span class="token">;</span>
        <span class="token annotation">@InvocableVariable</span>
        <span class="token">public</span> <span class="token">String</span> message<span class="token">;</span>
        <span class="token annotation">@InvocableVariable</span>
        <span class="token">public</span> <span class="token">Id</span> opportunityId<span class="token">;</span>
        <span class="token annotation">@InvocableVariable</span>
        <span class="token">public</span> <span class="token">Id</span> processInstanceId<span class="token">;</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">テストコードの自動生成</h3>
<p class="whitespace-normal break-words"><strong>AIエディタによるテストクラスの生成</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token annotation">@isTest</span>
<span class="token">public</span> <span class="token">class</span> <span class="token">OpportunityApprovalManagerTest</span> <span class="token">{</span>
    
    <span class="token annotation">@TestSetup</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">setupTestData</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">// テスト用のユーザー作成</span>
        <span class="token">Profile</span> profile <span class="token">=</span> <span class="token sql language-sql">[</span><span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Profile </span><span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">'Standard User'</span> <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span><span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">User</span> manager <span class="token">=</span> <span class="token">new</span> <span class="token">User</span><span class="token">(</span>
            FirstName <span class="token">=</span> <span class="token">'Test'</span><span class="token">,</span>
            LastName <span class="token">=</span> <span class="token">'Manager'</span><span class="token">,</span>
            Email <span class="token">=</span> <span class="token">'testmanager@example.com'</span><span class="token">,</span>
            Username <span class="token">=</span> <span class="token">'testmanager@example.com.test'</span><span class="token">,</span>
            Alias <span class="token">=</span> <span class="token">'tmgr'</span><span class="token">,</span>
            ProfileId <span class="token">=</span> profile<span class="token">.</span>Id<span class="token">,</span>
            TimeZoneSidKey <span class="token">=</span> <span class="token">'Asia/Tokyo'</span><span class="token">,</span>
            LocaleSidKey <span class="token">=</span> <span class="token">'ja_JP'</span><span class="token">,</span>
            EmailEncodingKey <span class="token">=</span> <span class="token">'UTF-8'</span><span class="token">,</span>
            LanguageLocaleKey <span class="token">=</span> <span class="token">'ja'</span>
        <span class="token">)</span><span class="token">;</span>
        <span class="token">insert</span> manager<span class="token">;</span>
        
        <span class="token">User</span> salesUser <span class="token">=</span> <span class="token">new</span> <span class="token">User</span><span class="token">(</span>
            FirstName <span class="token">=</span> <span class="token">'Test'</span><span class="token">,</span>
            LastName <span class="token">=</span> <span class="token">'Sales'</span><span class="token">,</span>
            Email <span class="token">=</span> <span class="token">'testsales@example.com'</span><span class="token">,</span>
            Username <span class="token">=</span> <span class="token">'testsales@example.com.test'</span><span class="token">,</span>
            Alias <span class="token">=</span> <span class="token">'tsales'</span><span class="token">,</span>
            ProfileId <span class="token">=</span> profile<span class="token">.</span>Id<span class="token">,</span>
            ManagerId <span class="token">=</span> manager<span class="token">.</span>Id<span class="token">,</span>
            TimeZoneSidKey <span class="token">=</span> <span class="token">'Asia/Tokyo'</span><span class="token">,</span>
            LocaleSidKey <span class="token">=</span> <span class="token">'ja_JP'</span><span class="token">,</span>
            EmailEncodingKey <span class="token">=</span> <span class="token">'UTF-8'</span><span class="token">,</span>
            LanguageLocaleKey <span class="token">=</span> <span class="token">'ja'</span>
        <span class="token">)</span><span class="token">;</span>
        <span class="token">insert</span> salesUser<span class="token">;</span>
        
        <span class="token">// テスト用の取引先作成</span>
        <span class="token">Account</span> testAccount <span class="token">=</span> <span class="token">new</span> <span class="token">Account</span><span class="token">(</span>
            Name <span class="token">=</span> <span class="token">'テスト取引先'</span><span class="token">,</span>
            OwnerId <span class="token">=</span> salesUser<span class="token">.</span>Id
        <span class="token">)</span><span class="token">;</span>
        <span class="token">insert</span> testAccount<span class="token">;</span>
        
        <span class="token">// テスト用の商談作成</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span> opportunities <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 小額商談（マネージャー承認）</span>
        opportunities<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">new</span> <span class="token">Opportunity</span><span class="token">(</span>
            Name <span class="token">=</span> <span class="token">'テスト商談 - 小額'</span><span class="token">,</span>
            AccountId <span class="token">=</span> testAccount<span class="token">.</span>Id<span class="token">,</span>
            Amount <span class="token">=</span> <span class="token">50000</span><span class="token">,</span>
            CloseDate <span class="token">=</span> <span class="token">Date</span><span class="token">.</span><span class="token">today</span><span class="token">(</span><span class="token">)</span><span class="token">.</span><span class="token">addDays</span><span class="token">(</span><span class="token">30</span><span class="token">)</span><span class="token">,</span>
            StageName <span class="token">=</span> <span class="token">'Prospecting'</span><span class="token">,</span>
            OwnerId <span class="token">=</span> salesUser<span class="token">.</span>Id
        <span class="token">)</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 中額商談（ディレクター承認）</span>
        opportunities<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">new</span> <span class="token">Opportunity</span><span class="token">(</span>
            Name <span class="token">=</span> <span class="token">'テスト商談 - 中額'</span><span class="token">,</span>
            AccountId <span class="token">=</span> testAccount<span class="token">.</span>Id<span class="token">,</span>
            Amount <span class="token">=</span> <span class="token">300000</span><span class="token">,</span>
            CloseDate <span class="token">=</span> <span class="token">Date</span><span class="token">.</span><span class="token">today</span><span class="token">(</span><span class="token">)</span><span class="token">.</span><span class="token">addDays</span><span class="token">(</span><span class="token">30</span><span class="token">)</span><span class="token">,</span>
            StageName <span class="token">=</span> <span class="token">'Prospecting'</span><span class="token">,</span>
            OwnerId <span class="token">=</span> salesUser<span class="token">.</span>Id
        <span class="token">)</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 高額商談（VP承認）</span>
        opportunities<span class="token">.</span><span class="token">add</span><span class="token">(</span><span class="token">new</span> <span class="token">Opportunity</span><span class="token">(</span>
            Name <span class="token">=</span> <span class="token">'テスト商談 - 高額'</span><span class="token">,</span>
            AccountId <span class="token">=</span> testAccount<span class="token">.</span>Id<span class="token">,</span>
            Amount <span class="token">=</span> <span class="token">800000</span><span class="token">,</span>
            CloseDate <span class="token">=</span> <span class="token">Date</span><span class="token">.</span><span class="token">today</span><span class="token">(</span><span class="token">)</span><span class="token">.</span><span class="token">addDays</span><span class="token">(</span><span class="token">30</span><span class="token">)</span><span class="token">,</span>
            StageName <span class="token">=</span> <span class="token">'Prospecting'</span><span class="token">,</span>
            OwnerId <span class="token">=</span> salesUser<span class="token">.</span>Id
        <span class="token">)</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">insert</span> opportunities<span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token annotation">@isTest</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">testManagerApprovalProcess</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">Opportunity</span> smallOpp <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">'テスト商談 - 小額'</span> 
            <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">startTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests <span class="token">=</span> 
            <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span> request <span class="token">=</span> 
            <span class="token">new</span> <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        request<span class="token">.</span>opportunityId <span class="token">=</span> smallOpp<span class="token">.</span>Id<span class="token">;</span>
        requests<span class="token">.</span><span class="token">add</span><span class="token">(</span>request<span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> 
            OpportunityApprovalManager<span class="token">.</span><span class="token">initiateApprovalProcess</span><span class="token">(</span>requests<span class="token">)</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">stopTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 結果の検証</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">1</span><span class="token">,</span> results<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'結果が1件返されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">true</span><span class="token">,</span> results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>success<span class="token">,</span> <span class="token">'承認プロセスが成功すること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span>smallOpp<span class="token">.</span>Id<span class="token">,</span> results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>opportunityId<span class="token">,</span> <span class="token">'商談IDが正しく設定されること'</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 追跡レコードの確認</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">ApprovalTracking__c</span><span class="token">&gt;</span> trackings <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Status__c 
</span>            <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> ApprovalTracking__c 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Opportunity__c </span><span class="token sql language-sql">=</span><span class="token sql language-sql"> :smallOpp</span><span class="token sql language-sql">.</span><span class="token sql language-sql">Id
</span>        <span class="token sql language-sql">]</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertNotEquals</span><span class="token">(</span><span class="token">0</span><span class="token">,</span> trackings<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'追跡レコードが作成されること'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token annotation">@isTest</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">testDirectorApprovalProcess</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">Opportunity</span> mediumOpp <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">'テスト商談 - 中額'</span> 
            <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">startTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests <span class="token">=</span> 
            <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span> request <span class="token">=</span> 
            <span class="token">new</span> <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        request<span class="token">.</span>opportunityId <span class="token">=</span> mediumOpp<span class="token">.</span>Id<span class="token">;</span>
        requests<span class="token">.</span><span class="token">add</span><span class="token">(</span>request<span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> 
            OpportunityApprovalManager<span class="token">.</span><span class="token">initiateApprovalProcess</span><span class="token">(</span>requests<span class="token">)</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">stopTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 結果の検証</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">1</span><span class="token">,</span> results<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'結果が1件返されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span>mediumOpp<span class="token">.</span>Id<span class="token">,</span> results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>opportunityId<span class="token">,</span> <span class="token">'商談IDが正しく設定されること'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token annotation">@isTest</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">testVPApprovalProcess</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">Opportunity</span> largeOpp <span class="token">=</span> <span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">=</span> <span class="token sql language-sql">'テスト商談 - 高額'</span> 
            <span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">1</span>
        <span class="token sql language-sql">]</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">startTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests <span class="token">=</span> 
            <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span> request <span class="token">=</span> 
            <span class="token">new</span> <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        request<span class="token">.</span>opportunityId <span class="token">=</span> largeOpp<span class="token">.</span>Id<span class="token">;</span>
        requests<span class="token">.</span><span class="token">add</span><span class="token">(</span>request<span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> 
            OpportunityApprovalManager<span class="token">.</span><span class="token">initiateApprovalProcess</span><span class="token">(</span>requests<span class="token">)</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">stopTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// 結果の検証</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">1</span><span class="token">,</span> results<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'結果が1件返されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span>largeOpp<span class="token">.</span>Id<span class="token">,</span> results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>opportunityId<span class="token">,</span> <span class="token">'商談IDが正しく設定されること'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token annotation">@isTest</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">testErrorHandling</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        Test<span class="token">.</span><span class="token">startTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests <span class="token">=</span> 
            <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span> request <span class="token">=</span> 
            <span class="token">new</span> <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        request<span class="token">.</span>opportunityId <span class="token">=</span> <span class="token">null</span><span class="token">;</span> <span class="token">// 不正なID</span>
        requests<span class="token">.</span><span class="token">add</span><span class="token">(</span>request<span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> 
            OpportunityApprovalManager<span class="token">.</span><span class="token">initiateApprovalProcess</span><span class="token">(</span>requests<span class="token">)</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">stopTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// エラーハンドリングの検証</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">1</span><span class="token">,</span> results<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'結果が1件返されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span><span class="token">false</span><span class="token">,</span> results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>success<span class="token">,</span> <span class="token">'エラーが正しく処理されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assert</span><span class="token">(</span>results<span class="token">[</span><span class="token">0</span><span class="token">]</span><span class="token">.</span>message<span class="token">.</span><span class="token">contains</span><span class="token">(</span><span class="token">'エラー'</span><span class="token">)</span><span class="token">,</span> <span class="token">'エラーメッセージが設定されること'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token annotation">@isTest</span>
    <span class="token">static</span> <span class="token">void</span> <span class="token">testBulkProcessing</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Opportunity</span><span class="token">&gt;</span> allOpps <span class="token">=</span> <span class="token sql language-sql">[</span><span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Opportunity</span><span class="token sql language-sql">]</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">startTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span> requests <span class="token">=</span> 
            <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">Opportunity</span> opp <span class="token">:</span> allOpps<span class="token">)</span> <span class="token">{</span>
            <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span> request <span class="token">=</span> 
                <span class="token">new</span> <span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalRequest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
            request<span class="token">.</span>opportunityId <span class="token">=</span> opp<span class="token">.</span>Id<span class="token">;</span>
            requests<span class="token">.</span><span class="token">add</span><span class="token">(</span>request<span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
        
        <span class="token">List</span><span class="token">&lt;</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span><span class="token">&gt;</span> results <span class="token">=</span> 
            OpportunityApprovalManager<span class="token">.</span><span class="token">initiateApprovalProcess</span><span class="token">(</span>requests<span class="token">)</span><span class="token">;</span>
        
        Test<span class="token">.</span><span class="token">stopTest</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// バルク処理の検証</span>
        <span class="token">System</span><span class="token">.</span><span class="token">assertEquals</span><span class="token">(</span>allOpps<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> results<span class="token">.</span><span class="token">size</span><span class="token">(</span><span class="token">)</span><span class="token">,</span> <span class="token">'全ての商談が処理されること'</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">OpportunityApprovalManager</span><span class="token">.</span><span class="token">ApprovalResult</span> result <span class="token">:</span> results<span class="token">)</span> <span class="token">{</span>
            <span class="token">System</span><span class="token">.</span><span class="token">assertNotEquals</span><span class="token">(</span><span class="token">null</span><span class="token">,</span> result<span class="token">.</span>opportunityId<span class="token">,</span> <span class="token">'商談IDが設定されること'</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">6. 注意点と課題</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">セキュリティ考慮事項</h3>
<p class="whitespace-normal break-words"><strong>AIエディタ使用時のセキュリティリスク</strong></p>
<p class="whitespace-normal break-words"><strong>1. 機密情報の漏洩リスク</strong> AIエディタにコードを送信する際、顧客情報や機密データが含まれる可能性があります。以下の対策が必要です：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">実際の顧客データを含むコードをAIエディタに送信しない</li>
<li class="whitespace-normal break-words">テストデータやサンプルデータを使用してコード生成を行う</li>
<li class="whitespace-normal break-words">社内のデータ分類ポリシーに従った利用ガイドラインの策定</li>
<li class="whitespace-normal break-words">AIエディタの利用ログの監査と定期的なレビュー</li>
</ul>
<p class="whitespace-normal break-words"><strong>2. 生成されたコードのセキュリティ脆弱性</strong> AIが生成したコードには、セキュリティ上の問題が含まれる可能性があります：</p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// 危険な例：SQLインジェクション脆弱性</span>
<span class="token">public</span> <span class="token">static</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> <span class="token">searchAccounts</span><span class="token">(</span><span class="token">String</span> searchTerm<span class="token">)</span> <span class="token">{</span>
    <span class="token">// AIが生成した危険なコード例</span>
    <span class="token">String</span> query <span class="token">=</span> <span class="token">'SELECT Id, Name FROM Account WHERE Name LIKE \'%'</span> <span class="token">+</span> searchTerm <span class="token">+</span> <span class="token">'%\''</span><span class="token">;</span>
    <span class="token">return</span> Database<span class="token">.</span><span class="token">query</span><span class="token">(</span>query<span class="token">)</span><span class="token">;</span> <span class="token">// SQLインジェクション脆弱性</span>
<span class="token">}</span>

<span class="token">// 安全な実装例</span>
<span class="token">public</span> <span class="token">static</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> <span class="token">searchAccountsSafe</span><span class="token">(</span><span class="token">String</span> searchTerm<span class="token">)</span> <span class="token">{</span>
    <span class="token">String</span> safeSearchTerm <span class="token">=</span> <span class="token">'%'</span> <span class="token">+</span> <span class="token">String</span><span class="token">.</span><span class="token">escapeSingleQuotes</span><span class="token">(</span>searchTerm<span class="token">)</span> <span class="token">+</span> <span class="token">'%'</span><span class="token">;</span>
    <span class="token">return</span> <span class="token sql language-sql">[</span><span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Account </span><span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">LIKE</span><span class="token sql language-sql"> :safeSearchTerm</span><span class="token sql language-sql">]</span><span class="token">;</span>
<span class="token">}</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>3. 権限とアクセス制御</strong> AIが生成するコードが適切な権限チェックを含んでいるか確認が必要です：</p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// 権限チェックを含む安全なコード例</span>
<span class="token">public</span> <span class="token">static</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> <span class="token">getAccounts</span><span class="token">(</span><span class="token">)</span> <span class="token">{</span>
    <span class="token">// オブジェクトレベルの権限チェック</span>
    <span class="token">if</span> <span class="token">(</span><span class="token">!</span>Schema<span class="token">.</span>sObjectType<span class="token">.</span>Account<span class="token">.</span><span class="token">isAccessible</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">throw</span> <span class="token">new</span> <span class="token">AuraHandledException</span><span class="token">(</span><span class="token">'取引先への読み取り権限がありません'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">// フィールドレベルの権限チェック</span>
    <span class="token">if</span> <span class="token">(</span><span class="token">!</span>Schema<span class="token">.</span>sObjectType<span class="token">.</span>Account<span class="token">.</span>fields<span class="token">.</span>Name<span class="token">.</span><span class="token">isAccessible</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">throw</span> <span class="token">new</span> <span class="token">AuraHandledException</span><span class="token">(</span><span class="token">'取引先名フィールドへの読み取り権限がありません'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">return</span> <span class="token sql language-sql">[</span><span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Name </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Account </span><span class="token sql language-sql">WITH</span><span class="token sql language-sql"> SECURITY_ENFORCED </span><span class="token sql language-sql">LIMIT</span> <span class="token sql language-sql">100</span><span class="token sql language-sql">]</span><span class="token">;</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">コード品質の担保方法</h3>
<p class="whitespace-normal break-words"><strong>1. AIによるコード生成後の必須チェック項目</strong></p>
<p class="whitespace-normal break-words"><strong>Salesforce固有の制約チェック</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">ガバナーリミット（SOQL実行回数、DML操作回数、ヒープサイズなど）への対応</li>
<li class="whitespace-normal break-words">バルク処理の実装</li>
<li class="whitespace-normal break-words">適切な例外処理の実装</li>
<li class="whitespace-normal break-words">トランザクション管理の考慮</li>
</ul>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// 良い例：ガバナーリミットを考慮したコード</span>
<span class="token">public</span> <span class="token">class</span> <span class="token">ContactProcessor</span> <span class="token">{</span>
    <span class="token">public</span> <span class="token">static</span> <span class="token">void</span> <span class="token">processContacts</span><span class="token">(</span><span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span> contacts<span class="token">)</span> <span class="token">{</span>
        <span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span> contactsToUpdate <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Contact</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">// バルク処理でSOQL実行回数を最小化</span>
        <span class="token">Map</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">,</span><span class="token"> Account</span><span class="token">&gt;</span> accountMap <span class="token">=</span> <span class="token">new</span> <span class="token">Map</span><span class="token">&lt;</span><span class="token">Id</span><span class="token">,</span><span class="token"> Account</span><span class="token">&gt;</span><span class="token">(</span><span class="token sql language-sql">[</span>
            <span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> Id</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> Industry 
</span>            <span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Account 
</span>            <span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">IN</span> <span class="token sql language-sql">(</span><span class="token sql language-sql">SELECT</span><span class="token sql language-sql"> AccountId </span><span class="token sql language-sql">FROM</span><span class="token sql language-sql"> Contact </span><span class="token sql language-sql">WHERE</span><span class="token sql language-sql"> Id </span><span class="token sql language-sql">IN</span><span class="token sql language-sql"> :contacts</span><span class="token sql language-sql">)</span>
        <span class="token sql language-sql">]</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">Contact</span> contact <span class="token">:</span> contacts<span class="token">)</span> <span class="token">{</span>
            <span class="token">if</span> <span class="token">(</span>accountMap<span class="token">.</span><span class="token">containsKey</span><span class="token">(</span>contact<span class="token">.</span>AccountId<span class="token">)</span><span class="token">)</span> <span class="token">{</span>
                contact<span class="token">.</span>Industry__c <span class="token">=</span> accountMap<span class="token">.</span><span class="token">get</span><span class="token">(</span>contact<span class="token">.</span>AccountId<span class="token">)</span><span class="token">.</span>Industry<span class="token">;</span>
                contactsToUpdate<span class="token">.</span><span class="token">add</span><span class="token">(</span>contact<span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
        <span class="token">}</span>
        
        <span class="token">// バルクDML操作</span>
        <span class="token">if</span> <span class="token">(</span><span class="token">!</span>contactsToUpdate<span class="token">.</span><span class="token">isEmpty</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
            <span class="token">try</span> <span class="token">{</span>
                Database<span class="token">.</span><span class="token">update</span><span class="token">(</span>contactsToUpdate<span class="token">,</span> <span class="token">false</span><span class="token">)</span><span class="token">;</span>
            <span class="token">}</span> <span class="token">catch</span> <span class="token">(</span><span class="token">DmlException</span> e<span class="token">)</span> <span class="token">{</span>
                <span class="token">System</span><span class="token">.</span><span class="token">debug</span><span class="token">(</span><span class="token">'DML Error: '</span> <span class="token">+</span> e<span class="token">.</span><span class="token">getMessage</span><span class="token">(</span><span class="token">)</span><span class="token">)</span><span class="token">;</span>
                <span class="token">// 適切なエラーハンドリング</span>
            <span class="token">}</span>
        <span class="token">}</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>2. 静的コード解析ツールの活用</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">PMD for Salesforce</li>
<li class="whitespace-normal break-words">SonarQube Salesforce Plugin</li>
<li class="whitespace-normal break-words">Salesforce Code Analyzer</li>
</ul>
<p class="whitespace-normal break-words"><strong>3. コードレビュープロセスの強化</strong> AIが生成したコードについては、特に以下の観点でのレビューを強化：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">ビジネスロジックの正確性</li>
<li class="whitespace-normal break-words">パフォーマンスの最適化</li>
<li class="whitespace-normal break-words">セキュリティ要件の満足</li>
<li class="whitespace-normal break-words">保守性とテスタビリティ</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">チーム開発での運用ポイント</h3>
<p class="whitespace-normal break-words"><strong>1. AIエディタ利用のガイドライン策定</strong></p>
<p class="whitespace-normal break-words"><strong>利用ルールの明文化</strong></p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">markdown</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-markdown"><span class="token">##</span><span class="token"> AIエディタ利用ガイドライン</span>

<span class="token">###</span><span class="token"> 基本方針</span>
<span class="token">1.</span> 本番データを含むコードをAIエディタに送信しない
<span class="token">2.</span> 生成されたコードは必ず動作確認とセキュリティチェックを行う
<span class="token">3.</span> AIの提案をそのまま採用せず、チームの規約に合わせて調整する

<span class="token">###</span><span class="token"> 利用可能な範囲</span>
<span class="token">-</span> ボイラープレートコードの生成
<span class="token">-</span> テストコードの初期実装
<span class="token">-</span> リファクタリングの提案
<span class="token">-</span> ドキュメンテーションの作成

<span class="token">###</span><span class="token"> 利用禁止事項</span>
<span class="token">-</span> 本番環境の機密データを含むコードの送信
<span class="token">-</span> 未検証のコードの直接的な本番環境への適用
<span class="token">-</span> ライセンスが不明なコードの利用</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>2. 品質基準の統一</strong></p>
<p class="whitespace-normal break-words"><strong>コード品質チェックリスト</strong></p>
<ul class="contains-task-list">
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> Salesforceガバナーリミットへの対応</li>
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> 適切な例外処理の実装</li>
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> セキュリティ要件の満足</li>
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> テストカバレッジ75%以上</li>
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> コメントとドキュメンテーションの充実</li>
<li class="task-list-item"><input disabled="disabled" type="checkbox" /> チームのコーディング規約への準拠</li>
</ul>
<p class="whitespace-normal break-words"><strong>3. 知識共有とベストプラクティスの蓄積</strong></p>
<p class="whitespace-normal break-words"><strong>効果的なプロンプトの共有</strong> チーム内で効果的だったプロンプトや手法を共有し、組織全体のVibe Coding能力を向上させます。</p>
<div class="relative group/copy rounded-lg">
<div class="text-text-500 text-xs p-3.5 pb-0">markdown</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-markdown"><span class="token">##</span><span class="token"> 有効なプロンプト例集</span>

<span class="token">###</span><span class="token"> Apexクラス生成</span>
「Salesforceのガバナーリミットを考慮し、バルク処理に対応した
[機能名]のApexクラスを作成してください。エラーハンドリングと
ログ出力も含めて実装してください。」

<span class="token">###</span><span class="token"> テストクラス生成</span>
「先ほど作成したApexクラスに対して、以下の条件を満たす
テストクラスを作成してください：
<span class="token">-</span> 正常系・異常系の両方をテスト
<span class="token">-</span> バルク処理のテスト
<span class="token">-</span> 75%以上のカバレッジ確保」</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>4. 継続的な改善プロセス</strong></p>
<p class="whitespace-normal break-words"><strong>定期的な振り返り</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">月次でのAIエディタ利用状況のレビュー</li>
<li class="whitespace-normal break-words">問題点や改善点の特定と対策の検討</li>
<li class="whitespace-normal break-words">新機能や新しい手法の評価と導入検討</li>
</ul>
<p class="whitespace-normal break-words"><strong>メトリクスの計測</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">開発速度の向上度</li>
<li class="whitespace-normal break-words">コード品質の指標（バグ発生率、レビュー指摘事項数）</li>
<li class="whitespace-normal break-words">開発者の満足度</li>
<li class="whitespace-normal break-words">学習コストの変化</li>
</ul>
<h2>関連記事</h2>
<div class="cclt-compat-catgroup"><ul class="cclt-compat-catgroup__list"><li class="cclt-compat-catgroup__item"><a href="https://creativecontentlabtokyo.com/develop-salesforce-with-vibe-cording-using-ai-editor/" class="cclt-compat-catgroup__link"><div class="cclt-compat-catgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-Vibe-coding-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-Vibe-coding-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-Vibe-coding-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><div class="cclt-compat-catgroup__info"><span class="cclt-compat-catgroup__title">AIエディタを使ったVibe CordingでSalesforceの開発を行う【①用語の理解とツールの説明】</span><time class="cclt-compat-catgroup__date" datetime="2025-06-22T14:15:48+09:00">2025年6月22日</time></div></a></li><li class="cclt-compat-catgroup__item"><a href="https://creativecontentlabtokyo.com/development-use-case-vibe-coding/" class="cclt-compat-catgroup__link"><div class="cclt-compat-catgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><div class="cclt-compat-catgroup__info"><span class="cclt-compat-catgroup__title">AIエディタを使ったVibe codingの実際の開発事例（ユースケース）</span><time class="cclt-compat-catgroup__date" datetime="2025-06-22T14:14:11+09:00">2025年6月22日</time></div></a></li><li class="cclt-compat-catgroup__item"><a href="https://creativecontentlabtokyo.com/2025-napkinai-guidance/" class="cclt-compat-catgroup__link"><div class="cclt-compat-catgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/napkin.ai_-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="napkin.ai" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/napkin.ai_-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/napkin.ai_-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><div class="cclt-compat-catgroup__info"><span class="cclt-compat-catgroup__title">【2025年最新】Napkin AI完全ガイド-生成AIを使って効率的に資料やスライド用の文章や図解を作成しよう</span><time class="cclt-compat-catgroup__date" datetime="2025-06-08T17:32:11+09:00">2025年6月8日</time></div></a></li><li class="cclt-compat-catgroup__item"><a href="https://creativecontentlabtokyo.com/generative-ai-business-guide-for-salesforce/" class="cclt-compat-catgroup__link"><div class="cclt-compat-catgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/ビジネスを変革する生成AI活用-150x150.png" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/ビジネスを変革する生成AI活用-150x150.png 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/ビジネスを変革する生成AI活用-100x100.png 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><div class="cclt-compat-catgroup__info"><span class="cclt-compat-catgroup__title">ビジネスを変革する生成AI「ジェネレーティブAI（Generative AI）」活用ガイド</span><time class="cclt-compat-catgroup__date" datetime="2025-06-03T13:38:22+09:00">2025年6月3日</time></div></a></li><li class="cclt-compat-catgroup__item"><a href="https://creativecontentlabtokyo.com/what-is-generative-ai/" class="cclt-compat-catgroup__link"><div class="cclt-compat-catgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-work-3-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-work-3-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-work-3-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><div class="cclt-compat-catgroup__info"><span class="cclt-compat-catgroup__title">生成AIとは？初心者向け完全ガイド：基本から活用方法まで徹底解説</span><time class="cclt-compat-catgroup__date" datetime="2025-06-02T19:16:16+09:00">2025年6月2日</time></div></a></li></ul></div>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5524"
					data-ulike-nonce="28206451bb"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5524"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Salesforce開発コーディング規約（LWC）サンプル・テンプレート</title>
		<link>https://creativecontentlabtokyo.com/salesforce-lightning-web-component-coding-standards-guide-template/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sun, 15 Jun 2025 08:06:23 +0000</pubDate>
				<category><![CDATA[テンプレート]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Lightning web component]]></category>
		<category><![CDATA[LWC]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[コーディング規約]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[セールスフォース]]></category>
		<category><![CDATA[品質管理]]></category>
		<category><![CDATA[書き方]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5286</guid>

					<description><![CDATA[本記事では、Creative Content Lab Tokyo（クリエイティブコンテンツラボトウキョウ）が作成したSalesforceの開発コーディング規約（…]]></description>
										<content:encoded><![CDATA[
<p>本記事では、Creative Content Lab Tokyo（クリエイティブコンテンツラボトウキョウ）が作成したSalesforceの開発コーディング規約（Lightning Web Component）のテンプレートをご提供しております。</p>
<p class="whitespace-normal break-words">モダンなSalesforce開発において、Lightning Web Component（LWC）は欠かせない技術要素となっています。しかし、多くの開発チームが「どのようなコーディング規約を設ければよいのか」「チーム全体で一貫したコードスタイルを維持するにはどうすればよいのか」といった課題を抱えています。</p>
<p class="whitespace-normal break-words">本記事では、SalesforceのApexコーディング規約の考え方を参考にしながら、LWC開発における実践的なコーディング規約の策定と活用方法について詳しく解説します。品質の高いLWCアプリケーションを開発するために、ぜひ本ガイドを参考にして、あなたのプロジェクトに最適なコーディング規約を構築してください。</p>
<p class="whitespace-normal break-words">本記事では、このテンプレートの特徴と効果的な活用方法について詳しく解説します。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">なぜコーディング規約が重要なのか</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">1. フロントエンド開発の複雑性への対応</h3>
<p class="whitespace-normal break-words">LWC開発では、JavaScript、HTML、CSS、そしてSalesforceのメタデータが複雑に絡み合います。統一されたコーディング規約がないと、以下のような問題が発生します：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">コンポーネント間でのスタイリングの不整合</li>
<li class="whitespace-normal break-words">JavaScript のパフォーマンスの劣化</li>
<li class="whitespace-normal break-words">コンポーネントの再利用性の低下</li>
<li class="whitespace-normal break-words">デバッグの困難さ</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">2. Salesforceプラットフォーム特有の制約</h3>
<p class="whitespace-normal break-words">LWC開発では、一般的なWebフロントエンド開発とは異なる独特の制約があります：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">Locker Service によるセキュリティ制約</li>
<li class="whitespace-normal break-words">Lightning Data Service の効率的な活用</li>
<li class="whitespace-normal break-words">イベント伝播とコンポーネント間通信</li>
<li class="whitespace-normal break-words">レスポンシブデザインとLightning Design System（SLDS）の準拠</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">3. 長期保守性の確保</h3>
<p class="whitespace-normal break-words">LWCコンポーネントは、Salesforceの組織内で長期間にわたって使用されます。初期開発から数年後の機能拡張や修正を考慮した、保守しやすいコード構造を保つことが重要です。</p>
<h2>1.テーラリングガイド</h2>
<h3>１．目次サンプル</h3>
<p><img fetchpriority="high" decoding="async" width="1446" height="1001" class="alignnone wp-image-5297 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-79.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-79.png 1446w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-79-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-79-1024x709.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-79-768x532.png 768w" sizes="(max-width: 1446px) 100vw, 1446px" /></p>
<p>目次<br />1 はじめに <br />　1.1 本書の目的 7<br />　1.1.1 利用者 7<br />1.2 記号 7<br />　1.2.1 本書で使用する記号についての説明 7<br />1.3 用語の定義 7<br />　1.3.1 本書で使用する記号についての説明 7<br />2 基本方針 8<br />　2.1 可読性の優先 8<br />　2.2 保守性の確保 8<br />　2.3 Lightning固有の考慮事項 8<br />3 命名規則 8<br />　3.1 コンポーネント名 8<br />　3.2 メソッド名 9<br />　3.3 定数名 10<br />4 ファイル構造とフォーマット 11<br />　4.1 ファイル構成 11<br />　4.2 インデント 11<br />　4.3 行の長さ 12<br />5 Javascript設計 13<br />　5.1 クラス構造の順序 13<br />　5.2 プロパティ設計 15<br />6 HTMLテンプレート設計 17<br />　6.1 テンプレート構造 17<br />　6.2 イベントハンドリング 18<br />7 CSSスタイル設計 21<br />　7.1 SLDS準拠 21<br />　7.2 CSSカスタムプロパティ 22<br />8 データアクセスとAPIコール 22<br />　8.1 Lightning Data Service (LDS) 22<br />　8.2 Apexメソッド呼び出し 24<br />9 イベント設計 25<br />　9.1 カスタムイベント 25<br />　9.2 プラットフォームイベント 27<br />10 テスト設計 28<br />　10.1 Jestテスト 28<br />　10.2 テストデータファクトリ 31<br />11 セキュリティとベストプラクティス 33<br />　11.1 セキュリティ考慮事項 33<br />　11.2 パフォーマンス最適化 34<br />12 国際化対応 36<br />　12.1 カスタムラベル使用 36<br />　12.2 日付・通貨・数値フォーマット 38<br />13 エラーハンドリング 40<br />　13.1 統一的なエラーハンドリング 40<br />　13.2 バリデーションエラー 43<br />14 デバッグとトラブルシューティング 45<br />　14.1 ログ出力 45<br />　14.2 パフォーマンス監視 46<br />15 コンポーネント設計パターン 48<br />　15.1 コンポーネント間通信 48<br />　15.2 コンポーネント間通信 50<br />16 メタデータ設計 53<br />　16.1 コンポーネントメタデータ 53<br />17 運用保守 55<br />　17.1 コードレビューチェックリスト 55</p>
<h3>２.基本方針（可読性・保守性の重視）</h3>
<p class="whitespace-normal break-words">テンプレートでは、「可読性の優先」「保守性の確保」「Salesforce固有の考慮事項」の3つを基本方針として掲げています。これらの方針は、長期的な開発・運用を見据えた重要な指針となります。</p>
<p><img decoding="async" width="1440" height="999" class="alignnone wp-image-5298 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-80.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-80.png 1440w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-80-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-80-1024x710.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-80-768x533.png 768w" sizes="(max-width: 1440px) 100vw, 1440px" /></p>
<p class="whitespace-normal break-words"><strong>可読性の優先</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">コードは書く時間よりも読む時間の方が長いことを念頭に置く</li>
<li class="whitespace-normal break-words">自己説明的なコードを心がける</li>
<li class="whitespace-normal break-words">適切なコメントで意図を明確にする</li>
</ul>
<p class="whitespace-normal break-words"><strong>保守性の確保</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">単一責任原則に従ったコンポーネント設計</li>
<li class="whitespace-normal break-words">疎結合と高凝集を実現する構造</li>
<li class="whitespace-normal break-words">将来の変更に対応しやすい設計</li>
</ul>
<p class="whitespace-normal break-words"><strong>パフォーマンスの重視</strong></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">不要な再レンダリングを避ける</li>
<li class="whitespace-normal break-words">効率的なデータフェッチ</li>
<li class="whitespace-normal break-words">適切なライフサイクルフックの活用</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">３.命名規則の統一</h3>
<p class="whitespace-normal break-words">3.1 コンポーネント名<br />規則:<br />• kebab-case（小文字、単語間はハイフン）<br />• 意味のある名前を使用<br />• 業務領域を表現する接頭辞を付ける</p>
<p>3.2 メソッド名<br />規則:<br />• camelCase（最初は小文字、以降の単語は大文字開始）<br />• 意味のある名前を使用<br />• Boolean型はis、has、canで開始</p>
<p>3.3 定数名<br />規則:<br />• UPPER_SNAKE_CASE（全て大文字、単語間はアンダースコア）<br />• 意味を明確に表現</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5"><br />4.ファイル構造とフォーマット</h3>
<p><img decoding="async" width="1438" height="996" class="alignnone wp-image-5301 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-83.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-83.png 1438w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-83-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-83-1024x709.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-83-768x532.png 768w" sizes="(max-width: 1438px) 100vw, 1438px" /></p>
<p>4.1 ファイル構成</p>
<p><strong>my-component/</strong></p>
<p><strong>├── my-component.js         // Javascript </strong><strong>ロジック</strong></p>
<p><strong>├── my-component.html       // HTML </strong><strong>テンプレート</strong></p>
<p><strong>├── my-component.css        // CSS </strong><strong>スタイル</strong></p>
<p><strong>├── my-component.js-meta.xml // </strong><strong>メタデータ</strong></p>
<p><strong>└── __tests__/</strong></p>
<p><strong>    └── my-component.test.js // </strong><strong>テストファイル</strong></p>
<p>4.2 インデント</p>
<p><strong>規則:</strong></p>
<ul>
<li>2スペースインデント（タブ文字は使用しない）</li>
<li>一貫したインデントレベルを維持</li>
</ul>
<p>4.3 行の長さ</p>
<p><strong>規則:</strong></p>
<ul>
<li>1行120文字以内を推奨</li>
<li>長い行は適切な位置で改行</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">5.Javascript設計</h3>
<p class="whitespace-normal break-words">クラス構造体の順序、ﾌﾟﾛﾊﾟﾃｨ設計の規則と例を記述しています。</p>
<p><img loading="lazy" decoding="async" width="1432" height="995" class="alignnone wp-image-5303 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-85.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-85.png 1432w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-85-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-85-1024x712.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-85-768x534.png 768w" sizes="auto, (max-width: 1432px) 100vw, 1432px" /></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">6.HTMLテンプレート設計</h3>
<p class="whitespace-normal break-words">テンプレート構造、イベントハンドリングについての規約と例文について解説しています。</p>
<p><img loading="lazy" decoding="async" width="1438" height="999" class="alignnone wp-image-5304 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-86.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-86.png 1438w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-86-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-86-1024x711.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-86-768x534.png 768w" sizes="auto, (max-width: 1438px) 100vw, 1438px" /></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">7.CSSスタイル設計</h3>
<p class="whitespace-normal break-words">CSSスタイル設計のSLDS準拠について、CSSカスタムプロパティの利用方法について解説しています。</p>
<p><img loading="lazy" decoding="async" width="1431" height="1004" class="alignnone wp-image-5305 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-87.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-87.png 1431w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-87-300x210.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-87-1024x718.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-87-768x539.png 768w" sizes="auto, (max-width: 1431px) 100vw, 1431px" /></p>
<h3>8 データアクセスとAPIコール</h3>
<p>Lightning Data ServiceやApexメソッドの呼び出しに関する規則について解説しています。</p>
<p><img loading="lazy" decoding="async" width="1436" height="998" class="alignnone wp-image-5308 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-88.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-88.png 1436w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-88-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-88-1024x712.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-88-768x534.png 768w" sizes="auto, (max-width: 1436px) 100vw, 1436px" /></p>
<p>8.1 Lightning Data Service (LDS) <br />規則:<br />• 単一レコード操作にはLDSを優先的に使用<br />• @wireでリアクティブなデータバインディング<br />• エラーハンドリングを適切に実装</p>
<p>8.2 Apexメソッド呼び出し<br />規則:<br />• @wireで自動データバインディング<br />• imperative callで手動データ取得<br />• 適切なエラーハンドリング</p>
<h3>9.イベント設計</h3>
<p>カスタムイベント、プラットフォームイベントについて解説</p>
<p><img loading="lazy" decoding="async" width="1429" height="996" class="alignnone wp-image-5313 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-90.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-90.png 1429w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-90-300x209.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-90-1024x714.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-90-768x535.png 768w" sizes="auto, (max-width: 1429px) 100vw, 1429px" /></p>
<h3>10.テスト設計</h3>
<p>Jestテスト、テストデータファクトリについて解説</p>
<p><img loading="lazy" decoding="async" width="1426" height="995" class="alignnone wp-image-5314 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-91.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-91.png 1426w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-91-300x209.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-91-1024x715.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-91-768x536.png 768w" sizes="auto, (max-width: 1426px) 100vw, 1426px" /></p>
<h3>11.セキュリティとベストプラクティス</h3>
<p><img loading="lazy" decoding="async" width="1425" height="988" class="alignnone wp-image-5316 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-93.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-93.png 1425w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-93-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-93-1024x710.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-93-768x532.png 768w" sizes="auto, (max-width: 1425px) 100vw, 1425px" /></p>
<p>11.1 セキュリティ考慮事項<br />規則:<br />• ユーザー入力は常にサニタイズ<br />• lightning-formatted-textでXSS対策<br />• CRUD/FLS権限を考慮</p>
<h3>その他</h3>
<p>テンプレートを参照ください。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">テンプレートの効果的な活用方法</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">1. プロジェクト開始時の規約策定</h3>
<p class="whitespace-normal break-words">新しいSalesforceプロジェクトを開始する際、このテンプレートをベースとして、プロジェクト固有の要件に合わせてカスタマイズすることで、短時間で実用的なコーディング規約を策定できます。</p>
<p class="whitespace-normal break-words"><strong>活用手順</strong>：</p>
<ol class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7">
<li class="whitespace-normal break-words">テンプレートをダウンロードし、開発チーム全体で内容を確認</li>
<li class="whitespace-normal break-words">プロジェクトの特性に応じて、必要な項目を追加・修正</li>
<li class="whitespace-normal break-words">チーム内での合意形成とドキュメント化</li>
</ol>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">2. 既存プロジェクトの品質改善</h3>
<p class="whitespace-normal break-words">既に進行中のプロジェクトでも、段階的にコーディング規約を導入することで品質向上を図ることができます。</p>
<p class="whitespace-normal break-words"><strong>段階的導入のアプローチ</strong>：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><strong>第1段階</strong>: 新規開発コードから規約適用開始</li>
<li class="whitespace-normal break-words"><strong>第2段階</strong>: 既存コードの修正時に規約に合わせてリファクタリング</li>
<li class="whitespace-normal break-words"><strong>第3段階</strong>: 重要なモジュールから順次全面的な規約適用</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">3. コードレビューの効率化</h3>
<p class="whitespace-normal break-words">テンプレートに含まれるチェックリストを活用することで、コードレビューの観点が明確になり、見落としを防ぐことができます。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">4. 新人教育・オンボーディング</h3>
<p class="whitespace-normal break-words">新しくチームに参加する開発者に対して、このテンプレートを教育資料として使用することで、Salesforce開発のベストプラクティスを効率的に伝えることができます。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">実装時の注意点とコツ</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">段階的な導入を心がける</h3>
<p class="whitespace-normal break-words">すべての規約を一度に導入しようとすると、開発チームに大きな負担をかけてしまいます。重要度の高い項目から順次導入し、チーム全体が慣れてから次の項目に進むことが重要です。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">ツールを活用した自動化</h3>
<p class="whitespace-normal break-words">可能な限り、IDE（Salesforce CLI、VS Code）の設定やCI/CDパイプラインを活用して、規約チェックを自動化しましょう。手動でのチェックに頼りすぎると、継続が困難になります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">定期的な見直しと改善</h3>
<p class="whitespace-normal break-words">プロジェクトの進行に伴い、新たな課題や改善点が見つかることがあります。定期的に規約を見直し、チームの成長とプロジェクトの変化に応じてアップデートしていくことが大切です。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">テンプレートに含まれる実践的なコード例</h2>
<p class="whitespace-normal break-words">このテンプレートの大きな特徴の一つは、豊富な実装例が含まれていることです。抽象的な説明だけでなく、具体的なコード例を通じて「良い例」と「悪い例」を明示しているため、開発者が実際のコーディング時に迷うことなく適用できます。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">SLDSの活用例</h3>
<pre class=""><code class="language-apex code_break">(css)
/* <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 良い例 - SLDS準拠 */
.account-container {
  padding: var(--lwc-spacing-medium);
}

.header {
  margin-bottom: var(--lwc-spacing-large);
}

.content {
  display: flex;
  flex-direction: column;
  gap: var(--lwc-spacing-medium);
}

.empty-state {
  text-align: center;
  padding: var(--lwc-spacing-x-large);
  color: var(--lwc-color-text-weak);
}

.error-message {
  color: var(--lwc-color-text-error);
  padding: var(--lwc-spacing-small);
  border: 1px solid var(--lwc-color-border-error);
  border-radius: var(--lwc-border-radius-medium);
  background-color: var(--lwc-color-background-error);
}

/* レスポンシブ対応 */
@media (max-width: 768px) {
  .content {
    padding: var(--lwc-spacing-small);
  }
}
</code></pre>

<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">継続的な品質向上のために</h2>
<p class="whitespace-normal break-words">コーディング規約の導入は、ゴールではなくスタートラインです。継続的に品質を向上させるために、以下の取り組みを推奨します：</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">定期的なコードレビュー会の実施</h3>
<p class="whitespace-normal break-words">チーム全体でコードレビューを行う時間を定期的に設け、規約の適用状況や新たな課題について議論します。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">メトリクス測定と改善</h3>
<p class="whitespace-normal break-words">テストカバレッジ、複雑度、規約違反数などのメトリクスを測定し、定量的な改善を図ります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">知識共有とベストプラクティスの蓄積</h3>
<p class="whitespace-normal break-words">チーム内で発見されたベストプラクティスを規約に反映し、組織の知見として蓄積していきます。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">まとめ</h2>
<p class="whitespace-normal break-words">今回公開したSalesforce Apexコーディング規約テンプレートは、実際の開発現場での経験を基に作成された実践的なドキュメントです。このテンプレートを活用することで、開発チームは以下のメリットを得ることができます：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><strong>開発効率の向上</strong>: 統一されたコーディングスタイルにより、コードレビューや保守作業が効率化</li>
<li class="whitespace-normal break-words"><strong>品質の向上</strong>: Salesforce特有の制約を考慮したベストプラクティスにより、バグの削減と性能向上を実現</li>
<li class="whitespace-normal break-words"><strong>チーム力の強化</strong>: 共通の規約により、チーム内でのコミュニケーションと協力が促進</li>
<li class="whitespace-normal break-words"><strong>スケーラビリティの確保</strong>: 将来の機能拡張や保守作業に対応しやすいコード構造の実現</li>
</ul>
<p class="whitespace-normal break-words">Salesforce開発の品質向上を目指すすべてのチームに、このテンプレートを積極的に活用していただき、より良いシステム開発を実現していただければと思います。</p>
<h2>資料のダウンロード</h2>
<p class="whitespace-normal break-words">テンプレートのダウンロードは、Creative Content Lab Tokyoの公式サイトから無料で行えます。ぜひ、あなたのプロジェクトでもご活用ください。</p>
<p>資料のダウンロードおよびご利用に関しては、本サイトのコンテンツ利用規約に同意される場合のみ利用可能となります。</p>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://creativecontentlabtokyo.com/terms/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#e53935;border:1px solid #e57373;border-radius:5px;font-weight:bold;background:linear-gradient(#f44336,#e53935);" target="_blank" rel="noopener noreferrer">ダウンロード前に利用規約を必ずお読みください。</a></div>
<h3>一般公開資料</h3>
<p><span class="huto">開発コーディング規約のダウンロード</span></p>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://docs.google.com/uc?export=download&#038;id=1qqGSUPYIXZNCIuwTw2CuN0i4g0V4v7k9" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#43A047;border:1px solid #81C784;border-radius:5px;font-weight:bold;font-size:bold;background:linear-gradient(#66BB6A,#43A047);" target="_blank" rel="noopener noreferrer">ダウンロード <i class="fa fa-angle-right"></i></a></div>
<p><strong>※クリックして資料のダウンロードが開始されるまで少し時間がかかる場合がありますので、そのままお待ちください。</strong></p>
<p><strong>もしダウンロードが開始されない場合、ブラウザでポップアップブロックされている可能性があるのでご確認ください。</strong></p>
<h2>最後に</h2>
<div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">テンプレートのご利用に関して不明な点があればお問い合わせください。また、テンプレートに対しての要望がありましたらご意見ください。 皆様の役に立つように改善していきたいと思います。</div></div></div>
<div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br /><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5286"
					data-ulike-nonce="6455a91b6e"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5286"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Salesforce開発コーディング規約（Apex）サンプル・テンプレート</title>
		<link>https://creativecontentlabtokyo.com/salesforce-apex-coding-standards-guide-template/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 31 May 2025 16:09:18 +0000</pubDate>
				<category><![CDATA[テンプレート]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[コーディング規約]]></category>
		<category><![CDATA[サンプル]]></category>
		<category><![CDATA[セールスフォース]]></category>
		<category><![CDATA[書き方]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5045</guid>

					<description><![CDATA[本記事では、Creative Content Lab Tokyo（クリエイティブコンテンツラボトウキョウ）が作成したSalesforceの開発コーディング規約（…]]></description>
										<content:encoded><![CDATA[
<p>本記事では、Creative Content Lab Tokyo（クリエイティブコンテンツラボトウキョウ）が作成したSalesforceの開発コーディング規約（Apex）のテンプレートをご提供しております。</p>
<p class="whitespace-normal break-words">Salesforce開発において、品質の高いコードを書くことは、システムの保守性、拡張性、そして開発チームの生産性に直結する重要な要素です。</p>
<p class="whitespace-normal break-words">しかし、多くの開発現場では「どのようなコーディング規約を設ければよいのか」「チーム全体で一貫したコードスタイルを維持するにはどうすればよいのか」といった課題を抱えています。</p>
<p class="whitespace-normal break-words">そこで今回、Creative Content Lab Tokyoでは、実際の開発現場で使用できるSalesforce Apexコーディング規約テンプレートを無料公開いたします。</p>
<p class="whitespace-normal break-words">本記事では、このテンプレートの特徴と効果的な活用方法について詳しく解説します。</p>
<p>是非、本テンプレートを利用して各プロジェクトの実態にあった実践的なApexコーディング規約を作成してみてください。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">なぜApexコーディング規約が重要なのか</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">1. チーム開発における統一性の確保</h3>
<p class="whitespace-normal break-words">複数の開発者が参加するプロジェクトでは、各々が異なるコーディングスタイルでコードを書いてしまうことがよくあります。</p>
<p class="whitespace-normal break-words">これにより、コードレビューが困難になり、バグの発見が遅れたり、新しいメンバーがコードを理解するのに時間がかかったりします。</p>
<p class="whitespace-normal break-words">統一されたコーディング規約があることで：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">コードの可読性が向上し、誰が書いたコードでも理解しやすくなる</li>
<li class="whitespace-normal break-words">コードレビューの効率が上がり、品質向上に集中できる</li>
<li class="whitespace-normal break-words">新規参画メンバーのオンボーディングが迅速になる</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">2. Salesforce特有の制約への対応</h3>
<p class="whitespace-normal break-words">SalesforceのApex開発では、一般的なプログラミング言語にはない独特の制約があります：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">ガバナ制限（SOQL、DML、CPUタイムなど）</li>
<li class="whitespace-normal break-words">セキュリティモデル（共有設定、FLS）</li>
<li class="whitespace-normal break-words">マルチテナント環境特有の考慮事項</li>
</ul>
<p class="whitespace-normal break-words">これらの制約を理解せずに開発を進めると、本番環境で予期しないエラーが発生する可能性があります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">3. 保守性の確保</h3>
<p class="whitespace-normal break-words">Salesforceシステムは長期間にわたって運用されることが多く、初期開発から数年後に機能追加や修正が必要になることが一般的です。この際、コーディング規約に従って書かれたコードは、修正や拡張が容易になります。</p>
<h2>1.テーラリングガイド</h2>
<h3>目次サンプル</h3>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5053" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次.png" alt="" width="1094" height="754" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次.png 1094w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次-300x207.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次-1024x706.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-目次-768x529.png 768w" sizes="auto, (max-width: 1094px) 100vw, 1094px" /></a></p>
<h3>1.基本方針（可読性・保守性の重視）</h3>
<p class="whitespace-normal break-words">テンプレートでは、「可読性の優先」「保守性の確保」「Salesforce固有の考慮事項」の3つを基本方針として掲げています。これらの方針は、長期的な開発・運用を見据えた重要な指針となります。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5052" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針.png" alt="" width="1094" height="759" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針.png 1094w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針-1024x710.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-基本方針-768x533.png 768w" sizes="auto, (max-width: 1094px) 100vw, 1094px" /></a></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">2.命名規則の統一</h3>
<p class="whitespace-normal break-words">クラス名、メソッド名、変数名、定数名それぞれに対して明確なルールを設定しています。例えば：</p>
<p class="whitespace-normal break-words"><strong>クラス名</strong>: PascalCaseで名詞または名詞句を使用</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">AccountService</code></li>
<li class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">accService</code></li>
</ul>
<p class="whitespace-normal break-words"><strong>メソッド名</strong>: camelCaseで動詞または動詞句で開始</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">updateAccountStatus()</code></li>
<li class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <code class="bg-text-200/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]">update()</code></li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">3.コード構造とフォーマット</h3>
<p class="whitespace-normal break-words">一貫したインデント（4スペース）、適切な行の長さ（120文字以内）、効果的な空行の使用など、チーム全体で統一すべき基本的なフォーマットルールを定義しています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5051" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット.png" alt="" width="1097" height="755" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット.png 1097w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット-300x206.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット-1024x705.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-コード構造とフォーマット-768x529.png 768w" sizes="auto, (max-width: 1097px) 100vw, 1097px" /></a></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">4.クラス設計のベストプラクティス</h3>
<p class="whitespace-normal break-words">クラス内の要素の配置順序（定数→静的変数→インスタンス変数→コンストラクタ→パブリックメソッド→プライベートメソッド）や、適切なアクセス修飾子の使用方法を明示しています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5055" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計.png" alt="" width="1100" height="761" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計.png 1100w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計-1024x708.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-クラス設計-768x531.png 768w" sizes="auto, (max-width: 1100px) 100vw, 1100px" /></a></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">5.SOQL/DML操作の最適化</h3>
<p class="whitespace-normal break-words">Salesforce開発で最も重要な要素の一つであるデータベース操作について、パフォーマンスとガバナ制限を考慮したベストプラクティスを提供しています：</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5057" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作.png" alt="" width="1096" height="759" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作.png 1096w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作-1024x709.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-SOQL操作-768x532.png 768w" sizes="auto, (max-width: 1096px) 100vw, 1096px" /></a></p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">バルク処理の実装方法</li>
<li class="whitespace-normal break-words">効率的なSOQLクエリの書き方</li>
<li class="whitespace-normal break-words">Database クラスを使用した部分成功制御</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">6.包括的なテスト戦略</h3>
<p class="whitespace-normal break-words">85%以上のテストカバレッジ達成を目標とし、ポジティブ・ネガティブ両方のテストケースを含む、実践的なテストクラス作成方法を解説しています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス.png"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5058" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス.png" alt="" width="1098" height="760" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス.png 1098w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス-300x208.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス-1024x709.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce開発コーディング規約-テストクラス-768x532.png 768w" sizes="auto, (max-width: 1098px) 100vw, 1098px" /></a></p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">テンプレートの効果的な活用方法</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">1. プロジェクト開始時の規約策定</h3>
<p class="whitespace-normal break-words">新しいSalesforceプロジェクトを開始する際、このテンプレートをベースとして、プロジェクト固有の要件に合わせてカスタマイズすることで、短時間で実用的なコーディング規約を策定できます。</p>
<p class="whitespace-normal break-words"><strong>活用手順</strong>：</p>
<ol class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7">
<li class="whitespace-normal break-words">テンプレートをダウンロードし、開発チーム全体で内容を確認</li>
<li class="whitespace-normal break-words">プロジェクトの特性に応じて、必要な項目を追加・修正</li>
<li class="whitespace-normal break-words">チーム内での合意形成とドキュメント化</li>
<li class="whitespace-normal break-words">開発環境への組み込み（IDE設定、CI/CDパイプライン）</li>
</ol>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">2. 既存プロジェクトの品質改善</h3>
<p class="whitespace-normal break-words">既に進行中のプロジェクトでも、段階的にコーディング規約を導入することで品質向上を図ることができます。</p>
<p class="whitespace-normal break-words"><strong>段階的導入のアプローチ</strong>：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><strong>第1段階</strong>: 新規開発コードから規約適用開始</li>
<li class="whitespace-normal break-words"><strong>第2段階</strong>: 既存コードの修正時に規約に合わせてリファクタリング</li>
<li class="whitespace-normal break-words"><strong>第3段階</strong>: 重要なモジュールから順次全面的な規約適用</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">3. コードレビューの効率化</h3>
<p class="whitespace-normal break-words">テンプレートに含まれるチェックリストを活用することで、コードレビューの観点が明確になり、見落としを防ぐことができます。</p>
<p class="whitespace-normal break-words"><strong>チェックリストの活用例</strong>：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words">基本事項（命名規則、アクセス修飾子、フォーマット）</li>
<li class="whitespace-normal break-words">設計・構造（単一責任原則、メソッドサイズ、例外処理）</li>
<li class="whitespace-normal break-words">Salesforce固有（ガバナ制限、バルク処理、セキュリティ）</li>
<li class="whitespace-normal break-words">パフォーマンス（SOQLクエリ最適化、DML最適化）</li>
</ul>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">4. 新人教育・オンボーディング</h3>
<p class="whitespace-normal break-words">新しくチームに参加する開発者に対して、このテンプレートを教育資料として使用することで、Salesforce開発のベストプラクティスを効率的に伝えることができます。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">実装時の注意点とコツ</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">段階的な導入を心がける</h3>
<p class="whitespace-normal break-words">すべての規約を一度に導入しようとすると、開発チームに大きな負担をかけてしまいます。重要度の高い項目から順次導入し、チーム全体が慣れてから次の項目に進むことが重要です。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">ツールを活用した自動化</h3>
<p class="whitespace-normal break-words">可能な限り、IDE（Salesforce CLI、VS Code）の設定やCI/CDパイプラインを活用して、規約チェックを自動化しましょう。手動でのチェックに頼りすぎると、継続が困難になります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">定期的な見直しと改善</h3>
<p class="whitespace-normal break-words">プロジェクトの進行に伴い、新たな課題や改善点が見つかることがあります。定期的に規約を見直し、チームの成長とプロジェクトの変化に応じてアップデートしていくことが大切です。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">テンプレートに含まれる実践的なコード例</h2>
<p class="whitespace-normal break-words">このテンプレートの大きな特徴の一つは、豊富な実装例が含まれていることです。抽象的な説明だけでなく、具体的なコード例を通じて「良い例」と「悪い例」を明示しているため、開発者が実際のコーディング時に迷うことなく適用できます。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">バルク処理の実装例</h3>
<div class="relative group/copy rounded-lg">
<div class="sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex">
<div class="relative"> </div>
</div>
</div>
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 良い例 - バルク処理対応</span>
<span class="token">public</span> <span class="token">void</span> <span class="token">updateAccountTypes</span><span class="token">(</span><span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> accounts<span class="token">,</span> <span class="token">String</span> newType<span class="token">)</span> <span class="token">{</span>
    <span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> accountsToUpdate <span class="token">=</span> <span class="token">new</span> <span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
    
    <span class="token">for</span> <span class="token">(</span><span class="token">Account</span> acc <span class="token">:</span> accounts<span class="token">)</span> <span class="token">{</span>
        <span class="token">if</span> <span class="token">(</span>acc<span class="token">.</span>Type <span class="token">!=</span> newType<span class="token">)</span> <span class="token">{</span>
            acc<span class="token">.</span>Type <span class="token">=</span> newType<span class="token">;</span>
            accountsToUpdate<span class="token">.</span><span class="token">add</span><span class="token">(</span>acc<span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>
    
    <span class="token">if</span> <span class="token">(</span><span class="token">!</span>accountsToUpdate<span class="token">.</span><span class="token">isEmpty</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">try</span> <span class="token">{</span>
            Database<span class="token">.</span><span class="token">update</span><span class="token">(</span>accountsToUpdate<span class="token">,</span> <span class="token">false</span><span class="token">)</span><span class="token">;</span>
        <span class="token">}</span> <span class="token">catch</span> <span class="token">(</span><span class="token">DmlException</span> e<span class="token">)</span> <span class="token">{</span>
            <span class="token">handleDmlException</span><span class="token">(</span>e<span class="token">)</span><span class="token">;</span>
        <span class="token">}</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">セキュリティを考慮した実装例</h3>
<div class="relative group/copy rounded-lg">
<div class="sticky opacity-0 group-hover/copy:opacity-100 top-2 py-2 h-12 w-0 float-right">
<div class="absolute right-0 h-8 px-2 items-center inline-flex">
<div class="relative"> </div>
</div>
</div>
<div class="text-text-500 text-xs p-3.5 pb-0">apex</div>
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 良い例 - 権限チェック</span>
<span class="token">public</span> <span class="token">void</span> <span class="token">updateAccounts</span><span class="token">(</span><span class="token">List</span><span class="token">&lt;</span><span class="token">Account</span><span class="token">&gt;</span> accounts<span class="token">)</span> <span class="token">{</span>
    <span class="token">if</span> <span class="token">(</span><span class="token">!</span>Schema<span class="token">.</span>SObjectType<span class="token">.</span>Account<span class="token">.</span><span class="token">isUpdateable</span><span class="token">(</span><span class="token">)</span><span class="token">)</span> <span class="token">{</span>
        <span class="token">throw</span> <span class="token">new</span> <span class="token">SecurityException</span><span class="token">(</span><span class="token">'Insufficient privileges to update Account'</span><span class="token">)</span><span class="token">;</span>
    <span class="token">}</span>
    
    <span class="token">update</span> accounts<span class="token">;</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">継続的な品質向上のために</h2>
<p class="whitespace-normal break-words">コーディング規約の導入は、ゴールではなくスタートラインです。継続的に品質を向上させるために、以下の取り組みを推奨します：</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">定期的なコードレビュー会の実施</h3>
<p class="whitespace-normal break-words">チーム全体でコードレビューを行う時間を定期的に設け、規約の適用状況や新たな課題について議論します。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">メトリクス測定と改善</h3>
<p class="whitespace-normal break-words">テストカバレッジ、複雑度、規約違反数などのメトリクスを測定し、定量的な改善を図ります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">知識共有とベストプラクティスの蓄積</h3>
<p class="whitespace-normal break-words">チーム内で発見されたベストプラクティスを規約に反映し、組織の知見として蓄積していきます。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">まとめ</h2>
<p class="whitespace-normal break-words">今回公開したSalesforce Apexコーディング規約テンプレートは、実際の開発現場での経験を基に作成された実践的なドキュメントです。このテンプレートを活用することで、開発チームは以下のメリットを得ることができます：</p>
<ul class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc space-y-1.5 pl-7">
<li class="whitespace-normal break-words"><strong>開発効率の向上</strong>: 統一されたコーディングスタイルにより、コードレビューや保守作業が効率化</li>
<li class="whitespace-normal break-words"><strong>品質の向上</strong>: Salesforce特有の制約を考慮したベストプラクティスにより、バグの削減と性能向上を実現</li>
<li class="whitespace-normal break-words"><strong>チーム力の強化</strong>: 共通の規約により、チーム内でのコミュニケーションと協力が促進</li>
<li class="whitespace-normal break-words"><strong>スケーラビリティの確保</strong>: 将来の機能拡張や保守作業に対応しやすいコード構造の実現</li>
</ul>
<p class="whitespace-normal break-words">Salesforce開発の品質向上を目指すすべてのチームに、このテンプレートを積極的に活用していただき、より良いシステム開発を実現していただければと思います。</p>
<h2>資料のダウンロード</h2>
<p class="whitespace-normal break-words">テンプレートのダウンロードは、Creative Content Lab Tokyoの公式サイトから無料で行えます。ぜひ、あなたのプロジェクトでもご活用ください。</p>
<p>資料のダウンロードおよびご利用に関しては、本サイトのコンテンツ利用規約に同意される場合のみ利用可能となります。</p>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://creativecontentlabtokyo.com/terms/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#e53935;border:1px solid #e57373;border-radius:5px;font-weight:bold;background:linear-gradient(#f44336,#e53935);" target="_blank" rel="noopener noreferrer">ダウンロード前に利用規約を必ずお読みください。</a></div>
<h3>一般公開資料</h3>
<p><span class="huto">開発コーディング規約のダウンロード</span></p>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://docs.google.com/uc?export=download&#038;id=1MKr_fuPEpPvA1MbUWaytvvELrIfLfO2u" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#43A047;border:1px solid #81C784;border-radius:5px;font-weight:bold;font-size:bold;background:linear-gradient(#66BB6A,#43A047);" target="_blank" rel="noopener noreferrer">ダウンロード <i class="fa fa-angle-right"></i></a></div>
<p><strong>※クリックして資料のダウンロードが開始されるまで少し時間がかかる場合がありますので、そのままお待ちください。</strong></p>
<p><strong>もしダウンロードが開始されない場合、ブラウザでポップアップブロックされている可能性があるのでご確認ください。</strong></p>
<h2>最後に</h2>
<div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">テンプレートのご利用に関して不明な点があればお問い合わせください。また、テンプレートに対しての要望がありましたらご意見ください。 皆様の役に立つように改善していきたいと思います。</div></div></div>
<div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br /><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5045"
					data-ulike-nonce="cc973690a6"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_5045"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apexトリガー一覧（Excelテンプレート）の説明と資料のダウンロード</title>
		<link>https://creativecontentlabtokyo.com/salesforce-apex-trigger-program-list-document-template/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 30 Sep 2023 06:36:06 +0000</pubDate>
				<category><![CDATA[テンプレート]]></category>
		<category><![CDATA[設計]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[Trigger]]></category>
		<category><![CDATA[セールスフォース]]></category>
		<category><![CDATA[トリガー]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=4816</guid>

					<description><![CDATA[Salesforceの要件定義や基本設計で利用するApexトリガーの処理一覧を記載するためのエクセルのテンプレートを用意いたしました。 Apexの処理設計書につ…]]></description>
										<content:encoded><![CDATA[<p>Salesforceの要件定義や基本設計で利用するApexトリガーの処理一覧を記載するためのエクセルのテンプレートを用意いたしました。</p>
<p>Apexの処理設計書については、以下の記事よりダウンロードください。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/apex-trigger-detail-process-design-excel-template/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">Apexトリガー処理設計書（Excelテンプレート）</div><div class="cclt-compat-card__excerpt">Apexトリガーの処理設計書（基本設計書/詳細設計書）として利用できるエクセルの…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<h2>Apex Trigger一覧のサンプル</h2>
<h3>１．表紙（メッセージ定義書）</h3>
<p><img loading="lazy" decoding="async" width="1354" height="793" class="alignnone wp-image-4817 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-23.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-23.png 1354w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-23-300x176.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-23-1024x600.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-23-768x450.png 768w" sizes="auto, (max-width: 1354px) 100vw, 1354px" /></p>
<p>表紙については、以下の箇所をプロジェクトに合わせて変更してください。</p>
<p>情報種別：社外秘など</p>
<p>情報所有者：基本的にはお客様の会社名となります。</p>
<p>会社名：自社の会社名（正式名称）を記入してください。</p>
<p>タイトル：ドキュメントのタイトルをプロジェクトに合わせて変更</p>
<p>版数、作成日、作成者：※必要に応じて、最終更新日、更新者を入れてください。</p>
<h3>２．改訂履歴</h3>
<p><img loading="lazy" decoding="async" width="1312" height="802" class="alignnone wp-image-4818 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-24.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-24.png 1312w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-24-300x183.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-24-1024x626.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-24-768x469.png 768w" sizes="auto, (max-width: 1312px) 100vw, 1312px" /></p>
<p>版数、変更箇所、変更内容、変更理由、作成日、作成者、更新日、更新者などを記述します。</p>
<p>改訂履歴は、ドキュメントのメンテナンス上必ず設定するようにしましょう。</p>
<h3>３．Apexトリガー一覧</h3>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-4819 size-full" title="Apexトリガー一覧" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25.png" alt="Apexトリガー一覧" width="1890" height="938" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25.png 1890w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25-300x149.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25-1024x508.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25-768x381.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/09/Pasted-25-1536x762.png 1536w" sizes="auto, (max-width: 1890px) 100vw, 1890px" /></p>
<p>【記載内容】</p>
<ul>
<li>機能ID：システム機能一覧より割り当てた機能IDを記入します。</li>
<li>トリガー名：トリガー名（論理名）を記入します。</li>
<li>API参照名：トリガーの物理名を記入します。</li>
<li>トリガー起動オブジェクト：トリガーを実行するオブジェクトを記入します。</li>
<li>処理No.：トリガーに複数の機能（処理）が分かれている場合に処理毎にNo.を割り当てます。</li>
<li>処理内容：処理の概要を記入します。</li>
<li>起動契機：トリガー内の各処理が実行される契機（before  insert / before update / before delete / after insert / after update / after delete / after undelete）を〇-で定義します。</li>
<li>備考：メモ欄としてご利用ください</li>
</ul>
<h2>Apexトリガー一覧の（Excel版）のダウンロード</h2>
<p>資料のダウンロードおよびご利用に関しては、本サイトのコンテンツ利用規約に同意される場合のみ利用可能となります。</p>
<p><div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://creativecontentlabtokyo.com/terms/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#e53935;border:1px solid #e57373;border-radius:5px;font-weight:bold;background:linear-gradient(#f44336,#e53935);" target="_blank" rel="noopener noreferrer">ダウンロード前に利用規約を必ずお読みください。</a></div></p>
<h3>一般公開資料</h3>
<p>エクセルのダウンロードはこちら</p>
<p><div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://docs.google.com/uc?export=download&#038;id=1dTVW9Bw1u_i9QdxeOIzQ0qUsoZIZJDb8" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#43A047;border:1px solid #81C784;border-radius:5px;font-weight:bold;font-size:bold;background:linear-gradient(#66BB6A,#43A047);" target="_blank" rel="noopener noreferrer">ダウンロード <i class="fa fa-angle-right"></i></a></div></p>
<p>圧縮ファイル（ZIP形式）でのダウンロードはこちら</p>
<p><div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://docs.google.com/uc?export=download&#038;id=1QeYRA1XQHbEJwtvHpKxE8KDqOE8mNhWw" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#43A047;border:1px solid #81C784;border-radius:5px;font-weight:bold;font-size:bold;background:linear-gradient(#66BB6A,#43A047);" target="_blank" rel="noopener noreferrer">ダウンロード <i class="fa fa-angle-right"></i></a></div></p>
<p>以下は、スプレッドシートでの表示となります。</p>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#757575;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-external-link" style="color:#BDBDBD;"></span><div class="cclt-compat-cmemo__text">バッチ処理一覧/スケジュール表（Excel版）のダウンロードは<a href="https://docs.google.com/spreadsheets/d/1zAcM_UprXtuE-H9XkGVYIcBhwX80Io5W/view?usp=sharing&amp;ouid=101880259703005838182&amp;rtpof=true&amp;sd=true" rel="noopener">こちら</a></div></div></p>
<h2>関連記事</h2>
<p>他にも要件定義で必要となる以下のようなテンプレートなども用意しているのでぜひご利用ください。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">バッチ処理設計書</span><a href="https://creativecontentlabtokyo.com/apex-batch-process-basic-design-excel-template/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">バッチ処理設計書（Excelテンプレート）</div><div class="cclt-compat-card__excerpt">バッチ処理設計書（基本設計書/詳細設計書）として利用できるエクセルの設計書テンプ…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div></p>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br />
<a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4816"
					data-ulike-nonce="053675e776"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4816"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+2"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ここまでできる今話題のAI（ChatGPT）を使ったSaleforce開発（自動コード生成）</title>
		<link>https://creativecontentlabtokyo.com/saleforce-development-using-ai-chatgpt-automatic-code-generation/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Mon, 20 Feb 2023 06:27:32 +0000</pubDate>
				<category><![CDATA[Tips集]]></category>
		<category><![CDATA[製品・サービス]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Bard]]></category>
		<category><![CDATA[ChatGPT]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Lightning web component]]></category>
		<category><![CDATA[LWC]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[コード生成]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=4605</guid>

					<description><![CDATA[今回は、今話題の文章生成AI（ChatGPT）を使ってSalesforceの開発が現状どこまでできるのか検証してみた結果の記事となります。 過去にAIの機能を使…]]></description>
										<content:encoded><![CDATA[<p>今回は、今話題の文章生成AI（ChatGPT）を使ってSalesforceの開発が現状どこまでできるのか検証してみた結果の記事となります。</p>
<p>過去にAIの機能を使ったことがある人は、「結局AIといっても大したことはできないし、やっぱり人間が必要」というイメージを持っている人も多くいると思いますが、そのイメージは捨てたほうがいいかもしれません。</p>
<p>ChatGPTの登場により、既に特定の分野では完全にAIだけで仕事ができるレベルに到達してきているようです。（人が作業するよりも精度が高く、もちろん作業スピードも高速）</p>
<p>本記事では、ChatGPTの概要や出来ることについて説明するとともに、Salesforceなどシステム開発でどのように利用するかを説明していきたいと思います。</p>
<h2>ChatGPTとは</h2>
<p>まずは、ChatGPTについて簡単に概要を説明したいと思います。</p>
<p>ChatGPT（チャットジーピーティー）とは、OpenAI社（※工知能の研究開発を行う非営利団体）が開発したGPT-3という大規模言語モデルを使った文章生成AIとなります。</p>
<p>※公式サイトURL：<a href="https://openai.com/" rel="noopener">https://openai.com/</a>　（ChatGPTを利用するためには登録が必要です。</p>
<p>ChatGPTは、従来のAI（人工知能）に対するイメージを完全に覆す超ハイレベルなAIとなっています。OpenAI社は、SpaceXやテスラ、そしてTwitter買収で有名なイーロンマスク氏が共同設立した会社です。</p>
<p>現在は、イーロンマスク氏は会社を離れていて、Microsoft社が出資し、MicrosoftのBING（検索エンジン）に組み込んで利用できるようになってきています。※Chromeの拡張機能なども提供され始めています。</p>
<p>最近では、ペンシルベニア大学のMBAの期末試験の解答をChatGPTで行ったところ、B判定（優秀）となり話題になっていました。今後は、Googleの検索が不要になり、調べたいことはなんでもChatGPTに聞けば、全世界の膨大なデータ量から自動で検索して、それを要約して精度の高い回答を得ることができるようになるのではと言われています。</p>
<p>これに対して、GoogleはBardという会話型AIを発表しています。ただし現時点ではChatGPTの方が優れていると評価しているユーザが多いようです。どちらにしても今後近い将来、このAIの分野が目覚ましい進歩をして仕事の中で普通に使われるようになるものと思われます。</p>
<p>特にChatGPTは、文章の生成だけではなく、翻訳、プログラミング（コーディング）までできる優れもののため、今日からすぐに仕事に活かして作業効率を上げることができます。</p>
<p>文章は、英語だけではなく日本語にも対応しており、チャットに対して質問や依頼を入力すると、自然な文章で要約された精度の高い回答を得ることができます。</p>
<p>料金体系については、無料版と有料版を提供されています。まずは無料版で試しに使ってみるとよいと思います。</p>
<p>以上が概要となりますが、詳細な情報について知りたい方は後半でご紹介するYoutubeの動画を見ることをお勧めします。</p>
<h2>ChatGPTで実現可能なこと</h2>
<p>現時点で、ChatGPTでできることは以下のような内容となります。</p>
<ol>
<li>検索やQ&amp;A（質問に対して、要約された回答が返ってくる）</li>
<li>精度の高い文章作成（メール本文、感想文、論文など高度なものまで）</li>
<li>翻訳（英語から日本語など幅広い言語に対して精度の高い翻訳を行うことができる）</li>
<li>計算（数学の問題などに対して、答えや計算の過程を説明してくれる）</li>
<li>ブログ記事の作成や最適SEOのキーワードの提案など</li>
<li>プログラミングのソースコード生成（HTML、Javascript、CSS、PHPなど様々）</li>
<li>ソースコードのバグ解析（ソースコードに対してレビューを行い、バグを発見）</li>
<li>その他（作詞など）</li>
</ol>
<p>上記のように様々なことができるようになっています。しかも生成されるのはかなり高度（高品質）なものとなっています。</p>
<p>ちなみにChatGPTに対して、「ChatGPTにはどのような機能がありますか」と質問したところ以下の結果が返ってきました。</p>
<p><div class="cclt-compat-cmemo st-text-guide st-text-guide-sankou" style="background-color:#fafafa;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#919191;"></span><div class="cclt-compat-cmemo__text"></p>
<p>ChatGPTは、自然言語処理技術を用いて、以下のような機能を持っています。</p>
<ol>
<li>質問応答：ユーザーからの質問に対して適切な回答を返します。一般的な知識や専門知識に関する質問に対して、高い精度で回答を提供します。</li>
<li>チャットボット：ユーザーと対話し、問題解決や情報提供を行います。あいさつやおしゃべりから、予約や注文などのタスクまで、幅広い場面で活躍します。</li>
<li>翻訳：複数の言語間での翻訳を行います。日本語から英語や中国語、スペイン語など、多言語に対応しています。</li>
<li>要約：長文を要約し、要点を把握できるようにします。ニュース記事や論文などの長文を短くまとめたり、複数の文章をまとめて要約したりします。</li>
<li>自然言語生成：指定された条件に合わせて文章を生成します。文章の体裁や内容、トーンなどを指定して、自動的に文章を生成します。</li>
<li>感情分析：文章から感情を判断し、ポジティブ・ネガティブなどの評価を行います。商品レビューやSNSの投稿など、様々なテキストデータに対して感情分析を行います。</li>
<li>知識ベース検索：あるトピックに関する情報をまとめた知識ベースを検索し、適切な情報を提供します。例えば、医療や法律、ビジネスなどの分野に特化した知識ベースを構築し、適切な情報を提供します。</li>
</ol>
<p>などがあります。</p>
<p></div></div></p>
<p>以下、実際のChatGPTを利用したイメージ画像</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4615" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか.jpg" alt="" width="1920" height="1388" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか-300x217.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか-1024x740.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか-768x555.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTにはどのような機能がありますか-1536x1110.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>文章（文字列を解析）してのAIとなるため、苦手な分野もありますが、それらの分野でも別のAIのサービスが出てきています。</p>
<p>例えば、画像生成AIであれば、「DreamStudio（<a href="https://beta.dreamstudio.ai/home" rel="noopener">https://beta.dreamstudio.ai/home</a>）」や「Mage（<a href="https://www.mage.space/" target="_blank" rel="nofollow noopener">https://www.mage.space/</a>）」などがあります。</p>
<p>テキスト入力すると、キーワードから自動で画像を生成してくれます。</p>
<p>以下は、DreamStudioを使って、<span class="Y2IQFc" lang="ja">魅力的なビジュアルストアディスプレイと入力して生成した画像の例</span></p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4613" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例.jpg" alt="" width="1920" height="1097" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例-300x171.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例-1024x585.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例-768x439.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-dreamstudioでショップレイアウト生成例-1536x878.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>こちらは、キーワード「猫型ロボットのうさぎみみ」などで生成した例</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4617" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ.jpg" alt="" width="1920" height="1098" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ-300x172.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ-1024x586.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ-768x439.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-DreamStudio猫型ロボットうさぎみみ-1536x878.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">このように文章作成、翻訳、プログラミング、画像生成、作曲など様々な分野でAIが進んでいることを実感いただけると思います。</div></div></div></p>
<h2>ChatGPTを使ったSalesforceのLightning web component開発</h2>
<p>では、さっそく本題のChatGPTを使って、Salesforceのプログラミング（ソースコード自動生成）を試してみたいと思います。</p>
<p>ChatGPTには、次の内容を入力しました。</p>
<p>「SalesforceのLightning web componentでお問い合わせフォームを作成する場合のコードを教えて」</p>
<p>すると以下3つ（HTML、Javascript、CSS）のコードが生成されました。</p>
<p>①生成されたHTMLファイル（ContactForm.html）</p>
<pre class=""><code class="language-apex code_break">&lt;template&gt;
&lt;div class="slds-m-around_medium"&gt;
&lt;lightning-card title="お問い合わせフォーム"&gt;
&lt;div class="slds-m-around_medium"&gt;
&lt;lightning-input type="text" label="お名前" required value={name} onchange={handleNameChange}&gt;&lt;/lightning-input&gt;
&lt;lightning-input type="email" label="メールアドレス" required value={email} onchange={handleEmailChange}&gt;&lt;/lightning-input&gt;
&lt;lightning-input type="text" label="件名" required value={subject} onchange={handleSubjectChange}&gt;&lt;/lightning-input&gt;
&lt;lightning-textarea label="メッセージ" required value={message} onchange={handleMessageChange}&gt;&lt;/lightning-textarea&gt;
&lt;/div&gt;
&lt;div class="slds-m-around_medium"&gt;
&lt;lightning-button variant="brand" label="送信" onclick={handleSubmit}&gt;&lt;/lightning-button&gt;
&lt;/div&gt;
&lt;/lightning-card&gt;
&lt;/div&gt;
&lt;/template&gt;
</code></pre>
<p>実際のChatGPTの画像（ContactForm.html）</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4619" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成.jpg" alt="" width="1920" height="1105" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成-1024x589.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成-768x442.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成-1536x884.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>②生成されたJavaScriptファイル (contactForm.js)</p>
<pre class=""><code class="language-apex code_break">&lt;template&gt;

import { LightningElement, track } from 'lwc';
import { ShowToastEvent } from 'lightning/platformShowToastEvent';

export default class ContactForm extends LightningElement {
@track name = '';
@track email = '';
@track subject = '';
@track message = '';

handleNameChange(event) {
this.name = event.target.value;
}

handleEmailChange(event) {
this.email = event.target.value;
}

handleSubjectChange(event) {
this.subject = event.target.value;
}

handleMessageChange(event) {
this.message = event.target.value;
}

handleSubmit() {
// フォームの入力内容を検証
if (this.name === '' || this.email === '' || this.subject === '' || this.message === '') {
const event = new ShowToastEvent({
title: '入力エラー',
message: '必須項目を入力してください。',
variant: 'error'
});
this.dispatchEvent(event);
return;
}

// フォームを送信
// TODO: サーバーサイドの処理を実装する
const event = new ShowToastEvent({
title: '送信完了',
message: 'お問い合わせを受け付けました。',
variant: 'success'
});
this.dispatchEvent(event);
}
}
</code></pre>
<p>実際のChatGPTの画像（②ContactForm.js）</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4621" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript.jpg" alt="" width="1920" height="1103" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript-300x172.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript-1024x588.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript-768x441.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成JavaScript-1536x882.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>③生成されたCSSファイル (contactForm.css):</p>
<pre class=""><code class="language-apex code_break">
.slds-m-around_medium {
margin: 20px;
}
</code></pre>
<p>実際のChatGPTの画像（ContactForm.css）</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4623" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2.jpg" alt="" width="1920" height="1099" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2-300x172.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2-1024x586.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2-768x440.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceのLWCを自動生成CSS2-1536x879.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>では、Visual Studio Codeを使って、上記の生成されたコードをコピペして実際にLWCを作成してみます。</p>
<p>VSCを起動して、新規Lightning web componentを作成します。※名前はcontactForm</p>
<p>続いて、VSCで作成されたcontactForm.htmlを開いて、ChatGPTで生成されたソースコードをコピーして貼り付けます。</p>
<p>まずはcontactForm.html</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4620" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成.jpg" alt="" width="1920" height="1196" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成-300x187.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成-1024x638.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成-768x478.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコードを自動生成-1536x957.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>続いて、ContactForm.jsに張り付け</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4624" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行.jpg" alt="" width="1920" height="1191" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行-300x186.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行-1024x635.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行-768x476.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCJavaScriptをVSCで実行-1536x953.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>続いてContactForm.cssにソースコードを張り付け　※CSSファイルがない場合、自分で作成しておきます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4625" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行.jpg" alt="" width="1920" height="1236" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行-300x193.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行-1024x659.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行-768x494.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCCSSをVSCで実行-1536x989.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>最後にXMLファイルを以下のように修正し、ホーム画面などにコンポーネントを配置可能としておきます。</p>
<pre class=""><code class="language-apex code_break">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"&gt;
&lt;apiVersion&gt;56.0&lt;/apiVersion&gt;
&lt;isExposed&gt;true&lt;/isExposed&gt;
&lt;targets&gt;
&lt;!-- コンポーネントの配置先を指定 --&gt;
&lt;target&gt;lightning__AppPage&lt;/target&gt;
&lt;target&gt;lightning__RecordPage&lt;/target&gt;
&lt;target&gt;lightning__HomePage&lt;/target&gt;
&lt;/targets&gt;
&lt;/LightningComponentBundle&gt;
</code></pre>
<p>ソースの修正が完了したら最後にコンポーネントをデプロイします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4626" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ.jpg" alt="" width="1920" height="1198" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ-300x187.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ-1024x639.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ-768x479.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCをVSCでデプロイ-1536x958.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>※図の右下にあるとおり、生成されたコードでデプロイは正常に実行されています。</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">デプロイはうまくいったけど、画面はちゃんと表示されるの？と疑ってる方もいると思いますが、実際にSalesforceでコンポーネントを配置して確認してみましょう。</div></div></div></p>
<p>では、ここからはSalesforce組織側の設定となります。</p>
<p>まずは、Salesforceにログインして、ホーム画面のページ編集を行います。ここで、先ほど作成したContactFormのカスタムコンポーネントを好きな場所へ配置します。例では、右上に配置しています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4631" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定.jpg" alt="" width="1920" height="1107" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定-1024x590.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定-768x443.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントの配置設定-1536x886.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>もしここでコンポーネントが配置されない場合、XMLファイルの指定が間違っている可能性があるので確認してください。</p>
<p>コンポーネントを配置して、保存が終了したら戻ってホーム画面を表示します。</p>
<p>以下のようにお問い合わせフォームが表示されます！！</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4632" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2.jpg" alt="" width="1920" height="1104" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2-1024x589.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2-768x442.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceお問い合わせフォームのLWCコンポーネントを表示2-1536x883.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>では動作のほうも確認してみましょう。</p>
<p>以下のようにテキストを入力して実行してみます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4629" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力.jpg" alt="" width="1920" height="1058" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力-300x165.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力-1024x564.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力-768x423.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCに入力-1536x846.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>送信ボタンを押すと、JavaScriptで定義した「ShowToastEvent()」が処理され、以下のメッセージが表示されています。</p>
<p>送信完了　お問い合わせを受け付けました。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4628" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行.jpg" alt="" width="1920" height="1116" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行-1024x595.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行-768x446.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTで生成したお問い合わせフォームのLWCを実行-1536x893.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>ChatGPTの最後のメッセージには次のように記載されています。</p>
<p>「このコードでは、フォームが送信される前にJavaScriptでフォームの入力内容を検証しています。また、入力内容が不足している場合はエラーメッセージを表示し、送信が成功した場合は成功メッセージを表示しています。ただし、サーバーサイドのフォーム処理については、実際のシステムに合わせて変更する必要があります。また、CSSでフォームのスタイルを設定する」</p>
<p>この内容の通り、もちろんサーバサイド側の処理（Apexクラス）は別途作成する必要がありますが、プロトタイプで項目や操作イメージをレビューするのには十分な品質ではないでしょうか。（ここまでの作業をすべてやった場合でも、慣れれば5分程度でできます）</p>
<p>要件定義工程でプロトタイプ作成のSEやPGの要員を削減することができる場合も出てくるでしょう。</p>
<p>このスピード間で作業するのは普通にコーディングしていたら無理だと思います。品質についてもバグなしでこの品質をサクッと作れるというのは凄すぎますね。</p>
<p>実際私もやってみるまでは、「たぶんデプロイでエラーが発生して何回か修正しながらやる必要があるかな。。」と思っていましたが、全く不要でした。（感想）</p>
<h3>【補足】さらに品質をあげるために</h3>
<p>簡単なフォームならChatGPTでもいいかもしれないけど、これじゃ項目も少ないし、デザインもいまいちだし。。。となにかとChatGPTの欠点やあらさがしをしてしまう方もいるでしょう。</p>
<p>そんな方に向けて、ChatGPTの凄さはもちろんこれだけでは終わらないのです。</p>
<p>例えば、フォームに会社名の項目を追加したい場合には、次のように入力してみます。</p>
<p>「SalesforceのLightning web componentでお問い合わせフォームを作成する場合のコードを教えて、会社名の項目も必要です」</p>
<p>すると、、、以下のようにちゃんとテキストで会社名の項目が追加されています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4635" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する.jpg" alt="" width="1880" height="1464" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する.jpg 1880w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する-300x234.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する-1024x797.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する-768x598.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでLWCお問い合わせフォームに会社名を追加する-1536x1196.jpg 1536w" sizes="auto, (max-width: 1880px) 100vw, 1880px" /></a></p>
<p>このように一度作成したものをどんどん改良していくことが簡単にできてしまうのです。</p>
<h2>そのほかChatGPTを使ったインプリや開発について</h2>
<p>ChatGPTを開発現場でどのように利用していくか、他の用途を考えてみました。</p>
<h3>Apexのコーディング</h3>
<p>Apexのコーディングはどうなのだろうと思った方も多いはず。試しにやってみました</p>
<p>ChatGPTには、「Salesforceの取引先の取引先名をXXに更新するApexトリガーを作成してください」とお願いしました。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4640" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex.jpg" alt="" width="1920" height="1235" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex-300x193.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex-1024x659.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex-768x494.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先名を更新Apex-1536x988.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>上記の通り、簡単な内容ですが、しっかりとトリガーが作成されました。</p>
<p>しかもソースコードにコメントもちゃんとついてますし、トリガーについての説明も丁寧に記載されています。（素晴らしい）</p>
<h3>コードレビュー</h3>
<p>ソースコードが出来上がったら、コードとあわせてChatGPTに「コードのバグをチェックしてください」とお願いしてみましょう。</p>
<p>すると以下の結果が返ってきます。例では簡単なApexクラスの処理を読み込ませています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4646" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2.jpg" alt="" width="1920" height="1420" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-300x222.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-1024x757.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-768x568.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-1536x1136.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-343x254.jpg 343w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビュー2-202x150.jpg 202w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>バグがないというチェックだけではなく、良いプログラミングの実践のためのアドバイスや、補足説明などもしてくれています。</p>
<p>つぎに、バグがある場合にもちゃんとチェックされるのかということで、Insert文で指定する変数を削除して、再度レビュー依頼してみました。以下がChatGPTからの回答です。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4644" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）.jpg" alt="" width="1900" height="1508" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）.jpg 1900w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）-300x238.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）-1024x813.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）-768x610.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）-1536x1219.jpg 1536w" sizes="auto, (max-width: 1900px) 100vw, 1900px" /></a></p>
<p>ちゃんとバグを見つけてくれました。ちゃんとコメントで修正が必要な内容が書かれています！</p>
<p>さらに以下のように修正されたコードまで提示してくれる神仕様となっております。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4643" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明.jpg" alt="" width="1920" height="1100" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明-300x172.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明-1024x587.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明-768x440.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでApexコードレビューInsertの後ろを削除）レビュー説明-1536x880.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>いかがでしょうか。。もうコードレビューはChatGPTに頼ればいいですね。。</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">コードレビューの工数も削減できますね。どんどん人が不要になる時代。。</div></div></div></p>
<h3>Salesforceのインプリ設定の調査</h3>
<p>例えばSalesforceのインプリ設定を依頼されたときに使ったことがない機能の場合は、どのような手順で設定するか調べると思いますが、それもChatGPTなら簡単にできてしまいます。</p>
<p>ChatGPTに「Salesforceの承認プロセスはどのように設定しますか」と聞いてみます。すると。。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4641" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問.jpg" alt="" width="1920" height="1368" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問-300x214.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問-1024x730.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問-768x547.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの承認プロセス手順を質問-1536x1094.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>といった感じです。これをきれいに章立てしてまとめるとマニュアルとして利用することもできますね。</p>
<p>ということで、操作マニュアルの生成もかなりの作業効率化が見込まれます。もちろんスクリーンショットなどは自分で取得しないといけませんが、、、（現時点では）</p>
<h3>セールスフォースの用語集作成</h3>
<p>例えば、Salesforce関連の用語集など作成したい場合は、以下のようにChatGPTに依頼してみます。</p>
<p>「次のセールスフォース用語について用語集を作成してください。ロール、プロファイル、権限セット」</p>
<p>すると以下のように要約された内容が返ってきました。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4637" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成.jpg" alt="" width="1855" height="1234" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成.jpg 1855w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成-300x200.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成-1024x681.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成-768x511.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成-1536x1022.jpg 1536w" sizes="auto, (max-width: 1855px) 100vw, 1855px" /></a></p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">どうですか。この精度の内容をさくっと作ってくれます。もう用語集作成担当は不要ですね（笑）</div></div></div></p>
<p>さらに、以下のように調べた用語について表にまとめるようなことも簡単にやってくれます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4636" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）.jpg" alt="" width="1909" height="698" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）.jpg 1909w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）-300x110.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）-1024x374.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）-768x281.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでセールスフォース用語集作成（表形式で）-1536x562.jpg 1536w" sizes="auto, (max-width: 1909px) 100vw, 1909px" /></a></p>
<h3>オブジェクト項目のAPI参照名を確認</h3>
<p>「Salesforceの取引先の全ての項目のAPI参照名をおしえてください」とChatGPTに依頼してみました結果</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-4638" src="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示.jpg" alt="" width="1920" height="1470" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示-300x230.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示-1024x784.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示-768x588.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2023/02/saleforce-development-using-ai-chatgpt-automatic-code-generation-ChatGPTでSalesforceの取引先のAPI参照名を表示-1536x1176.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>あっさりと出てきました。。</p>
<p>そのほかにもオブジェクト項目の翻訳なども一括で行い、結果を表にまとめるような場合にも利用できますね。</p>
<p>まだまだアイデアはたくさんありますが、、、検証ができたら記事にしていきたいと思います。</p>
<h2>SalesforceとChatGPTの連携について</h2>
<p>これまでの検証はChatGPTのフリーのバージョンを使って行ってきましたが、ChatGPTの有償版ではAPIを利用することができます。</p>
<p>そのためChatGPTのAPIを利用すれば、SalesforceのApexからChatGPTのAPIをコールして、その結果をSalesforceに表示したりナレッジに蓄積したりするようなことができそうです。（未検証ですが）</p>
<p>このあたりは、SalesforceのAI（Einstein）との兼ね合いもあるので、外部システムのAIを利用すべきかどうかは検討が必要だと思います。</p>
<h2>ChatGPTについての参考リンク</h2>
<p>まずお勧めなのが中田敦彦さんのYoutube。こちらでChatGPTやGoogleのBardなどについての概要が非常にわかりやすく説明されています。</p>
<p>[youtube id=YNEb3EK4rNY]</p>
<p>続いてもYoutubeの動画となりますが、「2030年の未来予測@広島弁フューチャリスト友村普」さんで「ChatGPTの使い方を初心者にもわかりやすく解説。ChatGPTの活用方法は？【openAIのChatGPTとBard】AIが世界を変える？中田敦彦さんもとりあげたチャットGPTとは？」となります。</p>
<p>[youtube id=JtSGYfPAu4Q]</p>
<p>こちらの動画では、どのように文章を生成するのかを実際にChatGPTを使って説明しています。非表示具体的でわかりやすい手順の説明をされています。</p>
<h2>まとめ</h2>
<p>今回は、ChatGPTを使ったSalesforceの開発について説明しました。</p>
<p>今後ChatGPT以外もAIがさらに進化して、どんどん作業効率化が進んでいくでしょう。</p>
<p>AIをどのように使いこなすかが問われる時代になりますね。自分の価値をどこで出すか本気で考えていく必要がありそうです。</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div></p>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br />
<a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="4605"
					data-ulike-nonce="9a41058b64"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_4605"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+4"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Batch Apexサンプルコード（取引先の部門を一括更新するバッチ処理）</title>
		<link>https://creativecontentlabtokyo.com/apex-batch-update-account-sample-code/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sun, 03 Jul 2022 07:42:16 +0000</pubDate>
				<category><![CDATA[サンプルコード]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Apex Trigger]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[スケジュールジョブ]]></category>
		<category><![CDATA[テスト]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=3662</guid>

					<description><![CDATA[バッチ処理の概要 処理概要：取引先の部門項目を一括で更新するApexバッチ処理となります。 以下、取引先部門が未設定の取引先レコードに対して、一括で&#8217…]]></description>
										<content:encoded><![CDATA[<h2>バッチ処理の概要</h2>
<p>処理概要：取引先の部門項目を一括で更新するApexバッチ処理となります。</p>
<p>以下、取引先部門が未設定の取引先レコードに対して、一括で&#8217;未設定&#8217;という固定値を設定する処理</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3670" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧.jpg" alt="" width="1920" height="1089" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧-300x170.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧-1024x581.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧-768x436.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-処理前の取引先一覧-1536x871.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>バッチを実行することで、以下のように取引先部門に’未設定’の文言が一括でセットされます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3668" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧.jpg" alt="" width="1920" height="1096" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧-300x171.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧-1024x585.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧-768x438.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-更新後の取引先一覧-1536x877.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h2>Batch Apexのサンプルコード</h2>
<p>Batch Apexのサンプルクラス、スケジューラ、テストクラスの基本セット</p>
<p>詳細な仕様は公式の開発者ガイドを参照「<a href="https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_batch_interface.htm" rel="noopener">Apexの一括処理</a>」してください。</p>
<h3>取引先の部門更新処理バッチ（BatchApexUpdateAccount.cls）</h3>
<pre class=""><code class="language-apex code_break">/**
 * プログラム名：BatchApexUpdateAccount
 * 概　　　要　：取引先の部門を一括で更新するためのバッチ処理
 * 作　成　日　：2022/07.01
 * 作　成　者　：cclt(David)
 * 変更履歴　　：
 */
global class BatchApexUpdateAccount implements Database.Batchable&lt;sObject&gt;, Database.Stateful {

    //取引先部門に設定する固定値を定義
    private final String SITE_DEFAULT_VALUE = '未指定';

    /**
     * スタートメソッドでは、QueryLocatorを使ってバッチ処理を行うレコードを取得する
     * 本サンプルでは、取引先の部門を更新するため部門がNULLのレコードを全て取得する
     **/
    global Database.QueryLocator start(Database.BatchableContext BC) {
        
        //取引先部門（Site）が未設定の取引先レコードをすべて取得
        String query = 'SELECT Id, Name, Site FROM Account Where Site = null';
        return Database.getQueryLocator(query);
    }
        
    /**
     * スタートで取得したレコードのリストをパラメータとして、メイン処理を実行
     * バッチ実行時に処理するレコード数が指定されていない場合、デフォルトでは200レコードずつ分割して処理される。
     */
    global void execute(Database.BatchableContext BC, List&lt;Account&gt; accList) {
        
        //取得した取引先部門が未指定のレコードについて、固定値'未指定'をセットする。
        for(Account acc : accList) {        
            try {
                //取引先部門に固定値をセット
                acc.Site = this.SITE_DEFAULT_VALUE;
            } catch(Exception e) {
                //桁数を超過する文字列をセットした場合などにエラーが発生します
                System.debug('エラーが発生しました。' + e.getMessage());
            }
        }
        /**
         * Database.SaveResultを使って処理したレコード1件ずつチェックし
         * 異常終了（エラー）の場合にはCSVファイルにエラーメッセージを添付しメール通知する
         * **/
        Database.SaveResult [] updResultList = Database.update(accList,false);
        for (Database.SaveResult di : updResultList) {
            //エラーの場合は、レコードにエラーメッセージを設定
            if (!di.isSuccess()) {
                for(Database.Error err : di.getErrors()){
                    System.debug(err.getStatusCode() + ': ' + err.getMessage());
                    System.debug('登録エラー: ' + err.getFields());
                }   
            } else {
                System.debug('正常終了');
            }
        }
    }   
    
    /**
     * バッチ処理の最後に実行する処理を定義
     * バッチが異常終了した場合にもfinishで定義した処理は実行される
     */
    global void finish(Database.BatchableContext BC) {
        // 
        System.debug('finish');
    }
}
</code></pre>
<p><div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffebee;border:2px solid #ef9a9a;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__title" style="color:#ef5350;">注意ポイント</div><div class="cclt-compat-mybox__content"></p>
<p>バッチ処理を実装するには、Database.Batchableを継承する必要がありますが、合わせてDatabase.Statefulを指定することを忘れないように。</p>
<p>Database.Statefulを指定しない場合、Execute内で更新されたメンバ変数が引き継がれなくなります。</p>
<p></div></div></p>
<h3>開発コンソールでバッチを直接実行する</h3>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#919191;font-size:150;"></span><div class="cclt-compat-cmemo__text"></p>
<p>//バッチ処理を開発コンソールで実行する場合は、以下のコメントを利用してください。<br />
BatchApexUpdateAccount xbatch = new BatchApexUpdateAccount();<br />
Id batchId = Database.executeBatch(xbatch);</div></div></p>
<h3>スケジュールクラス（ScheduledBatchUpdateAccount.cls）</h3>
<pre class=""><code class="language-apex code_break">/**
 * プログラム名：ScheduledBatchUpdateAccount
 * 概　　　要　：取引先部門一括更新バッチのスケジューラ
 * 作　成　日　：2022/07.01
 * 作　成　者　：cclt(David)
 * 変更履歴　　：
 */
global class ScheduledBatchUpdateAccount implements Schedulable {
    global void execute(SchedulableContext sc) {
        //取引先部門一括更新バッチクラスをインスタンス化
        BatchApexUpdateAccount b = new BatchApexUpdateAccount(); 
        //execcuteBatchでバッチ処理を実行
        Database.executeBatch(b);
    }
}
</code></pre>
<p>Schedulableとすることで、以下の画面からスケジュールジョブとして設定することができるようになります。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3669" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール.jpg" alt="" width="1920" height="1175" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール-300x184.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール-1024x627.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール-768x470.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-取引先の部門を一括更新ジョブをスケジュール-1536x940.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>登録するとスケジュール済みジョブの画面にて、次回の実行予定を確認することができます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3667" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ.jpg" alt="" width="1920" height="1038" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ-300x162.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ-1024x554.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ-768x415.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/07/apex-batch-update-account-sample-code-スケジュール済みジョブ-1536x830.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p><div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffebee;border:2px solid #ef9a9a;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__title" style="color:#ef5350;">注意ポイント</div><div class="cclt-compat-mybox__content"></p>
<ul>
<li>スケジュール登録の際に、作成したスケジューラのバッチが選択できない場合があります。その場合には、一度開発コンソールで直接スケジュール設定を行うと表示されるようになります。</li>
<li><span class="hutoaka">スケジュール済み Apex ジョブは一度に 100 件しか設定できません。（分単位でバッチを登録すると1つのバッチだけで60個のジョブ枠が使われてしまうため注意が必要）※サポートに問い合わせしても変更できません。</span></li>
<li>スケジュール済み Apex の 24 時間あたりの最大実行数も制限されているため、ジョブの実行回数についても注意が必要です。</li>
</ul>
<p></div></div></p>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#919191;font-size:150;"></span><div class="cclt-compat-cmemo__text"></p>
<p>//開発コンソールで直接スケジュールを設定する</p>
<p>ScheduledBatchUpdateAccount m = new ScheduledBatchUpdateAccount();<br />
String sch = &#8217;20 30 8 10 2 ?&#8217;;<br />
String jobID = system.schedule(&#8216;取引先部門一括更新ジョブ&#8217;, sch, m);</p>
<p></div></div></p>
<p>sch（スケジュール）に設定する内容については、</p>
<p>&#8216;<var class="keyword varname">Seconds（秒） Minutes（分） Hours（時間） Day_of_month（日） Month（月）Day_of_week（曜日）</var>&#8216;の順</p>
<p>設定方法に関する説明は以下の通り</p>
<table style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<th id="d120169e351" class="featureTableHeader vertical-align-top " style="width: 26.6945%; background-color: #4225e8;"><span style="color: #ffffff;">Name</span></th>
<th id="d120169e354" class="featureTableHeader vertical-align-top " style="width: 39.6246%; background-color: #4225e8;"><span style="color: #ffffff;">Values</span></th>
<th id="d120169e357" class="featureTableHeader vertical-align-top " style="width: 33.5766%; background-color: #4225e8;"><span style="color: #ffffff;">Special Characters</span></th>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><var class="keyword varname">Seconds</var></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values">0–59</td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters">None</td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><var class="keyword varname">Minutes</var></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values">0–59</td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters">None</td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><var class="keyword varname">Hours</var></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values"><span style="font-family: 'andale mono', monospace;">0–23</span></td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">, &#8211; * /</samp></span></td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><span style="font-family: 'andale mono', monospace;"><var class="keyword varname">Day_of_month</var></span></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values"><span style="font-family: 'andale mono', monospace;">1–31</span></td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">, &#8211; * ? / L W</samp></span></td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><span style="font-family: 'andale mono', monospace;"><var class="keyword varname">Month</var></span></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values"><span style="font-family: 'andale mono', monospace;">1–12 or the following:</span></p>
<ul class="ul bulletList">
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">JAN</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">FEB</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">MAR</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">APR</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">MAY</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">JUN</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">JUL</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">AUG</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">SEP</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">OCT</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">NOV</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">DEC</samp></span></li>
</ul>
</td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">, &#8211; * /</samp></span></td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><span style="font-family: 'andale mono', monospace;"><var class="keyword varname">Day_of_week</var></span></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values"><span style="font-family: 'andale mono', monospace;">1–7 or the following:</span></p>
<ul class="ul bulletList">
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">SUN</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">MON</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">TUE</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">WED</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">THU</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">FRI</samp></span></li>
<li class="li"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">SAT</samp></span></li>
</ul>
</td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">, &#8211; * ? / L #</samp></span></td>
</tr>
<tr>
<td class="entry" style="width: 26.6945%;" headers="d120169e351" data-title="Name"><span style="font-family: 'andale mono', monospace;"><var class="keyword varname">optional_year</var></span></td>
<td class="entry" style="width: 39.6246%;" headers="d120169e354" data-title="Values"><span style="font-family: 'andale mono', monospace;">null or 1970–2099</span></td>
<td class="entry" style="width: 33.5766%;" headers="d120169e357" data-title="Special Characters"><span style="font-family: 'andale mono', monospace;"><samp class="codeph apex_code">, &#8211; * /</samp></span></td>
</tr>
</tbody>
</table>
<p>【特殊なスケジュール設定方法】</p>
<p>・Special Charactersの文字列を使うことで、複雑なスケジュールの指定が可能となります。</p>
<p>①カンマ&#8217;,&#8217;を使った場合、月のパラメータに&#8221;JAN,FEB,MAR”といったように複数の月を指定することができます。</p>
<p>②半角ハイフン&#8217;-&#8216;を使うと、月のパラメータの場合、&#8221;JAN-MAR&#8221;といったように月のFROM-TO指定が可能となります。</p>
<p>※そのほかの例は、以下公式HELPサイトよりご確認ください。</p>
<p>「https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_scheduler.htm」</p>
<h3>Batch Apexテストクラス（）</h3>
<pre class=""><code class="language-apex code_break">@isTest
private class ScheduledBatchUpdateAccountTest {

    public static String CRON_EXP = '0 0 * * * ? 2022';
    static testmethod void testScheduledJob() {
        // 処理対象の取引先データを作成
        List&lt;Account&gt; accRecs = new List&lt;Account&gt;();
        for (Integer i=0; i&lt;10; i++) {
            Account acc = new Account(
                Name = 'テスト取引先 ' + i,
                Site =  null);
            accRecs.add(acc);
        }
        insert accRecs;
        
        // インサート後のレコードIDとレコードをマップに格納（検証用）
        Map&lt;Id, Account&gt; accMap = new Map&lt;Id, Account&gt;(accRecs);

        // テスト開始
        Test.startTest();
            // スケジュールジョブ実行
            String jobId = System.schedule('ScheduledBatchUpdateAccountTest',
                CRON_EXP, new ScheduledBatchUpdateAccount());
                
        //テスト終了
        Test.stopTest();

        //テスト結果の検証
        for(Account acc:[SELECT Id,Name,Site FROM Account
                        WHERE Id IN :accMap.keyset()]){
            System.assertEquals(acc.Site , null);
        }
    }
}
</code></pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffebee;border:2px solid #ef9a9a;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__title" style="color:#ef5350;">注意ポイント</div><div class="cclt-compat-mybox__content"></p>
<ul>
<li>System.schedule メソッドを使って、スケジュールした結果を確認する場合には、Test.startTest()→System.schedule メソッド→Test. stopTest()の順に実行する必要があります。</li>
</ul>
<p></div></div></p>
<p>サンプルコード一覧へ戻る場合は、こちらへ</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/programming-code-template-sample-list/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">サンプルコード（テンプレート）Apex/Lwc/Visualforce/Flow</div><div class="cclt-compat-card__excerpt">Salesforceの開発を行うときにベースとなるサンプルコードを探すことが多い…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="3662"
					data-ulike-nonce="cb352aa034"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_3662"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>カスタマー取引先ポータルのサイトを構築して取引先責任者のポータルユーザでログイン</title>
		<link>https://creativecontentlabtokyo.com/salesforce-create-degital-experience-site-login-with-customer-portal-user/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 11 Jun 2022 13:27:55 +0000</pubDate>
				<category><![CDATA[Salesforce基礎]]></category>
		<category><![CDATA[Tips集]]></category>
		<category><![CDATA[開発]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[カスタマーポータル]]></category>
		<category><![CDATA[カスタマーユーザ]]></category>
		<category><![CDATA[カスタマー取引先]]></category>
		<category><![CDATA[デジタルエクスペリエンス]]></category>
		<category><![CDATA[ポータルユーザ]]></category>
		<category><![CDATA[作成]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=3459</guid>

					<description><![CDATA[今回の記事では、デジタルエクスペリエンスを使って、カスタマー取引先ポータル（カスタマーポータル）のサイトを構築します。 また、Apexのサンプルコードとして提供…]]></description>
										<content:encoded><![CDATA[<p>今回の記事では、デジタルエクスペリエンスを使って、カスタマー取引先ポータル（カスタマーポータル）のサイトを構築します。</p>
<p>また、Apexのサンプルコードとして提供している「取引先責任者を使って、カスタマーポータルユーザを作成」を利用して、取引先責任者のカスタマーポータルユーザを作成して、カスタマーポータルサイトにログインするまでの手順を説明してみたいと思います。</p>
<p>※Apexの開発は難しいという方は、標準の機能を使って取引先責任者からポータルユーザを使ってログインしてください。</p>
<p>【必要なライセンス】</p>
<p>カスタマー取引先ポータル（カスタマーポータル）を利用するためには、カスタマーポータルユーザライセンス（※１）が必要となります。</p>
<p>※Experience Cloudユーザライセンス（外部ユーザラインセンスとして、Customer Community、Customer Community Plusのいずれか）</p>
<p>代理店などの自社パートナーに対しては、別のパートナーコミュニティラインセンス（Partner Community）が用意されているので注意</p>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#757575;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#BDBDBD;"></span><div class="cclt-compat-cmemo__text">Salesforce公式HELP「<a href="https://help.salesforce.com/s/articleView?id=sf.users_license_types_communities.htm&amp;type=5" rel="noopener">Experience Cloud ユーザライセンス</a>」</div></div></p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">Developer Edition環境を使えば動作検証は可能です</div></div></div></p>
<p>Developer Edition（無料の開発環境）を持っていない方は、以下の記事を参考にSalesforce組織を取得してください。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/salesforce-basic1-3/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">セールスフォースの基礎Ⅰ（３）Developer組織の作成～ログインまで</div><div class="cclt-compat-card__excerpt">【第三回】セールスフォースの基礎講義 前回の記事では、インスタンスとリージョンの…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<h2>デジタルエクスペリエンス（Experience Cloud サイト）について</h2>
<p>デジタルエクスペリエンス（Experience Cloud サイト ※旧Community Cloudサイト ）：Salesforce CMS、Mobile Publisher、Web アプリケーションスイートが結合されてた堅牢なカスタマイズされたサイト</p>
<p>簡単に言うと、Salesforce CRMと連携して、従業員/顧客/パートナー（代理店など）向けの公開ポータルサイトを非常に簡単に作成することができる機能（サービス）となります。</p>
<p>Salesforce内の各種データを共有（公開）したり、Salesforceの標準機能を外部向けに利用可能とすることができます。</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">顧客向けにナレッジ（よくある質問やお問い合わせ）などの情報を公開することで、サポートコストを低減するなども目的で利用したり、だ代理店などのパートナー向けに商談などの情報を公開するような利用方法もあります。</div></div></div></p>
<p>サイトの構築は非常に簡単で、ノンコーディングで作成することもできますし、開発したコンポーネントなどを配置して利用することもできます。</p>
<p>さらに、各種CMSのテンプレートが提供されていて、テンプレートを適用するとおしゃれなページが簡単に構築できます。</p>
<p>※以下、選択可能なテンプレート（一部）</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3464" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート.jpg" alt="" width="1920" height="1109" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート-1024x591.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート-768x444.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-テンプレート-1536x887.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h2>Experience Cloudユーザライセンスの種類</h2>
<p>Experience Cloudユーザライセンス（旧Community Cloud）は、以下の種類があります。（2022/06/11時点）</p>
<p>以下、【引用元】：Salesforce公式HELPサイト「<a href="https://help.salesforce.com/s/articleView?id=sf.users_license_types_communities.htm&amp;type=5" rel="noopener">Experience Cloud ユーザライセンス</a>」</p>
<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small">
<thead class="slds-text-title_caps">
<tr>
<th class="slds-cell-wrap" style="background-color: #0f0559;" scope="col" width="28.653295128939828%"><span style="color: #ffffff;">ライセンス名</span></th>
<th class="slds-cell-wrap" style="background-color: #0f0559;" scope="col" width="34.38395415472779%"><span style="color: #ffffff;">最適な用途</span></th>
<th class="slds-cell-wrap" style="background-color: #0f0559;" scope="col" width="36.96275071633238%"><span style="color: #ffffff;">同等のポータルライセンス</span></th>
</tr>
</thead>
<tbody>
<tr>
<td class="slds-cell-wrap" width="28.653295128939828%" data-label="ライセンス名">外部アプリケーション</td>
<td class="slds-cell-wrap" width="34.38395415472779%" data-label="最適な用途">外部関係者を引き込むカスタムデジタルエクスペリエンス (ブランドエンゲージメント、顧客ロイヤルティなど)。CRM オブジェクトには限定的にアクセス。External Apps ライセンスは個人取引先で使用できます。</td>
<td class="slds-cell-wrap" width="36.96275071633238%" data-label="同等のポータルライセンス">High Volume Customer Portal、Service Cloud Portal、Authenticated Sites Portal</td>
</tr>
<tr>
<td class="slds-cell-wrap" width="28.653295128939828%" data-label="ライセンス名">Customer Community</td>
<td class="slds-cell-wrap" width="34.38395415472779%" data-label="最適な用途">ケースオブジェクトやナレッジへのアクセスを必要とする多数の外部ユーザとの B2C エクスペリエンス。Customer Community は個人取引先で使用できます。</td>
<td class="slds-cell-wrap" width="36.96275071633238%" data-label="同等のポータルライセンス">High Volume Customer Portal、Service Cloud Portal、Authenticated Sites Portal</td>
</tr>
<tr>
<td class="slds-cell-wrap" width="28.653295128939828%" data-label="ライセンス名">Customer Community Plus</td>
<td class="slds-cell-wrap" width="34.38395415472779%" data-label="最適な用途">レポートやダッシュボードを必要とし、高度な共有を要する外部ユーザとの B2C エクスペリエンス。Customer Community Plus は個人取引先で使用できます。</td>
<td class="slds-cell-wrap" width="36.96275071633238%" data-label="同等のポータルライセンス">Customer Portal — Enterprise Administration、Customer Portal Manager Standard、Customer Portal Manager Custom</td>
</tr>
<tr>
<td class="slds-cell-wrap" width="28.653295128939828%" data-label="ライセンス名">パートナーコミュニティ</td>
<td class="slds-cell-wrap" width="34.38395415472779%" data-label="最適な用途">パートナーリレーションの管理など、セールスデータにアクセスする必要がある企業間エクスペリエンス。Partner Community は個人取引先では使用できません。</td>
<td class="slds-cell-wrap" width="36.96275071633238%" data-label="同等のポータルライセンス">Gold Partner</td>
</tr>
<tr>
<td class="slds-cell-wrap" width="28.653295128939828%" data-label="ライセンス名">Channel Account</td>
<td class="slds-cell-wrap" width="34.38395415472779%" data-label="最適な用途">個々のユーザ数ではなくパートナー数に基づいて使用量が計算される企業間サイトおよびポータル。</td>
<td class="slds-cell-wrap" width="36.96275071633238%" data-label="同等のポータルライセンス">Gold Partner</td>
</tr>
</tbody>
</table>
<p>上記の通り、ポータル系のライセンス体系は用途によって、細分化されているのでお客様の要件によって適切なものを選択する必要があります。</p>
<p>今回の記事で利用するのは、「Customer Community（カスタマーコミュニティ）」ライセンスとなります。</p>
<p>取引先責任者をカスタマーポータルユーザとして、新規ユーザを作成するため、Customer Communityが必要となります。</p>
<p>代理店などのパートナー向けにユーザを作成する場合には、Partner Communityのライセンスが必要となります。</p>
<p><div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffebee;border:2px solid #ef9a9a;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__title" style="color:#ef5350;">Customer CommunityとCustomer Community Plusの主な相違点（注意すべき点）</div><div class="cclt-compat-mybox__content"></p>
<p>・Customer Communityはダッシュボードが参照不可（Plusは可）</p>
<p>・APIコール不可（Plusは可）</p>
<p>・ロールおよび高度な共有が不可（Plusは可能）</p>
<p>・メール送信不可（Plusは可）</p>
<p>・承認プロセス：承認申請可能で承認者としても割り当て可能だが、承認ワークフロー経由で ToDo やメールアラートが割り当てられることはない（Plusは承認プロセスのフル機能が利用可能）</p>
<p></div></div></p>
<h3>ライセンス毎の課金体系について</h3>
<p>デジタルエクスペリエンスのポータルサイトでは、大きく2種類のライセンス課金体系があります。</p>
<p>１．メンバーベースライセンス</p>
<p>ユーザに紐づくライセンス体系で先ほどご紹介したライセンス体系（Customer Community、Customer Community Plus、Partner Community、外部アプリケーション、Channel Account）がそれに該当します。</p>
<p>メンバーベースライセンスの場合、ユーザが月に何度ログインしても料金体系は変わらず固定となります。（ひと月当たりいくら）</p>
<p>２．ログインベースライセンス</p>
<p>ログインベースライセンスのライセンス体系は（Customer Community Login、CustomerCommunity Plus ログイン、Partner Community ログイン、External Apps Login、Channel Account Login）となっており、各種メンバーライセンスにログインが付いたライセンス名となっています。</p>
<p>ログインベースのライセンスの場合、毎月利用する特定数のログイン(※1)を購入することになります。</p>
<p>※1.ライセンスに関連付けられている外部ユーザは、サイトにログインする度に1 ログインを消費します。</p>
<p>ただし、同一ユーザが同じ日に複数回ログインしても、消費するのは 1ログインというカウントとなります。（日次ユニークログインと呼ばれる）</p>
<p>ポータルサイトの目的やユーザの利用状況によって、最適なライセンスを選択する必要があります。</p>
<h2>デジタルエクスペリエンスでカスタマー取引先ポータルを作成</h2>
<p>ここからは実際にSalesforceの組織にログインして、カスタマポータルのサイトを作成していきたいと思います。</p>
<p><div class="cclt-compat-mybox st-mybox-class st-title-under st-list-no st-list-border" style="background-color:;border:3px solid #f3f3f3;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__title" style="color:#757575;">サイト構築の簡単な流れ</div><div class="cclt-compat-mybox__content"></p>
<ol>
<li>デジタルエクスペリエンスの有効化</li>
<li>カスタマーコミュニティユーザ用プロファイルの作成</li>
<li>新規カスタマー取引先ポータル（サイト）の作成</li>
<li>サイトのカスタマイズ</li>
<li>取引先、取引先責任者レコードの作成</li>
<li>取引先責任者のカスタマーコミュニティユーザを作成</li>
<li>カスタマーコミュニティユーザでカスタマー取引先ポータルサイトへログイン</li>
</ol>
<p></div></div></p>
<h3>1.デジタルエクスペリエンスの有効化</h3>
<p>まず最初にデジタルエクスペリエンスの機能を有効化します。</p>
<p>手順①システム管理者でログイン後、[設定]-&gt;[デジタルエクスペリエンス]-&gt;[設定]の順に実行します。</p>
<p>以下の画面が表示されたら、デジタルエクスペリエンスを有効化にチェックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3469" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化.jpg" alt="" width="1920" height="971" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化-300x152.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化-1024x518.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化-768x388.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンスを有効化-1536x777.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順②デジタルエクスペリエンスを有効化にチェックすると、ドメイン名の選択項目が表示されます。</p>
<p>ドメイン名に作成したいドメイン名を入力して、[参加可能か調べる]をクリックして、ドメインが利用可能かチェックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3470" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック.jpg" alt="" width="1920" height="900" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック-300x141.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック-1024x480.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック-768x360.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-ドメイン名チェック-1536x720.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順③ドメイン名のチェックが終わったら、保存ボタンをクリックします。</p>
<p>すると以下の警告メッセージが表示されるので、問題なければOKをクリックして有効化を完了します。</p>
<p><span class="hutoaka">「デジタルエクスペリエンスを有効化すると、レコードアクセス権が「ロール＆下位ロール」から「ロール、内部＆ポータル下位ロール」に自動的に変更されます。ポータル下位ロールにアクセス権を開放すると、組織のデータが外部ユーザに公開される可能性があります。デジタルエクスペリエンスを有効化したら、[デジタルエクスペリエンス] &gt; [サイトメンバーアクセス権の変換] ツールを実行してデータアクセス権を保護してください。</span></p>
<p><span class="hutoaka">デジタルエクスペリエンスを有効化したら、ドメイン名の変更やデジタルエクスペリエンスの無効化ができなくなります。</span></p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化確認メッセージ.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3471" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化確認メッセージ.jpg" alt="" width="884" height="527" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化確認メッセージ.jpg 884w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化確認メッセージ-300x179.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化確認メッセージ-768x458.jpg 768w" sizes="auto, (max-width: 884px) 100vw, 884px" /></a></p>
<p><div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffebee;border:2px solid #ef9a9a;border-radius:5px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__content"></p>
<p>デジタルエクスペリエンスは一度有効化すると無効化できなくなります。</p>
<p>また、ポータルサイトを作成後は、外部ユーザによるSalesforceの各種データへアクセスすることも可能となるため、顧客情報などの重要な情報へアクセスできないように、必ずポータルユーザの権限については、上記メッセージの指示に従って設定の確認を実施してください（超重要！！！）</p>
<p></div></div></p>
<p>手順④有効化を実施後、以下の通り、成功しましたのメッセージが表示されれば有効化作業が完了となります。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3472" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功.jpg" alt="" width="1920" height="1011" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功-300x158.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功-1024x539.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功-768x404.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-有効化成功-1536x809.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h3>2.カスタマーコミュニティユーザ用プロファイルの作成</h3>
<p>カスタマーコミュニティ用のプロファイルを作成します。</p>
<p><span style="color: #0000ff;">※サイト公開前にはプロファイルを含め、必要なセキュリティ設定は必ず済ませておいてください</span></p>
<p>手順①システム管理者で、[設定]-&gt;[ユーザ]-&gt;[プロファイル]の順に実行します。</p>
<p>プロファイル一覧から、[Customer Community User]プロファイルの横にあるコピーリンクをクリックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3486" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成.jpg" alt="" width="1920" height="1144" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成-300x179.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成-1024x610.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成-768x458.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイル作成-1536x915.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順②プロファイルのコピー画面で、カスタムプロファイルの名前を指定して保存ボタンをクリックします。</p>
<p>例では、「Custom Customer Community User」という名前にしています。</p>
<p>※Apexのコードサンプルではこの名称を利用してプロファイルを取得しています。名前を変更する場合、Apexコードで指定しているプロファイル名も変更してください</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3485" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー.jpg" alt="" width="1920" height="752" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー-300x118.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー-1024x401.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー-768x301.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルのコピー-1536x602.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>プロファイル作成後は、必ずプロファイルに設定されている権限の確認をしてください。（必要ない権限は削除）</p>
<h3>3.新規カスタマー取引先ポータル（サイト）の作成</h3>
<p>手順①デジタルエクスペリエンスを有効化すると、デジタルエクスペリエンスメニューに、すべてのサイトが表示されるので、クリックして実行します。</p>
<p>すべてのサイトページで、[新規]ボタンをクリックして、新規サイトの作成を行います。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3474" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2.jpg" alt="" width="1920" height="1075" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2-300x168.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2-1024x573.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2-768x430.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-サイトの作成2-1536x860.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順②新規ボタンをクリックすると、お気に入りのエクスペリエンスの選択画面が表示されます。</p>
<p>ポータルの利用用途に沿った各種テンプレートが用意されています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3479" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択.jpg" alt="" width="1920" height="1148" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択-300x179.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択-1024x612.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択-768x459.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-デジタルエクスペリエンス-お気に入り選択-1536x918.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順③今回は、カスタマー取引先ポータルを選択します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3475" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択.jpg" alt="" width="1920" height="1153" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択-300x180.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択-1024x615.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択-768x461.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータルを選択-1536x922.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順④カスタマー取引先ポータルの画面で内容を確認したら、「使用を開始する」ボタンをクリックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3477" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始.jpg" alt="" width="1920" height="1149" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始-300x180.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始-1024x613.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始-768x460.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-使用開始-1536x919.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順⑤続いて、ポータルの名前を設定後、作成ボタンをクリックします。　※サイトのページのURLは省略可能。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3478" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定.jpg" alt="" width="1920" height="1137" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定-1024x606.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定-768x455.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-名前の設定-1536x910.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順⑥サイトの作成処理が開始されます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3476" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中.jpg" alt="" width="1920" height="1137" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中-1024x606.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中-768x455.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-作成中-1536x910.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順⑦サイトの作成が終わると以下のワークスペースの画面が表示されます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3481" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2.jpg" alt="" width="1920" height="1085" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2-300x170.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2-1024x579.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2-768x434.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース2-1536x868.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順⑧ワークスペースからビルダーのメニューを実行します。</p>
<p>すると以下のようなホーム画面が表示されます。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3482" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面.jpg" alt="" width="1920" height="1141" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面-1024x609.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面-768x456.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-ワークスペース-ビルダー画面-1536x913.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h3>4.カスタマー取引先ポータルサイトのカスタマイズ</h3>
<p>まずは、サイトへアクセス可能なプロファイルを設定します。</p>
<p>手順①サイト作成後、ビルダーの左上のメニューから「管理」メニューを実行します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3499" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー.jpg" alt="" width="1920" height="1112" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-1024x593.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-768x445.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-1536x890.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順②管理メニューの中から、メンバーメニューをクリックします。</p>
<p>選択可能なプロファイルで、作成したプロファイル「Custom Customer Community User」を選択して選択済みへ追加します</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3502" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4.jpg" alt="" width="1920" height="1110" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4-1024x592.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4-768x444.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-管理メニュー-プロファイル追加4-1536x888.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>続いては、新規作成したカスタマー取引先ポータルサイトのレイアウトなどのカスタマイズを行います。（ここは省略してもよいです）</p>
<p>ポータル画面の設定やカスタマイズに関しては、別の記事で詳細をご説明したいと思います。</p>
<p>今回は、以下のようにダッシュボードのコンポーネント追加と、ケースの一覧表示だけ追加しています。</p>
<p>手順①カスタマイズが終わったら、画面右上の公開ボタンをクリックしてページを公開します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3484" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ.jpg" alt="" width="1920" height="1115" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ-1024x595.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ-768x446.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-カスタマー取引先ポータル-カスタマイズ-1536x892.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3488" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集.jpg" alt="" width="1920" height="1035" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集-300x162.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集-1024x552.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集-768x414.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-プロファイルの編集-1536x828.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h3>5.取引先、取引先責任者レコードの作成</h3>
<p>続いては、取引先と取引先責任者のレコードを作成していきます。</p>
<p>※ここはSalesforceの基本的な操作となるため、詳細な手順は省略します。</p>
<p>【例】以下の取引先と取引先責任者を作成</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3489" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成.jpg" alt="" width="1920" height="1108" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成-1024x591.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成-768x443.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先の作成-1536x886.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>取引先責任者については、取引先は上記で作成した取引先に紐づけて作成</p>
<p>姓名とメールアドレスは必ず設定するようにしてください。　※メールアドレスは新規ポータルユーザを作成するときに利用します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3490" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成.jpg" alt="" width="1920" height="1116" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成-1024x595.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成-768x446.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者の作成-1536x893.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h3>6.取引先責任者のカスタマーコミュニティユーザを作成</h3>
<p>続いては、作成した取引先責任者をカスタマーポータルユーザとして有効化します。</p>
<p>その１（標準機能を使ったやり方）</p>
<p>手順①取引先責任者のページレイアウトを編集して、モバイルおよびLightning アクションから、「カスタマーユーザを有効化」「カスタマーユーザを無効化」「カスタマーユーザを表示」のボタンをレイアウトに配置して保存します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3491" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集.jpg" alt="" width="1920" height="975" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集-300x152.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集-1024x520.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集-768x390.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者ページレイアウト編集-1536x780.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順②取引先責任者の詳細画面で「カスタマーユーザを有効化」ボタンをクリックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3493" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化.jpg" alt="" width="1920" height="1109" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化-300x173.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化-1024x591.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化-768x444.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化-1536x887.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順③ユーザの新規作成画面に遷移するので、この画面でライセンスとプロファイルを以下に変更して保存します。</p>
<p>・ユーザライセンス：Customer Community</p>
<p>・プロファイル：Custom Customer Community User</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3492" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）.jpg" alt="" width="1920" height="1196" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）-300x187.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）-1024x638.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）-768x478.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（ユーザ作成）-1536x957.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>そのほか、ユーザ名など変更したい箇所があれば編集してから保存します。</p>
<p>手順④作成時に以下の警告メッセージが表示されます。問題なければOKをクリックします。</p>
<p>任意のコミュニティで [お知らせメールを送信] オプションを選択している場合、そのコミュニティの新規メンバーはお知らせメールメッセージを受信します。このコミュニティメンバーにお知らせメールメッセージを送信しない場合は、[お知らせメールを送信] オプションを選択解除します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（警告メッセージ）.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-3496" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（警告メッセージ）.jpg" alt="" width="366" height="158" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（警告メッセージ）.jpg 907w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（警告メッセージ）-300x130.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（警告メッセージ）-768x332.jpg 768w" sizes="auto, (max-width: 366px) 100vw, 366px" /></a></p>
<p>手順⑤ユーザ作成後に以下のメールが届きます。メール内のリンクをクリックします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3495" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）.jpg" alt="" width="1920" height="574" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）-300x90.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）-1024x306.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）-768x230.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザを有効化（メール）-1536x459.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>手順⑥パスワードの設定画面にて新規パスワードを設定します。設定後パスワードの変更を実行</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3494" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）.jpg" alt="" width="1920" height="1397" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）-300x218.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）-1024x745.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）-768x559.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/salesforce-create-degital-experience-site-カスタマーポータル-取引先責任者-カスタマーユーザ（パスワード設定）-1536x1118.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h3>7.カスタマーコミュニティユーザでカスタマー取引先ポータルサイトへログイン</h3>
<p>パスワードの変更を行うと自動的にログインされます。作成したサイトのログイン画面が表示されれば成功となります。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3444" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite.jpg" alt="" width="1920" height="1115" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-1024x595.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-768x446.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-1536x892.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h2>カスタマーポータルユーザの作成（ApexTriggerサンプルコード）</h2>
<p>今回は、取引先責任者の標準機能「カスタマーユーザを有効化」機能を使ってユーザを作成しましたが、フローアクションやApexなどで自動的にユーザを作成したい場合もあると思います。</p>
<p>取引先責任者IDを使って、Apexで自動的にカスタマーユーザを作成する方法については、以下にサンプルコードを用意しています。</p>
<p>ユーザ作成後は、ユーザ宛にメールが届きます。※メール内リンクからユーザを有効化＆パスワードの変更を実施してログイン可能となります。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/salesforce-how-to-setup-customer-portal-user-by-apex/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="174" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-300x174.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-300x174.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-1024x595.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-768x446.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite-1536x892.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/06/Salesforce-how-to-setup-customer-portal-user-by-apex-portalsite.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">カスタマーポータルユーザの作成（Apex Class サンプルコード）</div><div class="cclt-compat-card__excerpt">今回のサンプルは、取引先責任者IDを使ってカスタマー取引先ポータルのユーザを作成…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<h2>まとめ</h2>
<p>今回は、カスタマーポータルを作成してポータルユーザでログインする手順についてご説明しました。</p>
<p>デジタルエクスペリエンスの構築方法では、開発機能を使ったサイト作成なども実際のプロジェクトでは多いと思いますので、別の機会に開発機能を使ってのサイト作成方法をご紹介したいと思います。</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div></p>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br />
<a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="3459"
					data-ulike-nonce="71253077fa"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_3459"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>カスタマーポータルユーザの作成（Apex Class サンプルコード）</title>
		<link>https://creativecontentlabtokyo.com/salesforce-how-to-setup-customer-portal-user-by-apex/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 11 Jun 2022 07:35:28 +0000</pubDate>
				<category><![CDATA[サンプルコード]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[カスタマーポータル]]></category>
		<category><![CDATA[カスタマー取引先]]></category>
		<category><![CDATA[デジタルエクスペリエンス]]></category>
		<category><![CDATA[ポータルユーザ]]></category>
		<category><![CDATA[作成]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=3440</guid>

					<description><![CDATA[今回のサンプルは、取引先責任者IDを使ってカスタマー取引先ポータルのユーザを作成するApexコードのサンプルをご紹介します。 主に以下のような用途で利用いただけ…]]></description>
										<content:encoded><![CDATA[<p>今回のサンプルは、取引先責任者IDを使ってカスタマー取引先ポータルのユーザを作成するApexコードのサンプルをご紹介します。</p>
<p>主に以下のような用途で利用いただけます。</p>
<p>・ポータルサイトを使って、お客様からのお問い合わせの管理を行ったり、お客様に向けてナレッジなどの情報を提供する</p>
<p>【必要なライセンス】</p>
<p>カスタマー取引先ポータル（カスタマーポータル）を利用するためには、カスタマーポータルユーザライセンス（※１）が必要となります。</p>
<p>※Experience Cloudユーザライセンス（外部ユーザラインセンスとして、Customer Community、Customer Community Plusのいずれか）</p>
<p>代理店などの自社パートナーに対しては、別のパートナーコミュニティラインセンス（Partner Community）が用意されているので注意</p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">Developer Edition環境を使えば動作検証は可能です</div></div></div></p>
<p>Developer Edition（無料の開発環境）を持っていない方は、以下の記事を参考にSalesforce組織を取得してください。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/salesforce-basic1-3/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-study-1.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">セールスフォースの基礎Ⅰ（３）Developer組織の作成～ログインまで</div><div class="cclt-compat-card__excerpt">【第三回】セールスフォースの基礎講義 前回の記事では、インスタンスとリージョンの…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<h2>カスタマーポータルユーザの作成（ApexTriggerサンプルコード）</h2>
<h3>ポータルユーザ作成処理</h3>
<pre class=""><code class="language-apex code_break">/**
 *　クラス名：CreateCommunityUser 
 *　処理概要：
 *　作成者：CreativeContentLabTokyo
 *　作成日：2022/06/10 
 * 　
*/
global class CreateCommunityUser{

    //カスタムExceptionの定義
    public class CustomException extends Exception {}
    
    /** 
     *　メソッド名：createCommunityUserByContactId
     *　処理概要：取引先責任者のIDを使って、コミュニティユーザを作成
     *　引数：取引先責任者ID
     *　戻り値：ユーザレコード
    **/
    WebService static User createCommunityUserByContactId(String contactId) {
    
      //取引先責任者のIDを使って、氏名とメールアドレスの情報を取得
      Contact contactRec = [SELECT FirstName,LastName,Email,AccountId 
                        FROM Contact WHERE Id =: contactId LIMIT 1];
                           
      //カスタマーコミュニティユーザのプロファイル名を指定してプロファイルIDを取得
      //Profile prof = [SELECT Id,Name FROM profile WHERE name='Customer Community User' LIMIT 1];
      //標準のCustomer Community Userの利用は推奨されないため、コピーしてカスタムプロファイルを生成しておく
      Profile prof = [SELECT Id,Name FROM profile WHERE 
                     name='Custom Customer Community User' LIMIT 1];
      
      //ユーザ名生成
      String strUserName = contactRec.Email + 'ccltPortail';

      //ニックネーム生成
      String strNikcname;
      if(contactRec.FirstName == null){
          strNikcname = contactRec.LastName + Math.random();
      } else {
          strNikcname = contactRec.FirstName + Math.random();
      }
      
      //Alias生成(姓名の文字列短い場合を考慮してパディングしておく)
      String strAlias = String.valueOf(contactRec.LastName.substring(0,1) 
                  + Math.random() ).leftPad(3,'0').substring(0,5);
      
      //カスタマーコミュニティユーザを作成 
      User newCommunityUser = new User(contactId = contactId, 
                          username = strUserName, 
                          firstname = contactRec.FirstName,
                          lastname = contactRec.LastName, 
                          email=contactRec.Email,
                          communityNickname = strNikcname,
                          alias = strAlias, 
                          profileid = prof.Id, 
                          emailencodingkey='ISO-2022-JP',
                          languagelocalekey='ja', 
                          localesidkey='ja_JP', 
                          timezonesidkey='Asia/Tokyo');                  

    try {
          insert newCommunityUser ;
          
    //例外発生時処理
    } catch(DMLException ex) {
        //その他例外処理
        Throw new CustomException('[Exception]'+ex.getMessage());
    }
    //正常終了の場合、作成したユーザレコードを返却
      return newCommunityUser ;

    }
}
</code></pre>
<h3>テストクラス（CreateCommunityUserTest.cls）</h3>
<pre class=""><code class="language-apex code_break">/**--------------------------------------------------------------------------
 * プログラム名:CreateCommunityUserTest
 * 概　要 ：CreateCommunityUserテストクラス 
 * 作成日 ：2022.06.10
 * 作成者 ：cclt
 * --------------------------------------------------------------------------**/
@isTest(SeeAllData=false)
private class CreateCommunityUserTest {

    // テストデータのセットアップ
    @testSetup
    static void initTest(){ 
        // 取引先の作成
        Account acc = new Account(Name='クリエイティブコンテンツラボトウキョウ');
        insert acc;
        // 取引先に紐づく取引先責任者を作成
        contact con = new Contact();
        con.FirstName ='David';
        con.LastName ='cclt';
        con.AccountId = acc.Id;
        con.Email='cclt.customerportaltest@gmail.com';
        insert con;
    }

    @isTest static void Test_Case_createCommunityUser() {   

        //取引先責任者IDを取得
        Contact con = [select id,FirstName,LastName,AccountId,Email 
                        From Contact limit 1];
        User portalUser;
        //テスト開始
        Test.startTest();
            //カスタマーコミュニティユーザ作成処理実行
            portalUser = CreateCommunityUser.createCommunityUserByContactId(con.Id);
        
            //テスト終了
        Test.stopTest();

        //検証
        System.assert(portalUser != null);
        System.assert(portalUser.Email.equals(con.Email));
        
    }   

    @isTest static void Test_Case_ContactNameNull() {   

        // 不正な取引先責任者を作成
        contact con = new Contact();
        con.FirstName ='';
        con.LastName ='cclt';
        insert con;
        User portalUser;
        //テスト開始
        Test.startTest();
            try {
                //カスタマーコミュニティユーザ作成処理実行
                portalUser = CreateCommunityUser.createCommunityUserByContactId(con.Id);             
            } catch (Exception ex) {
                //検証
                System.assert(ex.getMessage().contains('FIELD_INTEGRITY_EXCEPTION'));
            }
            //テスト終了
        Test.stopTest();
        
    }   
}
</code></pre>
<p>&nbsp;</p>
<p>サンプルコード一覧へ戻る場合は、こちらへ</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/programming-code-template-sample-list/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-pc-3.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">サンプルコード（テンプレート）Apex/Lwc/Visualforce/Flow</div><div class="cclt-compat-card__excerpt">Salesforceの開発を行うときにベースとなるサンプルコードを探すことが多い…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="3440"
					data-ulike-nonce="9ffc579cb4"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_3440"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apexトリガー処理設計書（Excelテンプレート）</title>
		<link>https://creativecontentlabtokyo.com/apex-trigger-detail-process-design-excel-template/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 29 Jan 2022 09:14:30 +0000</pubDate>
				<category><![CDATA[テンプレート]]></category>
		<category><![CDATA[設計]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[トリガー]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=2638</guid>

					<description><![CDATA[Apexトリガーの処理設計書（基本設計書/詳細設計書）として利用できるエクセルの設計書テンプレートを用意いたしました。 Apexバッチ処理の設計書が必要な方はこ…]]></description>
										<content:encoded><![CDATA[<p>Apexトリガーの処理設計書（基本設計書/詳細設計書）として利用できるエクセルの設計書テンプレートを用意いたしました。</p>
<p>Apexバッチ処理の設計書が必要な方はこちらからどうぞ。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">参考</span><a href="https://creativecontentlabtokyo.com/apex-batch-process-basic-design-excel-template/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="169" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7-2048x1152.jpg 2048w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/11/eye-catching-picture-reading-7.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">バッチ処理設計書（Excelテンプレート）</div><div class="cclt-compat-card__excerpt">バッチ処理設計書（基本設計書/詳細設計書）として利用できるエクセルの設計書テンプ…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<h2>Apexトリガー処理設計書のサンプル</h2>
<h3>Apexトリガー処理書</h3>
<p>【処理概要シート】</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2642" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg" alt="" width="1920" height="939" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-300x147.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-1024x501.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-768x376.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-1536x751.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>【処理フロー図】</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2641" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg" alt="" width="1920" height="1033" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-300x161.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-1024x551.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-768x413.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-1536x826.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>&nbsp;</p>
<p>【入出力処理設計】</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2644" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg" alt="" width="1920" height="1065" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-300x166.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-1024x568.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-768x426.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-1536x852.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>【SOQLシート】</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2640" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg" alt="" width="1920" height="1138" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-1024x607.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-768x455.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-1536x910.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h2>テーラリングガイド</h2>
<p>【処理概要シート】</p>
<p>処理概要シートでは、トリガーの処理概要や前提条件などを記述します。</p>
<p>&nbsp;</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2642" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg" alt="" width="1920" height="939" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-300x147.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-1024x501.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-768x376.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要1-1536x751.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a> <a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2643" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2.jpg" alt="" width="1920" height="928" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2-300x145.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2-1024x495.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2-768x371.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-処理概要2-1536x742.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>主要項目</p>
<ul>
<li>本書の目的を記述する。</li>
<li>処理概要：トリガーの処理概要を記述する。</li>
<li>前提条件：トリガー起動の前提条件を記述する。</li>
<li>トリガー設定：トリガーとなるオブジェクト、トリガーのクラス構成、実行契機などを記述する。</li>
<li>オブジェクト構成：トリガーで利用するオブジェクトのCRUDを記述する。</li>
<li>異常終了時処理：異常終了時の処理概要を記述する。</li>
<li>リカバリ方法：例外など処理異常が発生した場合のリカバリー方針や手順を記述する。</li>
</ul>
<p>【処理フロー図】</p>
<p>処理フロー図を記述します。</p>
<p>詳細設計の場合には、プログラム記述レベルで条件分岐や詳細処理を記述するようにしましょう。</p>
<p>また例外処理の対応（Try-catch）についても忘れずに記載してください。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2641" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg" alt="" width="1920" height="1033" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-300x161.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-1024x551.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-768x413.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-概要処理フロー図-1536x826.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>&nbsp;</p>
<p>【入出力処理設計】</p>
<p>入出力設計では、トリガーの詳細処理説明と入出力（IN/OUT)、対象データ、利用するSOQLなどを記述します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2644" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg" alt="" width="1920" height="1065" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-300x166.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-1024x568.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-768x426.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-入出力詳細設計-1536x852.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<p>SOQLの列には、以下SOQLシートで定義したIDを記述します。</p>
<p>【SOQLシート】</p>
<p>SOQLについては、入出力処理設計に直接記載しても構いませんが、共通で利用するような場合もあるため、本テンプレートでは、別シートで管理しています。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2640" src="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg" alt="" width="1920" height="1138" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-1024x607.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-768x455.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2022/01/apex-trigger-detail-process-design-excel-template-SOQLシート-1536x910.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></a></p>
<h2>Apexトリガー処理設計書の（Excel版）のダウンロード</h2>
<p>資料のダウンロードおよびご利用に関しては、本サイトのコンテンツ利用規約に同意される場合のみ利用可能となります。</p>
<p><div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://creativecontentlabtokyo.com/terms/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#e53935;border:1px solid #e57373;border-radius:5px;font-weight:bold;background:linear-gradient(#f44336,#e53935);" target="_blank" rel="noopener noreferrer">ダウンロード前に利用規約を必ずお読みください。</a></div></p>
<h3>一般公開資料</h3>
<p>update 2022/04/17 直接エクセルファイルをダウンロードするリンクを追加</p>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#757575;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-external-link" style="color:#BDBDBD;"></span><div class="cclt-compat-cmemo__text">Apexトリガー処理設計書（Excel版）のダウンロードは<a href="https://docs.google.com/uc?export=download&amp;id=1CP788a7J7_BovHJMjIhYpBk6GRJ7drUz" rel="noopener">こちら</a></div></div></p>
<p>以下は、スプレッドシートでの表示となります。</p>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#757575;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-external-link" style="color:#BDBDBD;"></span><div class="cclt-compat-cmemo__text">Apexトリガー処理設計書（Excel版）のダウンロードは<a href="https://docs.google.com/spreadsheets/d/1CP788a7J7_BovHJMjIhYpBk6GRJ7drUz/view?usp=sharing&amp;ouid=101880259703005838182&amp;rtpof=true&amp;sd=true" rel="noopener">こちら</a></div></div></p>
<h2>関連記事</h2>
<p>他にも要件定義で必要となる以下のようなテンプレートなども用意しているのでぜひご利用ください。</p>
<p><div class="cclt-compat-card st-no-shadow cclt-compat-card--text"><span class="cclt-compat-card__label" style="background-color:#cccccc;color:#ffffff;">バッチ処理一覧/スケジュール表</span><a href="https://creativecontentlabtokyo.com/apex-batch-process-list-job-schdule-excel-template/" class="cclt-compat-card__link"><div class="cclt-compat-card__thumb"><img decoding="async" width="300" height="200" src="https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer-300x200.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer-300x200.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer-1024x683.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer-768x512.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer-1536x1024.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2021/10/eye-catching-picture-programmer.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">バッチ処理一覧（Excel版テンプレート）資料の説明とダウンロード</div><div class="cclt-compat-card__excerpt">Salesforceの要件定義や基本設計で利用するバッチ処理一覧とジョブスケジュ…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div></p>
<p><div class="cclt-compat-kaiwa cclt-compat-kaiwa--left"><div class="cclt-compat-kaiwa__icon"><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2024/11/schooldays1.jpg" alt="サポーターさん" loading="lazy" /><span class="cclt-compat-kaiwa__name">サポーターさん</span></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f4f4e3;"><div class="cclt-compat-kaiwa__text">ブログランキングに参加しましたので、ご支援していただけると幸いです。</div></div></div></p>
<p><a href="https://it.blogmura.com/ranking/in?p_cid=11084904" target="_blank" rel="noopener noreferrer"><img loading="lazy" decoding="async" src="https://b.blogmura.com/banner-blogmura-portfolio.svg" alt="にほんブログ村 IT技術ブログへ" width="88" height="31" border="0" /></a><br />
<a href="https://it.blogmura.com/ranking/in?p_cid=11084904" rel="noopener">にほんブログ村</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="2638"
					data-ulike-nonce="917fe33fdd"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_2638"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="+1"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Apexテストクラスのまとめ</title>
		<link>https://creativecontentlabtokyo.com/explain-about-apex-test-class-method/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sun, 09 Jan 2022 09:45:12 +0000</pubDate>
				<category><![CDATA[サンプルコード]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Sample]]></category>
		<category><![CDATA[TestClass]]></category>
		<category><![CDATA[testSetup]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=2256</guid>

					<description><![CDATA[本記事では、Apexのテストクラスに関する注意事項やサンプルコードなどを記載しています。 テストクラスの標準テンプレート テストクラスの標準テンプレート（サンプ…]]></description>
										<content:encoded><![CDATA[<p>本記事では、Apexのテストクラスに関する注意事項やサンプルコードなどを記載しています。</p>
<h2>テストクラスの標準テンプレート</h2>
<p>テストクラスの標準テンプレート（サンプル）</p>
<pre class=""><code class="language-apex code_break">/**--------------------------------------------------------------------------
* プログラム名 ：TestClassSample
* 概　要       ：xxxのテストクラス
* 作成日       ：yyyy.mm.dd
* 作成者       ：cclt
*--------------------------------------------------------------------------**/
@isTest(SeeAllData=false)
private class TestClassSample {
    
    static final String DEFAULT_STRING = 'テスト内固定文字列の定義';

    //testSetupアノテーションを使ってテストデータを生成
    @testSetup
    static void initTest(){
        TestDataFactory.createTestUsers('標準ユーザ');    
    }
    
    //テストメソッド
    //命名ルール（テストクラスのメソッド名_テストケースNO＿処理期待値）
    static void testClassMethodXX_TestCase1_GetUserInfo(){ 

        //テスト準備
        User runUser = TestDataFactory.createTestUsers('標準ユーザ'); 
    
        //テスト開始
        Test.startTest();
         
        //テスト実行ユーザを指定して実行する場合
        System.runAs(runUser){
            //test code
        }
         
        //テスト終了
        Test.stopTest();
         
        //テスト結果検証
        System.assert(true);
        System.assertEquals('xx' , 'xx');
    }
}
</code></pre>
<h2>テストデータ作成のユーティリティクラス（TestDataFactory.cls）サンプル</h2>
<p>テストで利用するユーザを作成する場合には、ユーザ名の命名に注意する必要があります。ご存じの通りSalesforceのユーザ名は全世界で一意の値とする必要があり、テストクラスでユーザを作成する場合も同様です。</p>
<p>毎回テストクラスを作成するたびに一意のユーザ名を命名するのは大変なので、ユーザ名を検証するようなプログラムでない限りは、ランダムに採番した値を利用する共通のテストクラスを用意しておくと便利です。</p>
<p>以下は、指定プロファイルのユーザを生成するメソッドを含むテストユーティリティクラスとなります。</p>
<pre class=""><code class="language-apex code_break">@isTest(SeeAllData=false)
public with sharing class TestDataFactory  {

    static final String DEFAULT_USER_PROFILE_NAME = '標準ユーザ';
    static final String DEFAULT_USER_DOMAIN_NAME = '@xxxtestorg.com';

    //プロファイル名を指定してランダムなユーザ名のUserレコードを作成
    public static User createTestUsers(String profileName) {    
    
    //ユーザプロファイル取得
    Profile profile = getProfile(profileName); 

    //AESキーを16進にして先頭8桁をuidとして定義
    Blob b = Crypto.GenerateAESKey(128);
    String hex = EncodingUtil.ConvertTohex(b);
    String uid = hex.SubString(0,8);

    User user = new User();
    user.Alias = uid;
    user.Email= uid + DEFAULT_USER_DOMAIN_NAME; 
    user.EmailEncodingKey='UTF-8';
    user.LastName=uid;
    user.LanguageLocaleKey='ja';
    user.LocaleSidKey='ja_JP';
    user.ProfileId = profile.Id;
    user.TimeZoneSidKey='Asia/Tokyo';
    user.UserName= uid + DEFAULT_USER_DOMAIN_NAME; 
    insert user;
    return user;
    }

    //プロファイルが未指定の場合デフォルトのプロファイルをセット
    public static Profile getProfile(String profileName){
        if( String.isBlank(profileName) ){
             profileName = DEFAULT_USER_PROFILE_NAME;
        }
        Profile profile = new Profile();
        profile = [ SELECT Id, Name FROM Profile WHERE Name = :profileName LIMIT 1];
        return profile;
    }
}
</code></pre>
<h4>実行結果</h4>
<p>以下のような簡単なテストクラスを作成して、testSetupからテスト用のユーザを作成した結果のデバッグログです。</p>
<pre class=""><code class="language-apex code_break">@isTest
private class MyTestClass {
    @testSetup
    static void initTest(){
        TestDataFactory.createTestUsers(null);
    }
}
</code></pre>
<p>以下、デバッグログ<br />
<div class="cclt-compat-mybox st-mybox-class" style="background-color:#ffffff;border:2px solid #ccc;border-radius:2px;margin:25px 0 25px 0;"><div class="cclt-compat-mybox__content"></p>
<p>|USER_DEBUG|[15]|DEBUG|:Blob:Blob[16]</p>
<p>|USER_DEBUG|[17]|DEBUG|:hex:feb46887a6b4124bf97aaea120ab8c9b</p>
<p>|USER_DEBUG|[19]|DEBUG|:uid:feb46887</p>
<p>|USER_DEBUG|[31]|DEBUG|:user:User:{Alias=feb46887, Email=feb46887@xxxtestorg.com, EmailEncodingKey=UTF-8, LastName=feb46887, LanguageLocaleKey=ja, LocaleSidKey=ja_JP, ProfileId=00e5h0000032ZSgAAM, TimeZoneSidKey=Asia/Tokyo, Username=feb46887@xxxtestorg.com, Id=0055h000004JDHEAA4}</p>
<p></div></div></p>
<h2>テストデータ作成時の注意事項</h2>
<h3>テストデータとして利用できる組織データ</h3>
<p>デフォルトでは、Apex テストメソッド (API バージョン 24.0 以降) は、標準オブジェクト、カスタムオブジェクト、カスタム設定データなどの既存の組織データにはアクセスできません。アクセスできるのは、テストメソッドが作成したデータのみです。ただし、組織またはメタデータオブジェクトの管理に使用する次のようなオブジェクトなどは、そのままテストでアクセスできます。</p>
<p>以下については、<span class="huto">テストデータを作成しなくてもテスト実行組織に登録されているデータを参照して利用することができます</span>。</p>
<ul id="TestDataAccessDef2" class="ul bulletList">
<li class="li">User</li>
<li class="li">Profile</li>
<li class="li">Organization</li>
<li class="li">CronTrigger</li>
<li class="li">RecordType</li>
<li class="li">ApexClass</li>
<li class="li">ApexTrigger</li>
<li class="li">ApexComponent</li>
<li class="li">ApexPage</li>
</ul>
<p>ただし組織のデータを利用するとテスト実行時の状況によってテスト結果に影響を及ぼしてしまうため、可能な限りテストデータはテストクラス、メソッド毎に用意することが推奨されています。</p>
<h2>テストクラスで利用可能な＠アノテーション</h2>
<p>テストクラスで利用可能なアノテーションについて説明します。</p>
<h3>@testSetup</h3>
<p>テスト設定メソッドであるtestSetupアノテーションを利用したメソッドは、テストの最初に実行されます。注意事項は以下の通り。</p>
<blockquote><p><span style="color: #333399;">テスト設定メソッドで作成されたレコードは、テストクラス内のすべてのテストメソッドで使用でき、テストクラス実行終了時にロールバックされます。レコード項目の更新やレコード削除など、テストメソッドがこれらのレコードを変更した場合、その変更は、各テストメソッドの実行終了後にロールバックされます。次に実行されるテストメソッドは、元の変更されていない状態のレコードにアクセスできます</span>。</p>
<p><span style="color: #333399;">テスト設定メソッドは、テストクラスのデフォルトのデータ分離モードでのみサポートされます。テストクラスまたはテストメソッドが <samp class="codeph apex_code"><span class="keyword">@isTest(SeeAllData=true)</span></samp> アノテーションを使用することで組織データにアクセスできる場合、そのクラスではテスト設定メソッドはサポートされません。テストのためのデータ分離を使用できるのは API バージョン 24.0 以降であるため、テスト設定メソッドを使用できるのもこれらのバージョンのみです</span>。</p>
<p>出典：Salesforce公式Apex開発者ガイド「<a href="https://developer.salesforce.com/docs/atlas.ja-jp.218.0.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm" rel="noopener">TestSetup アノテーション</a>」より</p></blockquote>
<p>【構文例】</p>
<pre class=""><code class="language-apex code_break">@isTest
private class MyTestClass {
    @testSetup
    static void initTest(){
        TestDataFactory.createTestUsers(null);
    }
}</code></pre>
<h3>@TestVisible</h3>
<p>TestVisibleアノテーションを使用すると、テストクラスでないクラスのprivae非公開メンバーまたは保護メンバーにテストメソッドからアクセスすることができるようになります。注意事項は以下の通り。</p>
<p>【構文例】</p>
<pre class=""><code class="language-apex code_break">@isTest
public class TestVisibleMethodSample {
    // 非公開のメンバー変数
    @TestVisible private static String prefix = 'Prefix';

    // 非公開のメソッド
    @TestVisible 
    private static void updateAccount(String name) {
        //処理コード
    }
}</code></pre>
<p>（テストクラスからの呼び出し）</p>
<pre class=""><code class="language-apex code_break">@isTest
private class TestVisibleMethodTest {
    @isTest static void case_doUpdateAccount_fail() {

        // TestVisibleアノテーションのメンバーにアクセスする
        String prefix = TestVisibleMethodSample.prefix;
        System.assertEquals('Prefix', prefix);

        // TestVisibleアノテーションのメソッドにアクセスする
        TestVisibleMethodSample.updateAccount(prefix);
    }
}</code></pre>
<h2>テスト関連トピック</h2>
<h3>指定ユーザでテストを実行する</h3>
<p>System.runAs(uid)メソッドを利用することで、uidで指定されてユーザの権限でテストを実行することが可能。詳細は以下参照。</p>
<pre class=""><code class="language-apex code_break">//テスト実行ユーザを指定して実行する場合　※uidにユーザのIDを指定
System.runAs(uid){
   //test code
}
</code></pre>
<p><div class="cclt-compat-cmemo" style="background-color:#fafafa;color:#757575;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#BDBDBD;"></span><div class="cclt-compat-cmemo__text">Salesforce公式　Apex開発者ガイド「<a href="https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_testing_tools_runas.htm" rel="noopener">runAs メソッドの使用</a>」</div></div></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_restricted"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="2256"
					data-ulike-nonce="37f1aacd3d"
					data-ulike-type="post"
					data-ulike-template="wpulike-animated-heart"
					data-ulike-display-likers=""
					data-ulike-likers-style="popover"
					data-ulike-append="&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop one&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop two&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop three&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop four&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop five&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop six&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop seven&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop eight&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;&lt;svg class=&quot;wpulike-svg-heart wpulike-svg-heart-pop nine&quot; viewBox=&quot;0 0 32 29.6&quot;&gt;&lt;path d=&quot;M23.6,0c-3.4,0-6.3,2.7-7.6,5.6C14.7,2.7,11.8,0,8.4,0C3.8,0,0,3.8,0,8.4c0,9.4,9.5,11.9,16,21.2c6.1-9.3,16-12.1,16-21.2C32,3.8,28.2,0,23.6,0z&quot;/&gt;&lt;/svg&gt;"
					class="wp_ulike_btn wp_ulike_put_image wp_post_btn_2256"><svg class="wpulike-svg-heart wpulike-svg-heart-icon" viewBox="0 -28 512.00002 512" xmlns="http://www.w3.org/2000/svg"><path
						d="m471.382812 44.578125c-26.503906-28.746094-62.871093-44.578125-102.410156-44.578125-29.554687 0-56.621094 9.34375-80.449218 27.769531-12.023438 9.300781-22.917969 20.679688-32.523438 33.960938-9.601562-13.277344-20.5-24.660157-32.527344-33.960938-23.824218-18.425781-50.890625-27.769531-80.445312-27.769531-39.539063 0-75.910156 15.832031-102.414063 44.578125-26.1875 28.410156-40.613281 67.222656-40.613281 109.292969 0 43.300781 16.136719 82.9375 50.78125 124.742187 30.992188 37.394531 75.535156 75.355469 127.117188 119.3125 17.613281 15.011719 37.578124 32.027344 58.308593 50.152344 5.476563 4.796875 12.503907 7.4375 19.792969 7.4375 7.285156 0 14.316406-2.640625 19.785156-7.429687 20.730469-18.128907 40.707032-35.152344 58.328125-50.171876 51.574219-43.949218 96.117188-81.90625 127.109375-119.304687 34.644532-41.800781 50.777344-81.4375 50.777344-124.742187 0-42.066407-14.425781-80.878907-40.617188-109.289063zm0 0" /></svg></button><span class="count-box wp_ulike_counter_up" data-ulike-counter-value="0"></span>			</div></div>
	]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
