<?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>AI開発実践ラボ</title>
	<atom:link href="https://creativecontentlabtokyo.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://creativecontentlabtokyo.com</link>
	<description>AIで、作る力を手に入れる。</description>
	<lastBuildDate>Fri, 08 May 2026 17:42:32 +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>CloudFormGenerator 入門｜SalesforceネイティブでWordテンプレをそのままPDF出力する帳票ジェネレーター</title>
		<link>https://creativecontentlabtokyo.com/sf-cloudformgenerator-intro/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Fri, 08 May 2026 17:42:32 +0000</pubDate>
				<category><![CDATA[デリバリーメソッド]]></category>
		<category><![CDATA[LWC]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[帳票自動化]]></category>
		<category><![CDATA[業務効率化]]></category>
		<category><![CDATA[見積書]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/sf-cloudformgenerator-intro/</guid>

					<description><![CDATA[見積書を発行するたびに、Wordファイルをコピペして数字を手で打ち直していませんか？「商談情報はSalesforceに全部あるのに、なぜ帳票だけ別管理なの？」—…]]></description>
										<content:encoded><![CDATA[<p>見積書を発行するたびに、Wordファイルをコピペして数字を手で打ち直していませんか？「商談情報はSalesforceに全部あるのに、なぜ帳票だけ別管理なの？」——この矛盾が、Salesforce導入済みの中小企業に根深く残っています。</p>
<p>この問題を解決するために開発したのが、<strong>CloudFormGenerator（帳票ジェネレータ）</strong>です。Salesforceネイティブの帳票生成ツールで、社内で長年使ってきたWordテンプレをそのまま活かしながら、商談レコードから1クリックで見積書・請求書・契約書をPDF出力できます。</p>
<p>この記事では、CloudFormGeneratorの全機能と、競合製品との差別化ポイントを解説します。</p>
<hr>
<h2>Salesforce帳票業務の3つの無駄</h2>
<p>Salesforceを導入しても、帳票業務だけ「昔ながらの手作業」が残り続けるのには理由があります。</p>
<p><strong>転記ミスと二重管理。</strong> 商談の金額・顧客名・担当者をSalesforceに入力した後、同じデータをWordファイルにも手で転記します。このダブルエントリーは入力ミスの温床です。</p>
<p><strong>テンプレートの属人化。</strong> 「最新の見積書フォーマット、誰が持ってるんだっけ？」問題です。担当者のPCにばらばらに保存されたWordファイルは、会社の書式が変わるたびに全員への配布作業が発生し、バージョン管理が崩壊します。</p>
<p><strong>IT部門への依存。</strong> 既存の帳票ツールの多くは、WordファイルへのAPIタグ直接記述方式です。業務担当者がWordを開いてコードを書くのは現実的ではなく、テンプレートを変えるたびにIT担当者や外部SIerへの依頼が必要になります。「書式を少し変えたいだけで1ヶ月待ち」という状況が生まれます。</p>
<hr>
<h2>CloudFormGeneratorとは</h2>
<p>CloudFormGeneratorは「SalesforceのデータをそのままPDF帳票にする」に特化したSalesforceネイティブのソリューションです。LWC（Lightning Web Component）とApexのみで構成しており、外部サーバーへのデータ送信は一切不要。Salesforceのシェアリングルール・FLS（項目レベルセキュリティ）がそのまま適用されます。</p>
<p>商談レコードの「帳票出力」ボタンをクリックするだけで、Salesforceに登録済みの顧客名・商品明細・金額・担当者が帳票テンプレートに自動で流し込まれ、PDFとしてダウンロードおよびレコードへの添付ができます。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/05_record-page-button.png" alt="商談レコードの帳票出力ボタン" loading="lazy"><figcaption>商談レコード上部の「帳票出力」ボタンから操作。Salesforceを離れずに帳票が完結する。</figcaption></figure>
<hr>
<h2>主要競合製品と徹底比較</h2>
<p>Salesforce向け帳票ツールの市場には複数の製品（以下、製品A〜Cとします）があります。機能の豊富さには定評がある半面、中小企業での導入にはいくつかの課題があります。</p>
<p><strong>価格の壁。</strong> 製品A（海外系）は10ユーザー想定で月額約¥35,000、製品B（海外系）は約¥28,000、製品C（国内系）は¥30,000〜100,000と、中小企業にとって重い固定費です。CloudFormGeneratorは月額<strong>¥19,800</strong>（税別・出力件数無制限）。個人開発の低コスト構造により、競合製品を下回る価格帯での提供が可能です。</p>
<p><strong>設定の複雑さ。</strong> 製品A・製品B系は「WordファイルへのAPIタグ直接記述」方式です。<code>{{OpportunityName}}</code>のようなタグをWord上に手書きする必要があり、設定に必ずIT担当者が介在します。CloudFormGeneratorはビジュアルなマッピング画面で、業務担当者がドロップダウンで項目を選ぶだけで設定できます。</p>
<p><strong>Salesforceネイティブかどうか。</strong> 製品A・製品BはSalesforceとの連携に外部API接続が必要です。OAuthトークン管理・エンドポイント設定・セキュリティポリシーの承認など、導入にひと手間かかります。CloudFormGeneratorはSalesforce内で完結するため、情報システム部門の承認を得やすいのも特長です。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/sf-form-generator-architecture.png" alt="CloudFormGenerator システム構成図" loading="lazy"><figcaption>外部サーバー依存なし。LWC+Apexのみで完結するSalesforceネイティブ構成。</figcaption></figure>
<table>
<thead>
<tr>
<th>製品</th>
<th>月額（10U想定）</th>
<th>設定方式</th>
<th>Salesforceネイティブ</th>
<th>印鑑対応</th>
</tr>
</thead>
<tbody>
<tr>
<td>製品A（海外系）</td>
<td>¥35,000〜</td>
<td>Wordタグ直接記述（IT必須）</td>
<td><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;" /> 外部API</td>
<td><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;" /></td>
</tr>
<tr>
<td>製品B（海外系）</td>
<td>¥28,000〜</td>
<td>Wordタグ直接記述（IT必須）</td>
<td><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;" /> 外部API</td>
<td><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;" /></td>
</tr>
<tr>
<td>製品C（国内系）</td>
<td>¥30,000〜</td>
<td>専用エディタ</td>
<td><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;" /> 外部サーバー</td>
<td>△</td>
</tr>
<tr>
<td><strong>CloudFormGenerator</strong></td>
<td><strong>¥19,800（税別）</strong></td>
<td><strong>ビジュアルマッピング（ノーコード）</strong></td>
<td><strong><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;" /> LWC+Apex完結</strong></td>
<td><strong><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;" /> SVG自動生成</strong></td>
</tr>
</tbody>
</table>
<hr>
<h2>5つの差別化ポイント</h2>
<h3>1. 既存WordテンプレをそのままアップロードするだけでOK</h3>
<p>CloudFormGeneratorの最大の特長は、社内で長年使ってきた.docxファイルをそのまま流用できる点です。「ファイルをドロップ」するだけで、テンプレート内の<code>{{顧客名}}</code>や<code>{{合計金額}}</code>といったプレースホルダーを自動検出します。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/02_upload-docx.png" alt="Wordファイルアップロード後の解析完了画面" loading="lazy"><figcaption>「解析完了 — 9件のプレースホルダーを抽出しました」。既存Wordテンプレをアップロードするだけで変数を自動認識する。</figcaption></figure>
<p>会社の書式・フォント・印鑑欄のレイアウト・ロゴ配置はそのまま。「新しいフォーマットに作り直す手間」がありません。白紙から作る場合は「白紙から作成（ページサイズを選択）」モードも選べます。</p>
<h3>2. 直感的なマッピング設定 — ドリルダウンで5階層まで辿れる</h3>
<p>プレースホルダーとSalesforce項目の対応付けは、ドロップダウンで項目を選ぶだけです。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/04_mapping-list.png" alt="マッピング設定画面" loading="lazy"><figcaption>プレースホルダーとSalesforce項目を視覚的に対応付け。フォーマット列で通貨（¥#,##0）・日付（yyyy年MM月dd日）をワンクリック設定できる。</figcaption></figure>
<p><code>{{顧客名}}</code> → <code>Account.Name</code>、<code>{{合計金額}}</code> → <code>Amount</code>（通貨フォーマット：¥#,##0）のように直感的に設定できます。親子リレーションは5階層まで辿れるドリルダウン方式で、<code>Opportunity → Account → Owner.Name</code>のような深い参照も設定可能です。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/04_mapping-drilldown.png" alt="マッピング ドリルダウン選択" loading="lazy"><figcaption>「<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25b6.png" alt="▶" class="wp-smiley" style="height: 1em; max-height: 1em;" />」をクリックすると親子オブジェクトを辿るドリルダウン選択に切り替わる。標準・カスタムオブジェクトを問わず5階層まで対応。</figcaption></figure>
<h3>3. WYSIWYGレイアウトエディタ — 印鑑・明細テーブルを自由配置</h3>
<p>白紙からテンプレートを作る場合や、既存テンプレートのレイアウトを変更する場合は、3カラム構成の全画面エディタを使います。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/03_editor-overview.png" alt="レイアウトエディタ全体" loading="lazy"><figcaption>左：要素パネル / 中央：帳票キャンバス / 右：プロパティパネル。要素をドラッグ＆ドロップで配置し、リアルタイムでレイアウトを確認できる。</figcaption></figure>
<p>追加できる要素は以下の通りです：</p>
<ul>
<li>固定文字列・セクション見出し・区切り線</li>
<li>ラベル＋値（Salesforce項目の差し込み）</li>
<li>明細テーブル（子レコードを自動展開、ページをまたいでもヘッダーが繰り返し表示、奇数行・偶数行に個別背景色を設定可能）</li>
<li>固定テーブル（静的な表、行を自由に追加・削除）</li>
<li>今日の日付・ページ番号</li>
<li>印鑑（画像印鑑 / テキストからSVG自動生成の文字印鑑）</li>
<li>バーコード / QRコード（6種類対応：Code128・JAN-13・JAN-8・Code39・NW-7・ITF-14。Salesforce項目の値をそのままコード化して帳票に印字）</li>
</ul>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/03_editor-barcode-element.png" alt="バーコード/QRコード要素の設定" loading="lazy"><figcaption>バーコード/QRコード要素を選択した状態。右パネルで差し込むSalesforce項目（URL・管理番号等）とコードタイプを設定できる。</figcaption></figure>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/09_barcode-types.png" alt="対応バーコード6種類" loading="lazy"><figcaption>Code128・JAN-13・JAN-8・Code39・NW-7・ITF-14の6種類に対応。物流・小売・製造の各業種で使われる主要フォーマットをカバーしている。</figcaption></figure>
<p>明細テーブルでは<code>{{CALC(SUM(Row.金額) * 0.1)}}</code>のような計算式で消費税の自動計算にも対応しています。奇数行・偶数行に別々の背景色を設定するゼブラストライプも標準で設定可能で、行数が多い明細表の視認性を高めます。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/08_output-pdf-table-color.png" alt="明細テーブルゼブラストライプ" loading="lazy"><figcaption>奇数行・偶数行にそれぞれ背景色を設定したゼブラストライプの出力例。行数が多い明細でも視認性が高い。</figcaption></figure>
<p>エディタ内の「プレビュー」ボタンで、実際のSalesforceデータを反映した帳票の仕上がりをリアルタイムで確認できます。</p>
<h3>4. 日本市場特化の印鑑機能</h3>
<p>日本企業の帳票に欠かせない「印鑑」に正式対応しています。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/06_stamp-canvas-text.png" alt="印鑑マスタ — テキスト印鑑のSVG生成" loading="lazy"><figcaption>「やまだ」と入力するだけで、縦書き・横書き対応の丸印鑑SVGをリアルタイム生成。手書きモードでは直接キャンバスに描画することも可能。</figcaption></figure>
<p>印鑑マスタで社印・個人印を登録し、テンプレートに配置するだけで、出力PDFに印鑑が自動で入ります。手書きモードではタブレットやマウスで直接描画した印影を登録することも可能です。</p>
<h3>5. PDF出力 — 標準版と大容量対応VF版の2択</h3>
<p>出力形式はPDF一択で2種類を用意しています。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/05_output-modal.png" alt="帳票出力モーダル" loading="lazy"><figcaption>「PDF（標準）」と「PDF（大容量対応・VF版）」の2択。ヒープ6MB制限を超える大きな帳票はVF版で出力可能。添付ファイルとしてレコードに保存するかも選択できる。</figcaption></figure>
<p><strong>PDF（標準）</strong>は通常の帳票に使用します。<strong>PDF（大容量対応・VF版）</strong>は明細行が多い・画像が大きいなど、Apex処理のヒープサイズ6MB制限を超えるケースに対応しています。出力後はSalesforceのメモ＆添付ファイルに自動保存されます。</p>
<h4>フォントの選択肢と出力方式ごとの注意事項</h4>
<p>レイアウトエディタでは、テンプレート全体の既定フォントと各要素個別のフォントを2階層で指定できます。</p>
<table>
<thead>
<tr>
<th>用途</th>
<th>推奨フォント</th>
</tr>
</thead>
<tbody>
<tr>
<td>日本語帳票（PDF標準・VF版 両対応）</td>
<td>ゴシック（標準）= Arial Unicode MS</td>
</tr>
<tr>
<td>日本語帳票（PDF標準のみ使用）</td>
<td>メイリオ、游ゴシック</td>
</tr>
<tr>
<td>公式文書・契約書</td>
<td>游明朝、MS P明朝</td>
</tr>
<tr>
<td>英数字ラベル・フッタ</td>
<td>欧文（サンセリフ）= Arial</td>
</tr>
</tbody>
</table>
<p><strong>PDF（標準）はフォント制限なし。</strong>ブラウザのChromiumエンジンでPDFを生成するため、OSにインストール済みの日本語フォント（メイリオ・游ゴシック・游明朝等）をすべて使用できます。</p>
<p><strong>PDF（大容量VF版）はArial Unicode Msのみ。</strong>SalesforceサーバーサイドのFlying Saucerエンジンで処理するため、使用できるフォントは「ゴシック（標準）= Arial Unicode MS」のみです。大容量対応が必要な帳票でフォントのバリエーションが必要な場合は、テンプレートをPDF（標準）で出力できるサイズに収めることをご検討ください。</p>
<hr>
<h2>帳票出力のフロー — 操作3ステップで完結</h2>
<p>実際の操作は非常にシンプルです。</p>
<p><strong>Step 1</strong>: レコードページの「帳票出力」ボタンをクリック</p>
<p><strong>Step 2</strong>: テンプレートを選択し、PDF標準 or VF版を選択。「このレコードにファイルを添付する」チェックボックスで自動保存も設定可能</p>
<p><strong>Step 3</strong>: 「プレビュー」で確認後、「出力」ボタンでPDFをダウンロード</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/05_output-preview.png" alt="帳票プレビュー画面" loading="lazy"><figcaption>出力前のリアルタイムプレビュー。実際のSalesforceデータが帳票に流し込まれた状態を確認できる。</figcaption></figure>
<p>出力完了後はメモ＆添付ファイルにPDFが自動保存されます。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/05_output-file-attachedpng.png" alt="ファイル添付完了" loading="lazy"><figcaption>「メモ &#038; 添付ファイル(1)」にPDFが自動保存される。ファイル管理の手間がゼロ。</figcaption></figure>
<hr>
<h2>備考の表示位置も自在にコントロール</h2>
<p>備考・注意事項の表示位置を帳票テンプレートごとに設定できます。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/07_output-pdf-remarks-last.png" alt="備考・最終ページ固定" loading="lazy"><figcaption>備考・最終ページ固定パターン：明細行数に関わらず、備考・特記事項を常に最終ページの末尾に固定表示。印刷体裁を整えたい帳票に最適。</figcaption></figure>
<p>ページをまたぐ大量明細の帳票でも、備考や注意事項を「必ず最終ページに表示する」設定が可能です。ページ数が変動する帳票で「備考が途中のページに出てしまう」問題を解消します。</p>
<hr>
<h2>出力帳票サンプル</h2>
<p>実際に出力したPDFの品質を確認してください。</p>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/07_output-pdf.png" alt="御見積書 出力サンプル" loading="lazy"><figcaption>御見積書の出力例（3ページ中の1ページ目）。顧客名・確認済印鑑・見積合計・バーコード/QRコードが自動差し込みされ、商品明細が続く。</figcaption></figure>
<figure><img decoding="async" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/05/07_output-pdf-multipage1-2-3.png" alt="明細改頁パターン — 最終ページ" loading="lazy"><figcaption>明細行が多い場合の改頁サンプル（3ページ構成の最終ページ）。ページをまたいでも明細テーブルのヘッダーが自動繰り返しされ、最終ページに合計行が正しく収まる。</figcaption></figure>
<hr>
<h2>こんな組織・担当者におすすめ</h2>
<ul>
<li><strong>中小企業の経理・営業事務</strong> — 見積書・請求書を月50〜500件発行している。ExcelやWordのコピペ作業に限界を感じている</li>
<li><strong>Salesforce管理者</strong> — 開発者なしで帳票テンプレートを運用したい。IT部門への依頼なしに業務担当者が自分で管理できる体制を作りたい</li>
<li><strong>製造業・IT企業のシステム担当</strong> — 印鑑・日本語フォント対応が必要。既存の会社フォーマットをそのまま活かしたい</li>
<li><strong>Salesforce DX推進担当</strong> — 「入力はSalesforceに統一したのに、帳票だけ別管理」という矛盾を解消したい</li>
</ul>
<hr>
<h2>まとめ</h2>
<ul>
<li><strong>既存WordテンプレをそのままPDF帳票に</strong> — アップロードするだけでプレースホルダーを自動検出。書式・印鑑欄の作り直し不要</li>
<li><strong>ビジュアルマッピングでノーコード設定</strong> — IT部門への依頼なし。業務担当者が自分でテンプレートを管理できる</li>
<li><strong>競合製品より低価格</strong> — 月¥19,800（税別・出力件数無制限）。ユーザー数課金なし、固定費で予算管理しやすい</li>
<li><strong>Salesforceネイティブで追加サーバー不要</strong> — 外部API接続なし、セキュリティポリシーをそのまま維持</li>
<li><strong>日本市場特化の印鑑機能</strong> — テキスト入力・手書き両対応のSVG印鑑を標準搭載</li>
</ul>
<p>帳票業務の「Salesforceにデータがあるのに手作業」という矛盾を解消する一手として、ぜひCloudFormGeneratorをお試しください。</p>
<p><a href="https://creativecontentlabtokyo.com/form-generator/">CloudFormGenerator 評価版インストール手順はこちら →</a></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5887"
					data-ulike-nonce="8e67b80bd7"
					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_5887"><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が遅い？ speedtest.jspで原因を特定する方法</title>
		<link>https://creativecontentlabtokyo.com/salesforce-speedtest-jsp-guide/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 06:44:27 +0000</pubDate>
				<category><![CDATA[デリバリーメソッド]]></category>
		<category><![CDATA[Lightning Experience]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[パフォーマンス]]></category>
		<category><![CDATA[管理者向け]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/salesforce-speedtest-jsp-guide/</guid>

					<description><![CDATA[Salesforceが遅いときに使えるspeedtest.jspの全9項目を解説。推奨値・対策・用語解説付き。VPN・VDI環境の落とし穴も。]]></description>
										<content:encoded><![CDATA[<p>「Salesforceの画面遷移が遅い」「Lightning Experienceの読み込みに時間がかかる」——こんな相談を受けたとき、最初に確認すべきツールが <strong>speedtest.jsp</strong> です。Salesforceに標準で搭載されている性能診断ツールで、端末性能・ネットワーク・サーバー状況を一画面で確認できます。</p>
<p>この記事では、speedtest.jspで測定できる全9項目について、推奨値・判断基準・具体的な対策を解説します。</p>
<h2 id="speedtest.jspとは-アクセス方法">speedtest.jspとは — アクセス方法</h2>
<p>speedtest.jspは、Salesforceが標準で提供するクライアントサイドの性能診断ツールです。設定メニューにはリンクがないため「隠れ機能」と呼ばれることもありますが、どのSalesforce組織でも利用できます。</p>
<p><strong>アクセス方法：</strong> Salesforceにログインした状態で、URLを以下に書き換えるだけです。</p>
<pre><code>https://[あなたのドメイン].lightning.force.com/speedtest.jsp</code></pre>
<p>ページが開いたら「Test Speed」ボタンをクリックすると、数十秒で全項目の測定が完了します。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/salesforce-speedtest-jsp-guide-eyecatch.png"><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-5855" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/salesforce-speedtest-jsp-guide-eyecatch.png" alt="" width="1046" height="591" /></a></p>
<h2 id="端末性能の指標-octane-scorehardware-coresframe-rate">端末性能の指標 — Octane Score・Hardware Cores・Frame Rate</h2>
<h3 id="octane-score-javascript実行性能">1. Octane Score — JavaScript実行性能</h3>
<p><a href="https://chromium.github.io/octane/" rel="noopener">Google Octane 2.0</a> ベンチマークで、ブラウザのJavaScript実行速度を数値化したスコアです。</p>
<p>Lightning Experience（Salesforceの現行UI）はクライアント側のJavaScript処理に大きく依存しているため、この値がページの読み込み速度に直結します。<a href="https://trailhead.salesforce.com/content/learn/modules/lightning-experience-performance-optimization/optimize-lightning-experience-performance" rel="noopener">Salesforce公式のTrailhead</a>でも、Octane Scoreがパフォーマンスの最重要指標として紹介されています。</p>
<p>Salesforceは独自のパフォーマンス指標として <strong>EPT（Experience Page Time）</strong> を採用しており、ページの知覚的な読み込み完了時間を計測しています。Octane Scoreが低い端末では、このEPTが大幅に悪化します。AuraフレームワークからLWC（Lightning Web Components）への移行によりレンダリング効率が2〜60%改善された実績がありますが、それでもクライアント側のJS実行性能が基盤であることに変わりありません。</p>
<p><strong>用語解説：</strong> 「ベンチマーク」とは、ハードウェアやソフトウェアの性能を統一基準で測定するテストのことです。Octane 2.0はGoogleが開発したJavaScriptベンチマークで、21種類のテストを実行してスコアを算出します。</p>
<p><strong>補足：</strong> Octane 2.0は <strong>2017年4月にGoogleが正式に非推奨（Retired）としています。</strong> 廃止の理由は「ブラウザベンダーがスコアを不正に最適化できる問題」と「現代のJavaScript利用パターンを反映していない」こと。後継ベンチマークとしてGoogleは <a href="https://browserbench.org/Speedometer3.0/" rel="noopener">Speedometer</a> を推奨しています。ただし、Salesforceのspeedtest.jspでは現在もOctane Scoreを参考指標として採用しているため、Salesforce環境の診断においては依然として有用な指標です。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>Octane Score</th>
</tr>
</thead>
<tbody>
<tr>
<td>最低要件（Lightning一般）</td>
<td>15,000以上</td>
</tr>
<tr>
<td>最低要件（コンソールアプリ）</td>
<td>20,000以上</td>
</tr>
<tr>
<td>推奨値</td>
<td>30,000以上</td>
</tr>
<tr>
<td>ハイエンドデバイス</td>
<td>32,000〜40,000以上</td>
</tr>
</tbody>
</table>
<p><a href="https://help.salesforce.com/s/articleView?id=sf.technical_requirements.htm&amp;language=en_US&amp;type=5" rel="noopener">Salesforce公式ドキュメント</a>によると、最低要件の環境では推奨スペックと比較して<strong>ページロード時間が約50%遅くなる</strong>とされています。</p>
<p><strong>対策：</strong> &#8211; ノートPCは<strong>電源に接続する</strong>（バッテリー駆動だと省電力モードでCPU速度が低下する） &#8211; 不要な<strong>ブラウザ拡張機能を削除</strong>する（各拡張機能がJavaScriptリソースを消費する） &#8211; 他のアプリケーションを閉じてCPU/メモリリソースを確保する &#8211; VDI（仮想デスクトップ基盤）環境では、ユーザー密度の見直しやCPU世代の新しいサーバーへの移行が有効</p>
<h3 id="hardware-cores-cpuコア数">2. Hardware Cores — CPUコア数</h3>
<p>端末のCPUコア数（論理プロセッサ数）を表示します。</p>
<p><strong>用語解説：</strong> 「コア」はCPU内部の処理ユニットです。コア数が多いほど同時に処理できるタスクが増えます。「論理プロセッサ」はHyper-Threadingなどの技術で1つの物理コアを2つに見せる仕組みです。8コアと表示されても、物理的には4コア+Hyper-Threadingの場合があります。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>コア数</th>
</tr>
</thead>
<tbody>
<tr>
<td>最低要件</td>
<td>4コア以上</td>
</tr>
<tr>
<td>推奨</td>
<td>8コア（十分）</td>
</tr>
</tbody>
</table>
<p>VDI環境では共有CPUにより実効コア数が少なくなるため、1セッションあたりの割当vCPU数をモニタリングすることが重要です。</p>
<h3 id="frame-rate-描画性能">3. Frame Rate — 描画性能</h3>
<p>ブラウザのレンダリング性能をfps（frames per second：1秒あたりのフレーム数）で測定します。UIのアニメーション・ドラッグ操作・スクロールの滑らかさに影響します。</p>
<p><strong>用語解説：</strong> 「fps」は映像の滑らかさを表す単位です。映画は24fps、一般的なモニターは60fpsで表示しています。Webアプリでは、60fpsを維持できていればユーザーはストレスを感じません。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>fps</th>
</tr>
</thead>
<tbody>
<tr>
<td>ストレスを感じる</td>
<td>15fps以下</td>
</tr>
<tr>
<td>推奨値</td>
<td>30fps以上</td>
</tr>
<tr>
<td>快適な操作</td>
<td>60fps</td>
</tr>
</tbody>
</table>
<p><strong>対策：</strong> &#8211; ブラウザの<strong>GPUアクセラレーションが有効</strong>か確認する（Chrome: <code>chrome://gpu</code> にアクセス） &#8211; 重いVisualforceページやiframeの埋め込みを減らす &#8211; GPUが統合グラフィックス（Intel UHD Graphics等）の場合、ディスクリートGPU搭載機への更新を検討する</p>
<p><strong>用語解説：</strong> 「GPUアクセラレーション」とは、通常CPUが行う画面描画処理をGPU（画像処理専用チップ）に委任して高速化する技術です。ブラウザの設定で無効になっていると、フレームレートが大幅に低下します。</p>
<h2 id="ネットワーク性能の指標-latencydownloadupload-speed">ネットワーク性能の指標 — Latency・Download/Upload Speed</h2>
<h3 id="latency-ネットワーク遅延">4. Latency — ネットワーク遅延</h3>
<p>端末からSalesforceサーバーまでの<strong>往復遅延時間（RTT：Round Trip Time）</strong> です。ボタンクリックから画面が反応するまでの「もたつき」に直結します。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>Latency</th>
</tr>
</thead>
<tbody>
<tr>
<td>快適</td>
<td>100ms以下</td>
</tr>
<tr>
<td>推奨値</td>
<td>150ms以下</td>
</tr>
<tr>
<td>最低要件</td>
<td>200ms以下</td>
</tr>
<tr>
<td>日本→AP（東京）インスタンス</td>
<td>通常 20〜80ms</td>
</tr>
<tr>
<td>日本→NA（北米）インスタンス</td>
<td>150〜300ms</td>
</tr>
</tbody>
</table>
<p>Salesforceの組織（Org）は、AP（アジア太平洋）、NA（北米）、EU（ヨーロッパ）などの<a href="https://www.simplysfdc.com/2020/01/salesforce-lightning-performance.html" rel="noopener">インスタンス</a>に紐づく物理データセンターでホストされています。ユーザーがデータセンターに近いほどレイテンシが低くなります。</p>
<p><strong>用語解説：</strong> 「インスタンス」とは、Salesforceが世界各地に配置しているサーバー群の識別名です。AP26なら東京リージョン、NA135なら北米リージョンに配置されています。自分のOrgのインスタンスは「設定 &gt; 組織情報」で確認できます。</p>
<p><strong>対策：</strong> &#8211; VPN経由のアクセスでルーティングが遠回りになっていないか確認する &#8211; <a href="https://developer.salesforce.com/docs/platform/lwc/guide/perf-cdn.html" rel="noopener">Salesforce CDN</a>を活用して静的コンテンツの初回ロードを高速化する</p>
<p><strong>用語解説：</strong> SalesforceはLightning Componentフレームワークの静的コンテンツ（JavaScript・CSS・画像等）の配信に <strong>Akamai CDN</strong> を使用しています。CDNにより、静的アセットがユーザーに最も近いエッジサーバーからキャッシュ配信されるため、初回ロードが高速化されます。なお、Experience Cloud（コミュニティサイト）はAkamai、Commerce CloudのLWRサイトはCloudflareと、製品ごとにCDNが使い分けられています。 &#8211; ネットワーク管理者に <code>traceroute</code> で経路を解析してもらう &#8211; 日本のユーザーが多い場合は、APxx（東京）インスタンスでの運用が理想</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis.png"><img decoding="async" class="alignnone size-full wp-image-5858" src="https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis.png" alt="" width="1456" height="720" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis.png 1456w, https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis-300x148.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis-1024x506.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2026/04/network-latency-analysis-768x380.png 768w" sizes="(max-width: 1456px) 100vw, 1456px" /></a></p>
<h3 id="download-speed-ダウンロード速度">5. Download Speed — ダウンロード速度</h3>
<p>Salesforceサーバーからのデータ受信速度です。ページの初回読み込み、レポート表示、ファイルダウンロードの体感速度に影響します。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>速度</th>
</tr>
</thead>
<tbody>
<tr>
<td>最低要件</td>
<td>1 Mbps</td>
</tr>
<tr>
<td>推奨値</td>
<td>3 Mbps以上</td>
</tr>
<tr>
<td>快適な業務利用</td>
<td>5 Mbps以上</td>
</tr>
</tbody>
</table>
<p><strong>用語解説：</strong> 「Mbps（メガビット毎秒）」はデータ転送速度の単位です。1 Mbpsなら1秒間に約125KBのデータを転送できます。5 Mbpsあれば、一般的なSalesforceの画面遷移はストレスなく行えます。</p>
<p><strong>対策：</strong> &#8211; 社内LANの帯域やプロキシサーバーのボトルネックを確認する &#8211; 同一ネットワーク上の他のトラフィック（動画ストリーミング等）による帯域圧迫を排除する &#8211; Wi-Fiが不安定な場合は<strong>有線接続</strong>を試す &#8211; プロキシ/ファイアウォールでSalesforce関連ドメインがスロットリング（帯域制限）されていないか確認する</p>
<h3 id="upload-speed-アップロード速度">6. Upload Speed — アップロード速度</h3>
<p>端末からSalesforceサーバーへのデータ送信速度です。レコード保存、ファイルアップロード、添付ファイル操作の体感速度に影響します。</p>
<table>
<thead>
<tr>
<th>レベル</th>
<th>速度</th>
</tr>
</thead>
<tbody>
<tr>
<td>最低限</td>
<td>0.5 Mbps以上</td>
</tr>
<tr>
<td>快適</td>
<td>1 Mbps以上</td>
</tr>
</tbody>
</table>
<p>対策はダウンロード速度と同様のネットワーク最適化が有効です。</p>
<h2 id="サーバー環境情報-your-servertrust-statususer-agent">サーバー・環境情報 — Your Server・Trust Status・User Agent</h2>
<h3 id="your-server-release-接続先情報">7. Your Server / Release — 接続先情報</h3>
<p>接続先のSalesforceインスタンス名（例：AP26、NA135）と、適用されているSalesforceリリースバージョン（例：Spring ’26）を表示します。</p>
<p><strong>活用方法：</strong> Orgのインスタンスが地理的に遠い場合、Salesforceサポートに相談して<strong>インスタンス移行</strong>を検討できます。日本のユーザーが大半なのにNAインスタンスに配置されている場合は、APインスタンスへの移行で大幅なレイテンシ改善が期待できます。</p>
<h3 id="trust-status-サービス稼働状況">8. Trust Status — サービス稼働状況</h3>
<p><a href="https://status.salesforce.com/" rel="noopener">Salesforce Trustサイト</a>の情報と連携して、接続先インスタンスの稼働状況やメンテナンス情報を表示します。</p>
<p>2026年より <strong>My Trust Center</strong> が一般提供（GA）となり、各テナント固有のステータス情報がパーソナライズ表示されるようになりました。特定インスタンスや製品を選んでアラートメールを自己登録することも可能です。</p>
<p><strong>活用方法：</strong> パフォーマンス低下時に、原因が<strong>Salesforce側のインフラ障害なのか自社環境なのかを切り分ける最初の確認ポイント</strong>になります。「遅い」と言われたらまずここを確認しましょう。</p>
<h3 id="user-agent-webgl-ブラウザgpu情報">9. User Agent / WebGL — ブラウザ・GPU情報</h3>
<p>ブラウザの種類・バージョン、OS情報、GPUの種類を表示します。</p>
<p><strong>確認ポイント：</strong> &#8211; <a href="https://help.salesforce.com/s/articleView?id=sf.technical_requirements.htm&amp;language=en_US&amp;type=5" rel="noopener">Salesforce公式</a>が最もパフォーマンスが高いとするのは<strong>Google Chrome</strong> &#8211; GPUが統合グラフィックス（Intel UHD Graphics等）の場合、フレームレートがやや低めになる可能性がある</p>
<p><strong>用語解説：</strong> 「WebGL」はブラウザ上で3Dグラフィックスを描画する技術で、GPUの種類と密接に関連します。「統合グラフィックス」はCPUに内蔵されたGPUで、独立GPU（NVIDIA GeForce等）と比べて描画性能が低い傾向があります。</p>
<h2 id="総合推奨スペックまとめ">総合推奨スペックまとめ</h2>
<table>
<thead>
<tr>
<th>項目</th>
<th>最低要件</th>
<th>推奨値</th>
<th>快適ライン</th>
</tr>
</thead>
<tbody>
<tr>
<td>Octane Score</td>
<td>20,000+</td>
<td>30,000+</td>
<td>35,000+</td>
</tr>
<tr>
<td>Latency</td>
<td>200ms以下</td>
<td>150ms以下</td>
<td>100ms以下</td>
</tr>
<tr>
<td>Download Speed</td>
<td>1 Mbps+</td>
<td>3 Mbps+</td>
<td>5 Mbps+</td>
</tr>
<tr>
<td>Upload Speed</td>
<td>—</td>
<td>0.5 Mbps+</td>
<td>1 Mbps+</td>
</tr>
<tr>
<td>RAM</td>
<td>5GB（SF用2GB）</td>
<td>8GB（SF用3GB）</td>
<td>16GB+</td>
</tr>
<tr>
<td>Frame Rate</td>
<td>—</td>
<td>30fps+</td>
<td>60fps</td>
</tr>
</tbody>
</table>
<h2 id="エンタープライズ環境で特に注意すべき2項目">エンタープライズ環境で特に注意すべき2項目</h2>
<p>エンタープライズ環境（特に金融系・官公庁系プロジェクト）では、以下の2項目がボトルネックになりやすいです。</p>
<p><strong>1. VPN経由のレイテンシ</strong> セキュリティポリシーでVPN必須の環境では、VPNゲートウェイの物理的な位置によってレイテンシが大幅に増加します。東京→海外VPN→東京インスタンスという経路になると、100ms以下で済むはずの遅延が300ms以上になるケースもあります。</p>
<p><strong>2. VDI環境のOctane Score</strong> VDI（仮想デスクトップ基盤）環境では、サーバーのCPUリソースを複数ユーザーで共有するため、Octane Scoreが物理PCの半分以下になることがあります。ユーザー密度（1台のサーバーに何人収容するか）の見直しが有効です。</p>
<p><strong>用語解説：</strong> 「VDI（Virtual Desktop Infrastructure）」とは、サーバー上で仮想的なデスクトップ環境を動かし、端末からリモートで接続する仕組みです。セキュリティが強化される一方、CPUやメモリが共有されるため個々のユーザーのパフォーマンスが低下しやすい特徴があります。</p>
<h2 id="salesforceのパフォーマンス改善でお困りなら">Salesforceのパフォーマンス改善でお困りなら</h2>
<p>speedtest.jspで問題箇所を特定できても、「VPN経路の最適化をどう進めるか」「VDI環境でのチューニングをどこから始めるか」は、環境ごとに事情が異なります。</p>
<p>AI開発実践ラボでは、Salesforce環境のパフォーマンス改善やLightning Experience最適化について、1on1のオンライントレーニングで実践的なノウハウをお伝えしています。</p>
<p>→ <a href="https://creativecontentlabtokyo.com/training/">AI駆動開発トレーニング — 詳細を見る</a></p>
<h2 id="まとめ">まとめ</h2>
<ul>
<li><strong>speedtest.jsp</strong> はSalesforceの標準ツールで、URLを書き換えるだけでアクセスできる</li>
<li><strong>Octane Score 30,000以上・Latency 150ms以下・Download 3Mbps以上</strong> が推奨ライン</li>
<li>エンタープライズ環境では <strong>VPN経由のレイテンシ</strong> と <strong>VDI環境のOctane Score</strong> が課題になりやすい</li>
</ul>
<p>パフォーマンス問題の切り分けの第一歩として、ぜひ活用してみてください。</p>
<hr />
<p><strong>関連リンク:</strong> &#8211; <a href="https://trailhead.salesforce.com/content/learn/modules/lightning-experience-performance-optimization/optimize-lightning-experience-performance" rel="noopener">Salesforce Trailhead — Lightning Experienceパフォーマンス最適化</a> &#8211; <a href="https://status.salesforce.com/" rel="noopener">Salesforce Trust — サービス稼働状況</a> &#8211; <a href="https://creativecontentlabtokyo.com/portfolio/sf-universal-record-form/">ポートフォリオ — AI汎用入力フォームLWC</a>（LWCによるパフォーマンスを考慮したUI設計の実例）</p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5853"
					data-ulike-nonce="b9506235fa"
					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_5853"><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>Salesforce関連の資料作成や設計・開発に役立つ素材・リンク集</title>
		<link>https://creativecontentlabtokyo.com/materials-links-salesforce-related-docs-design-development/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Fri, 04 Jul 2025 06:45:58 +0000</pubDate>
				<category><![CDATA[リソース]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5604</guid>

					<description><![CDATA[提案やプロジェクト管理資料の作成に役立つ素材集 Lightning Design System2のアイコン Lightning Design System2の公…]]></description>
										<content:encoded><![CDATA[<h2>提案やプロジェクト管理資料の作成に役立つ素材集</h2>
<h4>Lightning Design System2のアイコン</h4>
<ul>
<li>Lightning Design System2の公式サイトから以下のようなアイコンをダウンロード可能。</li>
<li>公式サイトは<a href="https://www.lightningdesignsystem.com/2e1ef8501/p/83309d-icons/b/586464" rel="noopener">こちら</a></li>
</ul>
<p><img decoding="async" class="alignnone wp-image-5605 " src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted.png" width="789" height="107" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted.png 877w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-300x41.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-768x104.png 768w" sizes="(max-width: 789px) 100vw, 789px" /></p>
<h4>Data Cloud ダイアグラム・アイコン</h4>
<ul>
<li>Data Cloudのアーキテクチャや設計で利用すると便利なアイコンやコンテナカード、ダイアグラムなどの素材が公式で提供されています。</li>
<li>Salesforce公式のarchitectsサイト（<a href="https://architect.salesforce.com/diagrams/framework/kit-of-parts" rel="noopener">こちら</a>）を確認。LucidChartやGoogleスライド、PPTXなど複数の形式があります。</li>
</ul>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-5610 " src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-2.png" width="781" height="199" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-2.png 1009w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-2-300x76.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-2-768x196.png 768w" sizes="auto, (max-width: 781px) 100vw, 781px" /><img loading="lazy" decoding="async" class="alignnone wp-image-5615 " src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-3.png" width="809" height="207" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-3.png 1122w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-3-300x77.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-3-1024x262.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-3-768x196.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /></p>
<h4>Canva</h4>
<ul>
<li>CANVAは、デザイン経験がない人でも簡単にプロ品質のグラフィックを作成できるオンラインデザインツールです。AIを使った画像生成も可能</li>
<li>豊富なテンプレート、画像、フォントを使って、SNS投稿、プレゼンテーション、ポスター、名刺などを直感的な操作で制作できます。</li>
<li>無料版と有料版があり、個人からビジネスまで幅広く利用されています。ドラッグ&amp;ドロップの簡単操作で、誰でも美しいデザインが作れる点が最大の特徴です。</li>
<li>公式サイトは<a href="https://www.canva.com/" rel="noopener">こちら</a></li>
</ul>
<p><img loading="lazy" decoding="async" width="922" height="278" class="alignnone wp-image-5623 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-4.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-4.png 922w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-4-300x90.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/07/Pasted-4-768x232.png 768w" sizes="auto, (max-width: 922px) 100vw, 922px" /></p>
<p>&nbsp;</p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5604"
					data-ulike-nonce="52331b1a17"
					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_5604"><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>AIエディタを使ったVibe CordingでSalesforceの開発を行う【①用語の理解とツールの説明】</title>
		<link>https://creativecontentlabtokyo.com/develop-salesforce-with-vibe-cording-using-ai-editor/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sun, 22 Jun 2025 05:15:48 +0000</pubDate>
				<category><![CDATA[生成AI（Generative AI）]]></category>
		<category><![CDATA[AIエディタ]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Cline]]></category>
		<category><![CDATA[Copilot]]></category>
		<category><![CDATA[Salesforce]]></category>
		<category><![CDATA[Vibe coding]]></category>
		<category><![CDATA[VSCode]]></category>
		<category><![CDATA[Windsurf]]></category>
		<category><![CDATA[コーディング]]></category>
		<category><![CDATA[生成AI]]></category>
		<category><![CDATA[開発]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5506</guid>

					<description><![CDATA[Vibe Codingとは何か（感覚的・直感的なコーディング手法） Vibe Coding（バイブコーディング）とは、従来の詳細な設計書やドキュメントベースの開…]]></description>
										<content:encoded><![CDATA[<h2 class="text-2xl font-bold mt-1 text-text-100">Vibe Codingとは何か（感覚的・直感的なコーディング手法）</h2>
<p class="whitespace-normal break-words">Vibe Coding（バイブコーディング）とは、従来の詳細な設計書やドキュメントベースの開発から脱却し、開発者の直感と感覚、そしてAIの支援を活用した新しいコーディング手法です。</p>
<p class="whitespace-normal break-words">開発者が「こんな機能を作りたい」という漠然としたアイデアや要求を、AIエディタとの対話を通じて具体的なコードに変換していくため、完璧な設計よりもスピードや柔軟性を重視しており、Salesforceの開発と非常に相性がよい手法となります。</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">Vibe Codingを使えば、開発が必要な画面や機能も要件定義の段階でプロトタイプをサクッと作ったり、設計書や開発のコーディングのベースを作成して開発を大幅に効率化できます</div></div></div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">従来のSalesforce開発の課題を解消</h3>
<p>Salesforceの開発では、Javaなどの言語は経験があるが、ApexやLWCは経験がないというメンバーがアサインされることもありますが、Vibe codingを行うことで、Salesforce独自の言語（Apex/LWC/Visualforce/SOQL/SOSL）への対応やガバナ―制限への対応もAIが自動的に対応してくれるため、キャッチアップも用意で、開発効率も大幅にアップすることができます。</p>
<p>作成されたソースコードについて仕様や解説もしてくれるしコメントを入れることができるので、処理内容を把握して、要件と異なるところもすぐに検索して修正することができます。</p>
<p>AIエディタで実現できること</p>
<p><img loading="lazy" decoding="async" width="1920" height="1129" class="alignnone wp-image-5521 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140-300x176.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140-1024x602.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140-768x452.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-140-1536x903.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2 class="text-2xl font-bold mt-1 text-text-100">AIエディタとは？</h2>
<p>開発現場で、皆さんが一番利用している生成AIは何でしょうか？実際はコーディング以外の作業もあるのでChatGTPが一番多いかもしれませんね。</p>
<p>コーディングで利用するAI エディター（※1）については、「<span style="color: #0000ff;"><strong>GitHub Copilot</strong></span>」「<span style="color: #0000ff;"><strong>Cline</strong></span>」「<span style="color: #0000ff;"><strong>Cursor</strong></span>」「<span style="color: #0000ff;"><strong>Windsurf</strong></span>」「<span style="color: #0000ff;"><strong>Claude Code</strong></span>」 など数多くのエディタが出てきてますが、それぞれ一長一短があるような印象です。</p>
<p>ちなみに私は、現時点ではClaude Codeが一番のお気に入りです。Salesforceの開発IDEとしてはVisual Studio Codeが一般的になってきてますが、Claude Code はVSCodeの拡張プラグインとして利用することができます。</p>
<p>CursorやWindsurfは、VSCode のフォークエディタの位置づけとなります。</p>
<p>※1.AIエディタとは、AI（人工知能）技術を活用して、文章作成やコード編集などの作業を支援するソフトウェアで、コード補完やエラーチェック、自動生成などの機能を持ちます。</p>
<p>Salesforceの開発ではVSCodeを利用することが多いと思うので、現時点では、VSCodeと相性の良いものを選択するのがいいかもしれません。現在はまだ過渡期なので、特定のエディタというよりは、ChatpGPTやCluade.aiを使ってソースコードを生成して利用するなど組み合わせで進めていくのもよいと思います。</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/no-img.png" alt="" loading="lazy" /></div><div class="cclt-compat-kaiwa__bubble" style="background-color:#f8f8f8;"><div class="cclt-compat-kaiwa__text">エディタについては、開発者ごとにこだわりが強く表れるので、まずは使ってみて気に入ったものを見つけるところから始めてください</div></div></div>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">主要AIエディタの比較</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">比較表</h3>
<table class="bg-bg-100 min-w-full border-separate border-spacing-0 text-sm leading-[1.88888] whitespace-normal">
<thead class="border-b-border-100/50 border-b-[0.5px] text-left">
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">項目</th>
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">GitHub Copilot</th>
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Cline</th>
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Cursor</th>
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Windsurf</th>
<th class="text-text-000 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] font-400 px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">Claude Code</th>
</tr>
</thead>
<tbody>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>料金</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">$10/月</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">無料/有料プラン</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">$20/月</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">$15/月</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">無料（プレビュー）</td>
</tr>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>統合性</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">多エディタ対応</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">VS Code専用</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">専用エディタ</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">専用エディタ</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">コマンドライン</td>
</tr>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>Salesforce対応</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2b50.png" alt="⭐" class="wp-smiley" style="height: 1em; max-height: 1em;" /></td>
</tr>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>コード補完</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">非常に高精度</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">高精度</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">高精度</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">高精度</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">中程度</td>
</tr>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>ファイル操作</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">限定的</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">可能</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">可能</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">可能</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">可能</td>
</tr>
<tr class="[tbody&gt;&amp;]:odd:bg-bg-500/10">
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]"><strong>学習コスト</strong></td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">低</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">中</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">低</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">中</td>
<td class="border-t-border-100/50 [&amp;:not(:first-child)]:-x-[hsla(var(--border-100) / 0.5)] border-t-[0.5px] px-2 [&amp;:not(:first-child)]:border-l-[0.5px]">高</td>
</tr>
</tbody>
</table>
<div class="cclt-compat-cmemo" style="background-color:#ffebee;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#ef5350;"></span><div class="cclt-compat-cmemo__text">※料金や機能、Salesforceへの対応状況については日々変化しているため、最新の情報を公式HPやドキュメントで確認するようにしてください。</div></div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">GitHub Copilot の詳細分析</h3>
<p><img loading="lazy" decoding="async" width="1373" height="396" class="alignnone wp-image-5513 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138.jpg 1373w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-300x87.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1024x295.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-768x222.jpg 768w" sizes="auto, (max-width: 1373px) 100vw, 1373px" /></p>
<p class="whitespace-normal break-words"><strong>概要と特徴</strong> GitHub Copilotは、OpenAIのCodexモデルをベースとしたAIコーディング支援ツールです。GitHub上の膨大なオープンソースコードで訓練されており、多言語に対応しています。Salesforce開発においては、ApexやLightning Web Componentsのコード補完に優れた性能を発揮します。</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">Apex言語の高精度な補完とコード生成</li>
<li class="whitespace-normal break-words">Lightning Web Componentsのテンプレート自動生成</li>
<li class="whitespace-normal break-words">SOQLクエリの最適化提案</li>
<li class="whitespace-normal break-words">テストクラスの自動生成</li>
<li class="whitespace-normal break-words">Salesforce APIの適切な使用方法提案</li>
</ul>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://azure.microsoft.com/ja-jp/products/github/copilot" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#FFD54F;border:1px solid #FFEB3B;border-radius:5px;font-weight:bold;background:linear-gradient(#ffdb69,#FFD54F);" rel="noopener">公式HPはコチラ</a></div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Cline の詳細分析</h3>
<p class="whitespace-normal break-words"><strong>概要と特徴</strong> ClineはVS Code拡張として動作するAIアシスタントで、ファイル操作やターミナル操作が可能な点が特徴です。Salesforce開発においては、Salesforce CLIとの連携や、複数ファイルにまたがる機能実装に威力を発揮します。</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">Salesforce CLIコマンドの自動実行</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">Cursor の詳細分析</h3>
<p><img loading="lazy" decoding="async" width="1740" height="603" class="alignnone wp-image-5515 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1.jpg 1740w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1-300x104.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1-1024x355.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1-768x266.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1-1536x532.jpg 1536w" sizes="auto, (max-width: 1740px) 100vw, 1740px" /></p>
<p class="whitespace-normal break-words"><strong>概要と特徴</strong> CursorはAI機能を内蔵した専用エディタで、自然言語でのコード編集指示が可能です。コードベース全体を理解した上での提案を行うため、Salesforceの複雑なオブジェクト関係を理解した開発が可能になります。</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">自然言語でのApexクラス生成指示</li>
<li class="whitespace-normal break-words">オブジェクト関係を考慮したコード提案</li>
<li class="whitespace-normal break-words">Lightning Web Componentの統合的な開発支援</li>
<li class="whitespace-normal break-words">プロジェクト全体の一貫性チェック</li>
</ul>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://www.cursor.com/ja" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#FFD54F;border:1px solid #FFEB3B;border-radius:5px;font-weight:bold;background:linear-gradient(#ffdb69,#FFD54F);" rel="noopener">公式HPはコチラ</a></div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Windsurf の詳細分析</h3>
<p><img loading="lazy" decoding="async" width="1706" height="453" class="alignnone wp-image-5516 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2.jpg 1706w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2-300x80.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2-1024x272.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2-768x204.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-2-1536x408.jpg 1536w" sizes="auto, (max-width: 1706px) 100vw, 1706px" /></p>
<p class="whitespace-normal break-words"><strong>概要と特徴</strong> WindsurfはCodeium社が開発したAI統合開発環境で、マルチファイル編集とプロジェクト全体の理解に優れています。Salesforce開発においては、複雑なビジネスプロセスの実装や、大規模プロジェクトの管理に特に有効です。</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">複数のApexクラス間の依存関係管理</li>
<li class="whitespace-normal break-words">Lightning Web Componentとバックエンドの連携設計</li>
<li class="whitespace-normal break-words">カスタムオブジェクトとコードの同期的開発</li>
<li class="whitespace-normal break-words">エンタープライズレベルのアーキテクチャ提案</li>
</ul>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://windsurf.com/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#FFD54F;border:1px solid #FFEB3B;border-radius:5px;font-weight:bold;background:linear-gradient(#ffdb69,#FFD54F);" rel="noopener">公式HPはコチラ</a></div>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Claude Code の詳細分析</h3>
<p><img loading="lazy" decoding="async" width="1379" height="475" class="alignnone wp-image-5517 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138.png 1379w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-300x103.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-1024x353.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-138-768x265.png 768w" sizes="auto, (max-width: 1379px) 100vw, 1379px" /></p>
<p class="whitespace-normal break-words"><strong>概要と特徴</strong> Claude CodeはAnthropic製のコマンドライン型AIツールで、ターミナルから直接Claude AIを活用できます。Salesforce開発においては、複雑なロジック実装や、アーキテクチャレベルの意思決定に強みを発揮します。</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">複雑なビジネスロジックの設計相談</li>
<li class="whitespace-normal break-words">パフォーマンスチューニング戦略の策定</li>
<li class="whitespace-normal break-words">セキュリティ要件の実装方法検討</li>
<li class="whitespace-normal break-words">大規模データ移行戦略の立案</li>
</ul>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">AIエディタとSalesforce開発の相性</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Salesforce特有の開発要素への対応</h3>
<p class="whitespace-normal break-words"><strong>Apex言語の特殊性</strong> ApexはJavaライクな構文を持ちながら、Salesforceプラットフォーム特有の制約とオブジェクトモデルを持っています。AIエディタは、標準的なJavaの知識を持つ開発者でも、Salesforce特有の書き方（sObjectの操作、SOQL埋め込み、ガバナーリミット対応など）を自然に習得できるよう支援します。</p>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code class="language-apex"><span class="token">// AIエディタが提案する効率的なApexコード例</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">updateContactsByAccount</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> accountIds<span class="token">)</span> <span class="token">{</span>
        <span class="token">// バルク処理を意識したSOQL</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 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"> AccountId</span><span class="token sql language-sql">,</span><span class="token sql language-sql"> LastName 
</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">IN</span><span class="token sql language-sql"> :accountIds
</span>                  <span class="token sql language-sql">]</span><span class="token">;</span>
        
        <span class="token">for</span> <span class="token">(</span><span class="token">Contact</span> contact <span class="token">:</span> contactsToUpdate<span class="token">)</span> <span class="token">{</span>
            <span class="token">// ビジネスロジックをここに記述</span>
            contact<span class="token">.</span>LastModifiedById <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>
        
        <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>
            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">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>Lightning Web Componentsの複雑性</strong> LWCは、HTML、JavaScript、CSSの組み合わせに加え、Salesforce特有のデコレータやワイヤーサービスの理解が必要です。AIエディタは、これらの複雑な連携を自然な形で提案し、モダンなWeb開発の知識をSalesforceプラットフォームに適用できるよう支援します。</p>
<p class="whitespace-normal break-words"><strong>SOQL/SOSLの最適化</strong> データクエリの最適化は、Salesforce開発において極めて重要です。AIエディタは、パフォーマンスを考慮したクエリの作成、適切なインデックス活用、クエリプランの最適化などを支援します。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">AIエディタによる開発効率化のポイント</h3>
<p class="whitespace-normal break-words"><strong>コンテキスト理解の向上</strong> 最新のAIエディタは、単一ファイルではなくプロジェクト全体のコンテキストを理解し、一貫性のあるコード提案を行います。これにより、Salesforceの複雑なオブジェクト関係やビジネスプロセスを考慮した開発が可能になります。</p>
<p class="whitespace-normal break-words"><strong>リアルタイムコード検証</strong> コーディング中にSalesforceのガバナーリミットやセキュリティルールをチェックし、問題のあるコードパターンを事前に警告します。これにより、デバッグ時間の大幅短縮が実現できます。</p>
<p class="whitespace-normal break-words"><strong>自動テストケース生成</strong> Salesforceでは高いテストカバレッジが求められますが、AIエディタは機能的なテストケースを自動生成し、テスト品質の向上と開発時間の短縮を両立させます。</p>
<p><img loading="lazy" decoding="async" width="2474" height="1396" class="alignnone wp-image-5519 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139.png 2474w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139-300x169.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139-1024x578.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139-768x433.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139-1536x867.png 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-139-2048x1156.png 2048w" sizes="auto, (max-width: 2474px) 100vw, 2474px" /></p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">コード品質向上への貢献</h3>
<p class="whitespace-normal break-words"><strong>ベストプラクティスの自動適用</strong> AIエディタは、Salesforce開発のベストプラクティス（トリガーパターン、バルク処理、エラーハンドリングなど）を自動的に適用したコードを提案します。経験の浅い開発者でも、高品質なコードを作成できるようになります。</p>
<p class="whitespace-normal break-words"><strong>セキュリティ強化</strong> CRUD権限チェック、SOQL インジェクション対策、適切な共有設定など、セキュリティに関する考慮事項を自動的に組み込んだコードを生成します。</p>
<p class="whitespace-normal break-words"><strong>保守性の向上</strong> 可読性が高く、拡張しやすいコード構造を提案することで、長期的な保守性を向上させます。また、適切なコメントやドキュメンテーションも自動生成されます。</p>
<p class="whitespace-normal break-words">以下のようなコードとコメントが自動生成されるためSalesforce特有の書き方（sObjectの操作、SOQL埋め込み、ガバナーリミット対応など）を自然に習得することができます。</p>
<h2 class="text-xl font-bold text-text-100 mt-1 -mb-0.5">実践的なVibe Coding手法</h2>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">AIエディタを活用した具体的な開発フロー</h3>
<p class="whitespace-normal break-words"><strong>ステップ1: 要件の自然言語化</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>ステップ2: AIとの対話による要件精緻化</strong></p>
<p class="whitespace-normal break-words">AIエディタとの対話を通じて、曖昧な要件を具体的な技術要件に変換します。</p>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>開発者: "メール受信時の自動ケース作成機能を実装したい"
AI: "Email-to-Caseの機能実装ですね。以下の要素が必要です：
1. インバウンドメール処理のApexクラス
2. ケース作成とアサインメントロジック
3. 自動返信のEmailテンプレート
4. エラーハンドリングとログ機能

どの部分から開始しますか？"</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>ステップ3: 段階的な実装</strong></p>
<p class="whitespace-normal break-words">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">// ステップ3-1: 基本的なメール処理クラス</span>
<span class="token">global</span> <span class="token">class</span> <span class="token">EmailToCaseHandler</span> <span class="token">implements</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailHandler</span> <span class="token">{</span>
    <span class="token">global</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span> <span class="token">handleInboundEmail</span><span class="token">(</span>
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmail</span> email<span class="token">,</span> 
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEnvelope</span> envelope
    <span class="token">)</span> <span class="token">{</span>
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span> result <span class="token">=</span> <span class="token">new</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">try</span> <span class="token">{</span>
            <span class="token">Case</span> newCase <span class="token">=</span> <span class="token">createCaseFromEmail</span><span class="token">(</span>email<span class="token">)</span><span class="token">;</span>
            <span class="token">assignCaseToAgent</span><span class="token">(</span>newCase<span class="token">)</span><span class="token">;</span>
            <span class="token">sendAutoReply</span><span class="token">(</span>email<span class="token">.</span>fromAddress<span class="token">,</span> newCase<span class="token">.</span>CaseNumber<span class="token">)</span><span class="token">;</span>
            result<span class="token">.</span>success <span class="token">=</span> <span class="token">true</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">logError</span><span class="token">(</span>e<span class="token">,</span> email<span class="token">)</span><span class="token">;</span>
            result<span class="token">.</span>success <span class="token">=</span> <span class="token">false</span><span class="token">;</span>
        <span class="token">}</span>
        
        <span class="token">return</span> result<span class="token">;</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>ステップ4: AIによる継続的改善</strong></p>
<p class="whitespace-normal break-words">実装したコードを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">// AIが提案する改善版</span>
<span class="token">global</span> <span class="token">class</span> <span class="token">EmailToCaseHandler</span> <span class="token">implements</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailHandler</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">EmailToCaseSettings__c</span> settings <span class="token">=</span> EmailToCaseSettings__c<span class="token">.</span><span class="token">getInstance</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
    
    <span class="token">global</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span> <span class="token">handleInboundEmail</span><span class="token">(</span>
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmail</span> email<span class="token">,</span> 
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEnvelope</span> envelope
    <span class="token">)</span> <span class="token">{</span>
        <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span> result <span class="token">=</span> <span class="token">new</span> <span class="token">Messaging</span><span class="token">.</span><span class="token">InboundEmailResult</span><span class="token">(</span><span class="token">)</span><span class="token">;</span>
        
        <span class="token">try</span> <span class="token">{</span>
            <span class="token">// バリデーション追加</span>
            <span class="token">if</span> <span class="token">(</span><span class="token">!</span><span class="token">isValidEmail</span><span class="token">(</span>email<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">EmailValidationException</span><span class="token">(</span><span class="token">'Invalid email format'</span><span class="token">)</span><span class="token">;</span>
            <span class="token">}</span>
            
            <span class="token">Case</span> newCase <span class="token">=</span> <span class="token">createCaseFromEmail</span><span class="token">(</span>email<span class="token">)</span><span class="token">;</span>
            <span class="token">assignCaseToAgent</span><span class="token">(</span>newCase<span class="token">)</span><span class="token">;</span>
            
            <span class="token">// 非同期での自動返信（ガバナーリミット対策）</span>
            <span class="token">System</span><span class="token">.</span><span class="token">enqueueJob</span><span class="token">(</span><span class="token">new</span> <span class="token">AutoReplyQueueable</span><span class="token">(</span>email<span class="token">.</span>fromAddress<span class="token">,</span> newCase<span class="token">.</span>CaseNumber<span class="token">)</span><span class="token">)</span><span class="token">;</span>
            
            result<span class="token">.</span>success <span class="token">=</span> <span class="token">true</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">logError</span><span class="token">(</span>e<span class="token">,</span> email<span class="token">)</span><span class="token">;</span>
            result<span class="token">.</span>success <span class="token">=</span> <span class="token">false</span><span class="token">;</span>
            result<span class="token">.</span>message <span class="token">=</span> <span class="token">'Error processing email: '</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">return</span> result<span class="token">;</span>
    <span class="token">}</span>
<span class="token">}</span></code></pre>
</div>
</div>
<h2 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">プロンプトエンジニアリングのコツ</h2>
<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"><strong>コンテキストの明確化</strong></li>
</ol>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"Salesforceの本番環境で使用する、エンタープライズレベルのApexトリガーを作成してください。
ガバナーリミットとセキュリティを考慮した実装が必要です。"</code></pre>
</div>
</div>
<ol class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7" start="2">
<li class="whitespace-normal break-words"><strong>具体的な制約条件の提示</strong></li>
</ol>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"以下の制約を満たすLightning Web Componentを作成してください：
- 10,000件以上のレコードを効率的に表示
- モバイル対応（レスポンシブデザイン）
- Lightning Design Systemに準拠
- アクセシビリティ要件（WCAG 2.1 AA）を満たす"</code></pre>
</div>
</div>
<ol class="[&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-decimal space-y-1.5 pl-7" start="3">
<li class="whitespace-normal break-words"><strong>期待する出力形式の指定</strong></li>
</ol>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"以下の形式でコードを生成してください：
1. クラス全体のコード
2. 重要な部分の解説コメント
3. 使用方法の例
4. テストクラスの実装
5. 注意点とベストプラクティス"</code></pre>
</div>
</div>
<p class="whitespace-normal break-words"><strong>反復的改善のためのプロンプト例</strong></p>
<div class="relative group/copy rounded-lg">
<div class="">
<pre class="code-block__code !my-0 !rounded-lg !text-sm !leading-relaxed"><code>"先ほど生成したApexクラスを以下の観点で改善してください：
1. パフォーマンス最適化（特にSOQL実行回数の削減）
2. エラーハンドリングの強化
3. ログ出力の改善
4. コードの可読性向上
5. 単体テストカバレッジの向上"</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. 段階的な開発アプローチ</strong> 一度に完璧なコードを求めるのではなく、動作する最小限の実装から始めて、段階的に機能を追加していきます。</p>
<p class="whitespace-normal break-words"><strong>2. AIの提案の検証</strong> AIが生成したコードは必ず動作確認を行い、Salesforceの制約やセキュリティ要件を満たしているかチェックします。</p>
<p class="whitespace-normal break-words"><strong>3. チーム知識の共有</strong> 効果的だったプロンプトや手法は、チーム内で共有し、組織全体のVibe Coding能力を向上させます。</p>
<p class="whitespace-normal break-words"><strong>4. 継続的学習</strong> AIエディタの新機能や改善されたプロンプト技術を継続的に学習し、開発手法をアップデートしていきます。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">Salesofrceの開発に関するユースケース</h3>
<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/development-use-case-vibe-coding/" 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/2025/06/Salesforce-vibe-coding-ユースケース-300x169.jpg" class="attachment-medium size-medium wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-1024x576.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-768x432.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース-1536x864.jpg 1536w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Salesforce-vibe-coding-ユースケース.jpg 1920w" sizes="auto, (max-width: 300px) 100vw, 300px" /></div><div class="cclt-compat-card__body"><div class="cclt-compat-card__title">AIエディタを使ったVibe codingの実際の開発事例（ユースケース）</div><div class="cclt-compat-card__excerpt">AIエディタを使ったVibe codingの実際の開発事例（ユースケース） Li…</div><span class="cclt-compat-card__readmore">続きを読む</span></div></a></div>
<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">Vibe Codingがもたらす開発パラダイムの変化</h3>
<p class="whitespace-normal break-words">AIエディタを活用したVibe Codingは、Salesforce開発において従来の課題を大幅に解決し、新しい開発体験を提供しています。詳細な設計書に依存した開発から、直感的で創造的な開発へのシフトが可能になり、開発者はより高次元のビジネス価値創出に集中できるようになります。</p>
<h3 class="text-lg font-bold text-text-100 mt-1 -mb-1.5">技術トレンドとの統合</h3>
<p class="whitespace-normal break-words"><strong>ローコード・ノーコード開発との融合</strong> AIエディタによるVibe Codingは、Salesforceのローコード・ノーコード機能と相互補完的な関係にあります。Flow Builder、Process Builder、Lightning App Builderなどの宣言的開発ツールとAIエディタを組み合わせることで、より柔軟で強力な開発環境が実現できます。</p>
<p class="whitespace-normal break-words"><strong>DevOpsとの統合</strong> CI/CDパイプライン、自動テスト、デプロイメント自動化などのDevOpsプラクティスとAIエディタを統合することで、コード生成から本番環境への展開まで一貫した自動化が可能になります。</p>
<p class="whitespace-normal break-words"><strong>アジャイル開発手法との親和性</strong> Vibe Codingの反復的で柔軟なアプローチは、アジャイル開発やスクラム手法と非常に相性が良く、スプリント内での迅速な機能開発と改善が可能になります。</p>
<h2 class="whitespace-normal break-words">続き</h2>
<p>本記事では、AIエディタやVibe codingについての用語や概念について説明してきました。AIエディタの種類やそれぞれの特徴についても理解いただけたと思います。</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">実際に環境を構築して、AIエディタを利用できるようにしていきましょう。</div></div></div>
<p>&nbsp;</p>
<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_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5506"
					data-ulike-nonce="678ad08171"
					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_5506"><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>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_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5524"
					data-ulike-nonce="13aa3f7174"
					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>Visual Studio CodeとSalesforce CLIを完全アンインストールする方法【Windows 10完全ガイド】</title>
		<link>https://creativecontentlabtokyo.com/windows-10-visual-studio-code-salesforce-cli-complete-uninstall-guide/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 21 Jun 2025 07:38:22 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<category><![CDATA[Salesforce CLI]]></category>
		<category><![CDATA[Visual studio code]]></category>
		<category><![CDATA[VSC]]></category>
		<category><![CDATA[アンインストール]]></category>
		<category><![CDATA[初期化]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5497</guid>

					<description><![CDATA[開発環境をリセットしたり、クリーンインストールを行う際に、Visual Studio Code（VS Code）とSalesforce CLIを完全に削除する必…]]></description>
										<content:encoded><![CDATA[<p>開発環境をリセットしたり、クリーンインストールを行う際に、Visual Studio Code（VS Code）とSalesforce CLIを完全に削除する必要があることがあります。</p>
<p>通常のアンインストールでは、拡張機能の設定、ユーザー設定、キャッシュファイル、認証情報などが残存し、再インストール時に予期しない問題を引き起こす可能性があります。</p>
<p>この記事では、Windows 10でVS CodeとSalesforce CLIを完全に初期化する詳細な手順をご紹介します。</p>
<h2>なぜ完全初期化が必要なのか</h2>
<h3>VS Codeの場合</h3>
<ul>
<li>ユーザー設定とワークスペース設定の残存</li>
<li>拡張機能のキャッシュとデータ</li>
<li>デバッグ設定とタスク設定</li>
<li>Git認証情報とSSH設定</li>
</ul>
<h3>Salesforce CLIの場合</h3>
<ul>
<li>組織への認証情報（OAuth）</li>
<li>プロジェクト設定とメタデータキャッシュ</li>
<li>SSL証明書とセッション情報</li>
<li>カスタム設定とエイリアス</li>
</ul>
<p>これらを完全に削除することで、クリーンな環境での再スタートが可能になります。</p>
<h2>Visual Studio Codeの完全アンインストール手順</h2>
<h3>ステップ1: アプリケーションの終了</h3>
<p><strong>重要</strong>: アンインストール前にVS Codeを完全に終了させます。</p>
<ol>
<li>VS Codeのすべてのウィンドウを閉じる</li>
<li><strong>Ctrl + Shift + Esc</strong>でタスクマネージャーを開く</li>
<li>以下のプロセスが残っていれば終了：
<ul>
<li><code>Code.exe</code></li>
<li><code>Code Helper.exe</code></li>
<li><code>CodeHelper.exe</code></li>
</ul>
</li>
</ol>
<h3>ステップ2: コントロールパネルからのアンインストール</h3>
<ol>
<li><strong>Windowsキー + R</strong> → <code>appwiz.cpl</code>と入力</li>
<li>「<strong>Microsoft Visual Studio Code</strong>」を見つける</li>
<li>右クリック → 「<strong>アンインストール</strong>」</li>
<li>アンインストールウィザードに従って完了</li>
</ol>
<h3>ステップ3: ユーザーデータとキャッシュの削除</h3>
<p>VS Codeは多くの設定やデータをユーザーフォルダに保存します。</p>
<p><strong>削除対象フォルダ一覧（重要度順）：</strong></p>
<pre><code>C:\Users\[ユーザー名]\AppData\Roaming\Code
C:\Users\[ユーザー名]\AppData\Local\Programs\Microsoft VS Code
C:\Users\[ユーザー名]\.vscode
C:\Users\[ユーザー名]\AppData\Local\vscode-cpptools
C:\Users\[ユーザー名]\AppData\Roaming\vscode-eslint
C:\Users\[ユーザー名]\AppData\Roaming\vscode-prettier
</code></pre>
<p><strong>削除手順：</strong></p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>%APPDATA%</code>と入力してEnter</li>
<li>「<strong>Code</strong>」フォルダを削除</li>
<li><strong>Windowsキー + R</strong> → <code>%LOCALAPPDATA%</code>と入力</li>
<li>「<strong>Programs</strong>」→「<strong>Microsoft VS Code</strong>」フォルダを削除</li>
<li>ユーザーホームフォルダの「<strong>.vscode</strong>」フォルダを削除</li>
</ol>
<h3>ステップ4: 拡張機能データの完全削除</h3>
<p>拡張機能は個別にデータを保存している場合があります。</p>
<p><strong>主要な拡張機能データフォルダ：</strong></p>
<pre><code>C:\Users\[ユーザー名]\AppData\Local\vscode-cpptools
C:\Users\[ユーザー名]\AppData\Roaming\vscode-eslint
C:\Users\[ユーザー名]\AppData\Roaming\vscode-prettier
C:\Users\[ユーザー名]\AppData\Local\GitHubDesktop （GitHub関連拡張機能）
</code></pre>
<h3>ステップ5: レジストリのクリーンアップ</h3>
<blockquote><p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 注意</strong>: レジストリ編集は慎重に行ってください。</p></blockquote>
<p><strong>削除対象レジストリキー：</strong></p>
<pre><code>HKEY_CURRENT_USER\Software\Classes\Applications\Code.exe
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.code-workspace
HKEY_CURRENT_USER\Software\Classes\vscode
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Applications\Code.exe
</code></pre>
<p><strong>手順：</strong></p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>regedit</code></li>
<li>上記のキーを検索して削除</li>
<li>VS Code関連のコンテキストメニューエントリも削除</li>
</ol>
<h3>ステップ6: 環境変数の確認</h3>
<p>稀にVS Code関連の環境変数が設定されている場合があります。</p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>sysdm.cpl</code></li>
<li>「<strong>詳細設定</strong>」→「<strong>環境変数</strong>」</li>
<li>VS Code関連のパスがあれば削除</li>
</ol>
<h2>Salesforce CLIの完全アンインストール手順</h2>
<h3>ステップ1: 現在の認証状況を確認（オプション）</h3>
<p>アンインストール前に、どの組織に認証されているかを確認：</p>
<pre><code class="language-cmd">sf org list
</code></pre>
<p>重要な組織がある場合は、認証情報をメモしておきましょう。</p>
<p><img loading="lazy" decoding="async" width="1191" height="206" class="alignnone wp-image-5500 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134.png 1191w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-300x52.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-1024x177.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-768x133.png 768w" sizes="auto, (max-width: 1191px) 100vw, 1191px" /></p>
<p><code class="language-cmd">sf config list</code></p>
<p><img loading="lazy" decoding="async" width="1191" height="206" class="alignnone wp-image-5500 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134.png 1191w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-300x52.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-1024x177.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-134-768x133.png 768w" sizes="auto, (max-width: 1191px) 100vw, 1191px" /></p>
<h3>ステップ2: 組織からのログアウト（推奨）</h3>
<pre><code class="language-cmd">sf auth logout --all
</code></pre>
<p>これにより、すべての組織からログアウトします。</p>
<p><img loading="lazy" decoding="async" width="1188" height="280" class="alignnone wp-image-5501 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-135.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-135.png 1188w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-135-300x71.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-135-1024x241.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-135-768x181.png 768w" sizes="auto, (max-width: 1188px) 100vw, 1188px" /></p>
<h3>ステップ3: コントロールパネルからのアンインストール</h3>
<ol>
<li><strong>Windowsキー + R</strong> → <code>appwiz.cpl</code></li>
<li>以下のプログラムを見つけてアンインストール：
<ul>
<li>「<strong>Salesforce CLI</strong>」</li>
<li>「<strong>sf CLI</strong>」</li>
<li>「<strong>sfdx CLI</strong>」（古いバージョン）</li>
</ul>
</li>
</ol>
<p><img loading="lazy" decoding="async" width="507" height="397" class="alignnone wp-image-5503 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-137.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-137.png 507w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-137-300x235.png 300w" sizes="auto, (max-width: 507px) 100vw, 507px" /></p>
<h3>ステップ4: 設定ファイルとキャッシュの削除</h3>
<p><strong>削除対象フォルダ一覧：</strong></p>
<pre><code>C:\Users\[ユーザー名]\.sfdx
C:\Users\[ユーザー名]\.sf
C:\Users\[ユーザー名]\AppData\Local\sf
C:\Users\[ユーザー名]\AppData\Local\sfdx
C:\Users\[ユーザー名]\AppData\Roaming\sf
C:\Users\[ユーザー名]\AppData\Roaming\sfdx
</code></pre>
<p><strong>主要データフォルダの説明：</strong></p>
<table>
<thead>
<tr>
<th>フォルダ</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>.sfdx</code></td>
<td>認証情報、組織エイリアス、設定</td>
</tr>
<tr>
<td><code>.sf</code></td>
<td>新しいCLIの設定とキャッシュ</td>
</tr>
<tr>
<td><code>AppData\Local\sf</code></td>
<td>ローカルキャッシュとテンポラリファイル</td>
</tr>
<tr>
<td><code>AppData\Roaming\sfdx</code></td>
<td>ユーザー固有の設定</td>
</tr>
</tbody>
</table>
<h3>ステップ5: 環境変数のクリーンアップ</h3>
<p><strong>確認・削除対象：</strong></p>
<ul>
<li><code>SFDX_*</code>で始まる環境変数</li>
<li><code>SF_*</code>で始まる環境変数</li>
<li><code>PATH</code>からSalesforce CLI関連のパス</li>
</ul>
<p><strong>削除手順：</strong></p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>sysdm.cpl</code></li>
<li>「<strong>詳細設定</strong>」→「<strong>環境変数</strong>」</li>
<li>システム環境変数とユーザー環境変数の両方を確認</li>
<li>Salesforce CLI関連の変数を削除</li>
</ol>
<h3>ステップ6: プロジェクトファイルの確認</h3>
<p>開発プロジェクト内の以下のファイルも確認：</p>
<pre><code>プロジェクトフォルダ\.sfdx\
プロジェクトフォルダ\.sf\
プロジェクトフォルダ\sfdx-project.json
プロジェクトフォルダ\.forceignore
</code></pre>
<p>これらは必要に応じてバックアップまたは削除してください。</p>
<h2>完全初期化の確認方法</h2>
<h3>VS Codeの確認</h3>
<p><strong>コマンドプロンプトでの確認：</strong></p>
<pre><code class="language-cmd">code --version
</code></pre>
<p><strong>期待する結果：</strong> コマンドが認識されないエラー</p>
<p><strong>ファイル関連付けの確認：</strong></p>
<ol>
<li>任意の<code>.json</code>ファイルを右クリック</li>
<li>「プログラムから開く」にVS Codeが表示されないことを確認</li>
</ol>
<h3>Salesforce CLIの確認</h3>
<p><strong>新しいコマンドプロンプトで確認：</strong></p>
<pre><code class="language-cmd">sf --version
sfdx --version
sf org list
</code></pre>
<p><strong>期待する結果：</strong> すべてコマンドが認識されないエラー</p>
<h3>PowerShellでの詳細確認</h3>
<pre><code class="language-powershell">Get-Command code -ErrorAction SilentlyContinue
Get-Command sf -ErrorAction SilentlyContinue
Get-Command sfdx -ErrorAction SilentlyContinue
</code></pre>
<p><strong>期待する結果：</strong> 何も返されない</p>
<h2>トラブルシューティング</h2>
<h3>よくある問題と対処法</h3>
<table>
<thead>
<tr>
<th>問題</th>
<th>原因</th>
<th>対処法</th>
</tr>
</thead>
<tbody>
<tr>
<td>VS Codeが完全に削除されない</td>
<td>プロセスが残存</td>
<td>タスクマネージャーでプロセス強制終了</td>
</tr>
<tr>
<td>設定ファイルが削除できない</td>
<td>ファイルが使用中</td>
<td>セーフモードで削除</td>
</tr>
<tr>
<td>コマンドがまだ認識される</td>
<td>環境変数が残存</td>
<td>システム再起動後に再確認</td>
</tr>
<tr>
<td>Salesforce認証が残る</td>
<td>キーチェーンに保存</td>
<td>資格情報マネージャーで削除</td>
</tr>
</tbody>
</table>
<h3>Windows資格情報マネージャーのクリーンアップ</h3>
<p>Salesforce CLIは認証情報をWindows資格情報マネージャーに保存することがあります。</p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>control keymgr.dll</code></li>
<li>「<strong>Windows資格情報</strong>」タブ</li>
<li>Salesforce関連の資格情報を削除</li>
</ol>
<h2>追加のクリーンアップ手順</h2>
<h3>システム全体のクリーンアップ</h3>
<p><strong>推奨ツール：</strong></p>
<ul>
<li><strong>CCleaner</strong>: レジストリとテンポラリファイルの削除</li>
<li><strong>Windows ディスククリーンアップ</strong>: 標準機能でのクリーンアップ</li>
<li><strong>Revo Uninstaller</strong>: より徹底的なアンインストール</li>
</ul>
<h3>開発フォルダの確認</h3>
<p>プロジェクトフォルダ内の隠しファイルも確認：</p>
<pre><code>.vscode/
.sfdx/
.sf/
node_modules/ （Node.jsプロジェクトの場合）
</code></pre>
<h2>セキュリティ上の注意点</h2>
<h3>認証情報の処理</h3>
<p><strong>重要</strong>: 以下の情報が完全に削除されているか確認してください：</p>
<ul>
<li><strong>OAuth トークン</strong>: Salesforce組織への認証</li>
<li><strong>SSH キー</strong>: Git連携用</li>
<li><strong>API キー</strong>: 各種サービス連携用</li>
<li><strong>パスワード</strong>: 保存されたパスワード</li>
</ul>
<h3>機密データの確認</h3>
<p>開発中のプロジェクトに機密情報が含まれていないか確認：</p>
<ul>
<li>データベース接続文字列</li>
<li>API エンドポイント</li>
<li>顧客データのサンプル</li>
</ul>
<h2>再インストール時のベストプラクティス</h2>
<h3>VS Code再インストール</h3>
<p><strong>推奨手順：</strong></p>
<ol>
<li>公式サイトから最新版をダウンロード</li>
<li><strong>System Installer</strong>（全ユーザー用）を選択</li>
<li>必要な拡張機能のみを段階的にインストール</li>
<li>設定は必要に応じて手動で再構成</li>
</ol>
<h3>Salesforce CLI再インストール</h3>
<p><strong>推奨手順：</strong></p>
<ol>
<li>公式ドキュメントで最新のインストール方法を確認</li>
<li><code>sf</code> CLI（新バージョン）の使用を推奨</li>
<li>組織への再認証は必要な分のみ実行</li>
<li>プロジェクト設定は最小限から開始</li>
</ol>
<h2>まとめ</h2>
<p>この手順により、VS CodeとSalesforce CLIを完全に初期化できます。</p>
<p><strong>最終チェックリスト：</strong></p>
<h3>VS Code</h3>
<ul>
<li><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;" /> アプリケーションのアンインストール</li>
<li><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;" /> ユーザーデータフォルダの削除</li>
<li><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;" /> 拡張機能データの削除</li>
<li><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;" /> レジストリエントリの削除</li>
<li><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;" /> 環境変数の確認</li>
</ul>
<h3>Salesforce CLI</h3>
<ul>
<li><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;" /> 組織からのログアウト</li>
<li><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;" /> CLIのアンインストール</li>
<li><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;" /> 設定ファイルとキャッシュの削除</li>
<li><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;" /> 環境変数のクリーンアップ</li>
<li><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;" /> 資格情報マネージャーの確認</li>
</ul>
<h3>全体</h3>
<ul>
<li><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;" /> コマンド認識の確認</li>
<li><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;" /> システムの再起動</li>
<li><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;" /> セキュリティチェック</li>
</ul>
<p><strong>重要なリマインダー：</strong></p>
<ul>
<li>作業前に重要なプロジェクトとコードをバックアップ</li>
<li>認証情報は安全に管理</li>
<li>段階的な再インストールを推奨</li>
</ul>
<p>完全な初期化により、開発環境の問題を根本的に解決し、クリーンな状態からの開発が可能になります。</p>
<hr />
<p><em>この記事が開発環境のクリーンアップに役立ちましたら、ぜひ他の開発者の方にもシェアしてください！</em></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5497"
					data-ulike-nonce="0efe787f8a"
					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_5497"><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>Windows 10でNode.js/Gitを完全アンインストールする方法【詳細解説】</title>
		<link>https://creativecontentlabtokyo.com/windows-10-nodejs-git-complete-uninstall-guide/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Sat, 21 Jun 2025 05:08:23 +0000</pubDate>
				<category><![CDATA[環境構築]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Node.js]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[アンインストール]]></category>
		<category><![CDATA[環境初期化]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5493</guid>

					<description><![CDATA[開発環境をクリーンに保つため、Node.jsやGitを完全にアンインストールしたい場面があります。単純にアンインストールしただけでは、環境変数や設定ファイルが残…]]></description>
										<content:encoded><![CDATA[<p>開発環境をクリーンに保つため、Node.jsやGitを完全にアンインストールしたい場面があります。単純にアンインストールしただけでは、環境変数や設定ファイルが残ってしまい、再インストール時に問題が発生することがあります。</p>
<p>この記事では、Windows 10でNode.jsとGitを完全に削除し、環境を初期化する詳細な手順をご紹介します。</p>
<h2>なぜ完全アンインストールが必要なのか</h2>
<p>通常のアンインストールでは以下のような問題が残ることがあります：</p>
<ul>
<li>環境変数にパスが残存</li>
<li>設定ファイルやキャッシュファイルが残る</li>
<li>レジストリエントリが残存</li>
<li>再インストール時の競合やエラー</li>
</ul>
<p>これらを避けるために、完全なクリーンアップが重要です。</p>
<h2>Node.jsの完全アンインストール手順</h2>
<h3>ステップ1: コントロールパネルからの基本アンインストール</h3>
<p>まず、Windows標準のアンインストール機能を使用します。</p>
<ol>
<li><strong>Windowsキー + R</strong>を押して「ファイル名を指定して実行」を開く</li>
<li><code>appwiz.cpl</code>と入力してEnterキーを押す</li>
<li>プログラム一覧から「<strong>Node.js</strong>」を見つける</li>
<li>右クリックして「<strong>アンインストール</strong>」を選択</li>
<li>アンインストールウィザードの指示に従って完了</li>
</ol>
<h3>ステップ2: 残存ファイルとフォルダの手動削除</h3>
<p>アンインストール後も残る可能性があるフォルダを手動で削除します。</p>
<p><strong>削除対象フォルダ一覧：</strong></p>
<pre><code>C:\Program Files\nodejs
C:\Program Files (x86)\nodejs
C:\Users\[ユーザー名]\AppData\Roaming\npm
C:\Users\[ユーザー名]\AppData\Roaming\npm-cache
C:\Users\[ユーザー名]\.npm
C:\Users\[ユーザー名]\node_modules
</code></pre>
<p><strong>削除方法：</strong></p>
<ol>
<li>エクスプローラーを開く</li>
<li>上記のパスを順番に確認</li>
<li>存在するフォルダがあれば削除</li>
<li>削除できない場合は、プロセスが動いていないか確認</li>
</ol>
<blockquote><p><strong>注意</strong>: <code>[ユーザー名]</code>は実際のユーザー名に置き換えてください。</p></blockquote>
<h3>ステップ3: 環境変数のクリーンアップ</h3>
<p>Node.js関連の環境変数を削除します。</p>
<p><strong>手順：</strong></p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>sysdm.cpl</code>と入力</li>
<li>「<strong>詳細設定</strong>」タブをクリック</li>
<li>「<strong>環境変数</strong>」ボタンをクリック</li>
<li>以下を確認・削除：
<ul>
<li><strong>PATH変数</strong>からNode.js関連パス（例：<code>C:\Program Files\nodejs</code>）を削除</li>
<li><strong>NODE_PATH</strong>変数があれば削除</li>
<li>その他NPM関連変数があれば削除</li>
</ul>
</li>
</ol>
<p><strong>システム環境変数とユーザー環境変数の両方を確認してください。</strong></p>
<h3>ステップ4: レジストリのクリーンアップ</h3>
<blockquote><p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 重要</strong>: レジストリ編集は慎重に行ってください。間違った操作はシステムに深刻な影響を与える可能性があります。</p></blockquote>
<p><strong>手順：</strong></p>
<ol>
<li><strong>Windowsキー + R</strong> → <code>regedit</code>と入力</li>
<li>以下の場所でNode.js関連エントリを削除：</li>
</ol>
<pre><code>HKEY_CURRENT_USER\Software\Node.js
HKEY_LOCAL_MACHINE\SOFTWARE\Node.js
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Node.js
</code></pre>
<p><strong>レジストリ編集のベストプラクティス：</strong></p>
<ul>
<li>編集前にレジストリのバックアップを作成</li>
<li>確実にNode.js関連のエントリのみを削除</li>
<li>不明なエントリは削除しない</li>
</ul>
<h2>Gitの完全アンインストール手順</h2>
<h3>ステップ1: コントロールパネルからのアンインストール</h3>
<ol>
<li><strong>Windowsキー + R</strong> → <code>appwiz.cpl</code></li>
<li>「<strong>Git</strong>」または「<strong>Git for Windows</strong>」を見つける</li>
<li>右クリックして「<strong>アンインストール</strong>」</li>
<li>アンインストールウィザードに従って完了</li>
</ol>
<h3>ステップ2: 残存ファイルとフォルダの削除</h3>
<p><strong>削除対象フォルダ：</strong></p>
<pre><code>C:\Program Files\Git
C:\Program Files (x86)\Git
C:\Users\[ユーザー名]\.gitconfig
C:\Users\[ユーザー名]\.git-credentials
C:\Users\[ユーザー名]\.gitignore_global
C:\Users\[ユーザー名]\AppData\Local\GitHubDesktop
</code></pre>
<p><strong>個人設定ファイルの取り扱い：</strong></p>
<ul>
<li><code>.gitconfig</code>: Git全体の設定</li>
<li><code>.git-credentials</code>: 認証情報</li>
<li><code>.gitignore_global</code>: グローバルignore設定</li>
</ul>
<p>これらは必要に応じてバックアップしてから削除してください。</p>
<h3>ステップ3: SSH鍵の削除（オプション）</h3>
<p>Git でSSH認証を使用していた場合：</p>
<pre><code>C:\Users\[ユーザー名]\.ssh
</code></pre>
<blockquote><p><strong>注意</strong>: SSH鍵は他のサービスでも使用している可能性があります。削除前に確認してください。</p></blockquote>
<h3>ステップ4: 環境変数のクリーンアップ</h3>
<p>環境変数の<strong>PATH</strong>からGit関連のパスを削除：</p>
<ul>
<li>通常：<code>C:\Program Files\Git\cmd</code></li>
<li>その他Git関連のパス</li>
</ul>
<h2>完全初期化の確認方法</h2>
<h3>コマンドプロンプトでの確認</h3>
<p>新しいコマンドプロンプトを開いて以下を実行：</p>
<pre><code class="language-cmd">node --version
npm --version
git --version
</code></pre>
<p><strong>期待する結果：</strong> すべて「&#8217;○○&#8217; は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」と表示される</p>
<h3>PowerShellでの詳細確認</h3>
<pre><code class="language-powershell">Get-Command node -ErrorAction SilentlyContinue
Get-Command npm -ErrorAction SilentlyContinue  
Get-Command git -ErrorAction SilentlyContinue
</code></pre>
<p><strong>期待する結果：</strong> 何も返されない（コマンドが見つからない）</p>
<h2>追加のクリーンアップ手順</h2>
<h3>システムクリーナーの使用</h3>
<p><strong>推奨ツール：</strong></p>
<ul>
<li><strong>CCleaner</strong>: レジストリとテンポラリファイルの一括削除</li>
<li><strong>Windows ディスククリーンアップ</strong>: 標準機能でのクリーンアップ</li>
</ul>
<h3>Windowsの再起動</h3>
<p>環境変数の変更を確実に反映させるため、作業完了後にシステムを再起動してください。</p>
<h2>重要な注意点とベストプラクティス</h2>
<h3>作業前の準備</h3>
<ol>
<li><strong>プロジェクトのバックアップ</strong>: 重要なコードや設定をバックアップ</li>
<li><strong>設定ファイルの保存</strong>: <code>.gitconfig</code>などの個人設定</li>
<li><strong>SSH鍵の確認</strong>: 他のサービスで使用していないか確認</li>
</ol>
<h3>安全な作業のために</h3>
<ul>
<li><strong>管理者権限</strong>: 一部の操作には管理者権限が必要</li>
<li><strong>レジストリバックアップ</strong>: レジストリ編集前にバックアップ作成</li>
<li><strong>段階的実行</strong>: 一度にすべて削除せず、段階的に確認</li>
</ul>
<h3>トラブルシューティング</h3>
<p><strong>よくある問題と対処法：</strong></p>
<table>
<thead>
<tr>
<th>問題</th>
<th>原因</th>
<th>対処法</th>
</tr>
</thead>
<tbody>
<tr>
<td>ファイルが削除できない</td>
<td>プロセスが実行中</td>
<td>タスクマネージャーで関連プロセスを終了</td>
</tr>
<tr>
<td>環境変数が反映されない</td>
<td>再起動していない</td>
<td>システムを再起動</td>
</tr>
<tr>
<td>コマンドがまだ認識される</td>
<td>パスが残存</td>
<td>環境変数を再確認</td>
</tr>
</tbody>
</table>
<h2>まとめ</h2>
<p>この手順により、Windows 10からNode.jsとGitを完全にアンインストールし、クリーンな環境に戻すことができます。</p>
<p><strong>チェックリスト：</strong></p>
<ul>
<li><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;" /> コントロールパネルからのアンインストール</li>
<li><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;" /> 残存ファイル・フォルダの削除</li>
<li><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;" /> 環境変数のクリーンアップ</li>
<li><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;" /> レジストリのクリーンアップ</li>
<li><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;" /> 動作確認</li>
<li><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;" /> システムの再起動</li>
</ul>
<p>完全な初期化後は、最新版のNode.jsとGitを新規インストールすることで、クリーンな開発環境を構築できます。</p>
<p><strong>次のステップ：</strong></p>
<p>新規インストール時は、公式サイトから最新版をダウンロードし、必要に応じてバージョン管理ツール（nvm-windowsなど）の導入も検討してみてください。</p>
<hr />
<p><em>この記事が開発環境のクリーンアップに役立ちましたら、ぜひシェアしてください！</em></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5493"
					data-ulike-nonce="f1942921ed"
					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_5493"><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>Einstein Activity Capture（活動キャプチャ）とMicrosoft Outlook でカレンダー（行動）や取引先責任者の同期方法について【②実施例】</title>
		<link>https://creativecontentlabtokyo.com/einstein-activity-capture-sync-methods-sample/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Fri, 20 Jun 2025 08:24:43 +0000</pubDate>
				<category><![CDATA[個別トピックス]]></category>
		<category><![CDATA[外部連携]]></category>
		<category><![CDATA[Einstein Activity Capture]]></category>
		<category><![CDATA[Einstein 活動キャプチャ]]></category>
		<category><![CDATA[Lightning Sync]]></category>
		<category><![CDATA[Salesforce for Outlook]]></category>
		<category><![CDATA[イベント同期]]></category>
		<category><![CDATA[カレンダー同期]]></category>
		<category><![CDATA[メール同期]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5430</guid>

					<description><![CDATA[Einstein活動キャプチャの同期設定について 前回は、Einstein活動キャプチャとMicrosoftのOutlook間をOAuth2.0で同期する設定を…]]></description>
										<content:encoded><![CDATA[<h2>Einstein活動キャプチャの同期設定について</h2>
<p>前回は、Einstein活動キャプチャとMicrosoftのOutlook間をOAuth2.0で同期する設定を実施しました。※前回の記事は以下を参照してください。</p>
<div class="cclt-compat-postgroup"><ul class="cclt-compat-postgroup__list"><li class="cclt-compat-postgroup__item"><a href="https://creativecontentlabtokyo.com/einstein-activity-capture-sync-methods/" class="cclt-compat-postgroup__link"><div class="cclt-compat-postgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><span class="cclt-compat-postgroup__title">Einstein Activity Capture（活動キャプチャ）とMicrosoft Outlookでカレンダー（行動）や取引先責任者の同期方法について【①設定編】</span></a></li></ul></div>
<p>今回の記事では、同期設定したユーザアカウントを使って、Salesforce⇔Microsoft Outlook 間で、実際にカレンダー（行動）を登録したり、取引先責任者を作成した場合に</p>
<p>どのようにデータが同期されるのか説明していきたいと思います。</p>
<h2>個人設定で、Einstein活動キャプチャを利用した同期処理の許可を行う</h2>
<p>①まずSalesforceにEinstein活動キャプチャで同期設定をしたユーザでログインします。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1091" class="alignnone wp-image-5438 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12-300x170.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12-1024x582.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12-768x436.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-12-1536x873.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②続いて、画面右上の個人アイコンをクリックして設定を実行して、私の個人情報のメニューを表示します。</p>
<p>接続済みアカウント＞メールとカレンダーアカウントをクリックすると以下のメッセージが表示されます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1041" class="alignnone wp-image-5439 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13-300x163.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13-1024x555.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13-768x416.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-13-1536x833.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></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 class="whitespace-normal break-words"><strong>統合するには、この同意を確認して同意してください。</strong></p>
<p class="whitespace-normal break-words">メールとカレンダーアカウントは、Salesforceシステム管理者によってすでに Salesforce に接続されています が、メールのキャプチャを開始する前に承認が必要です。これにより、メールを Salesforce に保存して、関連 する Salesforce レコードに関連付けることができるようになります。また、この統合により、メールの返信や メールテンプレートを生成したり、サービスの提供や改善を行ったりすることもできます。メールが共有される 方法については、Salesforce システム管理者の運営するデフォルトの言語と時差によって決まります。いつでも 目的の設定を更新し、メールのやり取りとメモのテキストが Salesforce でキャプチャされるかどうかを変更できま す。</p>
<p class="whitespace-normal break-words"><strong>プライバシーを保護し信頼を図るため、組織は次のように設定されています。</strong></p>
<p class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 自分と同僚間のみのメールは Salesforce で共有されません。</p>
<p class="whitespace-normal break-words"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Salesforce に追加されたメールでは、送信者、受信者、件名、日付、およびメール本文の インサイトが組織内のすべての Salesforce ユーザーと共有される場合があります。</p>
<p></div></div>
<p class="whitespace-normal break-words">③ これらの条件を承諾し、同意します。にチェックをいれて[次へ]をクリックします。</p>
<p>④活動共有設定画面では、Salesforceに追加された活動を共有する方法を設定します。ご自身の環境に合わせて設定してください。</p>
<p><img loading="lazy" decoding="async" width="969" height="687" class="alignnone wp-image-5440 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119.png 969w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-300x213.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-119-768x544.png 768w" sizes="auto, (max-width: 969px) 100vw, 969px" /></p>
<p>選択したら、保存ボタンをクリックしてください。</p>
<p>設定が完了すると以下のように画面上部にメッセージが表示されます。</p>
<p><img loading="lazy" decoding="async" width="1918" height="1072" class="alignnone wp-image-5442 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1.jpg 1918w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1-300x168.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1-1024x572.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1-768x429.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-120-1-1536x858.jpg 1536w" sizes="auto, (max-width: 1918px) 100vw, 1918px" /></p>
<h2>カレンダーの同期手順（Salesforce<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Microsoft Outlook）</h2>
<p>①SalesforceにEinstein活動キャプチャで同期設定をしたユーザでログインしたあと、カレンダー画面から新規行動を追加します。</p>
<p>※割り当て先は自身のユーザとして、件名や日時は自由に設定してから保存します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1123" class="alignnone wp-image-5448 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-1024x599.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-768x449.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-1536x898.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②保存して、以下のようにカレンダーに行動が登録されたことを確認します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="997" class="alignnone wp-image-5449 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122.png 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-300x156.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-1024x532.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-768x399.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-122-1536x798.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>③続いて、Microsoft Outlook の方に行動が同期されたか確認するためOutlookにログインします。</p>
<p>OutlookのログインURLは<a href="https://outlook.office.com/" rel="noopener">こちら（https://outlook.office.com/）</a></p>
<p>④ログインして、カレンダーを表示すると先ほどSalesforceのカレンダーから登録した行動と同じ内容の予定が同期されていることが確認できます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1120" class="alignnone wp-image-5450 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-1024x597.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-768x448.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-1536x896.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></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>
<h2>MS365 Outlookで編集したカレンダーの予定をSalesforceへ同期（Microsoft Outlook <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Salesforce）</h2>
<p>さきほど同期されたカレンダーの予定表について、MS365のOutlook側で編集してSalesforceに同期されるか確認します。</p>
<p>①Outlookのカレンダーから予定を編集して保存します。以下の例では、件名に（編集）と付け加えてます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1126" class="alignnone wp-image-5453 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3-300x176.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3-1024x601.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3-768x450.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-3-1536x901.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><img loading="lazy" decoding="async" width="1921" height="1127" class="alignnone wp-image-5454 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4.jpg 1921w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4-300x176.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4-1024x601.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4-768x451.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-123-4-1536x901.jpg 1536w" sizes="auto, (max-width: 1921px) 100vw, 1921px" /></p>
<p>②保存が終わったら、またSalesforceに戻ってカレンダーを更新します。</p>
<p>③Salesforceに戻って、カレンダーを再表示してみましょう。</p>
<p>以下のように、タイトルが編集された状態でMicrosoft Outlook から同期されたことが確認できます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1000" class="alignnone wp-image-5456 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124.png 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124-300x156.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124-1024x533.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124-768x400.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-124-1536x800.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2>Microsoft Outlook のカレンダーで新規予定を登録して同期（Microsoft Outlook <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Salesforce）</h2>
<p>今度は、逆にMicrosoft Outlook 側で新規予定を登録してSalesforceのカレンダーに反映されるか検証します。</p>
<p>①Microsoft Outlook のカレンダーを表示して、以下の内容で新規予定を登録します。</p>
<p>※タイトルや日付の内容は自由に登録してください。　<span class="hutoaka">※出席者には、Salesforceに登録済みアカウントのユーザを指定してください。</span></p>
<p><img loading="lazy" decoding="async" width="1920" height="1123" class="alignnone wp-image-5458 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1-1024x599.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1-768x449.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1-1536x898.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②保存した情報をSalesforceのカレンダー側で確認します。</p>
<p>同じ内容がカレンダーに登録されていることを確認できました。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1000" class="alignnone wp-image-5459 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125.png 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-300x156.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1024x533.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-768x400.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-125-1536x800.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>出席者にSalesforceのユーザを指定した場合には、以下のように非招集者に登録されます。</p>
<p><img loading="lazy" decoding="async" width="1921" height="1003" class="alignnone wp-image-5461 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127.jpg 1921w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-300x157.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1024x535.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-768x401.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1536x802.jpg 1536w" sizes="auto, (max-width: 1921px) 100vw, 1921px" /></p>
<p>詳細レコード</p>
<p><img loading="lazy" decoding="async" width="1920" height="1003" class="alignnone wp-image-5462 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1-300x157.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1-1024x535.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1-768x401.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-1-1536x802.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2>繰り返しの定期行動（予定）の挙動について①（Microsoft Outlook <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Salesforce）</h2>
<p>繰り返しの予定についても同期処理は正常に行われることを検証します。</p>
<p>①Microsoft Outlook のカレンダーから以下のように新規繰り返しのイベントを登録します。</p>
<p>繰り返し間隔の日数や曜日を指定して保存します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="923" class="alignnone wp-image-5464 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3-300x144.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3-1024x492.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3-768x369.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-3-1536x738.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②イベントのタイトルや説明を入力して保存します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="920" class="alignnone wp-image-5465 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4-300x144.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4-1024x491.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4-768x368.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-4-1536x736.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p><img loading="lazy" decoding="async" width="1920" height="927" id="thepasted-26" class="alignnone wp-image-5466 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5-300x145.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5-1024x494.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5-768x371.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-5-1536x742.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>③Salesforceのカレンダーを再表示します。</p>
<p>すると以下のように繰り返し設定された行動が登録されていることを確認できます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="877" class="alignnone wp-image-5467 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6-300x137.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6-1024x468.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6-768x351.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-6-1536x702.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>④レコードを開くと、以下のように表示されます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1082" class="alignnone wp-image-5468 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7-1024x577.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7-768x433.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-7-1536x866.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2>繰り返しの定期行動（予定）の挙動について②（Salesforce<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Microsoft Outlook）</h2>
<p>今度は逆にSalesforceで登録した定期行動がMicrosoft Outlook に同期されるか検証します。</p>
<p>デフォルトでは、以下の新規行動画面では繰り返しの定期予定が表示されていません。</p>
<p><img loading="lazy" decoding="async" width="938" height="785" class="alignnone wp-image-5469 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127.png 938w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-300x251.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-127-768x643.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /></p>
<p>上記のように繰り返しの行動が登録できない場合は、以下の設定を確認してください。</p>
<p>※Salesforceの行動で定期的な繰り返しを登録するには「活動設定」から「定期的なイベントの作成を有効にする」を実行しておく必要があります。</p>
<p>また、行動の画面レイアウトで繰り返しの項目を表示するようにしておきます！</p>
<p><img loading="lazy" decoding="async" width="1920" height="1120" class="alignnone wp-image-5470 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1024x597.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-768x448.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1536x896.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>①Salesforceのカレンダーから新規行動を登録します。</p>
<p>繰り返しにチェックを入れて頻度を設定して保存します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1121" class="alignnone wp-image-5471 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1-1024x598.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1-768x448.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1-1536x897.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②繰り返しの行動が正しく登録されたことを確認します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1076" class="alignnone wp-image-5472 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2-300x168.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2-1024x574.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2-768x430.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-2-1536x861.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>③今度はMicrosoft Outlook のカレンダーを表示します。</p>
<p>以下のようにSalesforce側で登録した繰り返しの内容と同じ内容が同期されていることが確認できます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1123" class="alignnone wp-image-5473 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3-1024x599.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3-768x449.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-3-1536x898.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>詳細を開くと、定期行動として登録されていることを確認できます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1124" class="alignnone wp-image-5474 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4-300x176.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4-1024x599.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4-768x450.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-4-1536x899.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<h2>取引先責任者の同期確認（Salesforce<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Microsoft Outlook の連絡先）</h2>
<p>Salesforceの取引先責任者の情報がMicrosoft Outlook の連絡先に同期して追加されるか検証します。</p>
<p>①Salesforceの取引先を新規登録します。お好きな名前で登録してください。例ではABC商事としてます。</p>
<p><img loading="lazy" decoding="async" width="1920" height="922" class="alignnone wp-image-5475 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5-300x144.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5-1024x492.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5-768x369.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-5-1536x738.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②作成した取引先に新規取引先責任者を登録します。名前は自由に設定してください。※取引先は先ほど作成した取引先を設定</p>
<p><img loading="lazy" decoding="async" width="1920" height="925" class="alignnone wp-image-5477 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7-300x145.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7-1024x493.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7-768x370.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-7-1536x740.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>③Microsoft Outlook の連絡先を表示すると先ほど追加したSalesforceの取引先責任者の情報が同期されていることを確認できます。</p>
<p><img loading="lazy" decoding="async" width="1918" height="926" class="alignnone wp-image-5478 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128.png 1918w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-300x145.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1024x494.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-768x371.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-128-1536x742.png 1536w" sizes="auto, (max-width: 1918px) 100vw, 1918px" /></p>
<div class="cclt-compat-cmemo" style="background-color:#FFF3E0;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#FFA726;"></span><div class="cclt-compat-cmemo__text">連絡先の場合もMicrosoft Outlook 側で新規登録した場合や編集を行った場合には、Salesforce側に新規追加・編集された内容が同期されます。</div></div>
<h2>Outlookからメールを送信した場合（Microsoft Outlook <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27a1.png" alt="➡" class="wp-smiley" style="height: 1em; max-height: 1em;" />Salesforceのアクティビティ）連携</h2>
<p>Microsoft Outlook から取引先責任者に対してメールを送付した場合、Salesforceのアクティビティに同期されることを検証します。</p>
<p>①Microsoft Outlook でメールを新規作成して、宛先にSalesforceに登録されている取引先責任者を指定して送信します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="924" class="alignnone wp-image-5481 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1-300x144.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1-1024x493.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1-768x370.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-1-1536x739.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>②Salesforceの取引先や取引先責任者のタイムライン（アクティビティ）にメールを送信した履歴が表示されます。</p>
<p>※以下の図のように取引先責任者のメールアドレスが不正（配信不可）の場合には、配信不能と表示されます。</p>
<p>（取引先画面）</p>
<p><img loading="lazy" decoding="async" width="1910" height="870" class="alignnone wp-image-5482 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2.jpg 1910w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2-300x137.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2-1024x466.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2-768x350.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-2-1536x700.jpg 1536w" sizes="auto, (max-width: 1910px) 100vw, 1910px" /></p>
<p>（取引先責任者画面）</p>
<p><img loading="lazy" decoding="async" width="1912" height="871" class="alignnone wp-image-5483 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3.jpg 1912w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3-300x137.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3-1024x466.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3-768x350.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-3-1536x700.jpg 1536w" sizes="auto, (max-width: 1912px) 100vw, 1912px" /></p>
<h2>補足（項目の対応付けについて）</h2>
<p>同期する項目については、以下の画面から項目の対応付け設定で指定することが可能です。</p>
<p><img loading="lazy" decoding="async" width="932" height="987" class="alignnone wp-image-5484 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130.png 932w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-283x300.png 283w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-130-768x813.png 768w" sizes="auto, (max-width: 932px) 100vw, 932px" /></p>
<p><img loading="lazy" decoding="async" width="933" height="985" class="alignnone wp-image-5485 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-131.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-131.png 933w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-131-284x300.png 284w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-131-768x811.png 768w" sizes="auto, (max-width: 933px) 100vw, 933px" /></p>
<h2>まとめ</h2>
<p>いかがでしたでしょうか。Einstein活動キャプチャを使うことで、Microsoft やGoogleと簡単に連携し、カレンダーや連絡先を同期することができることが確認できたと思います。</p>
<p>&nbsp;</p>
<p><img decoding="async" id="thepasted-1" src="https://videos.openai.com/vg-assets/assets%2Ftask_01jy0wkz4aeas90g8wfv8f8b51%2F1750229260_img_3.webp?st=2025-06-18T06%3A08%3A15Z&amp;se=2025-06-24T07%3A08%3A15Z&amp;sks=b&amp;skt=2025-06-18T06%3A08%3A15Z&amp;ske=2025-06-24T07%3A08%3A15Z&amp;sktid=a48cca56-e6da-484e-a814-9c849652bcb3&amp;skoid=aa5ddad1-c91a-4f0a-9aca-e20682cc8969&amp;skv=2019-02-02&amp;sv=2018-11-09&amp;sr=b&amp;sp=r&amp;spr=https%2Chttp&amp;sig=U1GmDibK5iBDTUXlM7QCMwANtZ8HCrP%2BEV09jQBJvBs%3D&amp;az=oaivgprodscus" alt="Generated image" /></p>
<p><!-- notionvc: 686cf3f5-2df0-4220-8c39-f32a0a942000 --></p>
<p><!-- notionvc: a50ba131-e1db-4b7d-b4d5-93bb762dced4 --></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5430"
					data-ulike-nonce="d5590b13e9"
					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_5430"><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>Microsoft Office 365の試用版（無料）を使ってSalesforceとの連携を検証する</title>
		<link>https://creativecontentlabtokyo.com/salesforce-integration-using-microsoft-office365/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Fri, 20 Jun 2025 04:05:44 +0000</pubDate>
				<category><![CDATA[外部連携]]></category>
		<category><![CDATA[Einstein Activity Capture]]></category>
		<category><![CDATA[Einstein活動キャプチャ]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Outlook]]></category>
		<category><![CDATA[イベント連携]]></category>
		<category><![CDATA[メール連携]]></category>
		<guid isPermaLink="false">https://creativecontentlabtokyo.com/?p=5376</guid>

					<description><![CDATA[はじめに Salesforce開発でMicrosoftのOffice連携やAzureとの連携を行いたいという要件も増えてきましたが、提案活動や要件定義の段階で事…]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Salesforce開発でMicrosoftのOffice連携やAzureとの連携を行いたいという要件も増えてきましたが、提案活動や要件定義の段階で事前に検証してみたり、デモでお客様にお見せしたいという場合もあると思います。</p>
<p>会社によっては、自社のアカウントを使って連携することもできると思いますが、個人で検証する場合には、ライセンスを購入するのは負荷が高いと思います。</p>
<p>現在は、Microsoft OfficeやAzureは、試用版（無料）で利用できるため、AzureのEntraidとSalesforceのSSO連携やMicrosoftOfficeのOutlook連携などは無料枠の中で検証できます。</p>
<div class="cclt-compat-cmemo" style="background-color:#ffebee;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#ef5350;"></span><div class="cclt-compat-cmemo__text">試用版の登録には、クレジットカードが必要となります。※1か月以内に解約すれば料金はかかりませんが、一時的にオーソリゼーション（Authorization）が行われ引き落とし可能なカードかどうかのチェックが実行されますのでご注意ください。</div></div>
<p>本記事では、Microsoftの無料トライアルアカウントの作成手順を紹介します。</p>
<h2>Microsoftサービスアカウントの作成</h2>
<h3>サービスアカウントの作成</h3>
<p>①まずは、Microsoft 365管理センターのサイトにアクセスします。</p>
<p>公式HPは<a href="https://www.microsoft.com/ja-jp/microsoft-365/business/microsoft-365-administration" rel="noopener">こちら（https://www.microsoft.com/ja-jp/microsoft-365/business/microsoft-365-administration）</a></p>
<p>②「1か月無料で試す」というボタンが右下にあるのでこちらをクリックします。</p>
<p><img loading="lazy" decoding="async" width="1403" height="607" class="alignnone wp-image-5381 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.jpg 1403w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-300x130.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1024x443.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-768x332.jpg 768w" sizes="auto, (max-width: 1403px) 100vw, 1403px" /></p>
<p>③Microsoft 365 Business Standard &#8211; 試用版で、ユーザ数や期間請求単位を設定して次へをクリックします。</p>
<p><img loading="lazy" decoding="async" width="1903" height="1122" class="alignnone wp-image-5382 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1.jpg 1903w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1-300x177.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1-1024x604.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1-768x453.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1-1536x906.jpg 1536w" sizes="auto, (max-width: 1903px) 100vw, 1903px" /></p>
<div class="cclt-compat-cmemo" style="background-color:#ffebee;color:#000000;border:px solid ;"><span class="cclt-compat-cmemo__icon fa fa-file-text-o" style="color:#ef5350;"></span><div class="cclt-compat-cmemo__text">試用版は一カ月以内にキャンセル（解約）しない場合は、課金対象となります。一時的な疎通確認の場合には、検証が終わったら解約手続きを忘れないように気を付けましょう</div></div>
<p>④続いて、支払い方法を追加します。以下の画面でいつまでにキャンセルすれば費用が掛からないか確認することができます。</p>
<p><img loading="lazy" decoding="async" width="1915" height="1079" class="alignnone wp-image-5383 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2.jpg 1915w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2-300x169.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2-1024x577.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2-768x433.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-2-1536x865.jpg 1536w" sizes="auto, (max-width: 1915px) 100vw, 1915px" /></p>
<p>⑤支払い方法が未登録の場合は、先にクレジットカードの情報を登録して、その後レビューと確認画面で、支払い方法、住所などを確認します。</p>
<p>※最後に「無料版を開始」ボタンをクリックします。</p>
<p><img loading="lazy" decoding="async" width="1902" height="1124" class="alignnone wp-image-5384 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3.jpg 1902w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3-300x177.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3-1024x605.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3-768x454.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-3-1536x908.jpg 1536w" sizes="auto, (max-width: 1902px) 100vw, 1902px" /></p>
<h3>アカウントを作成</h3>
<p>今度は、Salesforceとの連携を検証するための専用アカウントを作成しましょう。</p>
<p>①登録したメールアドレスを使って管理者サインインのボタンからログインします。</p>
<p><a href="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.jpg"><img loading="lazy" decoding="async" class="alignnone size-full wp-image-5381" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.jpg" alt="" width="1403" height="607" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.jpg 1403w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-300x130.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1024x443.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-768x332.jpg 768w" sizes="auto, (max-width: 1403px) 100vw, 1403px" /></a></p>
<p>②Microsoft 365 管理センターの画面が表示されたら、サイドメニューのユーザー&gt;アクティブなユーザーを選択します。<img loading="lazy" decoding="async" width="1899" height="1129" class="alignnone wp-image-5385 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4.jpg 1899w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4-300x178.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4-1024x609.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4-768x457.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-4-1536x913.jpg 1536w" sizes="auto, (max-width: 1899px) 100vw, 1899px" /></p>
<p>③アクティブなユーザ画面が表示されたら、ユーザの追加ボタンをクリックします。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1120" class="alignnone wp-image-5387 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6-1024x597.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6-768x448.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-6-1536x896.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>④続いて姓名、表示名、ユーザー名を入力します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1120" class="alignnone wp-image-5388 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107.png 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-300x175.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1024x597.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-768x448.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-107-1536x896.png 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>⑤製品ライセンスの割り当ては、場所：日本を選択して、ライセンスはユーザに製品ライセンスを割り当てるを選択し、Microsoft 365 Business Standardを選択します。</p>
<p><img loading="lazy" decoding="async" width="1920" height="1120" class="alignnone wp-image-5390 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-300x175.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-1024x597.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-768x448.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-1536x896.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>次のオプション設定は特に設定する必要はないためスキップして完了します。</p>
<h3>新規作成したユーザでOutlookへログイン</h3>
<p>新規作成したユーザ「」を使ってOutlookへログインしましょう。</p>
<p>OutlookのURLは<a href="https://outlook.office.com/" rel="noopener">こちら（https://outlook.office.com/）</a></p>
<p><img loading="lazy" decoding="async" width="1913" height="1113" class="alignnone wp-image-5391 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109.png 1913w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-300x175.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-1024x596.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-768x447.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-109-1536x894.png 1536w" sizes="auto, (max-width: 1913px) 100vw, 1913px" /></p>
<p>※新規ユーザーの場合、初回ログイン時には、パスワード変更の画面が表示されるため、変更しておきましょう。</p>
<p>管理者用のアカウントと疎通確認用のユーザを作成したら、実際に検証作業が行える状態となります。</p>
<h2>Salesforce Einstein Activity Capture（活動キャプチャ）との連携</h2>
<p>SalesforceとのOutlook連携は、SalesforceのOutlook IntegrationやEinstein活動キャプチャを使うのが推奨されています。</p>
<p>カレンダーの同期イメージ（左がSalesforceで右がOutlook）　※どちらのサービスで登録しても同期される（双方向の同期処理）</p>
<p><img loading="lazy" decoding="async" width="1920" height="501" class="alignnone wp-image-5393 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111.jpg" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111.jpg 1920w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111-300x78.jpg 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111-1024x267.jpg 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111-768x200.jpg 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-111-1536x401.jpg 1536w" sizes="auto, (max-width: 1920px) 100vw, 1920px" /></p>
<p>カレンダー（イベント）以外にも連絡先（取引先責任者）なども同期可能となっています。</p>
<p>Einstein活動キャプチャのOAuth2.0連携は比較的簡単にできるので試してみたい方はこちらの記事が参考になります。</p>
<div class="cclt-compat-postgroup"><ul class="cclt-compat-postgroup__list"><li class="cclt-compat-postgroup__item"><a href="https://creativecontentlabtokyo.com/einstein-activity-capture-sync-methods/" class="cclt-compat-postgroup__link"><div class="cclt-compat-postgroup__thumb"><img decoding="async" width="150" height="150" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-150x150.jpg" class="attachment-thumbnail size-thumbnail wp-post-image" alt="" loading="lazy" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-150x150.jpg 150w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/eye-catch-women-glass-100x100.jpg 100w" sizes="auto, (max-width: 150px) 100vw, 150px" /></div><span class="cclt-compat-postgroup__title">Einstein Activity Capture（活動キャプチャ）とMicrosoft Outlookでカレンダー（行動）や取引先責任者の同期方法について【①設定編】</span></a></li></ul></div>
<p><!-- notionvc: 7f03ef04-c5f1-4496-8ce5-aa7b71551c1a --></p>
<p><!-- notionvc: e64fa51b-4e61-489a-a01e-40f781cecc53 --></p>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5376"
					data-ulike-nonce="23937845e9"
					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_5376"><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のストレージ容量試算機能（シミュレーター）の使い方</title>
		<link>https://creativecontentlabtokyo.com/how-to-use-salesforce_storage_calculator/</link>
		
		<dc:creator><![CDATA[セールスフォース標準化推進ラボ]]></dc:creator>
		<pubDate>Thu, 19 Jun 2025 14:40:25 +0000</pubDate>
				<category><![CDATA[便利ツール]]></category>
		<category><![CDATA[要件定義]]></category>
		<category><![CDATA[設計]]></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=5357</guid>

					<description><![CDATA[はじめに Salesforce導入案件では、要件定義工程で非機能の検討を行う際に、必要となるストレージ容量の算出を行うことが多いと思います。 移行データのボリュ…]]></description>
										<content:encoded><![CDATA[<h2>はじめに</h2>
<p>Salesforce導入案件では、要件定義工程で非機能の検討を行う際に、必要となるストレージ容量の算出を行うことが多いと思います。</p>
<p>移行データのボリュームや将来的なデータの増加見込みを考慮して試算を行いますが、毎回エクセルとかで数式を作成して計算している方も多いと思います。</p>
<p>毎回エクセルファイルを作成してというのも面倒なので、簡単にストレージの計算が行えるようにWEBのシミュレーター機能を作成してみました。</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>今回は、このツールの機能や使い方を簡単に説明していきたいと思います。</p>
<p>ツールは<a href="https://creativecontentlabtokyo.com/salesforce_storage_calculator/">こちら</a>のページにて利用可能となっております。</p>
<h2>Salesforceストレージ容量シミュレーターの仕様について</h2>
<p>本シミュレーターでは、以下の機能を実装しています。</p>
<div class="cclt-compat-mybox st-mybox-class st-title-under st-list-border st-list-check" 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>
<ul>
<li>オブジェクトの追加・削除：試算対象のオブジェクトを追加・削除するボタンを配置してます。</li>
<li>CSVファイルに出力：計算結果をそのままエクセルで開ける形式のファイルに出力</li>
<li>TSVファイルに出力：タブ区切りのファイルへの出力</li>
<li>クリップボードへ保存：計算結果をクリップボードへコピー</li>
<li>試算方法：
<ul>
<li>累積レコード数 = ユーザー数 × 月間レコード登録数 × 12ヶ月 × 保存期間 × 成長率考慮</li>
<li> ストレージ使用量 = 累積レコード数 × 2KB</li>
<li>成長率は複利計算で適用されます</li>
</ul>
</li>
</ul>
<p></div></div>
<p>&nbsp;</p>
<h2>ツールの利用方法</h2>
<h3>基本操作</h3>
<p><a href="https://creativecontentlabtokyo.com/salesforce_storage_calculator/">ストレージ容量試算画面</a>を開くと以下の画面が表示されます。デフォルトでは、Accountなどのオブジェクト3つのレコードを初期表示しています。</p>
<p>上部は、試算のための入力フィールドが表示されます。</p>
<p><img loading="lazy" decoding="async" width="1060" height="594" class="alignnone wp-image-5363 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-99.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-99.png 1060w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-99-300x168.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-99-1024x574.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-99-768x430.png 768w" sizes="auto, (max-width: 1060px) 100vw, 1060px" /></p>
<h4>オブジェクトの追加と削除</h4>
<p>オブジェクトを追加ボタン：クリックすると以下のように1行レコードが追加されます。</p>
<p><img loading="lazy" decoding="async" width="1019" height="467" class="alignnone wp-image-5365 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-101.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-101.png 1019w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-101-300x137.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-101-768x352.png 768w" sizes="auto, (max-width: 1019px) 100vw, 1019px" /></p>
<p>レコードの一番右の列にある削除ボタンをクリックすると明細レコードが削除されます。</p>
<p><img loading="lazy" decoding="async" width="1040" height="441" class="alignnone wp-image-5366 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-102.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-102.png 1040w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-102-300x127.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-102-1024x434.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-102-768x326.png 768w" sizes="auto, (max-width: 1040px) 100vw, 1040px" /></p>
<h4>容量計算</h4>
<p>オブジェクト名を入力後、以下の項目を入力することで自動的に計算が行われます。</p>
<ol>
<li>ユーザ数：オブジェクトを利用するユーザ数を入力します。</li>
<li>月間レコード登録数/ユーザー：1ユーザ当たりの月間の登録レコード数を入力します。</li>
<li>保存期間（年）：レコードの保存期間を年単位で入力します。</li>
<li>成長率（%/年）：年間当たりのレコードの成長率（増加率）を入力します。</li>
</ol>
<p>上記の項目はそれぞれ値を変更する度に都度計算が行われ、画面下部に計算結果が表示されます。</p>
<h4>シミュレーション結果の表示</h4>
<p>ストレージ使用量のサマリーとして以下の内容が自動計算されて表示されます。</p>
<p><img loading="lazy" decoding="async" width="1044" height="661" id="thepasted-8" class="alignnone wp-image-5367 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-103.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-103.png 1044w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-103-300x190.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-103-1024x648.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-103-768x486.png 768w" sizes="auto, (max-width: 1044px) 100vw, 1044px" /></p>
<p>①総レコード数：画面上部で入力した各オブジェクト毎のユーザ数ｘ月間レコード登録数ｘ12カ月ｘ保存期間ｘ成長率で計算したレコードの総数を表示</p>
<p>②総ストレージ使用量：①総レコード数ｘ2KBの結果をGB換算して表示</p>
<p>③月間増加量：月あたりのストレージの増加容量を表示</p>
<p>④年間増加量：年間あたりのストレージの増加容量を表示</p>
<h3>CSVファイル出力</h3>
<p>計算した結果をCSV形式やTSV形式で出力することができます。</p>
<p><img loading="lazy" decoding="async" width="1042" height="198" class="alignnone wp-image-5369 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-105.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-105.png 1042w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-105-300x57.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-105-1024x195.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-105-768x146.png 768w" sizes="auto, (max-width: 1042px) 100vw, 1042px" /></p>
<h4>CSV形式で出力した場合</h4>
<p>CSV形式で出力したファイルをエクセルで開くと以下のように表示されます。</p>
<p><img loading="lazy" decoding="async" width="1782" height="1020" class="alignnone wp-image-5362 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98.png 1782w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98-300x172.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98-1024x586.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98-768x440.png 768w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-98-1536x879.png 1536w" sizes="auto, (max-width: 1782px) 100vw, 1782px" /></p>
<h4>TSVファイルで出力した場合</h4>
<p>TSV（タブ区切りファイル）の場合は、以下のように表示されます。</p>
<p><img loading="lazy" decoding="async" width="1415" height="356" class="alignnone wp-image-5370 size-full" src="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-106.png" srcset="https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-106.png 1415w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-106-300x75.png 300w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-106-1024x258.png 1024w, https://creativecontentlabtokyo.com/wp-content/uploads/2025/06/Pasted-106-768x193.png 768w" sizes="auto, (max-width: 1415px) 100vw, 1415px" /></p>
<h4>クリップボードへコピーする</h4>
<p>クリップボードへコピーするを実行するとクリップボード内に以下の内容がコピーされます。</p>
<p>Salesforce ストレージ容量試算結果<br />
=================================</p>
<p>出力日時: 2025/6/19 23:37:29</p>
<p>【サマリー】<br />
総レコード数: 2,079,899<br />
総ストレージ使用量: 3.967 GB<br />
月間増加量: 0.0751 GB<br />
年間増加量: 0.901 GB</p>
<p>【詳細結果】<br />
Account:<br />
&#8211; ユーザー数: 150<br />
&#8211; 月間レコード登録数/ユーザー: 200<br />
&#8211; 保存期間: 5年<br />
&#8211; 成長率: 5%/年<br />
&#8211; 累積レコード数: 1,989,227<br />
&#8211; ストレージ使用量: 3.794 GB<br />
&#8211; 月間増加量: 0.0696 GB<br />
&#8211; 構成比: 95.6%</p>
<p>Contact:<br />
&#8211; ユーザー数: 100<br />
&#8211; 月間レコード登録数/ユーザー: 20<br />
&#8211; 保存期間: 3年<br />
&#8211; 成長率: 10%/年<br />
&#8211; 累積レコード数: 79,440<br />
&#8211; ストレージ使用量: 0.152 GB<br />
&#8211; 月間増加量: 0.0046 GB<br />
&#8211; 構成比: 3.8%</p>
<p>Opportunity:<br />
&#8211; ユーザー数: 30<br />
&#8211; 月間レコード登録数/ユーザー: 15<br />
&#8211; 保存期間: 2年<br />
&#8211; 成長率: 8%/年<br />
&#8211; 累積レコード数: 11,232<br />
&#8211; ストレージ使用量: 0.021 GB<br />
&#8211; 月間増加量: 0.0009 GB<br />
&#8211; 構成比: 0.5%</p>
<h2>まとめ</h2>
<p>いかがでしたでしょうか。使い方は非表示シンプルで分かりやすいと思います。</p>
<p>もし、利用にあたって仕様を変更したいなどご要望がございましたらお問い合わせフォームからご連絡ください。</p>
<p>ツールのURLを再度掲載しておきます。</p>
<div class="cclt-compat-mybutton cclt-compat-mybutton--ref cclt-compat-mybutton--shadow"><a href="https://creativecontentlabtokyo.com/salesforce_storage_calculator/" class="cclt-compat-mybutton__link" style="color:#fff;background-color:#FFD54F;border:1px solid #FFEB3B;border-radius:5px;font-weight:bold;background:linear-gradient(#ffdb69,#FFD54F);" rel="https://creativecontentlabtokyo.com/salesforce_storage_calculator/">シミュレーターのリンクはコチラ</a></div>
		<div class="wpulike wpulike-animated-heart " ><div class="wp_ulike_general_class wp_ulike_is_not_liked"><button type="button"
					aria-label="いいねボタン"
					data-ulike-id="5357"
					data-ulike-nonce="daab296d96"
					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_5357"><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>
	</channel>
</rss>
