<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="https://developer.salesforce.com/blogs/wp-content/themes/dfctheme/includes/feed_styles.xsl" ?>
<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/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:podcast="https://podcastindex.org/namespace/1.0"
xmlns:rawvoice="https://blubrry.com/developer/rawvoice-rss/"
xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:dscblog="https://developer.salesforce.com/blog/dscblog/"
>


<channel>
	<title>Salesforce Developers Blog</title>
	<atom:link href="https://developer.salesforce.com/blogs/feed" rel="self" type="application/rss+xml" />
	<link>https://developer.salesforce.com/blogs</link>
	<description>Elevating developer skills and connecting with the Salesforce Developers community</description>
	<lastBuildDate>Sat, 25 Apr 2026 08:39:39 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com/" />
	<itunes:author>Salesforce Developers Blog</itunes:author>
	<itunes:explicit>false</itunes:explicit>
	<itunes:image href="https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:owner>
		<itunes:name>Salesforce Developers Blog</itunes:name>
	</itunes:owner>
	<podcast:medium>podcast</podcast:medium>
	<image>
		<title>Salesforce Developers Blog</title>
		<url>https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>https://developer.salesforce.com/blogs</link>
	</image>
	<podcast:podping usesPodping="true" />
<site xmlns="com-wordpress:feed-additions:1">244780846</site>	<item>
		<title>Salesforce Mult-Framework を使用した React による UI 開発</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp#respond</comments>
		<pubDate>Sat, 25 Apr 2026 08:14:24 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[New Developments]]></category>
		<category><![CDATA[app development]]></category>
		<category><![CDATA[react]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206163</guid>
		<description><![CDATA[<p>TDX 2026&#12391;&#30330;&#34920;&#12373;&#12428;&#12383;Salesforce Multi-Framework&#65288;&#12505;&#12540;&#12479;&#29256;&#65289;&#12434;&#20351;&#12356;&#12289;React&#12391;Salesforce UI&#12434;&#38283;&#30330;&#12377;&#12427;&#25163;&#38918;&#12434;&#35299;&#35500;&#12290;Developer Edition&#12398;&#12473;&#12463;&#12521;&#12483;&#12481;&#32068;&#32340;&#12391;&#12471;&#12531;&#12503;&#12523;&#12394;UI &#12434;&#20316;&#25104;&#12375;&#12289;&#21462;&#24341;&#20808;&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;&#12377;&#12427;&#12414;&#12391;&#12398;&#12473;&#12486;&#12483;&#12503;&#12434;&#20844;&#38283;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは！ TDX 2026 では新機能「Salesforce Multi-Framework」が発表され、Salesforce の UI を React を使って開発することができるようになりました。</p>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
</ul>
<p>注意: 2026年4月時点ではまだ Beta 版です。</p>
<p>この記事では、Developer Edition で作成したスクラッチ組織を使い、内部ユーザーが利用する想定のシンプルなアプリを作成する手順を紹介します。スクラッチ組織の作成方法については、かこのブログ記事「<a href="https://developer.salesforce.com/jpblogs/2025/12/jp-scratch-org-with-developer-edition">Developer Edition + スクラッチ組織で、複数の開発・検証組織を手にいれる</a>」をご参照ください。ログインして表示言語を日本語化した状態から進めていきます。</p>
<h2>事前準備</h2>
<p>まずは VS Code で新規に「Standard」で作成したプロジェクトを用意します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206184" >
			    <img fetchpriority="high" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012449/salesforce-multi-framework-react-jp-image1.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>React External App や React Internal App もあるのですが、結構作り込まれたテンプレートが展開されます。構造を理解することがやや大変なので、今回はシンプルなテンプレートからの作成を紹介します。</p>
<p>このあと、スクラッチ組織を作成、もしくは既存のスクラッチ組織に接続します。組織にログインして機能有効化を行ってください。</p>
<ul>
<li>設定 &gt; アプリケーション &gt; Salesforce Multi-Framework を使用した React 開発 (ベータ)</li>
<li>「Enable Beta」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206183" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012447/salesforce-multi-framework-react-jp-image2.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>この機能はオフにできませんので、必ず Developer Edition や Sandbox などで試すようにしてください。</p>
<p>このあとはローカルの VS Code での操作を進めます。Standard で作成したプロジェクトで、スクラッチ組織に接続した状態にしておきます。</p>
<h2>ステップ1: テンプレートを展開</h2>
<p>まずターミナルを開き、次のコマンドを実行します。</p>
<pre>sf template generate ui-bundle -n myreactapp -d "./force-app/main/default/uiBundles" -t reactbasic</pre>
<p>force-app/main/default/myreactapp ディレクトリに必要なファイルが展開されます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206182" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012445/salesforce-multi-framework-react-jp-image3.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>このディレクトリに移動して、install と run dev を実行します。</p>
<pre># ディレクトリに移動
cd force-app/main/default/uiBundles/myreactapp

# 必要なライブラリをインストール
npm install

# ローカルで実行
npm run dev</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206181" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012443/salesforce-multi-framework-react-jp-image4.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ブラウザを開いて、表示された URL にアクセスしてみます。次のように表示されたら成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206180" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012441/salesforce-multi-framework-react-jp-image5.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ターミナルで Ctrl + C でローカルのサーバーを止めておきます。</p>
<h2>ステップ2: ビルドとデプロイ</h2>
<p>2026年4月25日時点ですが、graphqlClient.ts でエラーを検出しています。当該ファイルの13行目を次のように修正します。</p>
<pre>修正前: const response = await data.graphql?.&lt;TData, TVariables&gt;(query, variables);
修正後: const response = await data.graphql?.&lt;TData, TVariables&gt;({query, variables});</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206179" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012437/salesforce-multi-framework-react-jp-image6.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それではビルドを行います。同じフォルダで次のコマンドを実行します。</p>
<pre>npm run build</pre>
<p>エラーが出なければ成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206178" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012434/salesforce-multi-framework-react-jp-image7.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それでは組織にデプロイしてみましょう。次のコマンドを実行します。(スクラッチ組織の場合のコマンドです)</p>
<pre>sf project deploy start</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206177" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012430/salesforce-multi-framework-react-jp-image8.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ3: 動作確認</h2>
<p>それでは組織にデプロイされた React アプリを見てみましょう。</p>
<ul>
<li>アプリケーションランチャー &gt; Myreactapp</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206176" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012427/salesforce-multi-framework-react-jp-image9.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>先ほどのローカルテストと同じように表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206175" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012423/salesforce-multi-framework-react-jp-image10.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>ステップ4: 取引先のデータを表示できるように修正</h2>
<p>pages ディレクトリの下に「Accounts.tsx」ファイルを作成します。(Agentforce Vibes に作ってもらいましたので、切り詰めればもっとシンプルにできるかもしれません。)</p>
<pre>import { useEffect, useState } from 'react';
import { executeGraphQL } from '@/api/graphqlClient';
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/components/ui/table';
import { Skeleton } from '@/components/ui/skeleton';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';

interface AccountNode {
  Id: string;
  Name: { value: string };
  Website: { value: string | null };
}

interface AccountsData {
  uiapi: {
    query: {
      Account: {
        edges: Array&lt;{
          node: AccountNode;
        }&gt;;
      };
    };
  };
}

const ACCOUNTS_QUERY = `query GetAccounts {
  uiapi {
    query {
      Account {
        edges {
          node {
            Id
            Name {
              value
            }
            Website {
              value
            }
          }
        }
      }
    }
  }
}`;

export default function Accounts() {
const [accounts, setAccounts] = useState&lt;AccountNode[]&gt;([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState&lt;string | null&gt;(null);

  useEffect(() =&gt; {
const fetchAccounts = async () =&gt; {
try {
        setLoading(true);
        setError(null);
const data = await executeGraphQL&lt;AccountsData, undefined&gt;(ACCOUNTS_QUERY);
const accountNodes = data.uiapi.query.Account.edges.map(edge =&gt; edge.node);
        setAccounts(accountNodes);
      } catch (err) {
        setError(err instanceof Error ? err.message : 'Failed to fetch accounts');
        console.error('Error fetching accounts:', err);
      } finally {
        setLoading(false);
      }
    };
    fetchAccounts();
  }, []);

if (loading) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;div className="space-y-2"&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    );
  }

if (error) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;Alert variant="destructive"&gt;
          &lt;AlertTitle&gt;エラー&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;{error}&lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      &lt;/div&gt;
    );
  }

return (
    &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
      &lt;div className="mb-6"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900"&gt;取引先一覧&lt;/h1&gt;
                  全{accounts.length}件の取引先が登録されています
      &lt;/div&gt;
      {accounts.length === 0 ? (
        &lt;Alert&gt;
          &lt;AlertTitle&gt;取引先がありません&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;
            現在、登録されている取引先はありません。
          &lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      ) : (
        &lt;div className="border rounded-lg overflow-hidden"&gt;
          &lt;Table&gt;
            &lt;TableHeader&gt;
              &lt;TableRow&gt;
                &lt;TableHead className="font-semibold"&gt;ID&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;取引先名&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;ウェブサイト&lt;/TableHead&gt;
              &lt;/TableRow&gt;
            &lt;/TableHeader&gt;
            &lt;TableBody&gt;
              {accounts.map(account =&gt; (
                &lt;TableRow key={account.Id}&gt;
                  &lt;TableCell className="font-mono text-sm"&gt;
                    {account.Id}
                  &lt;/TableCell&gt;
                  &lt;TableCell className="font-medium"&gt;
                    {account.Name.value}
                  &lt;/TableCell&gt;
                  &lt;TableCell&gt;
                    {account.Website.value ? (
                      &lt;a
                         href={account.Website.value}
                         target="_blank" rel="noopener noreferrer"
className="text-blue-600 hover:underline"&gt;
                        {account.Website.value}
                      &lt;/a&gt;
                    ) : ('—')}
                  &lt;/TableCell&gt;
                &lt;/TableRow&gt;
              ))}
            &lt;/TableBody&gt;
          &lt;/Table&gt;
        &lt;/div&gt;
      )}
    &lt;/div&gt;
  );
}</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206174" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012420/salesforce-multi-framework-react-jp-image11.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>routes.tsx ファイルを次の内容に置き換えます。</p>
<pre>import type { RouteObject } from 'react-router';
import AppLayout from '@/appLayout';
import Home from './pages/Home';
import Accounts from './pages/Accounts';
import NotFound from './pages/NotFound';

export const routes: RouteObject[] = [
  {
    path: '/',
    element: &lt;AppLayout /&gt;,
    children: [
      {
        index: true,
        element: &lt;Home /&gt;,
        handle: { showInNavigation: true, label: 'Home' },
      },
      {
        path: 'accounts',
        element: &lt;Accounts /&gt;,
        handle: { showInNavigation: true, label: '取引先' },
      },
      {
        path: '*',
        element: &lt;NotFound /&gt;,
      },
    ],
  },
];</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206173" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012417/salesforce-multi-framework-react-jp-image12.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ5: 再ビルドとデプロイ</h2>
<p>ファイルの修正が完了したら、再度ビルドを行い組織にデプロイします。</p>
<pre># ビルドの実行
npm run build

# デプロイの実行
sf project deploy start

# もしソースファイルエラーやコンフリクトが発生した場合(コマンドを実行するディレクトリによって --source-dir の引数は要調整)
sf project deploy start --source-dir . --ignore-conflicts</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206172" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012414/salesforce-multi-framework-react-jp-image13.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ6: 動作確認</h2>
<p>スクラッチ組織の場合、取引先にはデータが何もないのでいくつか作成しておきます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206171" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012410/salesforce-multi-framework-react-jp-image14.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>再度 Myreactapp を表示します。画面右上のメニューアイコンを押すと「取引先」選択肢が出現し、選択すると取引先の一覧が表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206170" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012407/salesforce-multi-framework-react-jp-image15.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206169" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012404/salesforce-multi-framework-react-jp-image16.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>おわりに</h2>
<p>今までは Lightnign Experience &amp; Lightning Web Components と Visualforce に頼っていた Web ブラウザへの UI 提供ですが、React にも対応したことで、そのデータの表現力が格段に向上しました。いわゆる社内向けの UI はもちろん、Experience Cloud での社外向けサイトでの利用も可能です。正式リリースまで今しばらくお待ちください。</p>
<p>今回はすべて手動での作業手順でご紹介しましたが、もちろんバイブコーディングで開発を進めていくこともできます。Agentforce Vibes はもちろん、その他のコーディング支援ツールでも利用できるようにスキルを公開していたりしますので、ぜひご活用ください。</p>
<ul>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
</ul>
<p>SFDX プロジェクトの新規作成を行う際に、React Internal App を選ぶとより作り込まれたテンプレートが展開されます。Agentforce で作成したエージェントとのチャットも行える UI も組み込まれています。こちらもぜひ試してみてください。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206168" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012400/salesforce-multi-framework-react-jp-image17.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h3>参考資料</h3>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
<li><a href="https://trailhead.salesforce.com/ja/content/learn/modules/agentforce-vibes-react-open-beta-quick-look">Agentforce Vibes React (Open Beta): Quick Look</a></li>
<li><a href="https://github.com/trailheadapps/multiframework-recipes">Github: Multiframework Recipes</a></li>
</ul>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206163</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</title>
		<link>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba#respond</comments>
		<pubDate>Thu, 23 Apr 2026 14:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Anand Vardhan]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Bind Variables]]></category>
		<category><![CDATA[Database Performance]]></category>
		<category><![CDATA[Execution Plans]]></category>
		<category><![CDATA[Large Data Volumes]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[Salesforce Architecture]]></category>
		<category><![CDATA[Scale Center]]></category>
		<category><![CDATA[SOQL Optimization]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205998</guid>
		<description><![CDATA[<p>Optimize your most complex queries by bridging the &lsquo;runtime reality&rsquo; gap with Database Insights. Learn to use actual bind values and execution plans to fix performance bottlenecks.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">In the world of Salesforce engineering, a SOQL query is the heartbeat of your application. But as any architect of an org with significant processing or large data volumes knows,</span> <span style="font-weight: 400">not all SOQL queries are created equal</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You might have a perfectly formatted query that passes every linting test, yet still brings a production pod to its knees during peak hours.</span></p>
<p><span style="font-weight: 400">Historically, tools for addressing this challenge have relied on</span> <b>top-down analysis </b><span style="font-weight: 400">— scanning Apex metadata to find suspicious patterns. Today, we are unveiling a</span><b> bottom-up revolution</b><span style="font-weight: 400">: </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.database_insights_overview.htm&amp;type=5"><b>Database Insights in Scale Center</b></a><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">The &#8220;runtime reality&#8221; gap</span></h2>
<p><span style="font-weight: 400">Traditional performance analysis tools suffer from a </span><i><span style="font-weight: 400">runtime reality gap</span></i><span style="font-weight: 400">. They look at your code repository and say, </span><i><span style="font-weight: 400">&#8220;This query uses an indexed field; it&#8217;s fine.&#8221;</span></i><span style="font-weight: 400"> But enterprise-grade applications live and breathe </span><a href="https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships.htm"><b>dynamic SOQL</b></a><span style="font-weight: 400">, where the query isn&#8217;t fully built until the moment a user clicks a button.</span></p>
<p><span style="font-weight: 400">Static scanners are blind to the </span><a href="https://trailhead.salesforce.com/content/learn/modules/soql-for-admins/use-bind-variables-and-aggregate-functions"><b>bind variable values</b></a><span style="font-weight: 400"> — the actual data passed into your filters at runtime. Without knowing these values, it is impossible to distinguish between a </span><b>s</b><b><i>elective success</i></b><span style="font-weight: 400"> and a </span><b>t</b><b><i>able-scan terror</i></b><span style="font-weight: 400">:</span></p>
<ul>
<li style="font-weight: 400"><b>Selective success:</b><span style="font-weight: 400"> Your query uses an index to jump straight to the 10 records you need out of millions. It’s fast, efficient, and keeps your org snappy.</span></li>
<li style="font-weight: 400"><b>Table-scan terror:</b><span style="font-weight: 400"> This occurs when the database engine cannot use an index and is forced to look at every single record in a table to find a match.</span></li>
</ul>
<p><b>Architect’s tip:</b><span style="font-weight: 400"> Think of a table scan like trying to find a specific quote in a 500-page book by reading every single word from page one, rather than using the index at the back to jump to the right page. When your table grows to millions of rows, these scans cause CPU timeouts and slow down the entire platform for your users.</span></p>
<p><span style="font-weight: 400">Navigate to Database Insights from Setup &gt;&gt; Scale Center &gt;&gt; Database Insights.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206000" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161611/A-screenshot-showing-how-to-navigate-to-Database-Insights-in-Scale-Center-e1775772984411.png?w=1000" class="postimages" width="1000" height="480" alt="A screenshot showing how to navigate to Database Insights in Scale Center" />
			  </span>
			</p>
<h2><span style="font-weight: 400">Engineering the bottom-up approach</span></h2>
<p><span style="font-weight: 400">Database Insights turns the traditional model on its head. You don&#8217;t guess which queries are slow; you start where the performance impact is actually felt</span><span style="font-weight: 400">: the database. This is a three-step process.</span></p>
<h3><span style="font-weight: 400">1. Identifying the heavy lifters</span></h3>
<p><span style="font-weight: 400">Instead of analyzing every line of code, with the bottom-up approach you identify the specific queries driving resource consumption during your most critical business windows. Think of it like a database administrator using standard system views (similar to open-source equivalents like</span> <a href="https://www.postgresql.org/docs/current/pgstatstatements.html"><span style="font-weight: 400">pg_stat_statements</span></a><span style="font-weight: 400">).</span><span style="font-weight: 400"> You isolate the queries that dominated CPU usage during your org’s peak performance hour, helping you identify the specific code causing the most friction.</span></p>
<h3><span style="font-weight: 400">2. Intelligence-driven reconstruction</span></h3>
<p><span style="font-weight: 400">A raw database execution looks very different from the Apex you wrote. Our platform uses a sophisticated</span> <b>mapping engine</b> <span style="font-weight: 400">to bridge the gap between runtime database activity and your source code:</span></p>
<ul>
<li style="font-weight: 400"><b>Context discovery:</b> <span style="font-weight: 400">The system automatically filters out system overhead to focus exclusively on your custom logic.</span></li>
<li style="font-weight: 400"><b>Traceability:</b> <span style="font-weight: 400">The system correlates database activity back to its origin — whether that’s a specific Apex class, Flow, or report.</span></li>
<li style="font-weight: 400"><b>Bind-value awareness:</b><span style="font-weight: 400"> It captures the </span><b>actual bind variable values</b> <span style="font-weight: 400">passed to the database. Knowing a query failed because of a </span><span style="font-weight: 400">NULL</span><span style="font-weight: 400"> filter can be the difference between a guess and a guaranteed fix.</span></li>
</ul>
<h3><span style="font-weight: 400">3. Execution-plan analysis </span></h3>
<p><span style="font-weight: 400">Once the query has been reconstructed by the mapping engine, it is analyzed by the</span> <b>Database Insights optimization engine</b><b>.</b><span style="font-weight: 400"> By evaluating the</span> <b>actual database execution plan </b><span style="font-weight: 400">— </span><span style="font-weight: 400">the same way an expert uses an</span> <a href="https://www.postgresql.org/docs/current/using-explain.html"><span style="font-weight: 400">EXPLAIN</span></a> <span style="font-weight: 400">command </span><span style="font-weight: 400">— </span><span style="font-weight: 400">we generate surgical recommendations based on that execution plan for the query.</span></p>
<h2><span style="font-weight: 400">Case study: The dynamic predicate problem</span></h2>
<p><span style="font-weight: 400">Consider a common pattern: a utility class that fetches records based on dynamic filters. </span></p>
<pre language="apex">public static List simpleBindingSoqlQuery(Map&lt;String, Object&gt; bindParams) {
    String queryString =
        'SELECT Id, Name ' +
        'FROM Account ' +
        'WHERE name = :name';
    return Database.queryWithBinds(
        queryString,
        bindParams,
        AccessLevel.USER_MODE
    );
}

String accountName = 'Acme Inc.';
Map&lt;String, Object&gt; nameBind = new Map&lt;String, Object&gt;{'name' =&gt; accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);
</pre>
<p><span style="font-weight: 400">A static scanner inspects the Apex code and reports that the query passes all checks — it uses bind variables, is sanitized, and shows no obvious flaws. In reality, during peak traffic, Scale Center identifies this method as a top CPU consumer because the runtime data exposes issues that static analysis cannot see.</span></p>
<h3><span style="font-weight: 400">Example: The non-selective null</span></h3>
<p>A UI component accidentally passes a <span>null</span><span> value into the filter. The reconstructed SOQL becomes</span><b><span>:<br />
</span></b><br />
<span> </span><code><span>SELECT Id, Name FROM Account WHERE name = null<br />
</span></code><br />
Since <code>NULL</code> values are rarely indexed effectively in large datasets, the engine scans millions of rows in a full table scan. Scale Center flags this as a high-CPU query, notes that the filter &#8216;Name&#8217; is receiving null values, and provides the recommendation: add a null-check in the Apex controller before execution to prevent <code>NULL</code> values from reaching the query.</p>
<h3><span style="font-weight: 400">Example: The polymorphic date bloat</span></h3>
<p><span style="font-weight: 400">A report generation tool builds a query with a wide date range. The reconstructed SOQL is:</span></p>
<p><code>SELECT Id FROM Case WHERE CreatedDate = LAST_N_DAYS:365 AND Status = 'Closed'</code></p>
<p><span style="font-weight: 400">In this case, the database performs an index skip scan. The combination of a broad date range and a low-cardinality status field forces the database engine to examine far more rows than necessary. Scale Center identifies this high CPU usage and recommends narrowing the date range to 30 days or including the Status field in a composite index to improve selectivity.</span></p>
<h2><span style="font-weight: 400">Comparing static analysis and Database Insights</span></h2>
<p><span style="font-weight: 400">The following table shows how a traditional static Apex parser differs from Database Insights across visibility, complexity, performance, and context.</span></p>
<table>
<tbody>
<tr>
<td><b>Feature</b></td>
<td><b>Static Apex Parser</b></td>
<td><b>Scale Center Database Insights</b></td>
</tr>
<tr>
<td><b>Visibility</b></td>
<td><span style="font-weight: 400">String templates only</span></td>
<td><span style="font-weight: 400">Final string + actual bind values</span></td>
</tr>
<tr>
<td><b>Complexity</b></td>
<td><span style="font-weight: 400">Struggles with concatenation</span></td>
<td><span style="font-weight: 400">Captures exact SQL sent to engine</span></td>
</tr>
<tr>
<td><b>Performance</b></td>
<td><span style="font-weight: 400">Best-practice guesses</span></td>
<td><span style="font-weight: 400">Measures actual CPU milliseconds</span></td>
</tr>
<tr>
<td><b>Context</b></td>
<td><span style="font-weight: 400">Blind to table volume</span></td>
<td><span style="font-weight: 400">Analyzes the execution plan to understand true query cost and selectivity</span></td>
</tr>
</tbody>
</table>
<h2><span style="font-weight: 400">How to use Database Insights results</span></h2>
<p><span style="font-weight: 400">When you open Database Insights, don’t focus only on the SOQL string. Look at both the &#8220;SOQL&#8221; and the “Recommendation” columns</span><span style="font-weight: 400"> to identify the actual queries and suggestions for how to improve them.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206002" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161652/A-tabular-view-of-Database-Insights-results-e1775773028368.png?w=1000" class="postimages" width="1000" height="460" alt="A tabular view of Database Insights results" />
			  </span>
			</p>
<h2><span style="font-weight: 400">A game changer for architects and developers</span></h2>
<p><span style="font-weight: 400">If you are managing a large-scale implementation, Database Insights in Scale Center provides unique capabilities that are not available through static analysis alone.</span></p>
<p><span style="font-weight: 400">First, it enables </span><b>impact-based prioritization.</b> <span style="font-weight: 400">You aren&#8217;t investigating and fixing 100 &#8220;</span><i><span style="font-weight: 400">maybe</span></i><span style="font-weight: 400">&#8221; slow queries</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You are fixing the top 15 queries that </span><i><span style="font-weight: 400">actually</span></i><span style="font-weight: 400"> consumed the most CPU during your busiest hour last week. Second, it supports </span><b>infrastructure stability</b><b>.</b><span style="font-weight: 400"> By optimizing these expensive, suboptimal SQL queries, you aren&#8217;t just helping your users; you are also protecting the pod&#8217;s availability and reducing the risk of concurrent request limit exceptions.</span></p>
<p><span style="font-weight: 400">Database Insights is not just another dashboard. It is a bridge between the database optimizer and the Apex developer. </span><span style="font-weight: 400">By analyzing how queries are executed and providing targeted recommendations</span><span style="font-weight: 400"> and providing a library of fixes, we are moving from </span><span style="font-weight: 400">passive monitoring to actionable, data-driven recommendations.</span></p>
<h2><span style="font-weight: 500">About the author</span></h2>
<p><b>Anand Vardhan</b> <span style="font-weight: 400">is a Product Owner for the Scalability Products Team, helping customers develop scalable solutions on the Customer 360 platform. Anand designs features for Scale Center and Scale Test products. His background includes performance and scale engineering, server-side optimization, Lightning, application design, caching, and managing large data volumes. Follow Anand on</span> <a href="https://www.linkedin.com/in/anandvardhan08/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205998</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" medium="image" />
	</item>
		<item>
		<title>話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp#respond</comments>
		<pubDate>Thu, 23 Apr 2026 03:29:20 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Prompt Builder]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206141</guid>
		<description><![CDATA[<p>Salesforce Flow&#12392;Prompt Template&#12398;&#27083;&#36896;&#21270;&#20986;&#21147;&#27231;&#33021;&#12434;&#27963;&#29992;&#12375;&#12289;&#38899;&#22768;&#20837;&#21147;&#12391;CRM&#24773;&#22577;&#12434;&#33258;&#21205;&#26356;&#26032;&#12377;&#12427;&#23455;&#35013;&#20363;&#12434;&#35299;&#35500;&#12290;&#21830;&#35527;&#24460;&#12398;&#12513;&#12514;&#12434;&#35441;&#12377;&#12384;&#12369;&#12391;&#12289;AI&#12364;&#20104;&#31639;&#12539;&#35506;&#38988;&#12539;&#12473;&#12486;&#12540;&#12472;&#12394;&#12393;&#12434;&#33258;&#21205;&#12391;&#38917;&#30446;&#21029;&#12395;&#25391;&#12426;&#20998;&#12369;&#12290;&#12494;&#12540;&#12467;&#12540;&#12489;&#12391;&#23455;&#29694;&#12377;&#12427;&#21942;&#26989;DX&#12398;&#23455;&#36341;&#12460;&#12452;&#12489;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2>はじめに</h2>
<p>「商談が終わったら、すぐに活動内容を入力してください」</p>
<p>営業現場でよく聞くこの一言が、いかに現場の負担になっているか。</p>
<p>移動中、次のアポの準備中、それでも入力しなければならない。結果として記録が後回しになり、CRMのデータ品質が下がり、マネージャーは実態が見えなくなる···そんな悪循環は、多くの営業組織が抱える慢性的な課題です。</p>
<p>この記事では、Salesforce の 画面フロー機能とPrompt TemplateのStructured Output(構造化出力)機能を組み合わせて、この課題をどのように解決できるかを、実際の実装例をもとに解説します。</p>
<h2>動画:利用イメージ</h2>
<p><a href="https://salesforce.vidyard.com/watch/M3f8dwz5XPL1ybdCS71zAP">音声入力ーAIによる項目振り分け</a><br />
<!-- Put this wherever you would like your player to appear --><br />

			  <span class="postimagessection_specify vidyard-player-embed" >
			    <img decoding="async" src="https://play.vidyard.com/M3f8dwz5XPL1ybdCS71zAP.jpg" class="postimages" width="" height="" alt="" />
			  </span>
			</p>
<p>この機能を使った利用例がこちらです。モバイルに音声で話すだけで、AIが重要情報を自動抽出し情報を更新します。本例ではテストオブジェクトというカスタムオブジェクトを対象としていますが、どのオブジェクトに対しても転用可能です。</p>
<h2>何をする機能なのか</h2>
<p>やっていることはシンプルです。</p>
<p>ここでは、レコードページから画面を起動する例をご紹介します。</p>
<ol>
<li>営業担当者がレコードページのボタンを押す</li>
<li>「ここに音声入力してください」というテキストエリアが表示される</li>
<li>担当者は商談の内容を自由に話すか、テキストで入力する</li>
<li>「次へ」を押すとAIが内容を解析し、案件の各項目を自動で更新する</li>
</ol>
<p>従来であれば「課題は何か」「予算はどれくらいか」「ステージはどこまで進んだか」を個別に入力する必要がありました。このフローでは、商談後のメモを自由形式で入力するだけで、AIがそれらを自動的に仕分けして書き込みます。</p>
<h2>プロンプトについて</h2>
<p>プロンプト全文と応答構造</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206149" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203220/salesforce-flow-structured-output-image05.png?w=997" class="postimages" width="997" height="708" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206147" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203213/salesforce-flow-structured-output-image03.png?w=1091" class="postimages" width="1091" height="1000" alt="" />
			  </span>
			</p>
<p>&nbsp;</p>
<p>本例ではテストオブジェクトを対象としていますが、このプロンプトは商談オブジェクトに更新する想定のプロンプトです。</p>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプト全文</h3>
<pre>【Role】
活動報告の音声文字起こしを最小修正で正規化(内部のみ)し、以下を出力せよ(コードフェンス禁止)。

【抽出用マーカー規約(厳守)】
- Key: opp.stage / opp.pain / opp.start / opp.event / opp.budget / opp.req

【Inputs】
- raw_transcript: {!$Input:input}

【商談更新用(値のみ・ラベル無し・推定抽出強化)】
- すべての opp.* は、タグ内にプレーンテキストの値のみを簡潔に1行250文字以内で出力。
- 禁止:Markdown記法(太字・リストなど)、ラベル("金額:"など)、カッコ装飾、信頼度スコア、引用符、改行。
- 抽出基準(重要):
  - 「確定」していなくても、会話の中で登場した見込み値、概算、候補、提案内容があれば積極的に抽出すること。
  - わずかでも関連する言及があれば値を入れ、「本MTGでは更新候補無し」としないこと。
- 整形ルール:改行は半角スペースへ変換。連続空白は1つへ短縮。
- 完全除外条件:会話全体を通して、そのトピックに関する言及が一切なかった場合のみ、「本MTGでは更新候補無し」を出力。

[各項目の抽出指針]
- opp.stage: 商談の現在の到達点と顧客の温度感を要約した説明文。単なるフェーズ名(例:「提案」)ではなく、「担当者は前向きだが部長決裁待ち」「機能要件は合意したが予算で難航中」のように具体的な状況を記述すること。
- opp.pain: 顧客が漏らした悩み、不満、現状の課題(推測含む)。簡潔に1文で記載。
- opp.start: 開始時期、導入時期、納期の目安(「来春」「4月頃」等のテキストも可)。簡潔に1文で記載。
- opp.event: 今後のマイルストーン、コンペリングイベント(幹部プレゼン、定例会、PoC開始など)。簡潔に1文で記載。
- opp.budget: 金額、予算感、価格帯、コストに関する言及(「100万くらい」「予算確保済み」など幅のある表現もそのまま抽出)。簡潔に1文で記載。
- opp.req: 機能要件、要望、導入条件、制約事項。簡潔に1文で記載。
</pre>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプトの設計ポイント</h3>
<p><strong>【1. 使用モデル:Gemini 2.5 Flash】</strong></p>
<p>今回はGemini 2.5 Flashを使用しています。速度とコストのバランスが良く、日本語の音声文字起こし処理に適したモデルです。</p>
<p><strong>【2. 出力形式:JSON構造化出力+セクションマーカー方式】</strong></p>
<p>プロンプト自体はシンプルなテキスト指示ですが、SalesforceのStructured Output(構造化出力)機能によって、AIの回答はJSON形式で返されます。フロー側では structuredResponse.budget のようにドット記法で各項目に直接アクセスできるため、追加のパース処理は一切不要です。</p>
<p><strong>【3. 「確定情報でなくても積極的に抽出する」という指示】</strong></p>
<p>通常のデータ抽出では「確実な情報のみ抽出」という指示が多いですが、このプロンプトは逆のアプローチを取っています。商談では「100万くらい」「来春かな」という曖昧な言及も重要な営業情報であるため、「わずかでも言及があれば値を入れる」と明示しています。</p>
<p><strong>【4. 空欄上書きリスクを防ぐ「完全除外条件」】</strong></p>
<p>「一切言及がなかった場合のみ『本MTGでは更新候補無し』」と書くことで、フロー側の制御でこのキーワードが格納されている場合は更新しないように制御することができます。この制御を入れることで、既存のCRMデータが空欄で上書きされてしまうリスクを防ぐことができます。(今回のフローではこの制御分岐は入れていません)</p>
<p><strong>【5. ステージは「状態の文章」で記録する】</strong></p>
<p>opp.stage(案件ステージ)に対して、単に「提案中」「交渉中」ではなく「担当者は前向きだが部長決裁待ち」のような状況説明文を要求しています。マネージャーがリスト画面を一覧したときに、クリックせずに状況が把握できるCRMを実現するための設計です。</p>
<h3>出力形式:JSON応答構造について</h3>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206151" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203227/salesforce-flow-structured-output-image07.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206145" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203207/salesforce-flow-structured-output-image01.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>ここで、応答形式をJSON、応答構造から「新しいLightning種類」を選択し出力構造を作成します。</p>
<p>名称を指定します</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206146" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203210/salesforce-flow-structured-output-image02.png?w=1279" class="postimages" width="1279" height="438" alt="" />
			  </span>
			</p>
<p>次に、出力先項目を指定します。ここの項目変数名はプロンプト側と整合性が取れる形にする必要があります。(ただし、厳密に完全一致させなくても大丈夫です)</p>
<p>また、この説明欄を入力することで、より精度高く抽出することが可能になります。プロンプト側でしっかりと定義している場合には記載していなくても問題ありません。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206148" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203216/salesforce-flow-structured-output-image04.png?w=1269" class="postimages" width="1269" height="909" alt="" />
			  </span>
			</p>
<h3>補足:JSON応答構造を利用する場合の注意事項</h3>
<p>カスタム Lightning 種類で項目のデータ型が Date, DateTime, Time だった場合は、フローから値にアクセスしても取得できない問題があります。(2026/3/6 確認時点)</p>
<p>現状回避策として Lightning 種類では String にしておき、フローの数式項目を使って変換します。</p>
<h2>フローの構造</h2>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206152" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203230/salesforce-flow-structured-output-image08.png?w=1168" class="postimages" width="1168" height="825" alt="" />
			  </span>
			</p>
<p>技術的には、以下の4ステップで構成されています。</p>
<p><strong>STEP 1:レコードの取得</strong></p>
<p>対象レコードのIDをもとに、現在の商談情報を取得します。</p>
<p><strong>STEP 2:音声入力画面</strong></p>
<p>ユーザーに向けて「ここに音声入力してください」というテキストエリアを表示します。フロー種類は Screen Flow(画面フロー)であるため、Lightning ページ上でそのままウィジェットとして起動できます。</p>
<p><strong>STEP 3:AIによる解析</strong></p>
<p>ここが核心部分です。Flow の generatePromptResponse アクションを通じて、Prompt Template(プロンプトテンプレート)を呼び出します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206154" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203236/salesforce-flow-structured-output-image10.png?w=976" class="postimages" width="976" height="776" alt="" />
			  </span>
			</p>
<p>入力として先ほどのテキストエリアの内容を渡すと、AIが以下の6項目を JSON 形式で返します。</p>
<ul>
<li>budget 予算情報</li>
<li>event コンペリングイベント</li>
<li>pain 顧客課題</li>
<li>stage 案件ステージの進捗</li>
<li>req 要求仕様・要件</li>
<li>start 導入時期・タイミング</li>
</ul>
<p>これは Salesforce の Structured Output(構造化出力)機能を活用したものです。</p>
<p>AIに対して「この形式のJSONで回答せよ」と指定することで、後続の処理でそのまま各フィールドに書き込めるようになります。</p>
<p><strong>STEP 4:レコードの更新</strong></p>
<p>STEP 3 で得たJSONの各値を、対応するレコードの項目にそれぞれ書き込んで完了です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206150" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203224/salesforce-flow-structured-output-image06.png?w=1101" class="postimages" width="1101" height="824" alt="" />
			  </span>
			</p>
<h3>補足:</h3>
<p>「本MTGでは更新候補無し」の場合には更新しない制御を入れる場合には、このように決定要素による条件分岐を入れることによって実現可能です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206153" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203233/salesforce-flow-structured-output-image09.png?w=1589" class="postimages" width="1589" height="799" alt="" />
			  </span>
			</p>
<h2>なぜ Structured Output(構造化出力) が重要なのか</h2>
<p>従来のAI活用では、AIの回答はテキストとして返ってくるため、「その中から必要な情報を抜き出す」という後処理が必要でした。正規表現や文字列解析を駆使しても、AIの回答のゆらぎに対応しきれないケースがありました。</p>
<p>Structured Output を使うと、AIは最初から指定した構造のJSONで回答します。フローから見れば structuredResponse.budget のように、オブジェクトのプロパティとして値を参照できるため、追加の解析処理が不要になります。</p>
<p>この仕組みにより、「AIの出力をそのままSalesforceの項目に書き込む」という処理が、コードを一行も書かずにノーコードで実現できます。</p>
<h2>現場への展開イメージ</h2>
<p>このデモ実装ではテスト用カスタムオブジェクトを対象としていますが、実運用では Opportunity(商談)や Event(行動)オブジェクトへの応用が考えられます。</p>
<p>たとえば:</p>
<ul>
<li>商談終了後:担当者が車の中で商談メモを音声入力 → Opportunity の StageName、予算、顧客課題などが自動更新</li>
<li>訪問報告:活動内容をフリーテキストで記録 → 「競合情報」「顧客要望」「次のアクション」が自動でカテゴリ分けされて記録</li>
<li>マネージャーレビュー: AI が整理した項目をもとに状況をレポートで一目で確認、週次レビューの準備時間を削減</li>
</ul>
<h2>まとめ</h2>
<p>Salesforce Flow の generatePromptResponse アクションと Prompt Template の Structured Output を組み合わせることで、「自由なテキスト入力 → 構造化されたCRMデータ」という変換が、驚くほどシンプルな構成で実現できます。</p>
<ul>
<li>ノーコード:Apexを書かずにFlowとテンプレートだけで構築可能</li>
<li>構造化出力:AIの回答を最初からJSONで受け取るためパース処理不要</li>
<li>現場への展開:Lightningページにボタン一つで組み込めるScreen Flow形式</li>
</ul>
<p>「営業がCRMを入力しない問題」は、ツールの問題ではなく入力コストの問題です。入力コストをAIで限りなくゼロに近づけることが、データ品質と現場定着の鍵になります。</p>
<p>※ 本記事は Salesforce の実装例をもとに作成しています。ご紹介した機能はお客様の環境に応じて Agentforce 関連のライセンスや設定が必要な場合があります。</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206141</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Simplify Your LWC Development with Complex Template Expressions</title>
		<link>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions#respond</comments>
		<pubDate>Tue, 21 Apr 2026 15:00:10 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[API Version 66.0]]></category>
		<category><![CDATA[Experimental Features]]></category>
		<category><![CDATA[Frontend Development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[salesforce developers]]></category>
		<category><![CDATA[Spring '26]]></category>
		<category><![CDATA[UI Logic]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206095</guid>
		<description><![CDATA[<p>Reduce boilerplate and streamline your code by writing JavaScript logic directly in your HTML templates. Build faster with less context switching between files.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Are you tired of jumping back and forth between your HTML and JavaScript files just to handle a simple conditional or format a string? We have some exciting news! In the </span><a href="https://www.salesforce.com/en-us/wp-content/uploads/sites/4/documents/release-notes/spring26-release-in-a-box.pdf"><span style="font-weight: 400">Spring ’26 release</span></a><span style="font-weight: 400"> (API version 66.0), we are introducing </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions-use.html"><b>complex template expressions</b></a><span style="font-weight: 400"> for Lightning Web Components (LWC). This new experimental feature allows you to write JavaScript logic directly inside your HTML curly braces. In this post, we’ll talk about how this feature works, show you some common use cases, and walk through the rules for keeping your templates clean and performant.</span></p>
<h2><b>Why use complex expressions?</b></h2>
<p><span style="font-weight: 400">Until now, LWC templates only supported simple property binding. If you wanted to combine a first and last name, you had to create a </span><i><span style="font-weight: 400">getter</span></i><span style="font-weight: 400"> in your JavaScript class. While this keeps logic separate, it often leads to </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/get-started-best-practices.html"><span style="font-weight: 400">&#8220;boilerplate&#8221; code</span></a><span style="font-weight: 400"> — extra lines of code that don&#8217;t do much but pass data around.</span></p>
<p><span style="font-weight: 400">With complex template expressions, you have the power to handle simple UI logic where it belongs: in the template. This makes your components easier to read and faster to build.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206099" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417153422/image1_3a2771-e1776465277667.png?w=1000" class="postimages" width="1000" height="558" alt="A side-by-side comparison showing a standard LWC with multiple getters versus an LWC using inline complex template expressions." />
			  </span>
			</p>
<h2><b>Getting started with the syntax</b></h2>
<p>To use this feature, your component must use <b>API version 66.0</b> or higher in its <code>js-meta.xml</code> file. Once enabled, you can start using a subset of JavaScript directly in your HTML. See <a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><u>this guide</u></a> on component API versioning for more information.</p>
<h3><b>Logical and arithmetic operators</b></h3>
<p><span style="font-weight: 400">You can now perform math or logical checks right in the tag. For example, if you want to show a special badge only when an item count is high, you can do it like this:</span></p>
<pre language="html"> 
&lt;template&gt; 
&lt;template&gt;&lt;div key=&quot;{item.id}&quot;&gt; 
&lt;span class=&quot;”{index&quot; 0=&quot;&quot; first-item=&quot;&quot; :=&quot;&quot; item=&quot;&quot;&gt;{index + 1}. {item.label}&lt;/span&gt; 
&lt;/div&gt;&lt;p&gt; 
&lt;/p&gt;&lt;/template&gt; 
&lt;/template&gt;
</pre>
<h2><b>Using expressions in attributes</b></h2>
<p><span style="font-weight: 400">One of the most powerful ways to use this feature is inside HTML attributes. You can </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-css-intro.html"><span style="font-weight: 400">dynamically change classes</span></a><span style="font-weight: 400"> or titles without needing extra variables in your JavaScript file.</span></p>
<p><span style="font-weight: 400">However, there is one very important rule to consider: </span><b>complex template expressions in attributes must be surrounded by double quotes.</b><span style="font-weight: 400"> If you forget the quotes, the LWC compiler will throw an error. By using quotes, you ensure that the template stays compliant with standard HTML rules.</span></p>
<pre language="html"> 
&lt;template&gt;&lt;div class=&quot;{isActive ? 'brand-border' : 'neutral-border'}&quot;&gt; User Profile &lt;/div&gt;&lt;p&gt;
&lt;button title=&quot;{item.name + ' - ' + item.status}&quot;&gt; View Details &lt;/button&gt; 
&lt;/p&gt;&lt;/template&gt; 
</pre>
<h2><b>Staying HTML compliant</b></h2>
<p><span style="font-weight: 400">Because LWC templates are still HTML files, some JavaScript characters can confuse the browser. For example, the </span><i><span style="font-weight: 400">less than</span></i><span style="font-weight: 400"> symbol ( &lt; ) looks like the start of a new HTML tag if used in plain text. To stay safe, follow these tips:</span></p>
<ul>
<li><b>Use Greater Than:</b> Instead of <code>{age &lt; 18}</code>, use <code>{18 &gt; age}</code>.</li>
<li><b>Stick to Double Quotes:</b> Always wrap attribute expressions in <code>"{...}"</code>.</li>
</ul>
<h2><b>LWC complex template expression limitations and restrictions</b></h2>
<p>To keep your components fast, we’ve limited what you can do in a template. You cannot use the <code>new</code> keyword, you cannot create full function declarations, and you cannot use assignment operators like <code>=</code> or <code>++</code>. Think of template expressions as read-only logic meant for displaying data.</p>
<p><span style="font-weight: 400">For a full set of valid and invalid expressions, see </span><a href="https://github.com/salesforce/lwc/tree/master/packages/%40lwc/template-compiler/src/__tests__/fixtures/expression-complex"><span style="font-weight: 400">these examples</span></a><span style="font-weight: 400">.</span></p>
<h2><b>Conclusion</b></h2>
<p><span style="font-weight: 400">Complex template expressions are a huge win for developer productivity. By reducing the need for additional getters and functions in your JavaScript files, we’re making LWC feel more modern and intuitive. Remember, this is currently an </span><b>experimental</b><span style="font-weight: 400"> feature. We encourage you to try it out in your Spring &#8217;26 sandbox environments and share your feedback with us!</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Learn more about</span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions.html"><span style="font-weight: 400"> how to work with complex template expressions</span></a><span style="font-weight: 400"> in the LWC Developer Guide.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Review the</span><a href="https://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htm"> <span style="font-weight: 400">Spring &#8217;26 Release Notes</span></a><span style="font-weight: 400"> for full details on API version 66.0.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Practice your skills by completing the</span><a href="https://trailhead.salesforce.com/content/learn/projects/quick-start-lightning-web-components"> <span style="font-weight: 400">Build Lightning Web Components project</span></a><span style="font-weight: 400"> on Trailhead.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Brush-up on component </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><span style="font-weight: 400">API versioning</span></a></li>
</ul>
<h2><b>About the Author</b></h2>
<p><b>John Hefferman</b><span style="font-weight: 400"> is a Software Engineer at Salesforce. John enjoys helping developers build faster and more efficiently on the Salesforce Platform.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206095</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Hosted MCP Server 使い始め</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp#respond</comments>
		<pubDate>Sat, 18 Apr 2026 01:26:09 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Salesforce Hosted MCP]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206107</guid>
		<description><![CDATA[<p>Salesforce Hosted MCP Server&#12391;&#29983;&#25104;AI&#12456;&#12540;&#12472;&#12455;&#12531;&#12488;&#12363;&#12425;Salesforce&#12487;&#12540;&#12479;&#12395;&#23433;&#20840;&#12395;&#12450;&#12463;&#12475;&#12473;&#12290;&#22806;&#37096;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#12450;&#12503;&#12522;&#12398;&#20316;&#25104;&#12289;MCP Server&#12398;&#26377;&#21177;&#21270;&#12289;&#12463;&#12521;&#12452;&#12450;&#12531;&#12488;&#35373;&#23450;&#12414;&#12391;&#21021;&#26399;&#12475;&#12483;&#12488;&#12450;&#12483;&#12503;&#12434;&#30011;&#20687;&#20184;&#12365;&#12391;&#35299;&#35500;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp">Salesforce Hosted MCP Server 使い始め</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは！</p>
<p>Salesforce Hosted MCP Server は、AIエージェントが Salesforce データと自動化機能に安全かつ管理された方法でアクセスできるプラットフォームを提供します。Claude、ChatGPT、Cursor などの MCP に対応するクライアントから、Salesforce に接続できるようになります。</p>
<p>この記事では、Hosted MCP Server の初期セットアップ方法について、外部クライアントアプリケーションの作成から MCP Server の有効化、そしてクライアントからの試行までを順に解説します。</p>
<p>免責事項: この記事は 2026年4月16日時点の情報で作成しています。その後の更新や機能追加により画面や操作ステップが変更になっている場合もあります。あらかじめご了承ください。</p>
<p>参考</p>
<ul>
<li><a href="https://www.google.com/url?q=https://developer.salesforce.com/docs/platform/hosted-mcp-servers/overview&amp;sa=D&amp;source=editors&amp;ust=1776477394814930&amp;usg=AOvVaw0OV9cRFsMS8k_PCs0lfBj-">Salesforce Hosted MCP Servers</a></li>
</ul>
<h2>設定の流れ</h2>
<ol>
<li>外部クライアントアプリケーションを作成</li>
<li>使いたい MCP Server を有効化</li>
<li>クライアント側での設定追加・有効化</li>
</ol>
<p>今回は Developer Edition &amp; システム管理者での操作で解説します。</p>
<h2>外部クライアントアプリケーションを作成</h2>
<p>まずは、MCP クライアントからのアクセスを Salesforce で認証・認可できるように外部クライアントアプリケーションを作成します。</p>
<ul>
<li>設定 -&gt; アプリケーション -&gt; 外部クライアントアプリケーション -&gt; 外部クライアントアプリケーションマネージャー</li>
<li>「新規外部クライアントアプリケーション」ボタンを押す</li>
</ul>
<p>&nbsp;</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206130" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182323/jpblog-hosted-mcp-server-01.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>必要情報を入力します。</p>
<ul>
<li>外部クライアントアプリケーション名:
<ul>
<li>(任意の名前)</li>
</ul>
</li>
<li>API 参照名:
<ul>
<li>(任意の名前)</li>
</ul>
</li>
<li>取引先責任者メール:
<ul>
<li>(管理者のメールアドレス)</li>
</ul>
</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206129" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182319/jpblog-hosted-mcp-server-02.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま少し画面を下げます。</p>
<ul>
<li>OAuth を有効化:
<ul>
<li>チェックを入れる</li>
</ul>
</li>
<li>コールバック URL:
<ul>
<li> 使用するクライアントアプリに応じて適切なものを設定</li>
<li>画像例では localhost にしているが、Claude Desktop で使う場合は「https://claude.ai/api/mcp/auth_callback」にするなど</li>
<li>参考: <a href="https://www.google.com/url?q=https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/create-external-client-app.html%23steps-to-create-an-external-client-app&amp;sa=D&amp;source=editors&amp;ust=1776477394818326&amp;usg=AOvVaw1DZlsS30VXEdpsjTI70Ji3">Steps to Create an External Client App</a></li>
</ul>
</li>
<li>OAuth 範囲:
<ul>
<li> 次の二つを選択
<ul>
<li>いつでも要求を実行(refresh_token, offline_access)</li>
<li>Salesforce でホストされている MCP サーバーにアクセス (mcp_api)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206128" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182316/jpblog-hosted-mcp-server-03.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま少し画面を下げます。</p>
<ul>
<li>セキュリティ: 次の二つのみを選択
<ul>
<li>サポートされる認証フローに Proof Key for Code Exchange (PKCE) 拡張を要求</li>
<li>指名ユーザーの JSON Web トークン (JWT) ベースのアクセストークンを発行</li>
</ul>
</li>
<li>「作成」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206127" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182313/jpblog-hosted-mcp-server-04.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>「設定」タブに切り替え</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206126" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182310/jpblog-hosted-mcp-server-05.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>そのまま画面を少し下げます。</p>
<ul>
<li>OAuth 設定のアコーディオンを開く</li>
<li>「コンシューマー鍵と秘密」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206125" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182307/jpblog-hosted-mcp-server-06.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>メールで送られてくる確認コードを入力</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206124" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182301/jpblog-hosted-mcp-server-07.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>コンシューマー鍵をコピーしておく</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206123" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182258/jpblog-hosted-mcp-server-08.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>以上で外部クライアントアプリケーションの作成は完了です。</p>
<h2>使いたい MCP サーバーを有効化</h2>
<p>提供する機能によってサーバーが分かれています。ここでは「sobject-reads」を有効化して使用できるようにします。</p>
<ul>
<li>設定 -&gt; インテグレーション -&gt; API カタログ -&gt; MCP サーバー</li>
<li>一覧から「sobject-reads」の名前のリンクを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206122" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182255/jpblog-hosted-mcp-server-09.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>画面右上「有効化」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206121" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182249/jpblog-hosted-mcp-server-10.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>サーバー状態が「稼働中」に変われば有効化が完了です。また、ツールタブから、実際にこの MCP サーバーが提供しているツール(機能)の一覧を確認できます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206120" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182246/jpblog-hosted-mcp-server-11.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>以上で MCP サーバーの有効化は完了です。</p>
<p>ちなみにこの機能で面白いところは、カスタムの MCP サーバーを作成し、フローや Apex をツールとして登録、クライアントとなる生成 AI アプリやエージェントから自然言語で呼び出せるようになる点です。もちろん、皆さんが作ったフローや Apex も対象で、ノーコードでクライアントから呼び出せるようにすることができます。</p>
<h2>クライアント側での設定追加・有効化</h2>
<p>ここでは Claude Desktop アプリでの設定を例に見てみましょう。</p>
<p>注意: ここからは他社プロダクトになります。画面表示や操作パスは予告なく変更になる場合がありますので、必ずお使いになるプロダクトの最新情報をご確認ください。</p>
<ul>
<li>カスタマイズ -&gt; コネクタ -&gt; 「+(追加ボタン)」 -&gt; 「カスタムコネクタを追加」を押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206119" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182239/jpblog-hosted-mcp-server-12.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>必要事項を入力します。</p>
<ul>
<li>コネクタ名は任意のもので良い</li>
<li>URL は Salesforce の設定画面にある MCP サーバーの Server URL を指定</li>
<li>詳細設定を開き、OAuth のクライアント ID のみを設定</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206118" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182236/jpblog-hosted-mcp-server-13.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206117" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182233/jpblog-hosted-mcp-server-14.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>「連携/連携させる」ボタンを押す。</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206116" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182231/jpblog-hosted-mcp-server-15.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<ul>
<li>ブラウザが開くので連携で使うユーザーを選ぶ</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206115" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182228/jpblog-hosted-mcp-server-16.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<ul>
<li>内容を確認し「許可」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206114" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182224/jpblog-hosted-mcp-server-17.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>次のような画面になれば成功です。</p>
<ul>
<li>「デスクトップアプリを開く」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206113" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182220/jpblog-hosted-mcp-server-18.jpg?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>ツールの一覧が見えてくれば接続も無事できています。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206112" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182218/jpblog-hosted-mcp-server-19.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>以上でクライアント側の設定は完了です。クライアントによって設定の仕方が異なりますので、それぞれの設定の仕方をご確認ください。</p>
<h2>動作検証</h2>
<p>それでは動作検証をしてみましょう。先ほど設定した Claude Desktop で会話してみます。</p>
<ul>
<li>「こんにちは！Salesforce にアクセスして、取引先の一覧を見せて」</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206111" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182214/jpblog-hosted-mcp-server-20.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>次のように回答が返ってくれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206110" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182210/jpblog-hosted-mcp-server-21.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206109" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182206/jpblog-hosted-mcp-server-22.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>違う聞き方もしてみましょう。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206108" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417182158/jpblog-hosted-mcp-server-23.jpg?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>おわりに</h2>
<p>この記事では、Salesforce Hosted MCP Server の初期セットアップから使い始めるまでの流れについて解説しました。</p>
<p>これまで、生成 AI アプリ・エージェントなどから Salesforce のデータにアクセスするためには、独自の API アクセスラッパーのようなものを構築する必要がありましたが、Hosted MCP Server を使えば、一度設定するだけで複数の MCP 対応クライアントから Salesforce にアクセスできるようになります。フィールドレベルセキュリティや共有ルールも尊重されるため、安全に AI エージェントを活用できます。</p>
<p>ぜひ、Developer Edition で Hosted MCP Server を試してみてください。AI エージェントと Salesforce の連携により、新しい可能性が広がります！</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp">Salesforce Hosted MCP Server 使い始め</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-server-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206107</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417183656/blog_salesforce_hosted_mcp_server_%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417183656/blog_salesforce_hosted_mcp_server_%E4%BD%BF%E3%81%84%E5%A7%8B%E3%82%81.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</title>
		<link>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp#respond</comments>
		<pubDate>Thu, 16 Apr 2026 23:00:24 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[mini hack]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206035</guid>
		<description><![CDATA[<p>&#23455;&#35013;&#12398;&#27491;&#30906;&#24615;&#12384;&#12369;&#12391;&#28961;&#12367;&#12473;&#12500;&#12540;&#12489;&#12418;&#37325;&#35201;&#12394; Lightning MiniHack Live&#12290;&#20104;&#36984;&#12398;&#23455;&#35013;&#35201;&#20214;&#12399;&#12300;&#20104;&#31639;&#36229;&#36942;&#12434;&#25171;&#30772;&#12379;&#12424;&#65281;&#32202;&#24613;&#25215;&#35469;&#12525;&#12472;&#12483;&#12463;&#12398;&#23455;&#35013;&#12301;&#12364;&#12486;&#12540;&#12510;&#12391;&#12377;&#12290;&#27491;&#30906;&#24615;&#12399;&#12418;&#12385;&#12429;&#12435;&#12289;&#26368;&#36895;&#12398;&#23455;&#35013;&#25163;&#27573;&#12399;&#12393;&#12428;&#12394;&#12398;&#12363;&#65311;&#12415;&#12394;&#12373;&#12414;&#12398;&#12450;&#12452;&#12487;&#12450;&#12539;&#38275;&#12365;&#12395;&#26399;&#24453;&#12391;&#12377;&#65281;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp">Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2 data-pm-slice="1 3 []">ビジネスシナリオ</h2>
<p>株式会社アストロ・エンタープライズ(架空の会社名)では、各プロジェクトの経費管理を Salesforce 上で行っています。通常、プロジェクト予算は厳格に管理されており、予算残高がマイナスになるような経費の支出はシステムでブロックする必要があります。 しかし、現場からは「災害時や緊急トラブル対応時には、承認を待たずに予算超過してでも経費を計上したい」という強い要望が出ています。</p>
<p>あなたはシステム管理者兼開発者として、この「原則禁止、ただし緊急時は例外」という柔軟かつ堅牢なロジックと、現場が使いやすい操作画面をゼロの状態から構築しなければなりません。</p>
<h2>更新履歴</h2>
<ol>
<li>2026/4/22: ロジックの実装手段について、当初の記載に縛られず、Salesforce の標準提供 &amp; 基盤上で動作するものであれば良いように修正</li>
<li>2026/4/21: カスタムオブジェクトへの項目作成で、項目の説明は実装時には入力不要である旨を追記</li>
</ol>
<h2>実装要件</h2>
<p>以下のコンポーネント作成から画面カスタマイズ、ロジック実装までのすべての工程を録画に含めてください。</p>
<h4>1. カスタムオブジェクトと項目の作成</h4>
<table>
<tbody>
<tr>
<th>オブジェクト</th>
<th>項目名 (表示名)</th>
<th>型</th>
<th>項目概要(実装時の説明への入力は不要)</th>
</tr>
<tr>
<td><strong>プロジェクト</strong> (<code>Project__c</code>)</td>
<td><strong>予算残高</strong> (<code>Budget__c</code>)</td>
<td>通貨 (18, 0)</td>
<td>プロジェクトの残り予算。</td>
</tr>
<tr>
<td><strong>経費</strong> (<code>Expense__c</code>)</td>
<td><strong>プロジェクト</strong> (<code>Project__c</code>)</td>
<td>主従関係 または 参照関係</td>
<td>親となるプロジェクト。参照関係の場合は必須項目とすること。</td>
</tr>
<tr>
<td></td>
<td><strong>金額</strong> (<code>Amount__c</code>)</td>
<td>通貨 (18, 0)</td>
<td>支出する金額。</td>
</tr>
<tr>
<td></td>
<td><strong>緊急フラグ</strong> (<code>Is_Emergency__c</code>)</td>
<td>チェックボックス</td>
<td>ON の場合、予算超過を許容する。</td>
</tr>
</tbody>
</table>
<p>※記載以外のオブジェクトや項目を作っても構いませんが、加点はされません。「録画提出の手順と完了定義」のステップ3 動作検証（証明操作）が記述通り完了すれば良し、とします。</p>
<h4>2. 画面カスタマイズ（UI/UX）</h4>
<ul>
<li><strong>プロジェクトのレコード詳細画面</strong>:
<ul>
<li>関連リストとして「経費」オブジェクトが表示されるように設定してください。</li>
<li>関連リストには「経費名」「金額」「緊急フラグ」の各項目が表示されている必要があります。</li>
<li><strong>重要:</strong> プロジェクトのレコード詳細と関連リストは、タブの切り替えではなく、同一ページ内に同時に表示されるように配置してください。</li>
</ul>
</li>
</ul>
<h4>3. 予算超過の制御ロジック（基本ルール）</h4>
<ul>
<li><strong>目的</strong>: 通常時、プロジェクトの「予算残高」が 0 未満（マイナス）になるような保存を禁止する。</li>
<li><strong>エラーメッセージ</strong>: 「予算が不足しています。経費を計上できません。」</li>
<li><strong>実装手段</strong>: 数式、入力規則、フロー、または Apex トリガーなど Salesforce が標準で提供し基盤上で動作する機能を単独、もしくは必要に応じて組み合わせて実装。</li>
</ul>
<h4>4. 自動減算ロジックの実装</h4>
<ul>
<li><strong>内容</strong>: 経費レコードが作成された際、親プロジェクトの「予算残高」から経費の「金額」を差し引く。</li>
<li><strong>実装手段</strong>: 数式、入力規則、フロー、または Apex トリガーなど Salesforce が標準で提供し基盤上で動作する機能を単独、もしくは必要に応じて組み合わせて実装。今回はバルク更新を考慮せず画面操作での1件 &amp; 新規作成のみが対象で良い。</li>
</ul>
<h4>5. 緊急承認ロジック（例外要件）</h4>
<ul>
<li><strong>目的</strong>: 現場の緊急事態に柔軟に対応するため、特定の条件下で基本ルールをスキップさせる。</li>
<li><strong>要件</strong>: 経費レコードの「緊急フラグ」が <strong>ON</strong> の場合は、要件3で定義した「予算超過の制限」を無視し、予算残高がマイナスになっても正常に保存を完了させること。</li>
</ul>
<h2>録画提出の手順と完了定義</h2>
<p>以下の操作手順をすべて含む、開始から完了までは無編集の 1 本の画面操作録画を作成してください。</p>
<p>操作にあたっては禁止事項があります。(ブラウザのオートコンプリート禁止、事前に用意したコードのコピー&amp;ペースト禁止など)</p>
<p>詳しくは<a href="https://developer.salesforce.com/jpblogs/2026/04/lightning-minihack-live-2026-jp">イベント概要&amp;予選参加ガイド</a>「操作にあたっての制約」を参照してください。</p>
<h4>ステップ 1：開始確認</h4>
<ol>
<li>設定のホームを表示させた状態から録画を開始する。
<ul>
<li>Trailhead Playground で新規に取得した直後の状態</li>
<li>事前設定は表示言語が日本語以外の場合は日本語に変えることのみを可とする</li>
</ul>
</li>
</ol>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206037" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260413205610/lightning-minihack-live-implementation-start.jpeg?w=1538" class="postimages" width="1538" height="1000" alt="" />
			  </span>
			</p>
<p>※「設定のホーム」画面であれば表示内容に差異があっても良いです。</p>
<h4>ステップ 2：環境構築（実装操作）</h4>
<ol>
<li><strong>オブジェクト作成</strong>: 指定された 2 つのオブジェクトと項目を作成する。</li>
<li><strong>画面カスタマイズ</strong>: プロジェクトのレコードページを編集し、関連リストを配置する。</li>
<li><strong>ロジック実装</strong>: 「予算減算」「超過制御」「緊急例外」の各ロジックを実装・有効化する。</li>
</ol>
<h4>ステップ 3：動作検証（証明操作）</h4>
<ol>
<li><strong>テストデータの準備</strong>:
<ul>
<li>「プロジェクト」レコードを作成し、<strong>プロジェクト名: プロジェクト1</strong>、<strong>予算残高: 100,000</strong> と入力して保存する。</li>
</ul>
</li>
<li><strong>通常時のブロック確認（要件3の証明）</strong>:
<ul>
<li>関連リストから「経費」を新規作成する。</li>
<li><strong>経費名: 経費1</strong>、<strong>金額: 150,000</strong>、<strong>緊急フラグ: OFF</strong> で保存を試み、エラーメッセージが表示されることを示す。</li>
</ul>
</li>
<li><strong>緊急時の許可確認（要件5の証明）</strong>:
<ul>
<li>同じ入力画面のまま、<strong>緊急フラグ: ON</strong> に変更して保存し、成功することを示す。</li>
</ul>
</li>
<li><strong>最終結果の確認（要件2・4の証明）</strong>:
<ul>
<li>親の「プロジェクト」レコード詳細画面で、予算残高が <strong>-50,000</strong> になり、かつ関連リストに経費が表示されていること、レコードの項目として経費名、金額、緊急フラグが表示されていることを示す。</li>
</ul>
</li>
</ol>
<ul>
<li style="list-style-type: none">
<ul></ul>
</li>
</ul>
<h4>ステップ 4：終了確認</h4>
<ol>
<li>ステップ3-4操作完了時の画面で、録画を終了する。</li>
</ol>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206038" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260413205641/lightning-minihack-live-implementation-finish.jpeg?w=1538" class="postimages" width="1538" height="1000" alt="" />
			  </span>
			</p>
<p>※アプリケーションがセールスである必要はありません。</p>
<h2>お問い合わせ</h2>
<p>実装要件や録画方法について不明点や質問がありましたら<a href="https://developer.salesforce.com/jpblogs/2026/04/lightning-minihack-live-2026-jp">イベント概要&amp;予選参加ガイド</a>をご確認の上、コミュニケーション用の Slack ワークスペースの指定のチャンネルでお尋ねください。</p>
<p>Happy Hacking!</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp">Lightning MiniHack Live 予選実装要件: 予算超過を打破せよ！緊急承認ロジックの実装</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/lightning-minihack-live-2026-qualifiers-implementation-task-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206035</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260413210340/lightning-minihack-live-qualifiers-implementation-task-blog-feature.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260413210340/lightning-minihack-live-qualifiers-implementation-task-blog-feature.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</title>
		<link>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server#respond</comments>
		<pubDate>Thu, 16 Apr 2026 08:00:20 +0000</pubDate>
		<dc:creator><![CDATA[Mayuresh Verma]]></dc:creator>
				<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Agentic DX]]></category>
		<category><![CDATA[Apex Performance]]></category>
		<category><![CDATA[ApexGuru]]></category>
		<category><![CDATA[Code Analyzer]]></category>
		<category><![CDATA[developer tooling]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Model context protocol]]></category>
		<category><![CDATA[Salesforce DX MCP Server]]></category>
		<category><![CDATA[Scale Products]]></category>
		<category><![CDATA[Shift-Left]]></category>
		<category><![CDATA[Static Analysis]]></category>
		<category><![CDATA[Vibe Coding]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206079</guid>
		<description><![CDATA[<p>Shift your performance analysis left with ApexGuru and the Salesforce DX MCP Server. Now, you can catch and fix costly Apex bottlenecks directly in your IDE before you ever hit deploy.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server">Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">What if performance analysis started before deployment instead of after it? That is the shift </span><a href="https://help.salesforce.com/s/articleView?language=en_US&amp;id=xcloud.apexguru_overview.htm&amp;type=5"><span style="font-weight: 400">ApexGuru</span></a><span style="font-weight: 400"> now enables through the </span><a href="https://github.com/salesforcecli/mcp/blob/main/packages/mcp-provider-scale-products/README.md"><span style="font-weight: 400">Salesforce DX MCP Server</span></a><span style="font-weight: 400">. (</span><i><span style="font-weight: 400">Model Context Protocol, or MCP, </span></i><span style="font-weight: 400">serves as an interface between AI assistants and external data sources.) ApexGuru is the Salesforce AI-powered capability for identifying and helping you fix performance-related issues in your code. If you’ve read our earlier posts on </span><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">specialized AI models</span></a><span style="font-weight: 400"> and </span><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">agentic code fixing</span></a><span style="font-weight: 400">, this is the next step: </span><b>bringing ApexGuru performance analysis directly into the developer workflow in agentic IDEs and MCP-compatible clients so you can catch performance bottlenecks while the code is still in front of you</b><span style="font-weight: 400">. In this post, you’ll learn what ApexGuru adds to the agentic developer experience, why this changes the day-to-day Apex workflow, and how to start using it in your MCP client.</span></p>
<h2><span style="font-weight: 400">Why this matters to developers</span></h2>
<p><span style="font-weight: 400">Most teams treat performance analysis as a late-stage activity. Code gets written, reviewed, tested, and deployed, and only then do the costly problems show up: SOQL in loops, unbounded queries, expensive schema lookups, or queries that fetch more data than the code actually uses. By that point, fixing those issues often means rework, delay, and production cleanup.</span></p>
<p>ApexGuru changes that sequence. In the Agentic DX MCP workflow, performance analysis can happen in the same loop as writing code, reviewing code, and preparing changes for deployment. That means developers can catch issues before they become runtime incidents or technical debt. This is especially useful because ApexGuru is not just a generic static check. In Salesforce DX MCP Server, the <a href="https://github.com/salesforcecli/mcp?tab=readme-ov-file#scale-products-toolset"><u><code>scale-products</code><span> toolset</span></u></a><span> includes the GA tool </span><code>scan_apex_class_for_antipatterns</code>, which analyzes Apex classes for performance antipatterns and then returns detections grouped by severity along with fix guidance. When connected to an org where ApexGuru is enabled, the severity assessment can also reflect runtime-informed context rather than static structure alone.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206081" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120708/ApexGuru-runtime-data-and-performance-guidance-displayed-directly-in-the-IDE.png?w=817" class="postimages" width="817" height="643" alt="ApexGuru runtime data and performance guidance displayed directly in the IDE." />
			  </span>
			</p>
<h2><span style="font-weight: 400">From Code Analyzer to Salesforce DX MCP Server</span></h2>
<p><span style="font-weight: 400">The shift-left journey of ApexGuru did not start with MCP. It had already begun moving into the developer workflow through its integration with </span><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/overview"><span style="font-weight: 400">Code Analyzer</span></a><span style="font-weight: 400">, where developers could authorize an ApexGuru-enabled org and scan a selected Apex class directly from the editor for performance issues. Unlike Code Analyzer, however, ApexGuru itself is available only in Production and Full Copy Sandbox orgs for Unlimited, Enterprise, Professional, and Signature Editions.</span></p>
<p><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru"><span style="font-weight: 400">ApexGuru Insights in Code Analyzer</span></a><span style="font-weight: 400"> can still be surfaced in earlier-stage environments when ApexGuru has already been activated in Production or Full Copy Sandbox orgs. In practice, this allows developers to view ApexGuru Insights through Code Analyzer in Developer Sandbox, Partial Copy Sandbox, and Scratch Orgs where the Developer Hub is backed by a Production or Full Copy org. That brought ApexGuru from an app experience into an IDE-assisted workflow and extended performance analysis further left in the development lifecycle.</span></p>
<p><span style="font-weight: 400">Salesforce DX MCP Server builds on that foundation. ApexGuru first established a runtime-aware, specialized AI approach to detecting Apex performance antipatterns, then moved closer to the developer workflow through Code Analyzer integration in Visual Studio Code (VS Code). With DX MCP, ApexGuru takes the next step by expanding into broader MCP-based and agentic workflows across clients such as </span><a href="https://www.salesforce.com/agentforce/developers/vibe-coding/"><span style="font-weight: 400">Agentforce Vibes</span></a><span style="font-weight: 400">, Claude Code, Cursor, Cline, and other MCP-compatible developer environments. Code Analyzer brought ApexGuru into the IDE, while Salesforce DX MCP Server broadens its reach and makes ApexGuru available as part of a more flexible, agent-driven development experience.</span></p>
<h2><span style="font-weight: 400">What ApexGuru adds to Salesforce DX MCP Server</span></h2>
<p><span style="font-weight: 400">ApexGuru is especially useful in Salesforce DX MCP Server because it brings performance analysis into the same workflow where developers are already writing and reviewing code. A class can compile, pass tests, and still carry avoidable CPU cost, query inefficiency, or scalability risk. ApexGuru helps surface those issues earlier, before they turn into runtime incidents or costly cleanup later.</span></p>
<p><span style="font-weight: 400">With Salesforce DX MCP Server, the flow becomes much simpler. You write code, ask your MCP client to scan the class, review the antipatterns and severity, and apply the recommended fixes before you commit or deploy. Performance is no longer a separate destination. It becomes part of the development loop.</span></p>
<h2><span style="font-weight: 400">Designing performance guidance for agentic workflows</span></h2>
<p><span style="font-weight: 400">To truly empower an AI agent to act as a performance engineer, we had to move beyond simple API wrappers and design for </span><i><span style="font-weight: 400">context exchange</span></i><span style="font-weight: 400">. That is, we had to design for a workflow that combines local code context with org-side runtime context. The core challenge in bringing ApexGuru to agentic IDEs was bridging two completely different environments: the developer&#8217;s local machine (where the unsaved code lives) and the Salesforce org (where the runtime telemetry lives).</span></p>
<p><span style="font-weight: 400">To solve this, we mapped ApexGuru to the MCP as an executable tool within the Salesforce DX MCP Server. The Salesforce DX MCP Server runs locally, so it can inspect the developer’s file directly while also using </span><a href="https://developer.salesforce.com/tools/salesforcecli"><span style="font-weight: 400">Salesforce CLI</span></a><span style="font-weight: 400"> authentication to access org-side runtime context.</span></p>
<p>When an agent invokes the <code>scan_apex_class_for_antipatterns</code> tool, the invocation requires specific parameters: the <code>className</code> and the absolute <code>apexFilePath</code>. Behind the scenes, the tool does not rely on simple regular expressions; it utilizes Abstract Syntax Tree (AST) parsing to accurately analyze the local code&#8217;s syntax, tracking method context and loop depth.</p>
<p>The real magic happens when this local static analysis is combined with remote telemetry. The tool connects to your authorized org to see if the detected pattern (such as a <code>Schema.getGlobalDescribe()</code> call) is actually causing high CPU usage in a Production or a Full Copy Sandbox org. It then returns a JSON-structured payload to the agent containing the antipattern type, the runtime-informed severity level, the problematic code snippet, and explicit fix instructions. Because the output is structured, an MCP-compatible client can reliably summarize the finding, explain why it matters, and help display a potential fix in the editor.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206082" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120736/Sequence-diagram-showing-how-the-Scan-Apex-Class-for-Antipatterns-tool-works-e1776366470348.png?w=1000" class="postimages" width="1000" height="704" alt="Sequence diagram showing how the Scan Apex Class for Antipatterns tool works." />
			  </span>
			</p>
<p>To enable this agentic experience in an MCP-compatible client, simply define the Salesforce DX MCP Server in your configuration file and pass the <code>--toolsets scale-products</code> flag.</p>
<p><span style="font-weight: 400">Much more than a static scan wrapped in chat, ApexGuru in Salesforce DX MCP Server provides a way to bring local code analysis and org-aware prioritization into the same workflow, so developers can decide what to fix first while they are still coding.</span></p>
<h2><span style="font-weight: 400">What the experience looks like in practice</span></h2>
<p><span style="font-weight: 400">ApexGuru in Salesforce DX MCP Server does more than flag a pattern; it can show you runtime-informed findings directly in the coding surface. In the following two screenshots from Agentforce Vibes, the first scan view shows the detected antipatterns, their severity, and a short explanation of why each one matters. The second, deeper view expands the issue into a more detailed explanation with telemetry-backed reasoning, expected improvement after remediation, and the likely impact on performance and stability.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206083" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120812/ApexGuru-scan-results-inside-Agentforce-Vibes-showing-a-CRITICAL-severity-antipattern-its-description-and-runtime-metrics-including-8.4-of-App-CPU-during-peak-support-traffic.png?w=873" class="postimages" width="873" height="266" alt="ApexGuru scan results inside Agentforce Vibes showing a CRITICAL severity antipattern, its description, and runtime metrics, including “8.4% of App CPU during peak support traffic”." />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206084" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260416120855/Detailed-view-of-a-critical-ApexGuru-finding-showing-the-flagged-line-why-Schema.getGlobalDescribe-in-a-loop-is-costly-and-the-recommended-direct-SObject-type-fix.png?w=638" class="postimages" width="638" height="598" alt="Detailed view of a critical ApexGuru finding showing the flagged line, why Schema.getGlobalDescribe() in a loop is costly, and the recommended direct SObject type fix." />
			  </span>
			</p>
<p><span style="font-weight: 400">Whereas a traditional code check might tell you that something is risky, ApexGuru goes further by helping answer three more useful questions: why this issue hurts, why it matters in this org, and what the likely benefit is if you fix it now. That is what makes the developer experience feel closer to performance guidance than to using a simple linter.</span></p>
<p><span style="font-weight: 400">For example, if you are editing an Apex class that queries inside a loop or retrieves far more fields than the code actually uses, the code may still work functionally, but the pattern can become expensive as data volume grows. With </span><a href="https://github.com/salesforcecli/mcp/tree/main"><span style="font-weight: 400">ApexGuru in Salesforce DX MCP Server</span></a><span style="font-weight: 400">, you can ask your MCP client to scan the file for performance issues in your prompt; for example, “Scan the class for performance issues.&#8221;” A typical result includes a grouped antipattern type, a fix instruction, one or more detected instances, and severity for each instance.</span></p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">Performance-first development is not just about catching issues earlier. It is about making performance review a natural part of how code gets written and refined. ApexGuru in Salesforce DX MCP Server moves performance analysis closer to the moment where developers can still act on it quickly. Instead of discovering costly bottlenecks after deployment, developers can now surface telemetry-backed findings while they are still coding, understand why those findings matter, and fix them before they become larger problems.</span></p>
<p><span style="font-weight: 400">That is the real promise of this integration. ApexGuru is no longer limited to a separate app surface or a single IDE extension flow. It is becoming part of a broader developer workflow where performance, code quality, and remediation come together in the same loop.</span></p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=xcloud.apexguru_overview.htm&amp;type=5"><span style="font-weight: 400">Help documentation ApexGuru</span></a></li>
<li style="font-weight: 400"><a href="https://salesforce.vidyard.com/watch/9wrv1Nhuk3xntidbouDWpz"><span style="font-weight: 400">ApexGuru in DX MCP Server: Demo video </span></a></li>
<li style="font-weight: 400"><a href="https://github.com/salesforcecli/mcp/blob/main/packages/mcp-provider-scale-products/README.md"><span style="font-weight: 400">ApexGuru or Scale Products MCP README</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/06/the-apexguru-ai-engine-explained"><span style="font-weight: 400">The ApexGuru AI Engine, Explained</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/09/inside-apexguru-agentic-code-fixing"><span style="font-weight: 400">Inside ApexGuru: Agentic Code Fixing</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/salesforcecli/mcp/tree/main"><span style="font-weight: 400">Salesforce DX MCP Server repository and tool documentation</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/blogs/2025/02/optimize-your-apex-for-apps-and-agentforce-with-apexguru"><span style="font-weight: 400">Optimize Your Apex for Apps and Agentforce with ApexGuru</span></a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru"><span style="font-weight: 400">Code Analyzer VS Code extension documentation</span></a></li>
</ul>
<h2><span style="font-weight: 400">About the Authors</span></h2>
<p><b>Mayuresh Verma</b><span style="font-weight: 400"> is a Senior AI Product Manager at Salesforce working on the Scalability Products portfolio, including ApexGuru. Reach out to him on </span><a href="https://www.linkedin.com/in/mayuresh-verma/"><span style="font-weight: 400">Linkedin</span></a><span style="font-weight: 400">.</span></p>
<p><b>Samarth Arora</b><span style="font-weight: 400"> is a Member of Technical Staff at Salesforce working on ApexGuru. Reach out to him on </span><a href="https://www.linkedin.com/in/samarth-sfdc/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server">Performance-First Apex Development with ApexGuru in Salesforce DX MCP Server</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/performance-first-apex-development-with-apexguru-in-salesforce-dx-mcp-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206079</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260416121249/Generic-D-e1776366784247.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260416121249/Generic-D-e1776366784247.png?w=1000" medium="image" />
	</item>
		<item>
		<title>New in Salesforce Developer Edition: Agentforce Vibes IDE, Claude 4.5, MCP</title>
		<link>https://developer.salesforce.com/blogs/2026/04/new-developer-edition-agentforce-vibes-claude-mcp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/new-developer-edition-agentforce-vibes-claude-mcp#respond</comments>
		<pubDate>Wed, 15 Apr 2026 16:00:46 +0000</pubDate>
		<dc:creator><![CDATA[René Winkelmeyer]]></dc:creator>
				<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[Salesforce Events]]></category>
		<category><![CDATA[Agentforce Vibes IDE]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Claude Sonnet 4.5]]></category>
		<category><![CDATA[developer edition]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Salesforce Hosted MCP]]></category>
		<category><![CDATA[TDX 2026]]></category>
		<category><![CDATA[Vibe Coding]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205995</guid>
		<description><![CDATA[<p>Salesforce Developer Edition now includes Agentforce Vibes IDE, Claude Sonnet 4.5, and Hosted MCP Servers - all free. Here's what's new.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/new-developer-edition-agentforce-vibes-claude-mcp">New in Salesforce Developer Edition: Agentforce Vibes IDE, Claude 4.5, MCP</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400;">The free Salesforce Developer Edition just got a major upgrade today at TDX in April 2026, alongside other platforms like </span><a href="https://www.salesforce.com/news/stories/agent-fabric-control-plane-announcement/"><span style="font-weight: 400;">Agent Fabric</span></a><span style="font-weight: 400;">. Starting today, every Developer Edition org includes access to </span><a href="https://developer.salesforce.com/docs/platform/code-builder/guide/codebuilder-overview.html"><span style="font-weight: 400;">Agentforce Vibes IDE</span></a><span style="font-weight: 400;">, </span><a href="https://www.salesforce.com/agentforce/developers/vibe-coding/"><span style="font-weight: 400;">Agentforce Vibes</span></a><span style="font-weight: 400;"> with Claude Sonnet 4.5 as the default coding model, and </span><a href="https://help.salesforce.com/s/articleView?id=platform.hosted_mcp_servers.htm&amp;type=5"><span style="font-weight: 400;">Salesforce Hosted MCP Servers</span></a><span style="font-weight: 400;">, all at no cost.</span></p>
<p><span style="font-weight: 400;">If you&#8217;ve been waiting for a reason to spin up a new Developer Edition org (or dust off your existing one), this is it. Since </span><a href="https://developer.salesforce.com/blogs/2025/03/introducing-the-new-salesforce-developer-edition-now-with-agentforce-and-data-cloud"><span style="font-weight: 400;">we launched the new Developer Edition in March</span></a><span style="font-weight: 400;"> with Agentforce and Data 360 (formerly Data Cloud), these three additions turn it into a full AI development environment.</span></p>
<h2><span style="font-weight: 400;">Agentforce Vibes IDE is now available in Developer Edition</span></h2>
<p><span style="font-weight: 400;">Agentforce Vibes IDE is a </span><b>browser-based, cloud-hosted Visual Studio Code (VS Code) environment</b><span style="font-weight: 400;"> that launches directly from your org&#8217;s Setup menu. Previously known as Code Builder, it gives you a fully authenticated, org-aware development environment with no local installation required.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206059" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260414144519/image1_bd4d9d-e1776199536496.png?w=1000" class="postimages" width="1000" height="622" alt="Agentforce Vibes IDE open in the browser" />
			  </span>
			</p>
<p><span style="font-weight: 400;">Open Setup, click Agentforce Vibes, and within moments you&#8217;re working in a full VS Code editor with Salesforce Extensions, </span><a href="https://developer.salesforce.com/tools/salesforcecli"><span style="font-weight: 400;">Salesforce CLI</span></a><span style="font-weight: 400;">, and GitHub integration preconfigured. Your org&#8217;s metadata loads automatically into an SFDX project. No manual authentication, no CLI setup, no extension hunting.</span></p>
<p><span style="font-weight: 400;">From there you can develop and deploy Apex, Lightning Web Components (LWCs), and flows; run tests against your org; use the integrated terminal; and access Agentforce Vibes (the agentic coding experience) directly from the sidebar.</span></p>
<h2><span style="font-weight: 400;">Agentforce Vibes with Claude Sonnet 4.5: vibe coding for Salesforce</span></h2>
<p><span style="font-weight: 400;">Agentforce Vibes is the Salesforce enterprise vibe coding capability, and it&#8217;s now available in Developer Edition with </span><b>Claude Sonnet 4.5 as the default model</b><span style="font-weight: 400;">. It understands your Salesforce org&#8217;s metadata, schema, and existing code patterns. When you tell it to &#8220;create a trigger that prevents duplicate Accounts based on email,&#8221; for example, it reads your actual org structure first. No hallucinated field names.</span></p>
<p><span style="font-weight: 400;">The coding agent comes with two modes:</span></p>
<ul>
<li style="font-weight: 400;"><b>Plan mode:</b><span style="font-weight: 400;"> Analyzes your org, clarifies requirements, and generates an implementation plan before writing code.</span></li>
<li style="font-weight: 400;"><b>Act mode:</b><span style="font-weight: 400;"> Creates and modifies Apex classes, LWCs, triggers, and test classes based on your natural language instructions.</span></li>
</ul>
<p><span style="font-weight: 400;">Agentforce Vibes comes with predefined agent skills, and integrates with Salesforce ALM tools like </span><a href="https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/code-analyzer.html"><span style="font-weight: 400;">Code Analyzer</span></a><span style="font-weight: 400;">, and </span><a href="https://help.salesforce.com/s/articleView?id=platform.devops_center_overview.htm&amp;type=5"><span style="font-weight: 400;">DevOps Center</span></a><span style="font-weight: 400;">. It does not deploy anything unless you explicitly ask; by default, it modifies local project files you review first.</span></p>
<h3><span style="font-weight: 400;">Usage limits for Developer Edition</span></h3>
<ul>
<li style="font-weight: 400;"><b>110 requests per month</b><span style="font-weight: 400;"> with Claude Sonnet 4.5</span></li>
<li style="font-weight: 400;"><b>1.5 million tokens per month</b></li>
<li style="font-weight: 400;"><b>Monthly refresh through May 31, 2026</b><span style="font-weight: 400;"> (allocation resets each month)</span></li>
<li style="font-weight: 400;"><b>After May 31:</b><span style="font-weight: 400;"> a one-time-only allocation of 110 requests / 1.5M tokens with no further refresh</span></li>
</ul>
<p><span style="font-weight: 400;">You have about two months of recurring access to experiment and build, followed by a final allocation, if you start </span><i><span style="font-weight: 400;">now</span></i><span style="font-weight: 400;">. Use the monthly cycles to explore broadly; use the final allocation to finish what you&#8217;ve started. If you don&#8217;t start now, you&#8217;ll only get the final allocation.</span></p>
<p><b>To stretch your requests,</b><span style="font-weight: 400;"> use Plan mode before switching to Act mode, be specific in your prompts (for example, say &#8220;create an Apex before-insert trigger on Lead that checks for duplicate Email values&#8221; rather than &#8220;build something for leads&#8221;), and retrieve only the metadata relevant to your current task.</span></p>
<h2><span style="font-weight: 400;">Salesforce Hosted MCP Servers come to Developer Edition</span></h2>
<p><span style="font-weight: 400;">Now available in Developer Edition, Salesforce Hosted MCP Servers provide a standardized way for external AI tools to connect to your Salesforce data.</span></p>
<p><span style="font-weight: 400;">MCP (</span><a href="https://modelcontextprotocol.io/"><span style="font-weight: 400;">Model Context Protocol</span></a><span style="font-weight: 400;">) is an open standard created by Anthropic that acts as a </span><b>universal interface between AI assistants and external data sources</b><span style="font-weight: 400;">. Configure one MCP server, and any MCP-compatible client (for example Claude Desktop, Cursor, or Claude Code) can interact with your Salesforce org.</span></p>
<p><b>The following table shows how</b><span style="font-weight: 400;"> Hosted MCP differs from DX MCP.</span></p>
<table>
<thead>
<tr>
<th><b>Dimension</b></th>
<th><b>DX MCP Server</b></th>
<th><b>Hosted MCP Server</b></th>
</tr>
</thead>
<tbody>
<tr>
<td><span style="font-weight: 400;">Runs on</span></td>
<td><span style="font-weight: 400;">Your local machine</span></td>
<td><span style="font-weight: 400;">Salesforce infrastructure</span></td>
</tr>
<tr>
<td><span style="font-weight: 400;">Authentication</span></td>
<td><span style="font-weight: 400;">CLI credentials</span></td>
<td><span style="font-weight: 400;">OAuth 2.0 (per user)</span></td>
</tr>
<tr>
<td><span style="font-weight: 400;">Primary tools</span></td>
<td><span style="font-weight: 400;">60+ dev tools (metadata, Apex testing, LWC)</span></td>
<td><span style="font-weight: 400;">sObject API access, invocable actions, flows</span></td>
</tr>
<tr>
<td><span style="font-weight: 400;">Use case</span></td>
<td><span style="font-weight: 400;">Development and deployment workflows</span></td>
<td><span style="font-weight: 400;">Data and logic access for external AI tools</span></td>
</tr>
<tr>
<td><span style="font-weight: 400;">Requires local CLI</span></td>
<td><span style="font-weight: 400;">Yes</span></td>
<td><span style="font-weight: 400;">No</span></td>
</tr>
</tbody>
</table>
<p><span style="font-weight: 400;">Hosted MCP respects your org&#8217;s security model: object and field-level security, sharing rules, and profiles all apply.</span></p>
<p><a href="https://help.salesforce.com/s/articleView?id=platform.hosted_mcp_servers_setup.htm&amp;type=5"><span style="font-weight: 400;">Once connected</span></a><span style="font-weight: 400;">, you can query your Salesforce data through natural language in Claude Desktop, build Agentforce agents that interact with your data via MCP, and prototype AI-driven integrations before committing to a production implementation.</span></p>
<h2><span style="font-weight: 400;">How these three features work together</span></h2>
<p><b>Agentforce Vibes IDE</b><span style="font-weight: 400;"> provides the development environment, </span><b>Agentforce Vibes with Claude Sonnet 4.5</b><span style="font-weight: 400;"> provides the AI coding partner, and </span><b>Hosted MCP Servers</b><span style="font-weight: 400;"> connect external AI tools to your org&#8217;s data. Each is useful independently, but together they create a complete AI-assisted development loop.</span></p>
<p><span style="font-weight: 400;">A practical workflow:</span></p>
<ol>
<li style="font-weight: 400;"><span style="font-weight: 400;">Launch Agentforce Vibes IDE from Setup.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Use Agentforce Vibes to scaffold an Apex class and an LWC.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Configure a Hosted MCP Server to let Claude Desktop query the data your component displays.</span></li>
<li style="font-weight: 400;"><span style="font-weight: 400;">Iterate on the component with Vibes while validating the data layer through MCP.</span></li>
</ol>
<p><span style="font-weight: 400;">That&#8217;s a full AI-assisted development loop running in a free Salesforce org.</span></p>
<h2><span style="font-weight: 400;">Sign up and start building</span></h2>
<p><span style="font-weight: 400;">If you don&#8217;t have a Developer Edition org yet, </span><a href="https://developer.salesforce.com/signup"><span style="font-weight: 400;">sign up here</span></a><span style="font-weight: 400;">. It&#8217;s free, doesn&#8217;t expire as long as you log in regularly, and now includes everything covered in this post.</span></p>
<p><span style="font-weight: 400;">If you already have a Developer Edition with Agentforce and Data 360, these features are gradually rolling out starting this week to existing environments. Navigate to Setup and search for “Agentforce Vibes” to get started. No additional enablement steps required.</span></p>
<h2><span style="font-weight: 400;">Developer Edition resources and documentation</span></h2>
<ul>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/signup"><span style="font-weight: 400;">Sign up for a free Developer Edition</span></a></li>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/developer-centers/agentforce"><span style="font-weight: 400;">Agentforce Developer Center</span></a><span style="font-weight: 400;"> &#8211; documentation, guides, and tutorials</span></li>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/workshops/agentforce-vibes-workshop/explore-agentforce-vibes/overview"><span style="font-weight: 400;">Agentforce Vibes Workshop</span></a><span style="font-weight: 400;"> &#8211; hands-on guided workshop</span></li>
<li style="font-weight: 400;"><a href="https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_mcp_server_eca.htm"><span style="font-weight: 400;">Salesforce Hosted MCP Server setup guide</span></a></li>
<li style="font-weight: 400;"><a href="https://github.com/salesforcecli/mcp"><span style="font-weight: 400;">Salesforce DX MCP Server on GitHub</span></a><span style="font-weight: 400;"> &#8211; local MCP server with 60+ tools</span></li>
<li style="font-weight: 400;"><a href="https://github.com/forcedotcom/code-builder-feedback/blob/main/release-notes.md"><span style="font-weight: 400;">Agentforce Vibes IDE release notes</span></a></li>
</ul>
<h2><span style="font-weight: 400;">About the Author</span></h2>
<p><b>René Winkelmeyer</b><span style="font-weight: 400;"> leads the Developer Advocacy team at Salesforce. His team focuses on Agentforce, Data 360, and the Salesforce Platform. In his spare time, you might find him still coding on </span><a href="https://github.com/muenzpraeger"><span style="font-weight: 400;">GitHub</span></a><span style="font-weight: 400;">. Follow René on </span><a href="https://www.linkedin.com/in/muenzpraeger/"><span style="font-weight: 400;">LinkedIn</span></a><span style="font-weight: 400;">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/new-developer-edition-agentforce-vibes-claude-mcp">New in Salesforce Developer Edition: Agentforce Vibes IDE, Claude 4.5, MCP</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/new-developer-edition-agentforce-vibes-claude-mcp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205995</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260414025546/SingleHeadshot-1-1-e1776156960413.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260414025546/SingleHeadshot-1-1-e1776156960413.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Build with React, Run on Salesforce: Introducing Salesforce Multi-Framework</title>
		<link>https://developer.salesforce.com/blogs/2026/04/build-with-react-run-on-salesforce-introducing-salesforce-multi-framework</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/build-with-react-run-on-salesforce-introducing-salesforce-multi-framework#respond</comments>
		<pubDate>Wed, 15 Apr 2026 13:45:11 +0000</pubDate>
		<dc:creator><![CDATA[Charles Watkins]]></dc:creator>
				<category><![CDATA[Agentforce Vibes]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[app development]]></category>
		<category><![CDATA[developer experience]]></category>
		<category><![CDATA[Frontend Frameworks]]></category>
		<category><![CDATA[GraphQL]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Open Beta]]></category>
		<category><![CDATA[react]]></category>
		<category><![CDATA[Salesforce CLI]]></category>
		<category><![CDATA[Salesforce Multi-Framework]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[UI API]]></category>
		<category><![CDATA[Vite]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205990</guid>
		<description><![CDATA[<p>Salesforce Multi-Framework is in open beta. Build native React apps on the Agentforce 360 Platform with GraphQL, Apex, and built-in platform security.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/build-with-react-run-on-salesforce-introducing-salesforce-multi-framework">Build with React, Run on Salesforce: Introducing Salesforce Multi-Framework</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">You can now build native Salesforce apps in React. Salesforce Multi-Framework is a framework-agnostic runtime on the Agentforce 360 Platform that lets developers build native Salesforce apps using React and other frontend frameworks — with authentication, security, and governance built in. It&#8217;s now in open beta for scratch orgs and sandboxes that use English as the default language. React is supported today; additional frameworks are coming. </span></p>
<p><span style="font-weight: 400">Bring your hooks, your component libraries, your existing toolchain, and build on Salesforce without having to choose between your framework and your platform.</span></p>
<h2><span style="font-weight: 400">Why React on Salesforce? </span></h2>
<p><span style="font-weight: 400">Until now, building on Salesforce meant adopting </span><a href="https://developer.salesforce.com/developer-centers/lightning-web-components"><span style="font-weight: 400">Lightning Web Components</span></a><span style="font-weight: 400"> (LWC) or </span><a href="https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/intro_components.htm"><span style="font-weight: 400">Aura</span></a><span style="font-weight: 400">. You got base components, declarative tools, Lightning Data Service, and UI API access, but you gave up the broader ecosystem. Open-source libraries had to be managed as static resources, and there was no way to use your own framework without losing platform features. Salesforce Multi-Framework eliminates that trade-off.</span></p>
<p><span style="font-weight: 400">Starting today, you can bring your existing React apps, dashboards, and micro-frontends and run them natively on the Agentforce 360 Platform. Multi-Framework apps can retrieve and mutate records with </span><a href="https://developer.salesforce.com/docs/platform/graphql/overview"><span style="font-weight: 400">GraphQL</span></a><span style="font-weight: 400">, invoke Apex methods, and use UI APIs to get user information and context, all with the same security and governance model you already know.</span></p>
<h2><span style="font-weight: 400">Build your first React app on Salesforce</span></h2>
<p><span style="font-weight: 400">Before you start, you&#8217;ll need the Salesforce CLI, Node.js v18 or later, and a scratch org or sandbox. Multi-Framework is not available in production orgs during beta.</span></p>
<h3><span style="font-weight: 400">Generate your first app</span></h3>
<p><span style="font-weight: 400">The easiest way to get started is with the new React project template in the Agentforce Vibes welcome screen. Click the </span><b>React App </b><span style="font-weight: 400">tile and select </span><b>Internal App</b><span style="font-weight: 400"> to generate a new employee-facing React app.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206056" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260414134040/image2-e1776195658373.png?w=1000" class="postimages" width="1000" height="647" alt="Agentforce Vibes welcome screen showing the React App tile" />
			  </span>
			</p>
<p><span style="font-weight: 400">Alternatively, you can generate an app using the SFDX CLI:</span></p>
<pre language="shell">sf plugins install @salesforce/plugin-ui-bundle-dev

# Generate the project

sf template generate project --name my-react-project

# Switch to the project directory

cd my-react-project

# Generate the web app using the reactbasic template

sf template generate ui-bundle -n myreactapp -d "./force-app/main/default/uiBundles" -t reactbasic
</pre>
<p>The <code>sf template generate ui-bundle </code>command generates a starter React app in <code>force-app/main/default/uiBundles</code>. The React template comes preconfigured with:</p>
<ul>
<li style="font-weight: 400"><b>Salesforce Multi-Framework SDK</b><span style="font-weight: 400"> for accessing Salesforce APIs and services</span></li>
<li style="font-weight: 400"><b>Vite </b><span style="font-weight: 400">for bundling</span></li>
<li style="font-weight: 400"><b>Vitest</b><span style="font-weight: 400"> for testing</span></li>
<li style="font-weight: 400"><b>shadcn/ui</b><span style="font-weight: 400"> for components</span></li>
<li style="font-weight: 400"><b>Tailwind CSS</b><span style="font-weight: 400"> for styling</span></li>
</ul>
<h3><span style="font-weight: 400">Running the app locally</span></h3>
<p><span style="font-weight: 400">The underlying project is just a React app, so you can run and preview it locally like any other:</span></p>
<pre language="shell"># Switch to the web app folder

cd force-app/main/default/uiBundles/myreactapp

# Install the react app dependencies

npm install

# Run the project in local dev

npm run dev
</pre>
<p>Open your browser and navigate to the local app (default: <code>localhost:5173</code>) to see the app.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206057" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260414134125/image1-e1776195703953.png?w=1000" class="postimages" width="1000" height="628" alt="Starter React app running locally at localhost:5173]" />
			  </span>
			</p>
<h3><span style="font-weight: 400">Deploying to Salesforce</span></h3>
<p><span style="font-weight: 400">When you&#8217;re ready to deploy the app to your org, build the React app and push it:</span></p>
<pre language="shell"># Build the project with Vite

# This creates a /dist folder or overwrites its contents

npm run build

# Deploy the metadata file and the build to Salesforce

sf project deploy --target-org my-org
</pre>
<p><span style="font-weight: 400">Search for &#8220;myreactapp&#8221; in the App Launcher to see the app live. You can update the app label from the app meta xml file. You now have a React-based app hosted on Salesforce with built-in authentication, security, and governance.</span></p>
<h2><span style="font-weight: 400">Access Salesforce data from React</span></h2>
<p>Once your app is deployed, you&#8217;ll want to pull live data from your org. The <code>@salesforce/sdk-data</code> package provides hooks for querying records via GraphQL and invoking Apex methods. Here&#8217;s a React component that fetches a Contact record:</p>
<pre language="jsx">import { useEffect, useState } from 'react';
import { createDataSDK, gql } from '@salesforce/sdk-data';

const QUERY = gql`
  query GetContact {
    uiapi {
      query {
        Contact(first: 1) {
          edges {
            node {
              Name { value }
              Title { value }
              Picture__c { value }
            }
          }
        }
      }
    }
  }
`;

export default function SingleRecord() {
  const [contact, setContact] = useState(null);

  useEffect(() =&gt; {
    const fetchData = async () =&gt; {
      const sdk = await createDataSDK();
      const response = await sdk.graphql(QUERY);
      
      // Navigate the UI API tree to get the first record
      const record = response.data?.uiapi?.query?.Contact?.edges[0]?.node;
      
      if (record) {
        setContact({
          name: record.Name.value,
          title: record.Title.value,
          picture: record.Picture__c.value
        });
      }
    };
    fetchData();
  }, []);

  if (!contact) return &lt;p&gt;Loading...&lt;/p&gt;;

  return (
    &lt;div style={{ border: '1px solid #ccc', padding: '1rem' }}&gt;
      {contact.picture &amp;&amp; (
        &lt;img src={contact.picture} alt={contact.name} width="50" /&gt;
      )}
      &lt;h1&gt;{contact.name}&lt;/h1&gt;
      &lt;p&gt;{contact.title}&lt;/p&gt;
    &lt;/div&gt;
  );
}
</pre>
<p>The <code>createDataSDK()</code> utility handles authentication automatically so no token management is required in the application code. You can also call Apex methods directly using the SDK’s <code>fetch()</code> method for server-side logic that goes beyond CRUD operations. See the <a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html"><u>Multi-Framework Beta Documentation</u></a> for the full API reference.</p>
<h2><span style="font-weight: 400">Build React Apps with Agentforce Vibes</span></h2>
<p><a href="https://www.salesforce.com/agentforce/developers/vibe-coding/"><b>Agentforce Vibes 2.0</b></a><span style="font-weight: 400"> generates Multi-Framework React apps from natural language prompts. Describe the component you need to Agentforce Vibes — a dashboard showing open Opportunities by stage, for example — and Vibes produces the React code, GraphQL queries, and Salesforce metadata.</span></p>
<p><span style="font-weight: 400">Vibes has a variety of tools to make it easy to build React apps:</span></p>
<ul>
<li style="font-weight: 400"><b>React and Apex templates</b><span style="font-weight: 400"> to scaffold apps without starting from scratch</span></li>
<li style="font-weight: 400"><b>Salesforce MCP server</b><span style="font-weight: 400"> for retrieving and deploying metadata directly from the IDE</span></li>
<li style="font-weight: 400"><b>Live Preview</b><span style="font-weight: 400"> to see your React app update in real time as you build</span></li>
<li style="font-weight: 400"><b>Einstein Trust Layer</b><span style="font-weight: 400"> to ensure prompts and responses are never used to train future models</span></li>
</ul>
<h2><span style="font-weight: 400">React and Lightning Web Components on Salesforce</span></h2>
<p><span style="font-weight: 400">Salesforce Multi-Framework doesn&#8217;t replace LWC; it runs alongside it. Your existing Lightning Web Components continue to work. On Lightning, React components can be embedded as micro-frontends, with the platform providing the shared data and permissions layer between them. Micro-frontend support is in developer preview. </span></p>
<p><span style="font-weight: 400">Choosing React does not mean leaving the platform capabilities that make Salesforce useful. We’re bringing those enterprise features to React through</span><b> framework-agnostic libraries</b><span style="font-weight: 400">: </span><span style="font-weight: 400"> </span></p>
<ul>
<li><b>Efficient Data Management:</b> React developers can use <code>@salesforce/sdk-data</code>, which provides API client methods for GraphQL and Apex that manage record querying and mutation efficiently, ensuring your app stays within API limits.</li>
<li><b>Built-in Governance</b>: The <code>createDataSDK()</code> utility handles authentication automatically, removing the need for manual token management.</li>
<li><b>Security and Accessibility</b>: While LWC has accessibility baked in, Multi-Framework apps can use Agentforce Vibes 2.0 templates, tools, and skills to embed enterprise-grade accessibility and security into every component.</li>
</ul>
<p>Where they differ is in the developer experience and tooling:<br />
<span style="font-weight: 400"></span></p>
<table>
<thead>
<tr>
<th><b>Capability</b></th>
<th><b>React (Multi-Framework)</b></th>
<th><b>Lightning Web Components</b></th>
</tr>
</thead>
<tbody>
<tr>
<td><b>Data access</b></td>
<td><span style="font-weight: 400">GraphQL queries, Apex invocations, UI API</span></td>
<td><span style="font-weight: 400">@wire</span><span style="font-weight: 400"> decorators, Lightning Data Service with built-in caching</span></td>
</tr>
<tr>
<td><b>Component library</b></td>
<td><span style="font-weight: 400">Bring your own (Shadcn, MUI, Ant Design, etc.) or use Agentforce Vibes-generated components</span></td>
<td><span style="font-weight: 400">Salesforce Base Components (80+ out of the box)</span></td>
</tr>
<tr>
<td><b>Styling</b></td>
<td><span style="font-weight: 400">Tailwind CSS, CSS Modules, or any CSS-in-JS library</span></td>
<td><span style="font-weight: 400">Salesforce Lightning Design System (SLDS) tokens and classes</span></td>
</tr>
<tr>
<td><b>Security and standards</b></td>
<td><span style="font-weight: 400">Delivered via SDK and Agentforce Vibes governed “vibe coding”</span></td>
<td><span style="font-weight: 400">Built directly into the LWC compiler and base components</span></td>
</tr>
<tr>
<td><b>App Builder support</b></td>
<td><span style="font-weight: 400">Not yet available (planned for GA)</span></td>
<td><span style="font-weight: 400">Full drag-and-drop support with property panels</span></td>
</tr>
<tr>
<td><b>Cross-platform reuse</b></td>
<td><span style="font-weight: 400">Share components across Salesforce and non-Salesforce apps</span></td>
<td><span style="font-weight: 400">Salesforce-only; can run on LWR sites and Experience Cloud</span></td>
</tr>
<tr>
<td><b>Ecosystem tooling</b></td>
<td><span style="font-weight: 400">npm, Vite, Vitest, React DevTools, full open-source ecosystem</span></td>
<td><span style="font-weight: 400">Salesforce CLI, LWC Local Dev, limited third-party tooling</span></td>
</tr>
</tbody>
</table>
<h3><span style="font-weight: 400">Which should you choose?</span></h3>
<p><b>Choose React</b><span style="font-weight: 400"> when you need to share components across Salesforce and non-Salesforce surfaces, or use the broader React ecosystem. </span></p>
<p><b>Choose LWC</b> when you want declarative data access with <code>@wire</code> and Lightning Data Service, the base component library, and the drag-and-drop Lightning App Builder.</p>
<h2><span style="font-weight: 400">Beta limitations</span></h2>
<p><span style="font-weight: 400">This has been one of the most requested capabilities by the developer community, and we&#8217;re excited to finally get it into your hands. Multi-Framework is in open beta now in scratch orgs and sandboxes, and your feedback will shape where it goes from here.</span></p>
<p><span style="font-weight: 400">A few constraints to know before you start: beta apps cannot be deployed to production orgs, Lightning App Builder drag-and-drop placement is not yet supported for React components, and some platform APIs are not available in the beta runtime. Check the </span><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html"><span style="font-weight: 400">Beta Documentation</span></a><span style="font-weight: 400"> for the full list of known limitations.</span></p>
<p><span style="font-weight: 400">Looking ahead, micro-frontend support for embedding React components directly into Lightning pages is in closed pilot for Spring 2027. In the meantime, we encourage you to try it out, file issues, and tell us what&#8217;s missing and what you want to see in the future.</span></p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li>Demo: <a href="https://salesforce.vidyard.com/watch/q96Q44LQEEHFz4YsjDaJbr">Introducing: Salesforce Multi-Framework</a></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html"><span style="font-weight: 400">Multi-Framework Beta Documentation</span></a><span style="font-weight: 400"> — Setup guide, API reference, and known limitations</span></li>
<li style="font-weight: 400"><a href="https://github.com/trailheadapps/multiframework-recipes"><span style="font-weight: 400">Salesforce Multi-Framework Recipes</span></a><span style="font-weight: 400"> – A collection of 20+ easy-to-digest code samples for React on the Agentforce 360 Platform</span></li>
<li style="font-weight: 400"><a href="https://www.salesforce.com/plus/experience/tdx"><span style="font-weight: 400">TDX Session Recording: Building React Apps on the Agentforce 360 Platform</span></a><span style="font-weight: 400"> — Live demo walkthrough. </span><i><span style="font-weight: 400">Session recording will be available after April 15 — check back here or bookmark the link.</span></i></li>
</ul>
<h2><span style="font-weight: 400">About the Authors</span></h2>
<p><b>Amanda Lane </b><span style="font-weight: 400">leads product marketing for privacy, developer tools, and Agentforce at Salesforce. Before Salesforce, she worked in finance at PwC and the KIPP Foundation. She holds an MBA in consumer analytics from Georgetown and brings a dual background in psychology and economics to product strategy.</span></p>
<p><b>Alice Oh</b><span style="font-weight: 400"> is a Director of Product at Salesforce building foundational products that enable flexible and extensible ways to create, vibe code, and surface apps across the Salesforce ecosystem. In her free time, she bikes around the Bay Area in search of the flakiest croissants. Follow and connect with her on </span><a href="https://www.linkedin.com/in/helloaliceoh/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p><b>Charles Watkins</b><span style="font-weight: 400"> is a self-taught software developer and Lead Developer Advocate at Salesforce. He spends his time blogging, crafting code samples, and finding new places to hike in the Pacific Northwest. You can follow him on </span><a href="https://www.linkedin.com/in/wcharlesw/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/build-with-react-run-on-salesforce-introducing-salesforce-multi-framework">Build with React, Run on Salesforce: Introducing Salesforce Multi-Framework</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/build-with-react-run-on-salesforce-introducing-salesforce-multi-framework/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205990</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409131840/BlogImage_720x404-B.png?w=720" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409131840/BlogImage_720x404-B.png?w=720" medium="image" />
	</item>
		<item>
		<title>React vs. Salesforce：私が「バイブ・コーディング」したアプリをプラットフォーム上に再構築した方法</title>
		<link>https://developer.salesforce.com/blogs/2026/04/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform-jp#respond</comments>
		<pubDate>Mon, 13 Apr 2026 09:11:09 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[react]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206023</guid>
		<description><![CDATA[<p>Lightning Web Components (LWC) &#12392; Flow &#12434;&#20351;&#29992;&#12375;&#12390; React &#12450;&#12503;&#12522;&#12434;&#20877;&#27083;&#31689;&#12377;&#12427;&#12371;&#12392;&#12391;&#12289;&#12525;&#12540;&#12459;&#12523;&#12398; Web &#38283;&#30330;&#12392; Salesforce &#12503;&#12521;&#12483;&#12488;&#12501;&#12457;&#12540;&#12512;&#12398;&#38291;&#12395;&#12393;&#12398;&#12424;&#12358;&#12394;&#12450;&#12540;&#12461;&#12486;&#12463;&#12481;&#12515;&#12398;&#36949;&#12356;&#12364;&#12354;&#12427;&#12398;&#12363;&#12434;&#26126;&#12425;&#12363;&#12395;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform-jp">React vs. Salesforce：私が「バイブ・コーディング」したアプリをプラットフォーム上に再構築した方法</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<blockquote><p>※本記事は2026年3月12日に米国で公開された <a href="//developer.salesforce.com/blogs/2026/03/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform">React vs. Salesforce: How I Rebuilt My “Vibe-Coded” App on the Platform</a>の抄訳です。本記事の正式言語は英語であり、その内容および解釈については英語が優先されます。</p></blockquote>
<p><span style="font-weight: 400">私は2026年の初めにデベロッパーアドボケイトとしてSalesforceに入社しました。それまでのキャリアで、さまざまなツールの良さを発信してきましたが、研修時に告白しなければならないことがありました。</span>実は、Salesforceがどのようなものなのか、よくわかっていなかったのです。<i></i><span style="font-weight: 400"></span></p>
<p><span style="font-weight: 400">「SalesforceがCRMであること」と、多種多様な「クラウド製品」であること以外は知らないことだらけで、まるで未知の言語を一から学んでいるような気分でした。そこで、無駄に手を広げすぎないように、基本に立ち返ってシンプルな問いに向き合うことにしました。それは、「</span><b>開発者にとってのコアプラットフォームは何か</b><span style="font-weight: 400">」ということです。</span></p>
<p><span style="font-weight: 400">答えを見つけるために、何か作ってみることにしました。ただ「Hello World」と表示させるだけではなく、状態管理、UIロジック、データ永続化が必要なインタラクティブなものを。そこで作成したのが、</span><b>オフィスでよくつまむ軽食をドラッグ＆ドロップでランク付けするリスト</b><span style="font-weight: 400">です。</span></p>
<p><span style="font-weight: 400">ただし、同じものを2つの方法で作ります。まず私が得意とする</span><strong>React</strong><span style="font-weight: 400">で構築し、次にSalesforceで、</span><b>Lightning Webコンポーネント（LWC）</b><span style="font-weight: 400">を使って一から作り直しました。</span></p>
<p><span style="font-weight: 400">Reactバージョンは、AIを使ってバイブコーディングで一気に作成しましたが、Salesforceバージョンは別のやり方で進めました。公式ドキュメントとTrailheadを参照して、AIにペアプログラミングの相棒になってもらいました。目標は、単に動くコードを書くことではなく、アーキテクチャーをしっかり理解することでした。</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400">（</span><i><span style="font-weight: 400">注 – 経験豊富なSalesforce開発者の方にとっては、多分この記事に感心することや驚きは何もないと思います。ここに書いたようなエラーにも、何度も遭遇してきたことでしょう。しかし、私のようにSalesforceエコシステムにまだ馴染みがない方たちのために、Salesforceを使い始めるときに感じたことをまとめておこうと思いました</span></i><span style="font-weight: 400">）</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400"><br />
</span><span style="font-weight: 400">では、マーケティング資料を読むのをやめて、実際にコードを書いてみてわかったことを紹介します。</span></p>
<h2><b>フェーズ1：比較基準（React + Vite）</b></h2>
<p><span style="font-weight: 400">公平な実験のために、比較する基準が必要でした。そこで、20分ほどですばやくReactバージョンを作成しました。Reactのstateは理解していたので、ここで特に何かを学ぶことが目的ではありません。Salesforceエコシステムで作るときの手間や違いを正確に測るための、「対照群」を用意する必要があったのです。</span></p>
<p><span style="font-weight: 400">実を言うと、Reactバージョンは「バイブコーディング」で作りました。LLMにランクリストのスクリーンショットを渡して、「React（Vite）とTailwind CSSを使って、この画像にあるようなオフィスの軽食をドラッグ＆ドロップでS、A、B、C、Dにランク分けして、localStorageでデータを永続化できるアプリを作成してください」と指示したのです。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400"></span></p>
<p><strong><i>
			  <span class="postimagessection_specify alignnone size-large wp-image-205775" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112501/A-web-application-displaying-a-drag-and-drop-tier-list-with-office-snacks-categorized-into-S-A-B-C-and-D-tiers-e1773163551227.png?w=1000" class="postimages" width="1000" height="867" alt="オフィス用の軽食をS、A、B、C、Dのランクに分類して表示する、ドラッグアンドドロップ対応のWebアプリケーション。" />
			  </span>
			</i></strong></p>
<p><span style="font-weight: 400">できあがったアプリは、少し手を加えただけで完璧に動作しました。ベーグルをSランクに、キャンディコーン（激甘の砂糖菓子）をDランクにドラッグできました（これはDしかないでしょう。オフィスで食べようとは思えないですからね</span><b></b><span style="font-weight: 400">） </span></p>
<p><span style="font-weight: 400">しかし、生成されたコードを見て、2つのことに気付きました。</span></p>
<ol>
<li style="font-weight: 400"><b>外部への依存</b><span style="font-weight: 400"> – LLMは、ドラッグ＆ドロップを実装するために、すぐにサードパーティライブラリー（</span><span style="font-weight: 400">dnd-kit</span><span style="font-weight: 400">）に頼りました。Salesforce Platformで開発する場合、どうやって実装するのだろうという疑問が浮かびました。</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">手作業でのデータ永続化</b><span style="font-weight: 400"> – このアプリでランクを保存するには、ブラウザーの<code>localStorage</code>を読み書きするためだけに、40行の関数を書かなければなりませんでした。</span><span style="font-weight: 400">Salesforceエコシステムなら、もっと効率的に処理する方法があるだろうと思いました。そして、その考えは当たっていました。</span></li>
</ol>
<p><span style="font-weight: 400">このアプリをちゃんと「使えるもの」にする、つまり同僚と共有し、デバイス間で保存内容を維持できるようにするには、バックエンド（Node、Supabase、またはFirebase）を用意して、APIエンドポイントを書かなければなりません。</span></p>
<p><span style="font-weight: 400">さて、ではSalesforceに移行します。</span></p>
<h2><b>フェーズ2：比較対象 – Salesforce LWC</b></h2>
<p><span style="font-weight: 400">目標はシンプルです。まったく同じアプリをSalesforce Platformのツールだけで再作成します。外部データベースも、Nodeサーバーも使いません。使うのは自分の腕とSalesforce組織だけです。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205778" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112921/An-animated-screen-recording-showing-a-user-dragging-a-snack-item-from-an-unranked-list-and-dropping-it-into-a-designated-tier-row-within-a-Salesforce-interface-1.gif?w=800" class="postimages" width="800" height="855" alt="Salesforceのインターフェース画面で、ランクが未設定の軽食をドラッグし、所定のランクにドロップする操作を録画した動画。" />
			  </span>
			</p>
<h4><b>ライブラリーか、Web標準の機能か</b></h4>
<p><span style="font-weight: 400">独自仕様だらけの悪夢のような、それともわけのわからない古めかしい言語に苦しめられるのかと、戦々恐々としましたが、ふたを開けてみると、使うのは</span><b>JavaScript</b><span style="font-weight: 400">でした。</span></p>
<p><span style="font-weight: 400">Salesforceでは、</span><b>Lightning Webコンポーネント（LWC）</b><span style="font-weight: 400">を使用します。コードは驚くほどReactに似ていると感じましたが、肝心なところがもっとシンプルでした。ドラッグ＆ドロップのロジックに、巨大なnpmパッケージが不要だったのです。私は標準のHTMLイベント（</span><span style="font-weight: 400"><code>ondragstart</code>、<code>ondrop</code></span><span style="font-weight: 400">）を使いました。LWCは重い仮想DOMレイヤーを介さずに、そのままブラウザー上で動作するため、標準のWeb APIを使えたのです。</span></p>
<h2><b>フェーズ3：Reactではバックエンドが必要になるが、Salesforceはバックエンドも担う</b><b><i></i></b><b></b></h2>
<p><span style="font-weight: 400">ここで、目からうろこが落ちました。Reactバージョンのアプリでは、データを「保存」するには、JSON形式をシリアライズしてブラウザーの<code>localStorage</code></span><span style="font-weight: 400">に入れる処理のために、40行のコードを書かなければなりませんでした。さらに、データを永続化したい場合は、SQLを覚え、Postgresデータベースを用意し、Node APIを作成して、CORSにも対応しなければなりません。</span></p>
<p><span style="font-weight: 400">Salesforceでは、このような手間はかかりません。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400"></span><b>カスタムオブジェクトを作成するだけですみます。</b><span style="font-weight: 400"></span></p>
<p><span style="font-weight: 400">私は</span><b>オブジェクトマネージャー</b><span style="font-weight: 400">で<code>Tier_List_Item</code></span><span style="font-weight: 400">を作成しました。すると、すぐにセキュアでスケーラブルなリレーショナルデータベースと、自動生成されたAPIが利用可能になりました。さらに、このプロジェクトでは深く掘り下げませんでしたが、本格的なエンタープライズ向けセキュリティモデルも用意されていることに気付きました。Sランクの軽食はマネージャーのみに編集を許可するなど、細かい権限管理が必要な場合も、1週間かけて認証ミドルウェアを実装することなく、標準のUIだけで設定できます。</span></p>
<p><span style="font-weight: 400">データをコンポーネントに取り込むために、</span><b><code>@wire</code></b><b>サービス</b><span style="font-weight: 400">を使いました。これは、データベースに直接接続し、データをリアクティブに取得する仕組みです。</span></p>
<p><b>Reactでの手作業の状態管理</b><span style="font-weight: 400"></span></p>
<pre language="javascript"> // Reactでは、ストレージから初期状態を読み込む処理を記述しなければならない 
const [boardState, setBoardState] = useState(loadInitialState); 

// アイテムを移動した結果を保存する処理も毎回記述しなければならない
const handleDragOver = (event) =&gt; { 
// ... 計算ロジック ... 
localStorage.setItem(STORAGE_KEY, JSON.stringify(next)); 
}; 
</pre>
<p><b>Salesforceでの宣言型のデータバインド</b><span style="font-weight: 400"></span></p>
<pre language="javascript"> // プラットフォームがデータを取得する
@wire(getAllItems) wiredItems; 
	
// レコードの更新をサーバーに指示するだけでよい 
handleDrop(event) { 
updateItemTier({ itemId: id, tier: newTier }); 
} 
</pre>
<h4><b>わかったこと</b></h4>
<ul>
<li style="font-weight: 400"><b>React – </b><span style="font-weight: 400">ライブラリーとローカルストレージの管理に時間をかけた。</span><i><span style="font-weight: 400"></span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400"></span></i></li>
<li style="font-weight: 400"><b>Salesforce – </b><span style="font-weight: 400">プラットフォームがデータベースを用意し、ブラウザーがインタラクティブな動作を提供してくれるため、ロジックの記述に時間をかけた。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400"></span></li>
</ul>
<p><span style="font-weight: 400">変更の反映には時間がかかりましたが（ホットリロードは使えません）、データの永続化に必要な定型コードの量は大きく減りました。始める前に</span><a href="https://marketplace.visualstudio.com/items?itemName=salesforce.salesforcedx-vscode-ui-preview"><span style="font-weight: 400">Salesforce Live Preview</span></a><span style="font-weight: 400">（英語）を知っていれば、プロセスをもっと速く進められたはずです。</span></p>
<h2><b>フェーズ4：デプロイ時の確認「卵が先か、ニワトリが先か」</b></h2>
<p><span style="font-weight: 400">第2フェーズのフロントエンドを第3フェーズのバックエンドに接続する段階で、厄介なことになりました。データベースとやり取りするためにLWCとApexコントローラーを作成し、デプロイすると、ターミナルに次のように表示されたのです。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205774" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112459/A-terminal-window-showing-a-Salesforce-deployment-failure-with-the-error-message-22No-apex-action-available-for-TierListController.getAllItems22-highlighted.png?w=751" class="postimages" width="751" height="537" alt="Salesforceのデプロイ失敗を示すターミナルウィンドウ。TierListController.getAllItemsに利用可能なApexアクションがない、というエラーメッセージが強調表示されている。" />
			  </span>
			</p>
<p><span style="font-weight: 400">まず頭に浮かんだのは、作業のどこかでタイプミスか、何かつまらないミスをしてしまったのだろう、ということでした。スペル、ファイル名、ファイルパスなど、ありそうな間違いを一とおり調べましたが、コードに問題はありませんでした。</span></p>
<p><span style="font-weight: 400">Reactだったら、いつものように単純にエラーをLLMに貼り付け、出てきた修正をコピーし、そのまま先へ進んでいたでしょう。しかし今回は、AIとドキュメントを使って自分の理解度を確かめることが目的だったので、立ち止まって原因を考えました。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400">そこで、重要な違いに気付いたのです。それは、</span><b>プラットフォームのコンパイルモデル</b><span style="font-weight: 400">。</span></p>
<p><span style="font-weight: 400">Salesforceの正式な用語ではありませんが、これはプラットフォームがコードをどのように検証するかを理解する思考モデルとして役立ちます。Reactでは、ブラウザーだけがコードを検証します。まだ存在しないAPIを呼び出すフロントエンド関数を書いても、実行するまでは、ブラウザーは問題にしません。</span></p>
<p><span style="font-weight: 400">Salesforceでは、</span><b>サーバーがコードの正否を判断します</b><span style="font-weight: 400">。デプロイ時にプラットフォームがコードをコンパイルし、その有効性を確認します。その結果、私のLWCがサーバー側にまだ存在していないバックエンドメソッド（<code>getAllItems</code></span><span style="font-weight: 400">）とやり取りしようとしていることを検出したというわけです。</span></p>
<p><span style="font-weight: 400">先にApexクラス（バックエンド）をデプロイし、その後でLWC（フロントエンド）をデプロイする必要がありました。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400">ミスは、構文エラーではありませんでした。ブラウザーに対してではなく、緊密に統合されたプラットフォームに対してコードを書いているということを思い出させてくれたのです。</span></p>
<h2><b>フェーズ5：ローコード開発の威力（いわゆる「開発」）</b></h2>
<p><span style="font-weight: 400">アーキテクチャーを理解したら、データベースのほかにも、さまざまな機能を利用できることがわかりました。「軽食」が実際のデータレコードになったので、Salesforceの自動化エンジンの力をフルに使えるようになりました。</span></p>
<p><span style="font-weight: 400">ここで、「</span><b>軽食がDランクに落ちたら、Slackでチームに通知する</b><span style="font-weight: 400">」という複雑なビジネスロジックを加えることにしました。</span></p>
<p><span style="font-weight: 400">Reactバージョンのアプリでは、楽しい部分はここまでで、ここからはインフラ周りの作業が始まります。webhookかcronジョブ、場合によってはZapierのサブスクリプションも必要になります。一方、Salesforceでは、1行もコードを書きませんでした。</span><a href="https://help.salesforce.com/s/articleView?id=platform.flow.htm&amp;type=5"><b>Flow</b></a><span style="font-weight: 400">を使っただけです。</span></p>
<p><span style="font-weight: 400"><code>Tier</code></span><span style="font-weight: 400">項目が「</span><span style="font-weight: 400">D</span><span style="font-weight: 400">」に変わったことを検知する「レコードトリガーフロー」を作成しました。軽食がDランクになると、Slackチャンネルにメッセージが送信されます。</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-large wp-image-205773" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260310112456/A-split-screen-showing-Salesforce-Flow-Builder-logic-on-the-left-and-a-Slack-channel-on-the-right-where-a-bot-named-The-Snack-Critic-has-posted-a-warning-about-Crackers-e1773163519647.png?w=1000" class="postimages" width="1000" height="370" alt="PCの分割画面の左側にSalesforceのフロービルダーのロジックが表示されている。右側には、Slackチャンネルでボットが人気のない軽食について投稿した内容が表示されている。" />
			  </span>
			</p>
<h4><b>手痛い失敗（500エラー）</b></h4>
<p><span style="font-weight: 400">とはいえ、すべてが順調に進んだわけではありません。自信がついてきた私は、2つ目の機能を追加しようとしました。軽食がSランクに入ったら、社内フィード（</span><b>Chatter</b><span style="font-weight: 400">）に「おめでとう！」というメッセージを投稿する機能です。</span></p>
<p><span style="font-weight: 400">設定して実行してみると、……</span><b>500エラーが出ました。</b></p>
<p><span style="font-weight: 400">ロジックに問題はなかったので、このエラーメッセージは謎でした。フローのデバッグに悪戦苦闘したあげく、AIの助けを借り、プラットフォームのドキュメントを読み返して、ようやくオブジェクトの設定にたどり着きました。</span></p>
<p><span style="font-weight: 400">私のカスタムオブジェクトには「</span><b>Feed Tracking（フィードの追跡）</b><span style="font-weight: 400">」という小さなチェックボックスがあったのですが、それをオンにしていませんでした。システムは、まだ存在していないフィードに投稿しようとしていたのです。</span></p>
<p><span style="font-weight: 400">思わず突っ伏したくなりましたが、自分の考えが当たっていたこともわかりました。</span><b>ローコードでも、開発の知識がいらないわけではない</b><span style="font-weight: 400">ということを再認識させられました。ローコードであっても、開発者のように考え、プラットフォームを機能させるためにどの設定を有効にすればよいかを理解しておく必要があります。</span></p>
<h2><b>まとめ：SalesforceはただのCRMではなく、プラットフォーム</b></h2>
<p><span style="font-weight: 400">さて、最初の3週間で、私は何を学んだのでしょうか。</span></p>
<p><span style="font-weight: 400">「最先端のWeb開発者」と「Salesforce開発者」の違いは、思っていたよりもずっと小さいということがわかりました。JavaScriptを知っていれば、構文の大部分はすでに頭の中に入っています。</span></p>
<p><span style="font-weight: 400">それより重要だったのは、Salesforce Platformが何をするかを理解できたことです。</span><i><span style="font-weight: 400"></span></i><span style="font-weight: 400">Salesforce Platformは、</span><b>認証、データベース、ホスティング、API</b><span style="font-weight: 400">といった、地味ではあっても欠かせない部分を引き受けてくれるので、開発者は重要なロジックに集中できます。ロジックが「100万ドルの案件を成約させること」であっても、「クラッカーをDランクに設定すること」であっても、使うツールは根本的には同じです。</span></p>
<p><span style="font-weight: 400">…ちなみに、</span><b>ベーグルはSランク以外はあり得ません。</b></p>
<h3><b>一緒に学びませんか？</b></h3>
<p><span style="font-weight: 400">私もまだ初心者ですが、基礎を学ぶためにAIを相棒に「</span><a href="https://trailhead.salesforce.com/content/learn/trails/force_com_dev_beginner?trailmix_creator_id=yshrivastava&amp;trailmix_slug=beginner-to-advanced-developer-roadmap"><b>開発者初級</b></a><span style="font-weight: 400">」のTrailmixを使いました。このような軽食のランキングリスト（またはもっと役に立つもの）を作ってみたいと思った方は、以下のリソースを参考にしてみてください。</span></p>
<ul>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/ja/users/yshrivastava/trailmixes/beginner-to-advanced-developer-roadmap"><span style="font-weight: 400">初級から上級までの開発者ロードマップ</span></a><span style="font-weight: 400">（Trailhead）</span></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/lwc/guide/get-started-lwc.html"><span style="font-weight: 400">Lightning Webコンポーネントガイド</span></a><span style="font-weight: 400">（英語）（開発者向けドキュメント）</span></li>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/content/learn/modules/data_modeling"><span style="font-weight: 400">データモデリング</span></a><span style="font-weight: 400">（Trailhead）</span></li>
<li style="font-weight: 400"><a href="https://trailhead.salesforce.com/ja/content/learn/modules/flow-basics"><span style="font-weight: 400">Salesforce Flowの基本</span></a><span style="font-weight: 400">（Trailhead）</span></li>
</ul>
<h3><b>執筆者について</b></h3>
<p><b>Sean Keegan</b><span style="font-weight: 400">は、Salesforceのニューヨークオフィスに勤務するリードデベロッパーアドボケイトです。元数学教師で、複雑なテクノロジーを誰にとっても身近なものにすることに情熱を注いでいます。仕事を離れると、ゲームや観葉植物の世話、アルティメットフリスビーを楽しんでいます。ぜひ</span><a href="https://twitter.com/DevRelSean"><span style="font-weight: 400">X（Twitter）</span></a><span style="font-weight: 400">と</span><a href="https://linkedin.com/in/seanryankeegan"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">でフォローしてください。</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform-jp">React vs. Salesforce：私が「バイブ・コーディング」したアプリをプラットフォーム上に再構築した方法</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/react-vs-salesforce-how-i-rebuilt-my-vibe-coded-app-on-the-platform-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206023</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260310102924/ReactvsSalesforce-e1773160182271.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260310102924/ReactvsSalesforce-e1773160182271.png?w=1000" medium="image" />
	</item>
	</channel>
</rss>
