米国のSalesforce Developers BlogでLockerServiceの情報が解禁されていましたので、日本語でも簡単にご紹介いたします。
Introducing The LockerService For Lightning Components
Salesforceは何よりもセキュリティと信頼性を重要視するサービスです。 そしてLightningコンポーネントに対するセキュリティを向上させる取り組みをLockerServiceと呼びます。 LockerServiceをリリースする背景には以下のような背景があります。
コンポーネントをXSSなどのセキュリティ脅威からから守る 他のコンポーネントで読み込まれたデータを制限なしに読み取るのを防ぐ コンポーネントがプライベートなAPIをコールするのを防ぐ
* 幾つかの機能は制限がかかっており、Winter’16以降のリリースとなる予定です
LockerServiceはSummer’16リリースより以下に従って有効になり始める予定です:
注意: LockerServiceは10月にリリースされる予定のWinter’16リリースで全ての組織で有効になる予定です。
例えば以下のようなサンプルのLightning アプリケーションがあり、4つのコンポーネントを持っています。 ボタン、天気を表示するWeatherコンポーネント(Mapのサブコンポーネントを内部に持つ)、そしてFinanceコンポーネントです。 これらのコンポーネントを例にLockerServiceの適用前後でどのように違うのかを見ていきます。
LockerServiceの前は、DOMツリー及びJavascriptへのアクセスは以下の画像のようになっていました。
この場合には以下のような問題が生じます:
同じコードで作られたLightning アプリケーションをLockerServiceで実行すると以下のようになります
LockerServiceが有効になった場合は以下のように動作します:
以下では、サンプルの ui:button 内にdivタグ (“c”名前空間) がラベルと共に配置されています。console.log はLockerServiceが有効になった画面で表示が異なります。カスタムコンポーネントのJSがdiv.parentNode.innerHTMLによってボタンのinnerHTMLを取得しようとDOMを走破しますが、このボタンは“ui”名前空間にいるため“undefined”となります。
LockerServiceは背後で実行されます。公開されたAPIに対して変更は何もありません。しかしながらLockerServiceはモダンなJSの標準的及び新しいセキュリティルールの順守を強制します。そのため関連するコンポーネントを構築していた場合は、その標準に沿ってアップグレードを行う必要があります。その変更を容易に行うためのTipsやツールを提供する予定です。
はい。静的リソースやセキュリティポリシーに許可された場所からそれらを読み込むことができます。
はい, LokerServiceは完全なwindow, documentなどにJSモジュールレベルアイソレーションを提供しますので、あなたのLocker (名前空間内) は自由です.
2016年の冬のリリースにてこのセキュリティポリシーをオープンにすることができる予定となっています。
いいえ – あなたのコードはアプリケーション内の他のコンポーネントと同じようにブラウザウィンドウ内で直接動作します。
いいえ、しかし全てのイベント (Aura及びDOM) はフィルタリングproxyによってwrappされ、コードからアクセス権を持っているかどうかの確認だけが許可されます。互いの名前空間に関わることなくコンポーネント間の通信を行うにはLightning Eventing フレームワークを利用し続けることも可能です。
いいえ – 常にSecure Virtual DOMに対して操作を行います。 – しかしあなたのコード及び3rdパーティコードはその違いを意識する必要はありません – プログラミングモデルに変更はありません。(例: Component.getElement()はそのまま動作します)。しかしながらもともと私たちが非推奨としてきたことはできなくなります。例えば node.parentNode.parentNodeのようなコードで対象DOMを保有していない場合はブロックされます。
現在の粒度は全てのコンポーネントが同じ皿の上に乗ってしまっています。未来のSalesforceリリースであれば両方に対応する予定です (例. コンポーネントに設定) そして粒度の設定などにも対応予定です (例. 組織上で保有する名前空間を設定する)
これはほんのご紹介用のポストです。LockerServiceがリリースされるまでの今後数週間から数ヶ月にわたりツールやBlog、詳細記事及びTrailheadモジュールを公開していきます。ぜひSalesforce Developersの最新情報をご確認ください。