VisualforceでLWCを動かすLightning Outの手順
Visualforceの画面にLWCの部品だけ差し込みたいときに使うのがLightning Outです。LWCを外へ公開する空のAuraアプリが要る理由と、実装3点セットの書き方を説明します。
なぜVisualforceの中でLWCを使うのか
移行しきれていない画面がVisualforceに残っていても、部品単位ならLWCを差し込めます。Lightning Outという仕組みを使うと、VisualforceページのdivタグにLWCを描画できます。画面をまるごとLightning化しなくても、新しく作る部品だけLWCで書けます。
全体の構成
LWCを直接Visualforceページから呼び出すことはできません。LWCを外へ公開するための、薄いAuraアプリが1つ要ります。これはSalesforce公式のLightning Outの仕様で、いまも変わっていません。
| ファイル | 役割 |
|---|---|
Auraアプリ(ltng:outAppを継承) | LWCを外へ公開するための入れ物。中身は空でよい |
| LWC本体 | 実際にVisualforceページへ表示する部品 |
| Visualforceページ | apex:includeLightningでライブラリを読み込み、$Lightning.use()と$Lightning.createComponent()でLWCを描画する |
<aura:application access="GLOBAL" extends="ltng:outApp"></aura:application>だけの空のアプリです。Aura自体を使う設計ではなく、Lightning OutがLWCをVisualforceへ渡すために決めている入り口です。Auraアプリ
LWCContainerSample.app
<aura:application access="GLOBAL" extends="ltng:outApp"> </aura:application>
中身は空です。LWCを外部へ公開するための入れ物として、ltng:outAppを継承するだけです。
LWCContainerSample.app-meta.xml
<?xml version="1.0" encoding="UTF-8"?> <AuraDefinitionBundle xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>67.0</apiVersion> <description>A Lightning Application Bundle</description> </AuraDefinitionBundle>
apiVersionを56.0から67.0(Summer '26)へ上げています。
LWC本体
lightningOutComponentSample.html
<template>
<div class="slds-box">
<p>Lightning Web Component Sample</p>
</div>
</template>SLDSのボックスにテキストを表示するだけの最小構成です。
lightningOutComponentSample.js
import { LightningElement } from 'lwc'; export default class LightningOutComponentSample extends LightningElement {}
プロパティもロジックも持たない最小のコンポーネントです。
lightningOutComponentSample.js-meta.xml
<?xml version="1.0" encoding="UTF-8"?> <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>67.0</apiVersion> <isExposed>false</isExposed> </LightningComponentBundle>
apiVersionを67.0へ上げています。isExposedはfalseのままでよく、Lightning Outからの呼び出しに公開設定は要りません。
Visualforceページ
LightningOutSample.page
<apex:page standardStylesheets="false" sidebar="false" applyBodyTag="false" docType="html-5.0"> <apex:includeLightning /> <div id="lwc-container-Sample"></div> <script> $Lightning.use("c:LWCContainerSample", function () { $Lightning.createComponent( "c:lightningOutComponentSample", {}, "lwc-container-Sample", function (component) { console.log("component: " + component); } ); }); </script> </apex:page>
apex:includeLightningでライブラリを読み込み、$Lightning.use()でAuraアプリを、$Lightning.createComponent()でLWCを描画します。読み取りだけの表示サンプルです。
⚠️ $Lightning.use()に渡す名前はAuraアプリの名前(c:LWCContainerSample)です。$Lightning.createComponent()に渡す名前がLWCの名前(c:lightningOutComponentSample)になります。ここが最初のつまずき所です。
LightningOutSample.page-meta.xml
<?xml version="1.0" encoding="UTF-8"?> <ApexPage xmlns="http://soap.sforce.com/2006/04/metadata"> <apiVersion>67.0</apiVersion> <label>LightningOutSample</label> </ApexPage>
apiVersionを67.0へ上げています。
動かすときの条件
サードパーティCookieを許可していないブラウザでは、コンポーネントが表示されません。Lightningコンポーネントは、Visualforceページと別のドメインから配信されるためです。Auraアプリ・LWC・Visualforceページは、同じ組織の中に置く必要があります。
タブに配置して確認する
Visualforceページ用のタブを作る
設定のタブから、LightningOutSampleページを開くタブを新規作成します。
作ったタブを開く
アプリケーションのナビゲーションに追加するか、URLで直接開きます。
LWCの表示を確認する
divタグの中に「Lightning Web Component Sample」の文字が表示されていれば成功です。表示されないときは、ブラウザの開発者ツールでコンソールのエラーを確認します。
ここで間違えやすい
| 間違い | 何が起きるか |
|---|---|
| Auraアプリを作らずLWCだけ呼ぼうとする | $Lightning.use()に渡す名前が無く、そもそも組み立てられません |
$Lightning.use()にLWCの名前を渡す | 実際に渡すのはAuraアプリの名前です。LWCの名前はcreateComponent()側に書きます |
| サードパーティCookieをブロックしたブラウザで確認する | コンポーネントの描画が失敗します。原因がわかりにくいエラーになります |
古いapiVersionのまま放置する | 新しいAPIの機能が使えないままになります |
確認した環境
- 2026年9月 / Salesforce Summer '26(API バージョン 67.0)時点の公式ドキュメントで、VisualforceへのLWC埋め込みの構成(Auraアプリが要ること)、Lightning Outのベータ扱い、サードパーティCookieの条件を確認しています
- コードは API バージョン 67.0 で書いています
まとめ
- VisualforceページにLWCを表示するには、いまもLightning Outを使います。LWCを直接呼び出す方法はありません
- LWCを外へ公開するための、空のAuraアプリが1つ要ります。ここに業務ロジックは書きません
- Visualforceページ側は
apex:includeLightning・$Lightning.use()・$Lightning.createComponent()の3点で組み立てます - Lightning Outはいまも公式にベータ扱いです。サードパーティCookieを許可していないと表示されません
apiVersionは56.0から67.0(Summer '26)へ上げています
Salesforceの導入・運用についてご相談ください
導入前の検討から、お使いの環境の改修・運用、AIとの連携まで承ります。状況を伺ったうえで、進め方をご提案します。