Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

タイプセーフな Clova Extension の開発環境を求めて on Azure Functions その2

$
0
0

1 つ前の記事ではタイプセーフにしたいと思って頑張った結果 TypeScript にトライしてみました。

blog.okazuki.jp

今回は C# でいってみようと思います。

開発環境

とりあえず Windows, macOS, Linux あたりで行けるはずですが私の環境は以下のような感じです。

  • Windows 10
  • .NET Core 2.1
  • Azure Functions Core Tools v2(preview)
  • Visual Studio Code + Azure Functions 拡張 + Azure 拡張

やってみよう

.NET Core の開発環境を整えてたら dotnetコマンドが使えるのと Azure Functions Core Tools v2 を入れてたら funcコマンドが使えるようになってるので、この 2 つを基本的に使います。

プロジェクトを作成

以下のコマンドを適当なフォルダで打って土台を作成します。

func init                       # Select a worker runtime で dotnet を選択
func new                     # HttpTrigger を選択して Select a template: Function name: で Clova と入力

オプションですが Visual Studio 2017 で開くときはソリューションファイルがあるといいのでついでに作っておきます。

dotnet new sln
dotnet sln add 作成されたcsprojファイルの名前

作業開始

では、Visual Studio Code でフォルダを開きましょう。コマンドプロンプトなり PowerShell を開いているなら code .で Visual Studio Code が立ち上がってきます。

Clova の Extension の C# 用の公式 SDK は無いので OSS のものを利用します。

github.com

作者の kennakamu さん自身による解説記事も Qiita に上がってます。

qiita.com

では、追加していきましょう。以下のコマンドを叩きます。

 dotnet add package CEK.CSharp

dotnet buildでビルドしておくか Visual Studio Code で Ctrl + Shift + Bをしてタスクの build を実行しておきましょう。

Clova.csというファイルが func newで作られているのでコードを書いていきます。 コードを書くときの Tips としてはクラスとかを使おうとしたときに、こんなクラスなんて知らないよ!みたいなエラーが出るのですが、それは using (JavaScript でいうところの import とか) を追加しないとなのですが、エラーのでてるところで Ctrl + .を押すとクイックフィックスが出てきて提案してくれるので、選択すれば勝手に using が追加されます。

f:id:okazuki:20180912104435p:plain

存在しないメソッドを呼び出すようなことをしても Ctrl + .でメソッドを生成してくれます。そこら辺を駆使しながら書いていきます。

using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;
using Microsoft.Extensions.Logging;
using CEK.CSharp;
using System.Threading.Tasks;
using CEK.CSharp.Models;
using System;

namespace LINEDotnet
{
    publicstaticclass Clova
    {
        [FunctionName("Clova")]
        publicstatic async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req, ILogger log)
        {
            var client = new ClovaClient();
            var request = await client.GetRequest(req.Headers["SignatureCEK"], req.Body);
            switch (request.Request.Type)
            {
                case RequestType.LaunchRequest:
                    return ProcessLanuchRequest(request);
                case RequestType.IntentRequest:
                    return ProcessIntentRequest(request);
                default:
                    returnnew OkObjectResult(new CEKResponse());
            }
        }

        privatestatic IActionResult ProcessIntentRequest(CEKRequest request)
        {
            var response = new CEKResponse();
            switch (request.Request.Intent.Name)
            {
                case"ThrowDiceIntent":
                    response.AddText("サイコロをふりたいんだね");
                    break;
                default:
                    response.AddText("ごめんね!よくわかんない!");
                    break;
            }
            returnnew OkObjectResult(response);
        }

        privatestatic IActionResult ProcessLanuchRequest(CEKRequest request)
        {
            var response = new CEKResponse();
            response.AddText("こんにちは!");
            returnnew OkObjectResult(response);
        }
    }
}

F5キーを押すと Visual Studio Code 上で動き始めます。ngrok あたりで適当にインターネットからアクセスできるようにして LINE Developer Center のスキルのテスト画面からつついてみると…

f:id:okazuki:20180912110206p:plain

動いた!!もちろんローカルデバッグも出来ます。

f:id:okazuki:20180912110318p:plain

あとは、Azure Functions を Azure 上に作ってデプロイすれば完璧ですね!

まとめ

とりあえずこれで自分が今現在も書くことがちゃんとできる言語の JavaScript, TypeScript, C# on Azure Functions で LINE Clova のスキルを開発出来そうです。

大体できることがわかると満足するタイプなので何か作るかは未定(多分作らない?)


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>