【de:code2019】リアル店舗とサーバレスアーキテクチャの話

de:code2019のCD05のセッションのまとめです。
日本マイクロソフトが推進している流通業向けの施策の話です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/cadd9fa8-a5cf-e5b2-2527-465774eea34e.png)

### 流通業界の環境の変化
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/610ceb47-dc50-c453-8a32-e888e41b613b.png)

一昔前までは買い物のほとんどがリアル店舗のみだったのが、ネットやスマホの普及によってオンラインでの買い物がとても増えています。さらにIoTの普及も伴ってあらゆるものが繋がり、データの量も爆発的に増えている状況です。
そういった中、流通業界では  

* 新しいビジネスモデルへの対応  
* 顧客や店舗データの活用  
* 顧客ごとにカスタマイズされたサービスの提供  
* イノベーティブなサービスの実現  

などといった新しい姿が求められるようになってきているようです。
しかし、  その一方でこういった課題も多いとのこと。

* 単一のテクノロジーやソリューションでは課題が解決できない
* 単発PoCの繰り返しで先に進めない  
* 新しい技術に対応できる人材の育成  
* システムの運用コストの増大  

この話の中で、リアル店舗でのAIによる需要の予測の難しさについて例を紹介されたのですが、特に3つ目とかは予想外でした。

* ECサイトのAIでリアル店舗の需要予測できるか？　⇒　だいたい外れる  
* アイスクリームが売れる気温は？　⇒　20～30度。30度超えるとかき氷が売れる  
* 焼肉の「お肉」を買った人は何を買うか？　⇒　ファブリーズ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/a833d5b8-4089-81a7-c46a-2c52588f51ad.png)

ちなみに新しいビジネスモデルとしては、今後のリアル店舗ではこういった入口から出口まで全てがつながった仕組みを作っていく必要があるそうです。

### Smart Store施策を提示
流通業界が抱える課題を解決するために、日本マイクロソフトは以下の3つを施策として掲げたようです。

1. Smart Storeの実現方式の提供  
2. 1を基本とした技術者の育成支援 
3. 新規ビジネス開発支援  

これを色んな企業と共創しながら推し進めていくとのことでした。

### リファレンスアーキテクチャの無償提供  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/e057b747-f443-b0b5-3d59-a3be0b378bf8.png)

SmartStoreの実現方式の提供として、マイクロソフトはリファレンスアーキテクチャを公開しました。
Azureをベースにメーカから流通・小売り、消費者までを繋げたアーキテクチャになっているもので、各シーンで必要な部品を組み合わせてソリューションを構築してくもののようです。
当然、小売りの企業が1社で賄うというのは難しいので、そこはマイクロソフトが間に入ってソリューションパートナーやRaasパートナーを紹介してくれるそうです。
実際、ローソンはこの仕組みを取り入れて次世代型の店舗の実現に向けて動いているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/c29aecae-9ec5-fdab-6d3b-1bc43f15a5b7.png)
しかも、このアーキテクチャをGitHub上で公開していて無償で提供してるのはすごいです。
ユースケースの提供と共に、サンプルのソースコードがあるのですぐにでも試せるということでした。

このアーキテクチャですが、現在は決済や在庫管理の部分を提供しているようで、他の部分は今後展開していくそうです。

[流通業のデジタルトランスフォーメーションを加速する支援策を発表](https://news.microsoft.com/ja-jp/2019/01/29/blog-smart-store/)

このリファレンスアーキテクチャの技術ポイントは次の3つです。

#### ポイント①：マイクロサービス化の必要性
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/ab28db6f-ebf4-50e5-12a7-7f54888799c0.png)

これは決済をする部分の例です。
リアル店舗でモノを購入した際、だいたいはレジに並んで買い物をするわけですが、最近はキャッシュレス化によってスマホやタブレットで決済したり、カート型のレジ端末なども登場してきました。また、リアル店舗だけでなくECサイトもあります。
こうなってくると、

* ロジックを共通化したい  
* 様々なデバイスに対応したい  
* 決済から取引情報の生成を簡単にしたい  
* 在庫をリアルタイムで可視化したい  

といったシステムに対するニーズが生まれてきます。
なので、バックエンドをまとめてしまいましょうという話で、フロントのUIやUXが変わっても最小限のカスタマイズでいけるようにするというものです。ここだけ切り取って見たら割とどこでもよくある話かなという印象です。  

#### ポイント②：リアルタイム在庫管理  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/d2ba0092-cf24-86d6-85c0-fcdd590347b1.png)

これはCosmosDBとSQL Databaseを組み合わせて活用することで、テーブルのデータの持ち方を変えるというものです。
原価管理の観点から商品には原価の情報を持たせると思います。通常は品目とカレントの価格をまとめたテーブルを1つ作り、価格変更の履歴は別テーブルに格納していくということをやってるんじゃないかなと思います。私も同じ設計をしたことが有ります。
この考え方を少し変えて、価格変更の履歴のテーブルだけを用意し、現在の価格は履歴のテーブルからViewとして導出しましょうという話です。これって、SQLServerでやろうとしたらインデックスやSQL文を駆使して高速化しないといけないレベルだと思います。でもCosmosDBに履歴の情報を貯めていって、そこから集計したデータをSQLDatabaseに出力することで解決できてしまうということでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/6b306bd9-42bd-1a12-0f1b-1fe06b86a009.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/0984673b-af25-ab28-5fa2-dc9ea7ef73af.png)

さらに、新しく発表されたBlockchainのサービスを使うとこんなこともできるようです。

##### ポイント③：動画活用ソリューションの運用コスト削減
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/1d49ab14-73de-e5e7-869f-b3818dcf2f93.png)
カメラで動画を撮影し、それを分析に使いたいといった場合、カメラとクラウドを直接繋ぐのは10台くらいが限界で、それ以上だとHUBとなるサーバーを用意して平均化などしてクラウドに送るのがよいと言われています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/0a9d916a-071e-449e-d139-42988e3c09f3.png)
この時、100台も200台もカメラがあるとその分管理が大変になるので、これをDockerイメージに落とし込めるようにし、さらにそれをk8sで管理するという仕組みを考えているそうです。
カメラを追加したり、減らしたりとノードの操作をしたい場合、簡単にスケールできるように考えているそうです。
しかもこれもGitHubで公開するらしいです。

### Smart Boxの話  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/8630411b-56bd-18a2-af5c-0606fd8ab3d8.png)

ここからは新しく開発したSmartBoxの話です。写真の真ん中下の方にある青いやつです。このSmartBoxは上下2段になっていて、それぞれにカメラがついており商品を認識しているそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/d411c64f-53de-b716-c367-50fe7b758b9c.png)

流れとしてはこんな感じのようです。  

1. QRを読み取って扉を開ける  
2. 商品を取り出す  
3. 取り出した商品がスマホに通知される  
4. 買い物が終わったら扉を閉める
5. スマホで購入手続きが完了  

かなりリアルタイムでスマホ上のカートに商品が追加されていました。

#### サンプルコード  
これもコードがGitHub上に公開されてます。   

[GitHub：Intelligent Retail](https://github.com/intelligent-retail)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/cccc9ef1-f9d4-4bcd-8270-766ffd48b9fa.png)

このSmartBoxによっていろいろと事業が拡大できそうですね。オフィス内のコンピにとかこれ欲しいなと個人的に思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261327/7fd33729-fd7f-f50b-7625-4ee59ffb9142.png)

ちなみに、このSmartStore向けのエンジニア養成プログラムもあるようです。
Connpassのページがあるというのは予想外でした。  

[Connpass：Microsoft Smart Store エンジニアプログラム](https://ms-smartstore.connpass.com/)

ここまで公開されてると、筐体さわって動かしてみたくなりますね。
以上。