LINE 社の公式大型技術カンファレンス「LINE DEVELOPER DAY 2018」にて、
『サーバーレスで!Clovaスキル開発入門 (C#)』というタイトルで登壇してきました。Azure Functions を使って、LINE bot (Messaging API) と連携した LINE Clova のスキルの開発についてお話ししました。この記事にはそこで使った資料やデモアプリのコードをすべて公開しています。
当日は超満員(立ち見3列)になり、中には入れなかった人もいるようです。沢山の方々に聴いていただけて大変嬉しく思います。ありがとうございます。
話したこと
- LINE Clova、Google Home、Amazon Echo の比較
- Clova スキル (Extension) の具体的な作り方について、デモを交えながら紹介
- LINE Messaging API との連携 (『Clova に話しかけたら何らかの処理結果を LINE に push する』の実現方法)
- サーバーレスとは? オンプレミス, IaaS, PaaS, FaaS について
- Azure Functions を使った、サーバーレスでのサーバサイドの実装 (C#)
https://linedevday.linecorp.com/jp/2018/#C-5
↓ めちゃ嬉しかった!ので勝手に載せる
初ちょまどさんのセッション参加した
Clovaスキル開発手順の説明が公式のやつよりわかりやすくて面白かった(*゚▽゚*)いつもAWSしか使ってないけど今度Azure使ってみよーか#linedevday @chomado pic.twitter.com/WZaGxuEuv3
— ポー☁LINEDevDay18 (@kuramu1108) 2018年11月21日
Clovaスキル開発の入門編だけに、難しい言葉を並べるのではなく、分かりやすい言葉やスライドで丁寧で良かった。ほんとうに簡単に作れそうな気がしてきて、Friends買いたくなった← #linedevday #ちょまど
— HONEY-make.believe- (@HoneyOfMelissa) 2018年11月21日
ちょまどさんCDAになって文字通り雲の上の人みたいになったかと思ったけど、変わらず魅力的なセッションでした。構成とか緩急とか参考になるとこがほんと多い #linedevday
— ひらりん (@himarin269) 2018年11月21日
スライド
スライドは全て SlideShare で公開しています。
35分間のセッションでスライド60枚超え+デモ2つでしたが、時間ぴったりに終わらせることができました。
また、もともと (副業) 漫画家でもあるので、スライドの構成が漫画を読んでいるみたいだ、とはよく言われます!
漫画好きだからちょっと嬉しいです!えへへ
まるで漫画を読んでるみたいなスライド構成面白い#linedevday_c #linedevday
— cokaholic@AbemaTV (@TK_u_nya) 2018年11月21日
デモアプリ
『私の最新のブログ記事』というスキルです。
ブログの最新記事のタイトルをスマートスピーカーが読み上げてくれる + (Clova の場合) URL を LINE で送ってくれる
という二つの機能を持っています。
↓ 動画。Clova friends が喋った後に、スマホの LINE に通知が来てる
無事にデモが動いてよかった。 #LINEDevDay pic.twitter.com/j7WVHgwMF9
— Kenji Nakamura (@o2_knj) 2018年11月21日
コード
コードはすべて GitHub に載せてあります。
すべて C# で書いています。C# 最高。私は C# が好き過ぎて Microsoft に入社しました。
https://github.com/chomado/SmartSpeakerGetLatestArticle
Clova に喋らせる
intent 設定
CEK (Clova Extensions Kit) で intent の設定をしておく。
要するに「こうユーザーから言われたらこの intent を飛ばす」みたいな。
コード側
ああ~~~~~~~~~ C# 美しいなあ~~~~~~~~~~ マジで~~~~美しい言語~~ あああああああああああ~~~~~~
// LINE Clova の基本設定で渡したエンドポイント。 // Clova からのリクエストでこの function が発火する [FunctionName("Line")] public static async Task<IActionResult> Line([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequest req, ExecutionContext context, ILogger log) { var client = new ClovaClient(); var cekRequest = await client.GetRequest(req.Headers["SignatureCEK"], req.Body); var cekResponse = new CEKResponse(); switch (cekRequest.Request.Type) { // スキル起動時に必ず飛んでくる intent case RequestType.LaunchRequest: cekResponse.AddText(IntroductionMessage); cekResponse.ShouldEndSession = false; break; // その他ユーザー定義 intent が飛んできたとき case RequestType.IntentRequest: { // ↓intent ごとに処理を分けてる。詳細は下 var r = await HandleIntentAsync(cekRequest.Request.Intent.Name); // ↓ここで Clova に喋らせるメッセージを渡してる cekResponse.AddText(r.ResponseMessage); .. (略) //
intent ごとに処理を分けてる 自作メソッド HandleIntentAsync の処理内容
private static async Task<HandleIntentResult> HandleIntentAsync(string intent) { switch (intent) { case "HelloIntent": return new HandleIntentResult { ResponseMessage = HelloMessage }; // この、自分で設定した「AskLatestBlogTitleIntent」が来たら、以下のブログの RSS (XML)のパースの処理に入る case "AskLatestBlogTitleIntent": { var chomadoBlogService = new ChomadoBlogService(); var blog = await chomadoBlogService.GetLatestBlogAsync(); if (blog != null) { return new HandleIntentResult { ResponseMessage = $"ちょまどさんのブログの最新記事は {blog.Title} です。", Blog = blog, }; } else { return new HandleIntentResult { ResponseMessage = "ちょまどさんのブログの最新記事は、わかりませんでした。", }; } } default: return new HandleIntentResult { ResponseMessage = ErrorMessage, }; }
全文はコチラ(GitHub): SmartSpeakerEndpoints.cs
LINE Clova と LINE Messaging API の連携
LINE Clova と LINE Messaging API の連携について、
設定側とコード側でそれぞれやることがあります。
設定側
Clova の「基本設定」の画面で、接続先の LINE bot (LINE Messaging API チャネル) を選択します。
Clova と連携先の LINE Bot は、同じプロバイダー内に作られている必要があります。(そうじゃないとプルダウンに出てこない)
コード側
また、コード側はこのようになります。
CEKRequest request = ...; // Clova から来たリクエスト var client = new LineMessagingClient("LINE Developers で取得できるシークレット"); await client.PushMessageAsync( to: request.Session.User.UserId, messages: new List<ISendMessage> { new TextMessage("送りたいメッセージ"), });
実際のファイルはこちら (GitHub): SmartSpeakerEndpoints.cs
LINE Clova (≒LINE社のスマートスピーカー)に話しかけたら
私のブログ( https://t.co/rQHHCiB9Sx )の
最新記事のタイトルとURLを
LINE に送ってくれるようにしたよ!
Azure Functions を使っています#LINE_dev #LINE_API #LINEDavDay pic.twitter.com/0IbjU9inum— ちょまどMadoka📢LINEDevDay登壇 (@chomado) 2018年11月20日
サーバレスについて
「まずサーバーを用意する必要があるみたい!どうすればいいの?」(CV: ちょまどさん)#linedevday_c #linedevday pic.twitter.com/Dr72a6j3bv
— cokaholic@AbemaTV (@TK_u_nya) 2018年11月21日
- オンプレミス(自前サーバー(物理))
- IaaS (Infrastructure as a Service)
- PaaS (Platform as a Service)
- FaaS (Function as a Service)
の比較について話しました。
この図わかりやすい。こういうの見るたびにオンプレとかIaaSから卒業したくなる #linedevday pic.twitter.com/xdNe0I2dz9
— ひらりん (@himarin269) 2018年11月21日
この表のグレーのところが「ユーザーはお守りしなくて良いもの」です。マイクロソフトとかグーグルとかAWSとかのクラウドベンダーが面倒見てくれる。
赤いところが「ユーザーが自分でお守りしなくちゃいけないところ」です。
例えば、
REST の Web API を作りたいとき。
一般的な PaaS ですと、HTTPリクエストが来るのを待つ Web アプリを書く必要がありますね。例えば C# だったら ASP.NET で書きます。で、API の口を作って~とかやります。
しかし Serverless (FaaS) でやるなら、その「HTTP リクエストで発火する API」の土台となる Web アプリは書かなくて良いのです。
Microsoft のサーバーレスのサービスの代表格は Azure Functions といいまして、今回使った C# 以外にも node.js が使えます。(Java はプレビュー)
詳しくはこちら (公式ドキュメント)
漫画も描いています!
漫画もよろしくね!漫画家仲間の湊川あいさんと2人で描いてるよ
先ほど #LINEDevDay で紹介したマンガです!
漫画家仲間の湊川あいさんと2人で描いています!
ーー
マンガでわかるLINE Clova開発 1話「どんな仕組みで動くの? サーバーレスって何?」https://t.co/Gvx9LnMCVE— ちょまどMadoka📢LINEDevDay登壇 (@chomado) 2018年11月21日
当日のツイート
ちょまどさん、ClovaスキルからAzure functionのいいプロモーションでした。
ブログでコードも公開されるぞ!
#linedevday pic.twitter.com/mI3ue10MgU— takuto.sk (@skl_takuto) 2018年11月21日
超満員!
ちょまどさん人気やばい。
座れてよかった…
#linedevday pic.twitter.com/soqNUtbmgk— takuto.sk (@skl_takuto) 2018年11月21日
ちょまどさんのセッション立ち見がスゲー😳
#linedevday— ぱるた☆ (@Pulta_star) 2018年11月21日
ちょまどさんのセッション、コミケみたいに列形成がおこなわれているw #linedevday
— ラルフ (@r_ralph_h) 2018年11月21日
#linedevday ミーハーなので、ちょまど氏の話を聞こうと思ったらすごい行列だ。
— suzuki (@campanalbero) 2018年11月21日
ちょまどさんのセッション圧倒的混み具合だった。C#が人気なのか?サーバーレスが人気なのか?? #linedevday
— Cookie (@Cookie_nck) 2018年11月21日
初めて生で見た。人気すごい。アイドルのようでガチな人。#ちょまど #linedevday
— 木村 修平@LIFULLジンジニア(エンジニア人事) (@kimkimniyans) 2018年11月21日
ちょまどさん流石の集客力…これでC#やAzureでのLINE開発もっと流行ってほしい #linedevday
— ひらりん (@himarin269) 2018年11月21日
#linedevday ちょまど氏の公演、立ち見になった。
— suzuki (@campanalbero) 2018年11月21日
ちょまどさん人気すぎる。しゅごい #LINEDevDay #linedevday_c
— ミズキグミカンパニー(妹の兄) (@tibbers622) 2018年11月21日
きた。ちょまどさんのセッションすごい人!! #LINEDevDay pic.twitter.com/7a2vYEZtS7
— Hirokazu Arino ⚡️ (@kan1arino) 2018年11月21日
People waiting for @chomado 🎉🎉 but I have to talk with CTO lol #linedevday #linedevday2018 #clovaai pic.twitter.com/ldncVOfg4k
— Summit Suen (@SummitSuen) 2018年11月21日
最大手壁サークル「ちょまどさん」って感じのホールC#linedevday_c #linedevday
— cokaholic@AbemaTV (@TK_u_nya) 2018年11月21日
次のちょまどさん(@chomado)のセッション、前のセッションから入っとかないとホール前ですごい行列なんですけど…!#linedevday #ちょまど
— HONEY-make.believe- (@HoneyOfMelissa) 2018年11月21日
ちょまどさん人気がすごい
— きえりん (@Kiev_nico) 2018年11月21日
感想
初ちょまどさんセッション参加だったが、面白い人だった。
すごい動いていたけど、内容は軸がブレずわかりやすいという、しっかりしたものでよくわかったー。
#linedevday— gohh56 (@gohh56) 2018年11月21日
ちょまどさんの楽しかった
C#で作ってみようかな— もぐ (@kupapa) 2018年11月21日
ちょまどさん、ClovaスキルからAzure functionのいいプロモーションでした。
ブログでコードも公開されるぞ!
#linedevday pic.twitter.com/mI3ue10MgU— takuto.sk (@skl_takuto) 2018年11月21日
Clovaだけではなく、他のAIのExtensions Kitも載せてあるから
凄いわかりやすい#linedevday
— /*takara*/ (@dreamer_obey935) 2018年11月21日
ちょまどさんの英語のアクセントが美しいなぁ。 #LINEDevDay
— ShuzoT (@ShuzoTomita) 2018年11月21日
Clova skills for beginners, by Microsoft Corporation's speaker @chomado, at #LINEDevDay
Discover how to create your own skills for LINE's smart speakers Clova. pic.twitter.com/o4Ldkn4Acn— Pierre Jarsaillon (@pj_jarsaillon) 2018年11月21日
ちょまどさんの説明はとてもわかりやすかった。サーバレスのところとか、かなり丁寧に説明してたので、試しにつくる人が増えそうな予感。 #LINEDevDay
— ShuzoT (@ShuzoTomita) 2018年11月21日
ちょまどさん、プレゼンテーション上手いし、PowerPointの機能とか、surfaceの機能?とか最大限使ってて、すごい #linedevday_c #LINEDevDay (エゴサ用タグ)
— ミズキグミカンパニー(妹の兄) (@tibbers622) 2018年11月21日
ちょまどさんに癒されたからExtension作る。
#LINEDevDay— ReUsの川口さん (@kawapoo_of_reus) 2018年11月21日
ちょまどさん生セッション初体験。良かった!。後でサンプルみてみよ #LINEDevDay
— ころ33 (@koro333) 2018年11月21日
ちょまどさんのセッション立ち見だったけど見れた
Clovaスキル面白そう#LINEDevDay pic.twitter.com/TQK9QgJafw— あきのり (@hrdakinori) 2018年11月21日
ちょまどさん最近知ったのだが #LINEDevDay で凄まじい集客だったらしい。一度観てみたいなー。
— あすきー (@us_key51) 2018年11月21日
開演アナウンス
アナウンスも「千代田まどか」じゃなくて「ちょまど様」なのめちゃウケてましたw
アナウンス「ちょまどさん(本名なし)」 #linedevday
— フレディ (@___freddi___) 2018年11月21日
アナウンスが「ちょまど様」呼び。
#LINEDevDay— ReUsの川口さん (@kawapoo_of_reus) 2018年11月21日
「ちょまどさま」 ☜ ウケた #linedevday
— kageです。 (@kage_miku) 2018年11月21日
「マイクロソフトコーポレーションのちょまど様」w #linedevday
— Atsushi BIRD Tomita (@bird_tomita) 2018年11月21日
まとめ
私は C# が好き!
サーバーレスでサクッと動かせる Azure Functions が好き!
LINE Clova friends などスマートスピーカーのスキル開発が好き!
そして開発者コミュニティの方々は純粋に技術を楽しんでいる人たちで素晴らしい!同じプログラミングオタ友って感じ!
楽しかった!!ありがとうございました!
[…] 彼女の素晴らしい所は、当日の発表資料・ソースとも公開済の状態で登壇されているところ。資料は見放題だし、すぐ試せるし、これだけで心理的障壁がぐっと下がっているはず。しっ […]
[…] 講演の内容の詳細は記事に書いています。chomado.com/presentations/line-developer-day-2018/ […]