Lightning Component 開発概要
株式会社セールスフォース・ドットコム
岩谷 昭宏
アジェンダ
 Lightningコンポーネント概要
 実装ガイドライン
 Lightning Component 開発
• 開発環境
• サンプルアプリケーション作成
 Lightning Component設置場所
 モダンVisualforce 開発 Tip
• actionFuntionタグ
• sforceライブラリ
• JavaScript Remoting
• Remote Object
 Lightning Experinece有効化
 LightningアプリケーションビルダーでのLightning Experinece開発
 VisualforceでのLightning Experience開発
 技術情報
Lightningコンポーネント概要
Lightningとは
 Lightningコンポーネント • フレームワーク
再利用可能なコンポーネントの作成や、Salesforce1モバイル・アプリのカスタマイズや
スタンドアロンアプリの開発を可能とする、コンポーネント及びエクステンション
 Lightning Appビルダー
Salesforce及び開発者より提供されたコンポーネントを使って高速にアプリケーション
を開発できるUIツール
 Lightning Connect
Force.comアプリとOData対応した外部データソースとを簡単に統合し利用できるツール
 Lightning プロセスビルダー
ビジネス・プロセスを可視化し、作成を自動化できるUIツール
 Lightning スキーマビルダー
オブジェクト、フィールド及び関連を閲覧、作成できるUIツール
 Lightning Experience
Lightningコンポーネントフレームワーク上で動作している新しいSales Cloud
はじめに
Visualforceは
無くなりませ
ん
ちなみに
ユーザインターフェース移り変わり
Page Centric 対 App Centric
2002/02/22
2013/11/05
Page Centric (Visualforce + Apex Controller)
1. ユーザがページをリクエスト
2. サーバ側でVFタグの変換、Apexコントローラコードの実行を行い、リクエスト結果とし
てHTMLページをブラウザに送信
3. ブラウザは結果を表示
4. ユーザがボタン、リンクをクリックなどのアクションを行うと新規ページをリクエストす
る。(ステップ1にもどる)
App Centric (Single Page Application)
Database
Apex
JS Controller
CMP
CSS
JS Helper
1. ユーザがアプリケーション、あるいはコンポーネントをリクエスト
2. クライアントにアプリケーション、あるいはコンポーネントのバンドル(必要なファイル
群)をロード
3. JavaScriptアプリケーションがUIを生成
4. ユーザとのインターラクションの結果、JavaScriptアプリケーションがUIを適時変更する
Visualforce vs Lightning Component
一般的なVisualforce Lightning Component
ロジック実行 サーバ側 クライアント側、サーバ側
テクノロジー Apex、VF、JS、CSS Apex、Aura、JS、CSS
データアクセス Apex経由 Apex経由
ユーザインターフェー
ス
HTML、CSS、VFタグ HTML、CSS、UIコンポー
ネント
最低限必要ファイル拡
張
Apex、page Apex、cmp、js(クライア
ントコントロラー)
画面の書き換え サーバ側へのリクエスト JSでのクライアント側
マルチデバイス対応 CSSでの実装 フレームワーク側で対応
クライアント、サー
バー間フォーマット
HTML JSON
セールスフォース提供
開発環境
開発者コンソール、
Force.com IDE
開発者コンソール
フレームワークとは
アプリケーションを作成する際に共通で必要とされる汎用機能をあらかじめ提供し、アプリ
ケーションの土台として機能するソフトウェアのこと。
フレームワークを利用することで自分で必要とされる部分に注力して開発することができ、
フレームワークバージョンアップに伴う新機能、パフォーマンス改善を自動的に享受できる
画像、CSS、クライ
アントサイドのJSを
配置
ルーティングを設定
するファイル
サーバーサイドのメ
インプログラム
Lightning Componentフレームワーク
アプリケーション
ファイル、コンポー
ネントの場合は拡張
子はcmpとなる
アプリケーション、
あるいはコンポーネ
ントのCSSファイル
アプリケーションファイル、
あるいhがコンポーネント
内のイベントを処理するク
ライアント側JSコントロー
ラ
サーバーサイドロ
ジックを定義する
Apex
特徴
 標準コンポーネントセット
コンポーネントセットが標準装備されているため、アプリケーションの構築にすぐに着手で
きます。アプリケーションのデバイス別の最適化はコンポーネントが行うため、最適化に時
間を取られることがありません。
 パフォーマンス
 イベント駆動型アーキテクチャ
イベント駆動型アーキテクチャを使用して、個々のコンポーネントを適切に切り離します。
どのコンポーネントも、アプリケーションイベント、または表示可能なコンポーネントイベ
ントを登録できます。
 短時間での開発
アプリケーションをコンポーネントベースで構築するため、並列設計が可能になり、開発全
般の効率性が向上します。
 デバイス対応およびブラウザ間の互換性
アプリケーションには応答性が高い設計が使用され、快適なユーザ環境を実現します。
Lightning コンポーネントフレームワークは、HTML5、CSS3、タッチイベントなど、最新の
ブラウザテクノロジをサポートしています。
実装ガイドライン
スキル別 – ガイドライン
スキル別 – ガイドライン
スキル別 – ガイドライン
スキル別 – ガイドライン
ロール別 – ガイドライン
ガイドライン抜粋
コメント
私はSalesforce1モバイルアプリケーション
開発者です
Lightning componentでの開発を推奨します。両技術ともタグベースのマークアッ
プを使用します。例えば<apex:inputText>と<ui:inputText>です。VFではページ全
体をサーバ側でHTMLに変換しますが、Lightning componentではクライアントで
部分的に変換することによりパフォーマンスが向上します。特にモバイルではリ
ソースが限られているためLightning componentを推奨します。
AngularJS、ReactなどのJSフレームワーク
を使用しなければいけない
VisualforceページをJSフレームワークのコンテナーと使用してJavaScriptで画面描
画、データリクエストを非同期で処理。Lightning ComponentでもJSフレームワー
クを使用することは可能であるがまだ成熟されていないためリスクあり
誰でも簡単にアプリケーションを構築させ
たい
Lightning App Builderを使用することにより実現できるのでLighting componentで
開発
認証不必要ウェブサイト LightningコンポーネントはサイツをサポートしていないのでVisualforceで
開発
PDFとして出力するページ LightningコンポーネントはPDF出力をサポートしていないのでVisualforce
で開発
カスタマコミュニティの開発 Community Builderを使用できるのでLightningコンポーネントで開発
パートナーコミュニティの開発 Visualforceで開発、ただし”Lightning Componenet for Visualforce” *1+
Lightningコンポーネントで置き換え可能か考える
たくさんのVisualforceがある既存プロ
ジェクトでの開発
Visualforceで開発、ただしLightning Componenet for Visualforce+Lightning
コンポーネントで置き換え可能か考える
新規アプリケーションの開発 Lightning Componentを推奨します。ぜひ新しい技術を取得するチャンスです
Lightning Component 開発
開発環境
Lightningアプリケーションビルダー
開発者コンソールで作成したコンポーネント、
AppExchangeでインストールしたコンポーネント
を使ってドラッグ&ドロップで画面を開発。
Lightningページタブからアクセス
開発者コンソール経由アプリケーション
アプリケーションを作成すると独自URLが振り当てら
れるのでURL経由でアプリケーションにアクセス
開発者コンソール経由コンポーネント
作成されたコンポーネントはLightningコンポーネント
タブ経由でアクセス、Lightningアプリケーション
ビルダー、開発者コンソール経由で作成された
アプリケーション、開発者コンソール経由で作成した
コンポーネントで使われます
その他開発環境
Cloud9
セールスフォース開発をクラウド環境で
利用できるサービス
Sublime
セールスフォース開発環境
をローカルで構築
開発を始める前に
1
Lightning Componentを使
用する場合は私のドメイ
ン設定が必要です
54
3
2
暫く待つと承認済みに変
更されます
開発を始める前に
1
2
これで私のドメイン設定
が終了されました。
バンドル
リソース ファイル名 役割
コンポーネントま
たはアプリケー
ション
sample.cmp ま
たは sample.app
バンドル内の唯一の必須リソース。コンポーネントまたはアプリ
ケーションのマークアップが含まれます。各バンドルに含まれる
コンポーネントまたはアプリケーションリソースは 1 つのみで
す。
CSSスタイル sample.css コンポーネントのスタイルシート
コントローラー sampleController
.js
コンポーネント内のイベントを処理するためのクライアント側コ
ントローラメソッド
設計 sample.design Lightning App Builder または Lightning ページで使用されるコン
ポーネントでは必須
ドキュメント sample.auradoc 説明、サンプルコード、およびコンポーネント例への 1 つ以上
の参照
SVG ファイル sample.svg
Lightning App Builder で使用されるコンポーネントのカスタムア
イコンのリソース。
ヘルパー sampleHelper.js
コンポーネントのバンドル内の JavaScript コードからコール可
能な JavaScript 関数
開発者コンソール起動
1
2
アプリケーション作成
スタイルシート追加
クライアント側コントローラの追加
ボタンを押すたび
に1加算される
アトリビュートを
取得し、1加算し
た値をアトリ
ビュートに再設定
attributeはビューとコントロー
ラ
からアクセス可能
ボタンが押され
るとコントロー
ラのメソッドが
実行
サーバー側コントローラ追加
名前に
Helloが追
加される
attributeはビューと
コントローラ
からアクセス可能
ボタンが押さ
れるとコント
ローラのメ
ソッドが実行
サーバサイドのコントロー
ラを取得
Apexコントローラ設
定
イベント
メッセージ:hello
Click
2.イベントにはメッセージを
Stringとして格納
3. 受信コンポーネントではイ
ベント内のメッセージを画面
に表示
1. Clickボタンを押す事により
イベントを送信
メッセージ送信コンポーネント
1.ユーザがボタンを押すとコ
ントローラのfireMyEventメ
ソッドが実行、またMyEvent
を使用するためイベントを登
録
2. イベントを取得してmyMsg
アトリビュートにメッセージ
(hello)を設定、fireメソッドで
イベントを送信
MyEventイベントでは任意な
文字を保存することが可能。
Integer, Booleanなども指定可
能
メッセージ受信コンポーネント
1. 特定のイベント(MyEvent)
が送信された際のハンドラー
登録、画面ロード時はNoYet
が表示される
2. 送信コンポーネントからイ
ベントが送信された時登録し
たイベントハンドラのメソッ
ド(myReceive)が実行、イ
ベント内のメッセージを画面
に表示
3. 受信コンポーネントではイ
ベント内のメッセージを画面
に表示
アプリケーション
アプリケーションに送信コン
ポーネント、受信コンポーネ
ントを配置
アプリケーション起動
標準ページへの変移
ボタンを押した後に標準
編集画面へ遷移。JS コ
ントローラに記述
組織毎ドキュメント
1.
https://<your_srv>/aurad
ocs にアクセス
2. Referenceボタンをク
リック
3. AppExchangeから事
前にCell Lightning コン
ポーネントをインストー
ルしています
Cell コンポーネント仕様ド
キュメント、コンポーネン
トのDocumentバンドルに記
載すると自動的にAura用ド
キュメントに変換されます。
AppExchangeコンポーネント
実開発のTip
 他のJSフレームワークとの共存
Angular、jQuery、react.js などを使用可能(検証は必要)
 Lightning ComponentをVisualforceを追加 (下記3ステップで実装)
Lightning JSをVFへ追加
VFにどのLightningアプリケーションを使うか定義
VFにLightning Componentを作成をJSで記述
 外部CSSの参照
静的リソースとしてアップロードした外部 CSS リソースを参照するには、.cmp または
.app マークアップで<ltng:require> タグを使用します。
 外部JSライブラリの参照
静的リソースとしてアップロードした JavaScript ライブラリを参照するには、.cmp ま
たは .app マークアップで<ltng:require> タグを使用します。
 JSのデバッグ
Chrome Developer ToolsでJSコードのデバッグを行います。コードの可読性を良くする
ため必ずDebugモードを有効化して下さい。コンソールにログメッセージを表示するに
は$A.log(string[, error])を使用してください。Lightning Component用デバッグChrome エ
クステンションも公開されています。
Lightning Component設置場所
1. Lightningアプリケーションビルダー
1
2
S1からアクセス可能
有効化するとLightning
ページタブが作成され、
S1ナビゲーションにタブ
が配置される
1. Lightningアプリケーションビルダー
すべてのタブに「Lightning
ページタブ」は表示されな
い
カスタムアプリケーション
の編集にも「Lightningペー
ジタブ」は表示されない
2. Lightningコンポーネントタブ
1. コンポーネントの作成
(force:appHostableを指定す
ることでS1へ実装可能にす
る)
3. ナビゲーションへ
の追加
2. Lightningコンポー
ネントタブの作成
4. S1からアクセス可
能
2. Lightningコンポーネントタブ
Lightning Experience
からアクセス可能
1
カスタムアプリ
ケーションへタブ
追加
すべてのタブから
アクセスするとエ
ラー
Alohaではタブを追加
しても実際のアプリ
ケーションには反映さ
れない
3. 開発者コンソールで作成したApp
https://<myDomain>.lightning.force.com/<na
mespace>/<appName>.app からしかアクセ
スできない。S1、Lightning Experienceに直
接インテグレートは不可
4. VF経由での表示
1. アプリケーション作
成
2.Visualforceから作成
したコンポーネント
の呼び出し
3. Visualforceタブを
作成して、アプリ
ケーション、あるい
はナビゲーションに
追加
4. VF経由での表示
S1からアクセス可
Alohaからアクセス可
Lightning Experience
からアクセス可
まとめ
Aloha S1 Lightning
Experience
メモ
Lightning アプリケーションビ
ルダ
X O X
Lightning コンポーネントタブ X O X
開発者コンソールで作成した
app
X X X 特定URLからのみアクセス
可
Lightningコンポーネント + VF O O O
モダンVisualforce開発 Tip
JavaScriptの利用
Visualforce + Apex Controllerで実装するよりもVisualforceをJavaScriptのコンテナとして使用
してください。UIに関してはLightning Design Systemを使用して下さい。Lightning Design
Systemとはセールスフォースが提供しているNew UI用のCSSフレームワークを使用すること
でVisualforceを簡単にNew UIに沿ったデザインを開発することができます。(チュートリア
ルはこちら)
VisualforceをJavaScriptのコンテナーとして使用することによりJavaScriptで画面描写、デー
タやり取りなどするためパフォーマンスが向上します。下記がVisualforceをJavaScriptのコン
テナーとして使用したフローとなります。
1) ユーザがVisualforceページをリクエスト
2) HTMLページをブラウザに送信
3) ブラウザがJavaScriptアプリをロード
4) JavaScriptアプリがUIを生成
5) ユーザのアクションに応じてJavaScriptからセールスフォースへリクエスト
JSからセールスフォースへの連携
手段 説明 Apexコード
<apex:actionFunction> JavaSctiptからActionFunction経由
でApexコントローラメソッドを実
行
有
sforce lib 標準ライブラリ、JavaScriptから
はsforce.apex.executeメソッドで
Apex WebServiceを実行
どちらでも
JS Remoting JavaScriptから直接Apexを実行可
能。actionFunctionに近し、
有
Remote Object CRUDのアクセスに便利 無
ActionFunctionでの実装 詳細はこちら
【Visualforce】
<apex:commandButton onclick=“{myjsfunc()}” value=“実行”/>
【JS】
function myjsfunc() {
actfunc();
}
【Apex Controller】
public pagereference ctlfunc() {
// レコードへのCRUD処理とか
return null;
}
【Visualforce】
<apex:actionFunction name=“actfunc” action=“{!ctlfunc}” reRender=“dummy”/>
ユーザがボタンをク
リックすると
Visualforceで定義さ
れているJavaScript
のファンクションが
呼ばれる
JavaScriptのファン
クションで何らかの
処理を行った後に
actionFunction経由
でApexコントロー
ラを呼ぶ
サーバー側のApex
が無事実行されると
actionFunctionの
reRenderで定義さ
れているコンポーネ
ントをリフレッシュ
する
【Visualforce】
<script src="/soap/ajax/15.0/connection.js" type="text/javascript"></script>
<script src="/soap/ajax/15.0/apex.js" type="text/javascript"></script>
【Apex】
global class myClass {
webService static Id makeContact(String lastName, Account a) {
Contact c = new Contact(LastName = lastName, AccountId = a.Id);
return c.id;
}
}
【JavaScript】
var account = sforce.sObject("Account");
var id =sforce.apex.execute("myClass","makeContact", {lastName:"Smith", a:account});
標準JSライブラリでの実装 詳細はこちら Visualforce内で標準
JSのインポート、
結果としてJS内で
sforceを使用可能に
なる
sObjectメソッドを
使用して任意の取引
先レコードを取得。
JavaScriptからApex
Webサービスをコー
ル
引数の取引先に取引
先責任者を作成して
レコードIDを
JavaScriptに返す
JavaScript Remotingでの実装 詳細はこちら
【Apex】
global with sharing class AccountRemoter {
public String accountName { get; set; }
public static Account account { get; set; }
public AccountRemoter() { }
// empty constructor
@RemoteAction
global static Account getAccount(String accountName) {
account = [SELECT Id, NumberOfEmployees FROM Account WHERE Name =
:accountName];
return account;
}
}
【JavaScript】
function getRemoteAccount() {
Visualforce.remoting.Manager.invokeAction(
'{!$RemoteAction.AccountRemoter.getAccount}',
‘AccountName’,
function(result, event){
var id = result.Id;
var num = result.NumberOfEmployees;
},
{escape: true}
);
}
【Visualforce】
<button onclick="getRemoteAccount()">送信</button>
<apex:outputText id=“recordId/>
<apex:outputText id=“numEmployees"/>
ユーザがボタンをク
リックすると
Visualforceで定義さ
れているJavaScript
のファンクションが
呼ばれる
JavaScriptのファン
クションで何らかの
処理を行った後に
Apexクラスをコー
ル
取引先名から取引先
レコードを取得して
JavaScriptにレコー
ドを返す取引先レコー
ドID、社員数
を受け取り、
JSで画面描写
Remote Objectsでの実装 詳細はこちら
【JavaScript】
<script>
var fetchWarehouse = function(){
var wh = new SObjectModel.Warehouse();
wh.retrieve({ limit: 1 }, function(err, records, event){
var record = records[0];
var name = record.get(“Name”);
var id = record.get(“Id”);
});
};
</script>
【Visualforce】
<apex:remoteObjects >
<apex:remoteObjectModel name="Warehouse__c" jsShorthand="Warehouse" fields="Name,Id">
</apex:remoteObjectModel>
</apex:remoteObjects>
【Visualforce】
<button onclick=“fetchWarehouse ()”>1件取引先表示</button>
Visualforce内でカスタム
オブジェクト
(Warehouse__c)を
RemoteObjectとして使用
すると定義
ユーザがボタンを押
してJavaScriptの
fetchWarehouseメ
ソッドを呼ぶ
JavaScript経由でセールスフォー
スのデータベースアクセスを行
う。Retreiveファンクションの引
数としてlimit, offset, whereなど
があります。
VisualforceでのLightning Component開発注意点
 Lightning Experienceで表示するVisualforceのshowHeader、showSidebarをtrueにすること
はできません
 ページ titleを設定することはできません。Lightning Experienceで表示するVisualforceは
iframe内に表示されるためページtitleにアクセスできません
 <apex:relatedList>は使用できません
 <apex:iframe>の使用はさける。Visualforceページはiframe内に表示されるので
<apex:iframe>を使用すると非常に複雑である
 JavaScriptでwindow.locationは使用できない
 sforce.one JavaScriptライブラリはSalesforce1とLightning Experienceで使用可能となる。
Salesforce1のVisualforceページを実装する際にsforce.oneの有無でモバイルからのアクセ
スを判断していたがLightning Experienceでは修正する必要がある
Lightning Experience有効化
Lightning Experience有効化
1
4
3
2
Lightning Experience有効化
1
4
3
2
Lightning Experience有効化
1
4
3
2
Lightning Experience有効化
1
4
3
2
5
Alohaへ切り替え
1
2
Lightning アプリケーションビルダーでの
Lightning Experience開発
Lightning Experience アプリケーションビルダー
開発者用組織ではLightning Experienceのアプリケーションビルダーの有効化が可能です。取
引先詳細ページの変更をLightningアプリケーションビルダーで行う事ができます。
商談詳細画面レイアウト
1
5
3
2
4
商談詳細画面レイアウト
1
2
コンポーネントをド
ラッグ&ドロップし
てレイアウトへ追加
します
商談詳細画面レイアウト
1
2
商談詳細画面レイアウト
1
3
2
商談詳細画面レイアウト
1
スケジュール、計算機
などAppExchangeで入
手したコンポーネント
が反映
商談詳細用の
Lightningページが自
動的に作成される
VisualforceでのLightning Experience開発
1. VFでのLightning Experience開発
2. VFでのLightning Experience開発
3. VFでのLightning Experience開発
4. VFでのLightning Experience開発
レイアウトエ
ディターでの
設定
5. VFでのLightning Experience開発
Lightning Component
開発に必要な情報源
技術情報
タイトル 内容
Lightning Components Trailhead 簡単なLightning Componentを作成します。クライアント、サーバ側コント
ローラの作成、またデバッグ方法も記述
Lightning Design System Trailhead Lightning Design Systemはセールスフォースが提供しているLightningに準
拠したデザインガイドライン、CSSフレームワークです。LDSの使用方法
を手順を踏んで解説
Lightning Component Developer Guide Lightning Componentの開発者用ガイド
Lightning Components Quick Start Hello Worldを8ステップで実装ガイド
Creating Lightning Components Salesforce Universityで提供しているビデオコース
Single Page Applications なぜLightningフレームワークを採用したのかの技術的説明
Cloud9 クラウドベースのSalesforce開発環境
Sublime Sublimeエディターを使用してSalesforce開発環境
開発者コンソール 開発者コンソールでのLigtningリソースの操作
Lightning Components Cheat Sheet Lightning Component実装に必要なコードサンプル、仕様を掲載
Debugging Lightning Components Lightning Component開発で必要となるデバッグ方法を解説したブログ
Visualforce & Lightning Experience Trailhead Lightning Experience上で動作するVisualforce開発方法を説明
ディスカッションフォーラム Lightningに特化したフォーラム
Salesforce Stack Exchange Salesforce版Stack Overflow
コンタクトリスト作成 ワークブック
コンタ
クトリ
スト表
示
コンタ
クト新
規画面
コンタ
クト編
集画面
経費精算アプリケーション作成 ワークブック
経費オブジェク
トの合計金額を
表示
新規作成ボタン
経費オブジェク
トの総数を表示
“Reimbursed?”
項目編集可能
トレーニングコース
Lightingコンポーネントベーシック開発

Lightingコンポーネントベーシック開発