LineSimulatorを利用してDurable FunctionsでロングランなLineBotをローカル環境交えて作ってみる

投稿者: | 2017年12月11日

この記事はMicrosoft Azure Advent Calendar 2017 の11日目の記事です。

LineSimulatorとDurable Functionsを利用してロングランできるLineBotをローカルでお手軽に作れないかなと思って試した内容を書いていきます。

ひとえにLineBotを作るといってもDurable FunctionsでのAsyncHttpAPIsパターンはDurableTaskに隠蔽されていてLineAPIの形式でデータのやり取りをすることはできません。なので今回はLineSimulatorとDurable Functionsの間にIF用のFunctionを用意してデータの変換や通信のなかどりを受け持つようにします。Durable FunctionsはAzure側に立てておいて、IFとなるFunctionとLineSimulatorをローカル環境で作成することとなります。

絵に起こしてみるとこんな感じです。

今回の実施環境前提は色々あるのですが、いちいち書いていると長くなりすぎるので割愛してます。環境構築に興味のある方は下記の情報を参考にしてみてください。

Azure Durable Functionsのインストール

 

Durable Functions 拡張機能とサンプルをインストールする - Azure
Azure Functions、ポータル開発、または Visual Studio 開発用に Durable Functions 拡張機能をインストールする方法を説明します。

 

LineSimulatorの環境構築(本家)

 

 

LineSimulatorの環境構築

 

LineSimulatorというイカしたツールを試してみた(環境構築編)
LineBotの開発するときに従来であればLineの実アカウントに対してリクエストを行い開発を進める方法が主流かなとおもいます。サーバにデプロイして確認したり、ngrokの...

 

LineSimulatorのローカル実行方法

 

LineSimulatorというイカしたツールを試してみた(ローカル実行編)
前回のブログでLineSimulatorをローカル環境で実行する方法について記載しました。今回はAzure Functionをローカルでデバッグ実行してLineSimulatorとデータ通信する方...

 

LineDevelopers

 

 

※本記事は2017年12月11日時点の情報となります

 

試した内容

今回はDurableFunctionsのFunctionChainパターンをAzure側に立てておいてローカル環境でLineSimulatorとIF用のFuncitonを構築して試していきます。

まずはAzure側にDurableFunctionsを構築します。とりあえず下記を参考にAzureにFunctionsを作成しましょう。

 

Azure Portal で初めての関数を作成する
Azure Portal を使用して、サーバーレス実行のための最初の Azure 関数を作成する方法について説明します。

 

Functionsを作成したら次はFunctionsnAppの設定からランタイムバージョンをbetaにします。betaにするとDurableFunctionsに対応します。

次にDurableTaskCoreとDurableFunctionsのサンプルソースをインストールします。

ここから一式をダウンロードしてください。

 

ダウンロードしたらFunctionsのダッシュボードからkuduを起動します。

 

kuduのDebugConsoleからCMDを選択してsiteからwwwrootに移動すると上記で作成したFunctionが作成されていると思います。上記でダウンロードしたファイルを下記の動画の要領で配置してください。

 

上記の作業後Functionに戻るとサンプルソースに従ったFunctionsが作成されていると思います。今回使うのはE1_HelloSequenceとE1_SayHelloです。

 

注意:先週実施されたAzure Function Portalの更改でポータルからDurableTaskCoreのインストールが出来なくなっているようです。もしDurableFunctionの環境構築を行う場合はVisualStudioでプロジェクトを作成して各種Nugetを行った後にAzureにDeployする必要があるみたいです。ここで紹介している方法は古い方法になっている可能性がありますので新しいやり方については別途記事に起こす方針です。環境構築を参考にされている方は注意していただければ幸いです。

 

次にローカル環境でLineSimulatorとDurableFunctionを繋ぐIF用のFunctionsを作成します。

ちょっと長いですがIF用のFunctionのサンプルソースを記載してい置くので参考にしてみてください。やっていることを簡単に説明するとLineから何かしらのメッセージを受けたら指定先のDurableFunctionsの実行指示をだして処理プロセス確認用のURLを受け取り、そのURLをボタンテンプレートのpostbackに含めて作成してLine側に返します。その後、Line側で確認用のボタンが押されたら実行上状況を確認してLineにメッセージとして返します。

※改行文字で嵌りまして色々試してみた結果<br>タグでした・・・。\r\nとかじゃないのね・・・。

 

とりあえず実行するとこんな感じになります。VSにコンソールにと色々起動してますが4Kモニターとデュアルデイスプレイだと捗ります。

 

ローカルで開発できるので便利だなぁと思ってやってみたのですがLineSimulatorをnpmで立ち上げてVisual Studioを立ち上げてFunctionをFunctionCliでローカル実行してとかやっていると画面の行き来が大変になってきます。まぁとはいえLineBotの開発をローカル環境で完結できるのは非常にメリットでかいと思います。さらにVisual Sutdioを2つ起動すればFunctionsもDurableFunctionsもローカルで開発できるので全てローカルで完結できるのはありがたいことです。ネットが繋がらない環境でも開発できますよ。

今回はFunctionsの一般的なプロジェクトテンプレートを利用して作成しましたがVisual Studio用に簡単にLineBotが作成できるライブラリがあるのでちょこっとご紹介しておきます。こちらのライブラリを利用するとLineBotのFunctionも簡単に作れちゃったりするので便利ですよ。

 

 

 

最後に恐縮ですが宣伝です。

Auzreもくもく会を主宰しています。次回は2018年1月6日の予定なのでご都合よろしい方は是非ご参加ください。一緒にAzureを研鑽しましょう。

Azureもくもく会@東京
# 概要 東京の東側で活動しているAzureに関する作業をもくもく行う会です。 勉強会やセミナーは沢山ありますが、そこで得た知識を深堀する機会ってないと思います。 ...

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA