1 つ前の記事ではタイプセーフにしたいと思って頑張った結果 TypeScript にトライしてみました。
今回は 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 のものを利用します。
作者の kennakamu さん自身による解説記事も Qiita に上がってます。
では、追加していきましょう。以下のコマンドを叩きます。
dotnet add package CEK.CSharp
dotnet build
でビルドしておくか Visual Studio Code で Ctrl + Shift + B
をしてタスクの build を実行しておきましょう。
Clova.cs
というファイルが func new
で作られているのでコードを書いていきます。
コードを書くときの Tips としてはクラスとかを使おうとしたときに、こんなクラスなんて知らないよ!みたいなエラーが出るのですが、それは using (JavaScript でいうところの import とか) を追加しないとなのですが、エラーのでてるところで Ctrl + .
を押すとクイックフィックスが出てきて提案してくれるので、選択すれば勝手に using が追加されます。
存在しないメソッドを呼び出すようなことをしても 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 のスキルのテスト画面からつついてみると…
動いた!!もちろんローカルデバッグも出来ます。
あとは、Azure Functions を Azure 上に作ってデプロイすれば完璧ですね!
まとめ
とりあえずこれで自分が今現在も書くことがちゃんとできる言語の JavaScript, TypeScript, C# on Azure Functions で LINE Clova のスキルを開発出来そうです。
大体できることがわかると満足するタイプなので何か作るかは未定(多分作らない?)