Dreamforce 2018 〜 Day 2 〜

Takahito Miyamoto
Oct 8, 2018 · 21 min read

Let’s play pingpong!?

こんにちは。今回はDreamforce 2018 Day 2の様子をお届けします!

Accenture Breakfast Meeting at SPiN

Day 2のはじまりも、早朝の朝食会から。SPiNという卓球バーに、弊社のSalesforceチームのLeadership、CTA、Salesforce MVPの面々が世界中から集結しました。私は何の肩書きもないのですが誘っていただいて、同じ場所同じ時間を共有することができとても幸運でした。

店内は数時間後に迫った弊社の特設ブースの準備に追われていました。見てるだけでワクワクします。

Image for post
Image for post

同じ会社とはいえ、写真でしか拝見したことのない人たちと記念撮影できました。わたしたちのDreamforceは奇跡の連続です。

Image for post
Image for post

その後はMoscone Westへ移動して、技術系のセッション中心に参加していきました。

Triggers and Batch Apex with External Objects

最近試験勉強していたこともあってか、LDV(大量データ)のことに思いを馳せていため、外部オブジェクトの上手な使い方が気になっていました。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Change Data Captureという機能をSalesforce内部のオブジェクトだけでなく外部オブジェクトにも利用できるようになるロードマップが出ています。Winter ‘19では開発者プレビューの段階です。

Change Data CaptureはPlatform Eventの一種といわれています。Platform Eventはそれ自体をカスタムオブジェクトのように定義する必要がありましたが、Change Data Captureはその必要がありません。

Image for post
Image for post

たとえば Products__x という外部オジェクトのデータに変更があった場合は、カスタムオブジェクトと同様の形で /data/Products__ChangeEvent というSubscription Channel が利用できるようになります。これをトリガにしてSalesforce内部で何か処理をしたい場合には、Streaming API、Apexトリガ、プロセスビルダーを利用できるようになります。

Streaming APIを利用する際のイメージです。VisualforceページやLightningコンポーネントに実装する想定です。

Image for post
Image for post
Image for post
Image for post

Apexトリガを利用する際のイメージです。外部オブジェクトの詳細設定画面で[Track Data Changes]をONにすることで有効にできるようです。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

プロセスビルダーを利用する際のイメージです。これがいちばん手軽で分かりやすそうですね。

Image for post
Image for post
Image for post
Image for post

少し話が変わりますが、外部オブジェクトに対するApexバッチについても触れられていました。Winter ‘18時点ですでに利用できるようになっていたようですが、私はまだ試したことがありません。

Image for post
Image for post

ロードマップによると、外部オブジェクトでApexトリガを利用するためには、Spring ‘19以降の正式リリースを待つ必要があります。そのころにはプロセスビルダーからも利用できるようになっていることでしょう。

Winter ‘19時点で試したい場合はケースからサポートに連絡して有効化してもらいましょう。また、OData v4.0のみ利用可能とのことですが、TrailheadのSalesforce ConnectのモジュールやプロジェクトはOData v2.0なので、OData v4.0にバージョンアップしてほしいところですね。

Image for post
Image for post
Image for post
Image for post

紹介されていた参考文献です。上の4つは概要ページで、最後の1つはGitHubのリポジトリでサンプルを見られるようになっています。Apexトリガ (LowOnStock.trigger, ProductOrdered.trigger) と静的リソース (ExternalDataChangeClientZip/warehouse/Warehouse.js) のソースコードを見ると、イメージが掴めると思います。

Image for post
Image for post

Meet people at Accenture Booth

時間をつくって、Customer Success Expoにある弊社ブースに顔を出して来ました。あまり人がいなくてあれ?と思いましたが、どうやらSPiNにある専用ブースへ誘導していたようです!

Understanding the Value of Dependency Injection in the Lightning Platform

今回のDreamforceで技術的なテーマで一番注目していたのがカスタムメタデータでした。それ自体は随分前からリリースされている機能ですが、いまいち使いこなせていなかったので、実践的な事例を知りたいと考えていました。

まずはその1つ目、Dependency Injectionです。

Image for post
Image for post
Image for post
Image for post

依存関係の強いアプリケーションを構築してしまうと、その後に柔軟に変更していくことが難しくなります。可能な限り、将来の変更に耐えられる設計をしていくことがプロフェッショナルには求められます。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

依存性の強いコードをどのように置き換えるのかのイメージです。

Image for post
Image for post
Image for post
Image for post

紹介されていた参考文献です。GitHubでコードが公開されていますので、詳しく知りたい方はぜひご確認ください。私も後日、試したコードを公開したいと思います。

Image for post
Image for post

Crafting Flexible APIs in Apex Using Custom Metadata

次は隣のシアターで、カスタムメタデータの実践的な事例2つ目。Apex REST によるカスタムAPIです。

Image for post
Image for post
Image for post
Image for post

カスタムAPIを実装する際に私が苦労していることの1つは、RequestやResponse用の構造体をApexクラスで定義することです。Apexクラス内にメンバを定義する際、abcde__c と書くとエラーとなるため、末尾の __c を削除して abcde と書かなくてはなりません。しかし状況によっては、末尾の __c を付けてJSONを連携したほうが都合のいい場合がありました。たとえば、Heroku Connectを利用してSalesforceのカスタム項目をHeroku側へ連携していて、Heroku側からはSalesforceのカスタムAPIを利用している場合です。abcde__cabcde を同一の項目として認識する必要があり、コード量が増えてしまいます。

public class CustomResponse {
// public String abcde__c; // NG
public String abcde; // OK
}

しかし、カスタムメタデータを利用してカスタム項目とJSONの要素をマッピングしておけば、この課題が解消される可能性があります。後日検証してみたいと思います。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

カスタムメタデータをクエリしてマッピングを作成することと、Request Bodyの並列化を deserializeUntyped メソッドで行うことがポイントのようです。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Accenture Booth at SPiN

朝やっていた会場設営が終わったころに再度SPiNに集合しました。全員が集まるまでの少しの時間に、夕方の卓球トーナメントに備えて(!?)、試し打ちをしました。調子は良好です。

特設会場はお客さんで大盛況でした。私は開発の自動化ツールのブースへ行き、日頃の思いの丈をぶつけました。これまでインドオフィスとオンライン会議で自動化ツールについて議論していましたが、私がちゃんと英語を話せなくてモヤモヤしていました。今回対面で直接話すことで相手の雰囲気もわかり、なんだか通じ合ったような感覚がありました。

Design a Great Einstein Bot Experience for Customer Service

トーク中心のセッションにも参加してみました。Einstein Botの事例についてゲストスピーカーが話していくのですが、スライドやデモは特にありませんでした。やはり付いて行けず途中退席して次のセッションに移動してしまったのですが、内容には興味があるので動画が公開されたら確認したいと思います。

Image for post
Image for post
Image for post
Image for post

Achieving Next-Generation Agility with Salesforce DX

途中からでしたが Salesforce DXの成功事例のセッションに参加しました。この企業はDXとSeleniumを組み合わせて効果を出しているようです。ブランチ構成はシンプルで参考になります。個人レベルではSalesforce DXを利用していますが、これからはもう少し勉強して大規模開発で使う準備をしていきたいと思います。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

BREAKING NEWS: Einstein Roadmap Including Einstein Voice

Einsteinのロードマップを聴きにいきました。目新しい機能である Einstein VoiceについてはDay 1のKeynoteで概要をおさえられていたので、その他のアップデートがないかどうかを確認したかったからです。

Image for post
Image for post

テーマは大きく分けて3つ、Einstein VoiceとEinstein PlatformとService Cloud Einsteinでした。Sales Cloud Einstein 等には触れられていませんでしたが、これらがイチオシ機能なのでしょう。

Image for post
Image for post

Einstein VoiceはAssistantとBotの2つがあります。AssistantはSpring ‘19からパイロットになるそうです。BotはプレスリリースによるとSummer ‘19以降にパイロットが始まるそうです。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Einstein Platform Serviceについては、予測ビルダーがベータ、Next Best Action がパイロットになるそうです。スライドを見る限り、予測ビルダーでの予測結果を表示するUIが整備されるようです。また、ダッシュボードでも見れるようになるようなのでだいぶ見やすくなりそうです。Next Best ActionについてはLightning Flowの画面が出ていて、予測ビルダーとプロセスビルダーの組み合わせに似ていると感じました。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Service Cloud Einsteinについては、Einstein Case Classificationがパイロットになるそうです。スライドを見る限りコンタクトセンターのオペレータやスーパーバイザーにとってうれしいことが並んでいるので、ぜひデモを見て見たいです。Einstein Botはすでに正式リリースしていますが、Einstein Voice Botのリリースまでに日本語の解析もできるようになっていてほしいと思います。

Image for post
Image for post

Everything That’s Awesome with Apex

Apexについてのロードマップが聴けるセッションに参加して来ました。

IdeaExchangeで人気のある機能が実装されていった例が示されました。気になる機能を見かけたら私も必ず投票するようにしようと思います。

Image for post
Image for post

現在投資されている機能のカテゴリと、その中の一部が紹介されました。コードを書く作業が捗るという点で、私はLanguage serverに期待が高まっています。

Image for post
Image for post

セキュリティに関して、Apexクラスの暗黙的なwith/without sharingの考え方についても紹介がありました。意図がない限りは明示的にwith/without sharingを書いていったほうが間違いが少ないと考えます。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

セキュリティに関連して、オブジェクト権限や項目レベルセキュリティをApex内でも厳密にチェックできるようにしていくロードマップが示されていました。元のアイディアはこちらです。

https://success.salesforce.com/ideaView?id=08730000000Lj8GAAS

Image for post
Image for post
Image for post
Image for post

Ping pong tournament and party

Day 2に予定していたセッションがすべて終了したので、いよいよ Anaplan社へ向かいました。事前にエントリーしていた卓球トーナメントに出場するためです。弊社ではAnaplanの製品も扱っており、いい土産話ができればいいなと思って飛び込みました。

卓球は高校のころからやっていて、いまでも地元の卓球クラブに所属して続けています。日本のメンツをかけて優勝するつもりで臨みましたが、純粋にいろいろな国のかたがたと対戦することができて、とても楽しかったです。前出のSPiNも卓球バーでしたし、サンフランシスコで卓球は流行ってるのでしょうか。

21点先取の1セットマッチで、ラリーが続いて危ない場面もありましたが、無事に優勝することができました!応援に駆けつけてくれたみなさん、本当にありがとうございました!これでDay 1では「世界デビュー」、Day 2では「世界チャンピオン」の2冠を達成できましたw

Image for post
Image for post
Image for post
Image for post

Dreamfest

毎年恒例の音楽ライブです。今年はJanet JacksonMetallica。実はどちらもファンではなかったのですが、弊社の他のメンバー激推しでしたので、それならばと参加することにしました。

卓球大会で出遅れてしまい、急いで会場へ向かいましたがすでに長蛇の列ができていました。30分くらいかかりましたでしょうか、やっと会場入りすることができました。どうやら会場が分かれていて、野外ステージがMetallica、室内ステージがJanet Jacksonだったようです。すでに会場入りしていた弊社メンバーから、Janetのほうは身動きできないくらい盛況だと聞いたので、私はMetallicaのほうに参加することにしました。

広場には飲み物とおつまみの出店が出ており、ビールとポップコーン、揚げ物やホットドックなど、アメリカンフードで溢れていました。人だかりからは少し離れたところに陣取って、それらを頬ばりながら生のライブを楽しみました。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

かっこいい音楽と、圧倒的なジャンクフードを充分堪能できたので、ひと足先にホテルに戻ることにしました。帰りも混雑が予想されるし、明日中にMini Hackを完了させなくてはならなかったし。

Wi-Fiの調子が悪かったのか、なかなかUberと合流できなくて3台くらいやりすごしてしまいましたが、なんとか帰れました。しかし、Mini HackをやろうとPCを開きましたが睡魔に勝てずなかなか進みません。早起きしてやることに決め、思い切って寝てしまいました。(結局朝4時に起きて3問半解きました。)

明日はドキドキのTrailhead Camp Quick Startコーナーでのボランティアがあります。英語でコミュニケーションしながらTrailheadのサポートをします。普段はルーキー会女子部などの勉強会でメンターをしていますが、それは全部日本語です。果たして結果は!?

それでは次のレポートをお楽しみに。お読みいただきありがとうございました。

関連記事

Heat Miyamoto

written by Heat

Takahito Miyamoto

Written by

#Trailheart #SalesforceMVP #einsteinmoments | 17x #CertifiedPro | #SalesforceSaturday #archjapan | #AlwaysBeLearning #DontStopDeploying | #Accenture

Heat Miyamoto

written by Heat

Takahito Miyamoto

Written by

#Trailheart #SalesforceMVP #einsteinmoments | 17x #CertifiedPro | #SalesforceSaturday #archjapan | #AlwaysBeLearning #DontStopDeploying | #Accenture

Heat Miyamoto

written by Heat

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store