オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

【レポ】Microsoft Ignite The Tour Tokyo Day2に参加してきました

Microsoft Ignite The Tour Tokyo Day2に参加したレポート記事になります。

 

概要

2019年12月5,6日でMicrosoft Ignite The Tour Tokyoというテクニカルカンファレンスが開催されました。
今回はIgniteの最新情報というよりも入門編が多めの印象でした。

www.microsoft.com

 

目的

コンテナについての情報を得る。
 
今回の参加にあたり、魅力的なセッションが多すぎたため目的を定めました。
現在業務でAzure Container Instancesを利用しています。
その利用方法を見直す必要が生じたため、コンテナについての情報を収集し社内に展開するというのが私の今回の目標のひとつでした。
ということで、参加セッションはコンテナ周りが中心となっています。
 

 参加セッション

1つ目のセッション

「Azure でのコンテナーとオーケストレーションを調べる」
 
ACIやAKSについての概要説明とデモのセッションでした。
 
コンテナについて
 アプリ開発者がコードに専念するためのもの。
 隔離された環境で同じように使うことができる。→生産性の向上につながる。
 特徴として動作が軽い。
 
デモ①
 Dockerfileのデプロイ。
 細かいコマンドとオプションの説明もありました。
 
Azure Container Instancesについて
 シングルコマンドでコンテナ実行ができるお手軽さ。
 一秒単位での課金となり、実行中のみ換算される。
 仮想マシンの管理はAzureがする。
 
どういうとき使うのか?
 バッチ的な処理が向いている。
 LogicAppsを使うようなアプリに向いている。
 AKSの追加リソースとして使える。
 
Azure Container Repositoryについて
 プライベートなレジストリ
 全てのタイプのコンテナイメージの管理ができる。
 地理冗長もできる。
 
デモ②
 ACRの作成。
 Web App for Containersについて
 コンテナ化されたアプリの実行が簡単。
 
Azure Kubernetes Serviceについて
 デモがよかったです。
 実際に動いているAPIとかが確認できました。
 
全体的に入門という感じで分かりやすかったです。
見よう見まねでやっていたことが間違いでなかったことが確認できて安心しました。
ただし、ACIを常時利用の構成にしていたのでこれは見直さなければいけないとわかりました!

 

2つ目のセッション

「Azure Kubernetes Service を活用したマイクロサービス開発」
前日にJazugでもお世話になった原さんのセッションでした。
AKSについて、基礎的なお話から活用方法までのお話でした。
 
AKSを利用するにあたって、本当に必要な現場なのかを考えることが重要とのこと。
本当に今の構成にAKSは必要なのか?
頻繁にアップデートされるサービスか?
どんどん更新を追加していくものか?
⇒上記がYesならばAKS向きだそう。
 
コンテナは揮発性であり、中身は永続化されない。
永続化したいデータは別DBにちゃんと保管しておいて、クラスタ自体はすぐに捨てられるようにしておく。
k8sは流行っていてよく聞くワードではあるが、
難しいのも事実なので、最初はシンプルな構成から挑戦するのがいい。
 
上記以外にも、用語の説明や構成の説明、デモ等が盛りだくさんかつ分かりやすいセッションでした。
資料が公開されると嬉しいです。

会場にはスピーカーQ&Aというブースが設けてあり、
セッションを終えたスピーカーの方々と直接お話ができました。
今の業務の構成について、原さんに直接ご相談させていただき、解決策をご指南いただきました。
今回の参加で最も有益な機会でした。

 

3つ目セッション

「【アイデア次第!】 Microsoft Teams +α をノーコード・ローコードでカンタンに一層便利に利活用!」
Power Platform界隈でお世話になっている太一さんのセッションでした。
TeamsとPower Platformで業務を効率化するお話でした。
 
Teamsについて
 ただのビジネスチャットじゃない。
 ハブとして使ったときに真価が発揮される。
 Teamsだけでも業務が完結するくらいになってきている。
 このTeamsと相性がいいのがPowerPlatform!
 例)
  データ入力:Power Apps
  繋げる:Power Automate
  可視化:Power BI
  bot:Power Virtual Automate

Teams×Power Platformでの業務効率化の一例として
訪問販売のシミュレーションのお話をされていました。
効果を数字で表されると本当に圧倒的でした。
 
弊社でもTeamsはどんどん活用されているので
Power Platformと組み合わせてさらに効果的に使えたらいいなと思いました。
すべてはアイデア次第…

 

4つ目のセッション

失敗させない! Microsoft Teams 利活用促進への道!」
こちらも太一さんのセッションです。
本当は別のセッションを聞きに行く予定だったのですが、
前のセッションがあまりに面白かったので連続で参加することにしました。
 
Teamsを利活用するために必要なのは何か?
 ・Teamsへの愛
 ・ユーザー仲間への愛
 ・会社への愛
 愛のある人が使い倒して、説得することで響くものがある。
 
Teamsの導入とは?
 ・今までの働き方や考え方を変える必要がある。
 (メールの置き換えやコミュニケーションツールの追加ではない
 ・会社を変えるレベルの話
 ・経営層、力のある人を巻き込む必要がある
 ・好きな会社だから変えようという本気の人たちじゃないと成し遂げられない
 
Teamsの活性化に効果的な方法のひとつとしてチャンピオンプログラム(アンバサダー制度)があげられる。
個人のやる気を会社がどれだけ活かしてあげられるかが肝である。

全体的にマーケティング寄りのお話でした。
何かに愛を持って活動されている人は輝いているなと常々思っていたので
愛を持って行動することの重要性を再認識しました。
私もそれくらい愛を持てるものが早く見つかるといいなぁ

 

感想

今回は知りたいことの目標を定めてセッション選びをしたのでかなり満足度の高い参加ができました。
ちゃんと社内に情報共有します。
セッションそのものも有益ですが、スピーカーQ&Aやエキスパートブースがかなり重要だったと思います。
普段ならばなかなか聞くことができない技術的な悩みをその道のエキスパートさんたちに直接伺えるというのは最高に贅沢でした。
大阪にもあるかと思いますので、参加される方は是非ご活用ください。

Power Virtual Agentsでチャットボットを作ってみる

はじめに

以前、世界一簡単なチャットボットの作り方という記事を書きました。
 
しかし、Microsoft Ignite 2019でPower Virtual Agentsというチャットボットに特化したPower Platformが発表されてしまいました。
そのため、世界一の称号は明け渡さなければいけないかもしれません。
 
ということで
どれくらい簡単にチャットボットが作れてしまうのか見てみたいと思います。
 
 

目標

  • 簡単な性格診断botを作る。
  • Teamsでも使えるようにする。

 

 用意するもの

  • Office365アカウント
  • Webブラウザ(本記事はChromeのシークレットウィンドウを使っています)

  

診断出典元

性格診断をするにあたり、下記サイト様のコンテンツを拝借いたしました。

ご協力いただき、ありがとうございます。

性格診断セブン | 無料の面白性格診断


作成

下記からPower Virtual Agentsにログインします。

右上のロボットマーク>[+New bot]をクリックします。

f:id:mitsunooon:20191129183958j:plain

 

botの名前を入力します。

f:id:mitsunooon:20191129184028j:plain

 
botが作られるまで、ロボットのloading画面が表示されます。
これがかわいくて、loadが全然苦じゃないです。

f:id:mitsunooon:20191129184049j:plain

 

botの用意ができると、この画面が出ます。

f:id:mitsunooon:20191129184113j:plain

 
メインの会話の部分を設定します。
左メニュー>[Topics]>[+New topic]をクリックします。
デフォルトですでにいくつか登録されています。

f:id:mitsunooon:20191129184139j:plain

 
トリガーの設定をします。
今回は簡単な性格診断botにしますのでそれらしいトリガーを登録します。
設定ができたら、[Go to authoring canvas]をクリックします。

f:id:mitsunooon:20191129184203j:plain

 

Netronのような画面が表示されます。
ここで質問と回答を設定していきます。

f:id:mitsunooon:20191129184238j:plain

 

質問に対する選択肢も設定できます。

f:id:mitsunooon:20191130120544j:plain

 
各回答ごとに分岐できますので、
それぞれの回答ごとの診断結果を設定します。

f:id:mitsunooon:20191130114808j:plain

f:id:mitsunooon:20191130114857j:plain

f:id:mitsunooon:20191130114929j:plain

 
同じ回答を使用する場合は、線を引っ張るだけで結合できます。

f:id:mitsunooon:20191130115002j:plain


縮小拡大も自在にできますので、入り組んできたら縮小して全体図を確認することもできます。

f:id:mitsunooon:20191130115050j:plain


 一通りできましたら、右上で[Save]します。
左下の[Test your bot]から動作テストができます。

f:id:mitsunooon:20191130115113j:plain

 
作ったチャットボットを公開することもできます。

左メニュー>[Manage]>[Channels]>[Demo website]をクリックします。

f:id:mitsunooon:20191203175038j:plain

 

ウェルカムメッセージとトリガーの候補を設定します。

[Save]をクリックします。

(この工程は必須ではないですが、せっかくなので。

f:id:mitsunooon:20191203175158j:plain

 

左メニュー>[Publish]>[Publish]をクリックします。

f:id:mitsunooon:20191129184712j:plain

 

その下の[demo website]をクリックすると、デモ画面が出てきます。
背景が超絶かわいいですね。

f:id:mitsunooon:20191203175309j:plain

 

Teams連携

以前の記事の対比になるように今回もTeamsでも使えるようにします。
左メニュー>[Manage]>[Channels]>[Teams]をクリックします。

f:id:mitsunooon:20191129184850j:plain

 

[Add]をクリックします。

f:id:mitsunooon:20191129185001j:plain

 

AppIDが発行されます。

f:id:mitsunooon:20191129185043j:plain

 

AppIDを使ってTeamsで検索すると出てきます。

f:id:mitsunooon:20191129185101j:plain

 

同じように選択肢も出てきて使えますね。
やったー

f:id:mitsunooon:20191130115243j:plain

f:id:mitsunooon:20191130115309j:plain

 

性格診断botデモ版

今回作った性格診断botは下記にて公開しています。

Power Virtual Agents

 

感想

直感的に触っても全然問題ないくらい簡単に作れました!楽しい!
Analyticsもあるので、どのトピックがどれくらい使われたのかも確認できるのは嬉しいですね。

今回いそいで作ったので本当に最低限しか設定できてません。
Demo画面やTeamsにつないだ時のアイコンとかも凝りたいところ…。
題材も簡単な診断にしたので分岐も少なくて済んでますが、もっと質問数が増えたりすると、クリックで作れるとはいえ、途方もない作業になるので診断系はやり方を考えないといけなさそうです。
QnAMakerやLUISとの比較はまた今度改めてやろうと思います。
次はCognitive Servicesと連携させられるといいなー!
 

参考サイト様

 

【レポ】Global Microsoft 365 Developer Bootcamp 2019 Tokyo に参加してきました

Global Microsoft 365 Developer Bootcamp 2019 Tokyo に参加したレポート記事になります。

 

概要

Microsoft 365/Office 365の開発手法を学びたい人向けのハンズオンセッションです。
午前と午後でそれぞれひとつずつハンズオンを選択できます。
ハッシュタグ:#OfficeDev
 
以下、主に感想を書いていきますが、
内容や雰囲気を知りたい方はTogetterをご覧いただくのがいいかと思います。
 

午前の部

私が参加した午前のハンズオンは下記です。
今回はMicrosoft Graphについて学ぶために参加したようなものでした。

テーマ: Microsoft Graph
担当: 中村 亮太さん / 株式会社ソントレーゾ 取締役 CTO
担当: 杉本 和也さん(Microsoft MVP - Business Applications) / CData Software Japan 株式会社
資料:

Global Microsoft 365 Developer Bootcamp 2019 Tokyo:Microsoft Graph API · GitHub


座学

今日の目的
APIとは何かを学ぶ
Microsoft Graph APIのアプリを作る
・明日以降の業務に活かす!

 

APIとは何か?
・明示的にhttpメソッドを使用する:HTTP・URIなどによるネットワーク仕様に準拠したものが、RESTと呼ばれているAPI全般を指している。(GET,POST,DELETE,PUT,PATCH
・ステートレスであること:サーバー側でユーザーのセッション状態を保持しない。
なぜなら死ぬほど要求が来るので保持してたらサーバーが持たないから!
ある程度オペレーターが状態を管理しておかないといけない。
ディレクトリ構造に似たURIを公開すること:何をしているか一目瞭然なURIにすること。
XMLまたはJSONまたは両方を返すこと

APIを使えばWebで簡単にデータが取れる!
→その分セキュリティは大丈夫なの???
→大丈夫!認証と認可の体制。期限付きのアクセストークンで使用することでセキュリティを担保している!

Microsoft Graphで何ができるの?
→ユーザー作成をチャットボットで自動作成したり、メールの通知をしたり。

Microsoft Graphを使う流れ(全体)
アプリケーション登録(一度だけ必要)
トークン発行(都度必要)
→各種GraphAPI発行(都度必要)

Microsoft Graphを使う流れ(個々詳細)
アプリケーション登録:AzureADにアプリを登録
トークンの発行のための準備:アプリケーションIDとアクセスキーの取得。
権限付与:「委任されたアクセス許可」と「アプリケーションの許可」は違う権限なので目的によって使い分ける必要がある。
トークンの発行:有効期限で切れるので都度都度発行する
APIの発行:
URIは階層構造になっている。
1次階層/1次階層のパラメータ/2次階層/2次階層のパラメータ/3次階層
1次階層は操作先の指定。usersとか。次の階層でさらに細かいパラメータに絞り込む。
2次階層は操作機能の指定。1次階層によって変化する部分。


ハンズオン

手順がとってもわかりやすいのでぜひ資料をご参照ください!
 
その1
Microsoft Graph エクスローラーを触ってみる」
Webブラウザからどんなものかを見てみました。
あわせてPOSTMANもおすすめだそうです。

Postman | The Collaboration Platform for API Development

 
その2
会議室予約表示アプリを作る」
Power AutomateやPower Appsと組み合わせたアプリです。
既存の会議室予約表示アプリを使うとn万円とコストがかかりますが、
今回のハンズオンで作れてしまえば、大幅コスト削減です!
 
私はOffice365開発者サイトでのリソース作成がうまくできず挫折しました…
手順の後半でPower Automateが出てきてて、大変気になるのでリベンジします…!
 

ランチタイムLT

お昼はMS本社様からSUBWAYの差し入れをいただきました!
おいしいサンドウィッチをいただきながらLTを楽しめるという贅沢仕様でした笑

LT1人目

斎藤さん
「AccessRuntimeの今を探る」
OfficeDeveloper→Office365の変化について等

LT2人目

中山さん
「Microsoft365で使えるソフトウェア開発について」
Officeアドインというマイナーすぎる存在を広めるためのお話。
わずかな時間でもデモ付きというボリューム感。

 LT3人目

目代さん
「人生は学びの連続である」
学習リソースについての話で
Microsoft Learn | Microsoft Docsがいかに便利かというお話。

 

午後の部

私が参加した午後のハンズオンは下記です。
午前中に学んだMicrosoft Graphの知識が活きました!

テーマ: Adaptive Cards
担当: 篠原 敬志さん(Microsoft MVP - Office Development) / アバナード株式会社
担当: 高尾 哲朗さん(Microsoft MVP - Developer Technologies)
資料:

GitHub - karamem0/m365devbootcamp2019: Global Microsoft 365 Developer Bootcamp 2019 Japan の Adaptive Cards ハンズオンの資料です。

 

座学

Adaptive Cardsとは?
→カード形式のコンテンツが送れる新しい方法。
・美しいエクスペリエンス(JSON形式)
・オープンフレームワーク
マルチプラットフォーム
・ネイティブパフォーマンス
 
利用できるサービスも多様:BotFramework、Cortana、OutlookActionableMessage、WindowsTimeline、MS Teams

基本的なスキーマは2つ:body、actions
 
コントロールの種類がいくつかある:コンテナ、要素、入力
 

ハンズオン

こちらのハンズオンも本当に資料がわかりやすかったのでぜひご参照ください。
 
その1
「Adaptive Cards Designerを触ってみる」
Webブラウザで簡単に触れました。
 
その2
「Power AutomateからTeamsに投稿する」
Automateを実行するとTeamsにAdaptive Cardsが送信されるものです。
ちゃんと動くのをみると感動しますね笑
 
その3
「GraphからOutlookに送信する」
今度は表示先がOutlookになります。
事前に用意いただいたコードで動かします。
このコードがきれいで見やすかったです。
 
その4
「アンケート収集システムを作ってみる」
Outlookに送られたアンケートに回答すると、結果がExcelに自動で記載されるというものです。
Power Automate→Outlook→Azure Functions→Excel
私はOffice365開発者アカウントとAzureサブスクリプションのアカウントが分かれていたので不安だったのですが、それでも問題なく動いたので良かったです。達成感!

 
全体の感想

朝の10:00から開始で雨で寒い中でも、運営の方も参加者の方もたくさんいらしててみんなすごいえらいと思いました。
ノベルティにはステッカー、Tシャツ、おしゃれなウォーターボトルがありました。
午前も午後もハンズオンの資料がすごくわかりやすくて、一体どれだけご準備されたのか…計り知れないです。今後の勉強に使わせていただきます。
午前と午後で自分で選んでハンズオンが受けられたのが良かったです。私はMicrosoft Graphが目的だったので、どちらでも触れられて大満足でした。
ハンズオンの成功を左右したのは下準備だと思いました。事前に必要な環境が告知されていましたので、それをもっとちゃんと用意しておけば午前のハンズオンもうまくできたのかなぁと…
全体を通して、充実感のある素敵な一日でした!
運営の皆様ありがとうございました。来年も参加したいです!
 

 

Azure FunctionsのDialogflow v2 API対応

はじめに

Google Homeで遊ぶときに利用しているDialogflowのv1 APIが2020年3月に完全シャットダウンしてしまいます。
(元々は2019年10月まででしたが延長されてました。

Release Notes  |  Dialogflow Documentation  |  Google Cloud

 
以前の記事で
Dialogflow+Azure Functionsで
Google Homeの設定をしていたので
こちらのv2対応版を書いていきます。

流れ

  • Azure Functionsの設定

  • Dialogflowの設定
 


Azure Functionsの設定

ちょっと変える程度かと思いきや、がらりと変わりました。
v1の時より汎用性のあるすっきりしたコードにできたので個人的には満足度が高いです。
コード自体はGitHubに記載してます。
 

Dialogflowの設定

設定から[API VERSION]の[V2 API]を有効にします。
[SAVE]します。

f:id:mitsunooon:20191120151855j:plain

f:id:mitsunooon:20191120151913j:plain

FulfillmentのURLを新しいものに書き換えます。

f:id:mitsunooon:20191120151933j:plain

以上で設定は終わりです。
 

動作確認

ちゃんと動きました。やったー。
 

f:id:mitsunooon:20191120155324j:plain

 

つまづいたところ

・WindowsAzure.Storageのバージョン

パッケージのバージョンをすべて最新安定版にしていたら以下のエラーが出てきました。

f:id:mitsunooon:20191120152148j:plain

Microsoft.Azure.WebJobs.Extensions.Storage:Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'
 
調べたところ、WindowsAzure.Storageのバージョンが影響しているとのことでした。
9.3.3から9.3.1にダウングレードしたところ無事に動きました。

f:id:mitsunooon:20191120152207j:plain

 

・Table Storageの型

今回の例ではすべてstring型なので影響はないですが、
会社の備品管理を同様の構成でしようとしたところ、備品番号がFunctionsで認識できなくてハマりました。
原因としては、備品番号がTable Storage上ではint型で登録されているのに、Functions上ではstring型にしていたというだけの話でした。
Table Storageのほうを変更しました。
 
 

参考サイト様

 

QnAMaker×PowerAppsで作るチャットボット

過去記事でQnAMakerを使った世界一簡単なチャットボットの作り方を書きました。
その時はTeamsのチャットボットでしたが、今回はPowerAppsを使って独立したアプリの形にします。

 

参考サイト様

PowerAppsとCognitive Serviceでチャットボットを作ろう - 吉田の備忘録

QnAMaker × Azure Bot Service でノンコーディング AI Chatbot 作成 (2019年4月版) - Qiita

 

必要なもの

・Azureアカウント(QnA Maker用)
・PowerAppsが使えるMSアカウント

 

構成イメージ

f:id:mitsunooon:20191015222314j:plain

 

QnAMakerの設定

こちらの過去記事を参照ください。

世界一簡単なFAQチャットボットの作り方 - オンプレ系インフラエンジニアがAzureを勉強する

 

PowerAppsの設定

カスタムコネクタの設定

PowerAppsにサインインします。

カスタム ビジネス アプリケーションの構築 | Microsoft PowerApps

 

[データ]>[カスタムコネクタ]>[+カスタムコネクタの新規作成]をクリックします。

[OpenAPIファイルをインポートします]をクリックします。

f:id:mitsunooon:20191015222716j:plain

 

コネクタ名とインポートするOpenAPIファイルを設定します。

f:id:mitsunooon:20191015222830j:plain

 

OpenAPIファイルはQnAMakerのPublish情報をもとに下記の内容のJSONファイルを用意します。

 "host"と"paths"の部分をQnAMakerのPublish情報のものに書き換えます。

f:id:mitsunooon:20191015223057j:plain

 

{
  "info": {
    "version": "1.0.0",
    "title": "PowerApps",
    "description": "PowerApps"
  },
  "host": "chatbot1015.azurewebsites.net
",
  "basePath": "/",
  "schemes": [
    "https"
  ],
  "consumes": ,
  "produces": [
    "application/json"
  ],
  "paths": {
    "QnAMakerのPOST情報
": {
      "post": {
        "summary": "QnAMaker",
        "description": "QnAMaker",
        "operationId": "QnAMaker",
        "parameters": [
          {
            "name": "Content-Type",
            "in": "header",
            "required": false,
            "type": "string",
            "default": "application/json",
            "description": "Content-Type",
            "x-ms-summary": "Content-Type"
          },
          {
            "name": "body",
            "in": "body",
            "schema": {
              "type": "object",
              "properties": {
                "question": {
                  "type": "string",
                  "description": "question",
                  "x-ms-summary": "question"
                }
              },
              "default": {
                "question": "hi"
              }
            },
            "required": true
          }
        ],
        "responses": {
          "default": {
            "description": "default",
            "schema": {
              "type": "object",
              "properties": {
                "answers": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "answer": {
                        "type": "string",
                        "description": "answer",
                        "x-ms-summary": "answer"
                      },
                      "questions": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        },
                        "description": "questions",
                        "x-ms-summary": "questions"
                      },
                      "score": {
                        "type": "integer",
                        "format": "int32",
                        "description": "score",
                        "x-ms-summary": "score"
                      }
                    }
                  },
                  "description": "answers",
                  "x-ms-summary": "answers"
                }
              }
            }
          }
        }
      }
    }
  },
  "definitions": {},
  "parameters": {},
  "responses": {},
  "securityDefinitions": {
    "api_key": {
      "type": "apiKey",
      "in": "header",
      "name": "Authorization"
    }
  },
  "security":
,
  "tags": []
}
 

 

[1.全般][2.セキュリティ][3.定義]の各項目は特に設定はせずに進めます。

f:id:mitsunooon:20191015223302j:plain

f:id:mitsunooon:20191015223314j:plain

f:id:mitsunooon:20191015223328j:plain

 

[4.テスト]まで来たら、[コネクタの作成]をクリックします。

f:id:mitsunooon:20191015223401j:plain

 

[接続]の項目が出てきます。

f:id:mitsunooon:20191015223445j:plain

 

[+新しい接続]をクリックし、APIキーを入力します。
このAPIキーはQnAMakerのPublish情報の「Authorization」の項目の値を入れます。
EndpointKeyから入れます。

f:id:mitsunooon:20191015223511j:plain

 

[作成]をクリックすると画面が戻ってしまいますので、
また[データ]>[カスタムコネクタ]をクリックします。
先ほど作ったカスタムコネクタをクリックします。

f:id:mitsunooon:20191015223601j:plain

f:id:mitsunooon:20191015223612j:plain

 

[4.テスト]で質問を入力してテストします。

200が返ってくれば問題なく動いてます。
これでカスタムコネクタの作成が完了です。

f:id:mitsunooon:20191015223644j:plain

 

画面の設定

 次に画面の部分を作ります。
PowerAppsで[アプリ]>[+アプリの作成]をクリックします。

f:id:mitsunooon:20191015223824j:plain

 

[キャンバスアプリを一から作成]をクリックします。

f:id:mitsunooon:20191015223853j:plain

 

アプリ名を設定し、
今回はスマフォアプリにする予定なので[電話]を選択します。

f:id:mitsunooon:20191015223915j:plain

 

編集画面が表示されます。

まず最初にアプリを開いたときに表示される文言を設定します。
[Fill]の部分をプルダウンで[OnVisible]にします。
右側の欄の関数を下記にします。
ClearCollect(chat,{name:"答える君",text:"ようこそ。何でも聞いてください"})

f:id:mitsunooon:20191015223955j:plain

 

チャットボットの表示部分を追加します。
[ギャラリー]>[高さ(伸縮可能)]をクリックします。

f:id:mitsunooon:20191015224230j:plain

 

[データソースの選択]>[コネクタ]で先ほど作ったカスタムコネクタをクリックします。

f:id:mitsunooon:20191015224259j:plain

f:id:mitsunooon:20191015224315j:plain

f:id:mitsunooon:20191015224328j:plain

 

文章の長さによって枠の高さを自動調整してほしいのでレイアウトを変更します。
[Gallery]>[レイアウト]>[ニュースフィード]を選択します。

f:id:mitsunooon:20191015224345j:plain

 

[Item]の部分を「chat」に変更します。

f:id:mitsunooon:20191015224437j:plain

 

[Title]の関数を「ThisItem.name」にします。

f:id:mitsunooon:20191015224504j:plain

 

[Body]の関数を「ThisItem.text」にします。

f:id:mitsunooon:20191015224528j:plain

 

チャットボットのアイコンになる画像を設定します。
[ファイル]>[メディア]>[参照]からアイコンにする画像を選択します。

f:id:mitsunooon:20191015224548j:plain

 
編集画面に戻ります。
[Image]の関数を下記にします。
If(name="答える君",'アップした画像の名前',User().Image)
 
アイコンの位置も変わるように設定します。
[X]の関数を下記にします。
If(name="答える君",16,570)

f:id:mitsunooon:20191015224615j:plain

 
会話の入力部分を作ります。
[挿入]>[テキスト]>[テキスト入力]をクリックします。

f:id:mitsunooon:20191015224727j:plain

 
[ボタン]をクリックします。
[Text]部分を「送信」にします。

f:id:mitsunooon:20191015224751j:plain

 
ボタンの[OnSelect]を下記の関数にします。
Collect(chat,{name:"あなた",text:TextInput1.Text});
Collect(chat,{name:"答える君",text:First(PowerApps.QnAMaker({question:TextInput1.Text}).answers).answer});
Reset(TextInput1)

f:id:mitsunooon:20191015224818j:plain

 
これで大体の設定ができました。
右上の再生ボタンで試してみます。

f:id:mitsunooon:20191015224904j:plain

それっぽく動きました!
ちゃんと文章に合わせて高さも変わりますね。

これに追加でラベルやボタンの色などを変えて見た目を整えます。

f:id:mitsunooon:20191015224922j:plain

よりチャットボットらしくなりましたね!
 

用途

チャットボットはカスタマーなどのお客様対応に使われる印象が強いですが、情報共有としても有用だと思います。

私は今回作ったチャットボットを個人用のKBチャットボットとして使っています。
アカウント情報や作業手順などの情報が整理できて重宝してます。
少し応用して、社内の情報共有アプリにできたらいいなと思っています。

 

おわり

PowerAppsの好きなところは、表現の幅が広くて凝ろうと思えばいくらでも凝ったUIにできるところです。

また、iPhoneでもAndroidでも使えるアプリが簡単に形にできるのは本当にストレスフリーです。

今回触れていないですが、QnAMakerのmulti-turnという機能もとても便利で好きなので、その機能もPowerAppsで表現できるようにしたいと思います。

 

【レポ】PowerAppsでローコーディングなハッカソンに参加してきました

PowerAppsのハッカソンに参加したレポート記事になります。
 

概要

「アプリは誰でも作れる日がきた」をスローガンにPowerAppsのハンズオンとハッカソンが同時開催された勉強会です。
なおかつ、東京と福岡の2拠点同時開催というお得感満載でした。
 
 

セッション&ワークショップ

スピーカー:吉田 大貴さん(@TaikiYoshidaJP)
テーマ:「アイデアをデジタル変革させるには」
 
イデアをどうやってPowerAppsにするかがテーマのセッションでした。
そもそもPowerAppsは単純なものから複雑なものまで網羅できるサービスとして、使い方次第で実現できることの幅が広いものだそうです。
PowerAppsを効果的に使える場面としては下記になります。
・情報の収集
・情報の共有(部門をまたぐ業務など
・情報のデジタル化(紙の申請書など
 
PowerAppsを利用した事例がYouTubeで見れます。
今回はHeathrow空港の例を拝見しました。
他にも事例がたくさんあるようです。

 

youtu.be

 

また、PowerAppsでのアプリ開発は従来の開発方法とは異なります。
イメージとしてはアジャイルをさらにスーパーアジャイルにしたもので、一週間で1サイクルの目安。
 【計画→設計→作成→テスト→改善】
ローコーディングなので、極端な話だとお客さんの目の前で動かしながら認識のすり合わせをすることもできるようです。

 

セッションの合間に下記のようなワークショップがありました。
午後のハッカソンの下地になるものでした。
 
1.今困っている業務フローを書き出す。
2.アプリを使う人のペルソナを書き出す。
3.ペルソナに基づいてOKR(目的と結果)を書き出す。
4.業務フローとペルソナをもとにタスクを洗い出す。
5.アプリの画面スケッチを書き出す。
6.アプリの機能に優先順位をつける。

個人でアプリを作る際にもこのワークショップの流れを意識して作れば
目的を見失わずに丁寧なものが作れる気がしました!
(作ることに夢中になり目的を見失いがちなので...
 

ハッカソン

午後からいよいよハッカソンです。

テーマ:ボランティア、介護、教育、子育て
チーム:HappyBirthday王者(東京)、NPOハック四(東京)、QBSLab(福岡)(1チーム当たり4~5人)
制限時間:約2時間

アカウント:PowerApps用に1人1つMSアカウントを割り振っていただきました。

 

私のチーム(HappyBirthday王者)は災害ボランティアの支援アプリを作ることにしました。
目的:被災地の状況を素早く把握し、的確にボランティアを派遣できるようにすること。
ユーザー:被災地の役所の人、ボランティア参加の人
概要:
  役所の人が被災地の写真をメインに被災状況の情報を集める
  →集めた情報をもとに役所の管理者が支援の優先順位を決める
  →ボランティア参加の人の情報を集め、適正によって仕事を割り振る
ポイント:
  被災現場で使うものなので、極力自由入力の少ないものにする。
  幅広い年齢層が使えるようにUIを簡潔なものにする。
  災害ごとに使えるように汎用性の高いものにする。
  オフラインでも使えるものにする。

 

以下、私のチームでの制作の流れになります。
まず、アプリに必要なデータをTeamsに書き出し共有します。

f:id:mitsunooon:20190929204808j:plain

書き出したデータをもとにエンティティを登録していきます。

f:id:mitsunooon:20190929204847j:plain

f:id:mitsunooon:20190929204857j:plain


データモデルが出そろったら、アプリを作ります。
[データから開始]という機能を使うとエンティティのデータをもとにアプリの大枠を作ってくれます。
もとになるデータも選べ、今回はCommon Data Serviceを使います。

f:id:mitsunooon:20190929204933j:plain

f:id:mitsunooon:20190929205239j:plain

 
一覧表示、項目の詳細、書き込み画面の3種類が自動で作られます。
後は、午前中に書いた画面スケッチに沿って必要な項目を追加していきます。

f:id:mitsunooon:20190929205323j:plain

 
画像の表示もパラメータを1行いじることで可能でした。

f:id:mitsunooon:20190929205404j:plain

 
2時間でユーザーごとに合わせた3つのアプリができました。
・被災状況収集アプリ
・管理者操作アプリ
・ボランティア情報アプリ
 
また、完全な連携までは至りませんでしたが、
PowerBIで被災地が地図上ですぐに確認できる機能も作成しました。
 

コンポーネントの使い方

複数人で開発する環境で、ヘッダーなどアプリ内で統一したいものはコンポーネントを使用すると便利ということで、まだプレビュー機能ですがレクチャーいただきました。
メモとして簡単に記載しますので、詳細は吉田さんの記事をご覧いただくのが良いです。

PowerAppsのアプリが10倍速く作れるキャンバスコンポーネントとは? - Taiki's Memorandum

 

アプリ作成開始後、
[アプリの設定]>[詳細設定]>[コンポーネント]オンにする。

f:id:mitsunooon:20190929213219j:plain

 

 アプリ編集画面に戻り、
[挿入]>[カスタム]>[+新しいコンポーネント]
にて必要なコンポーネントを作成します。

f:id:mitsunooon:20190929213252j:plain

 

f:id:mitsunooon:20190929213407j:plain


アプリ画面にて
[挿入]>[カスタム]で先ほど作ったコンポーネントが表示されて使えるようになります。

f:id:mitsunooon:20190929213432j:plain

 

アプリの紹介と結果発表

審査方法は、参加者と審査員の皆さんで各チームへの評価を専用フォームに投票し、そのポイントが一番高かったチームが優勝となります。
 
<HappyBirthday王者チーム>
テーマ:災害ボランティア支援アプリ
審査員評価:ボランティア情報の登録にて、大量の人がPowerAppsを利用するにはライセンス問題に懸念がある。
 
NPOハック四チーム>
テーマ:災害ボランティア支援アプリ
概要:災害支援の依頼電話を受けたNPOのボランティアの人向けのアプリ。
アピールポイント:NPOの人の拠点が散在していることで、情報の受け渡しに問題があることを解消したい。
審査員評価:受電だけで依頼を回す場合、捌ききるにはそれなりの人のリソースが必要なため、ライセンスの運用に問題はないか。
 
<QBSLabチーム>
テーマ:実績登録システム
概要:社内の工数や実績などをリアルタイムで入力できるアプリ。
アピールポイント:実際の業務で困っていることを取り上げた。題名のUIにこだわった。
審査員評価:工数や実績の入力項目が自由記入のため、手間と感じ記入しない人が出るのではないか。

<結果>
優勝:NPOハック四チーム!!!
おめでとうございます!
個人的にNPOハック四チームのアプリでいいなと思ったところはUIのきれいさでした!
短時間でも色味やボタンなどにもこだわって作られていているところが素敵でした。
 
また、審査員の方からのお話であった、PowerAppsを使うこととハッカソンで意識することのポイントが刺さりました。
・競合の既存製品にどう勝てるか
・PowerAppsじゃないとできないことを見せる(誰が何をだれのために)
 
PowerAppsは本来Dynamics365がメインということで
そちらの知識や背景、前提なども知っているとより良いとのことでしたので
ちゃんと勉強していこうと思います。
 

感想

完全に趣味で触り始めて興味を持ったPowerAppsで、人生初めてのハッカソンに参加しました。どきどきでした。
案の定、スキル的には全く追い付かずでしたが、PowerAppsの使い方を学べたとてもいい機会でした!
今後も何かしらのハッカソンに参加したいと思っているので、貢献できるようなスキルや立ち居振る舞いを身に着けます。
全体としては、コミュニティ運営の方々の仲の良さが際立っていて、居心地のいい雰囲気のアットホームな会でした。初めてのハッカソンが今回のような優しい雰囲気のもので心底よかったです。
また、福岡とのTeamsを使ったリモートなやり取りも新鮮でした。
今回の学びを踏まえて、自分用に作っているアプリを改良してまた改めて記事に書きます。
運営の皆様、チームの皆様、ありがとうございました。

【レポ】Japan Azure User Group 9周年イベントに参加してきました

JAZUG9周年イベントに参加したレポート記事になります。

 

JAZUGとは?

Microsoft Azureを学び、楽しみ、活かす、日本のユーザーグループです。
月に1度、定期的な勉強会を開催しています。
今回は9周年イベントということで特別なプログラムのイベントを開催しました。
また、7月から開催されていたてらだよしおさんの「Japan Tour in Summer: Java & k8s on Azure まつり」もここでファイナルを迎えられました!すごい!

 

jazug.connpass.com

 

セッション

今回はRoom C+DとRoom Bで同時に別々のセッションが開催されました。
ここではRoom C+Dで行われていた9周年イベントの方のセッションについて書いていきます。
Room Bで開催されていた「てらだよしおまつりファイナル」については
女子部の時のレポート記事が参考になればと思います。

【レポ】Java & k8s on Azure まつり@女子部に参加してきました - オンプレ系インフラエンジニアがAzureを勉強する

 

私は受付をしていたため、1つ目のセッションは聞けなかったので、2つ目以降のセッションからになります。

 

「Azure DevOps × スクラム で実現するプロダクト開発のポイント」

スピーカー:関 満徳さん(@fullvirtue)
資料:

Azure DevOps × スクラム で実現するプロダクト開発のポイント #dotnetlab #jazug

 

AzureDevOpsで開発したときに誰が何をどの粒度で書けばよいかわからない
というよくある疑問についてのお話でした。

Azure DevOps、スクラム、プロダクト開発についての説明から始まり、
それぞれの歴史についてもお話があり大変興味深かったです!
個人的には歴史と同じくらい具体的に少し未来の話もあったのが面白かったです。

題になっているAzure DevOps × スクラムで実現するプロダクト開発については
具体的な参考事例をお話しくださったので、ポイントがわかりやすかったです。
エピック、フィーチャー、ユーザーストーリー、タスクを対応表に示すのが良さそうです。

 

「AzureでIoTって実際どうなの?皆さまに知っていただきたい 東京エレクトロンデバイスによるAzure IoT関連事例とその裏側」

今回のイベントのスポンサーである東京エレクトロンデバイスさんのセッションです。


スピーカー:茂出木さん

Windows EmbeddedとIoTへの愛があふれているお話でした。

現在の形のAzure IoT Plug and Playまでの道のりは長いものだったそうです。
昔のAzure IoTはPaaSとの組み合わせで、デバイス側とクラウド側両方の技術が必要であったり、シナリオを利用してもカスタムが大変だったりと一筋縄ではいかなかったそう…

現在はユーザーの希望に合わせて進化しているため、どんどんシンプルに、誰でも使えるようになっています。
現在のAzure IoT Plug and Playではデバイスのほうにすでに必要なものが埋め込まれていて
jsonファイルをダウンロードしてIot Hubに入れればすぐに動かせるらしいです!
これはぜひやってみたいです!

ちなみに、茂出木さんはお掃除ロボにラズパイを載せて自由に操縦したりするほど組み込みもお好きなようでした笑
デモ動画がおもしろかったです。

 

スピーカー:野崎さん

東京エレクトロンデバイスさんについて軽快な話口でご説明くださいました。
IoT,PoCは爆発的に伸びる可能性のある市場であること、
具体的にはコインランドリーなどで有効活用されていることなど興味深いお話が聞けました。

また、IoTだけでなくAzure関連も手広く携わられているようで、Azure×Veeamもされているとか!あらゆるバックアップをAzureに移行できますって!

東京エレクトロンデバイスさんでは、IoTビジネス共創ラボという勉強会も開催されています。

IoTビジネス共創ラボ - connpass

 

「Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について」

スピーカー:山口 真也さん(@izuru_yamarara)
資料:

Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について

togetter:

JAZUG 9 周年 イベント 「Azure AD とアプリケーションを SAML 連携する際に陥る事例と対処方法について」登壇時のまとめ。 - Togetter

 

AzureADとSSO、SAMLについてのお話で、図解を交えた大変わかりやすいお話でした。
いつ調べてもいまいちピンとこなかったAzureADとSSOについて今までで一番わかったような気がします。

とにかく図がわかりやすいので、是非togetterと合わせて資料を見てください!!!


山口さんはサポート担当の方ということで、実際にあった問い合わせへの回答等をご紹介くださいました。
エラーを再現して解消するまでのデモが本当にスムーズで見ていて気持ちがよかったです。

SSO関連のエラーはエラー画面がすべてを物語っているそうなのでエラーはちゃんと読みましょうね…

 

LT大会

セッションの後はLT大会でした。
おひとり5分という短さかつ様々なジャンルのお話ということで密度の高い時間でした。
アジェンダのご紹介と簡単な感想になります。
アジェンダはほぼconnpassから引用してきたので実際の題名と異なっていると思います。すみません。

 

1.「Azure Sentinel でどこまでログを集められるのか(仮)」

スピーカー:Shinsuke Saitoさん
実際にお家で稼働させているAzure Sentinelがどんな感じを見せてくださいました。
1人分の稼働でも結構なログがたまっていて、お金もそれなりにかかるというのが印象的でした。

 

2.「航空機事故から学ぶアーキテクチャとモニタリング」

スピーカー:しばやんさん
飛行機事故の事例から学べるアーキテクチャが多くてびっくりしました。
ベースは飛行機事故のお話でしたが、ITの現場でも同様の事故が起きるのが容易に想像できる内容でした…
人はミスするものなので、そもそも操縦ミスや整備ミスのせいにしないような仕組みづくりをするというのが心に刺さりました。

 

3.「今日から始めるARMテンプレート」

スピーカー:dz_さん
資料:

今日から始めるARMテンプレート

Azureリソース管理はどうする?→Azure Resource Managerテンプレートを使おう!
というお話でした。
5分という短い中でも華麗にテストデモまで披露してくださいました。
dz_さんはこの日「DevRel/Japan Conference 2019」のイベントで登壇した後にこちらでも登壇というハードスケジュールでした!(私もDevRelも行きたかった…泣

 

4.「IntuneとWSUSを使ってWindows Updateやってみた。」

スピーカー:ShotaYmmrさん
IntuneとWSUSを使ったWindows Updateが題材ということで
ヘイシャとも親和性が高い内容でびっくりしました。

ITエンジニアになった最初のころに実際に検証された内容ということで真に迫るものがありました。

 

5.「Micronaut on Azure試してみた」

スピーカー:ひらりんさん
資料:

Micronaut on Azure 試してみた

題名の通りMicronaut on Azureを試してみたお話で、簡単なコードでWebAPIが作れていました。
現段階では厳しいようなところも言及されていて勉強になりました。

 

6.「Microsoft Learnにコンテンツはどこまでマージされたか?(仮)」

スピーカー:akiyoshiさん
Microsoft Learnには現在676のモジュールがあるそうです!
私もお世話になっています。
コンテンツの統廃合などが激しいようで、リダイレクトされたコンテンツの紹介時のakiyoshiさんがあまりに寂しそうだったのが印象的でした。
常に進化しているMS Learnですので新鮮なうちに触っておきましょう!

 

7.「社内でnon azure勢から脱却をした話」

スピーカー:morihayaさん
AWS/IDCFからAzureに移行している中で感じたことのお話でした。
今回のJAZUGイベントがとても楽しかったようです!

 

8.「新しいAzure資格の体系と内容」

スピーカー:d-takadaさん
MS Learnの話に続き、Azure周りの資格も変化が激しいようです。
私もAzureの資格を取ろうかと思っているのですが、
変化があまりに怒涛過ぎて、勉強しているときや取った直後に廃止とかだと少し悲しいなと思って二の足を踏んでしまいます…ちゃんと更新すればいいんですけどね笑

 

懇親会

スポンサーの東京エレクトロン デバイスさんよりたくさんの食べ物飲み物をご提供いただきました!
ありがとうございます!

懇親会の最中もLT大会が開催され、飛び入りで何名かの方がお話しくださいました。

LTを聞きながらの懇親会は話が弾むのでとても好きです。

 

ノベルティ

今回もノベルティがたくさん用意されてました!
ステッカー、飴、Tシャツ、etc…

なんといっても目玉は東京エレクトロン デバイスさん提供の
イベントオリジナルサーモボトル!!!
素敵デザインはMS MVPの松本典子さんのものです!

Japan Azure User Group 9周年イベントのノベルティデザイン制作を担当しました。 | nrjlog

 

f:id:mitsunooon:20190908222539j:plain

f:id:mitsunooon:20190908222612j:plain

感想

初めてコアメンバーとしてJAZUGに参加させていただき、もうずっとドキドキでした。
朝の集合の時には誰に声をかけてご挨拶したらいいのか全くわからず途方に暮れてたら、足利さんが見慣れない人一人一人にお声をかけていて、そこで救われました。
また、受付の準備や懇親会の準備、撤収作業でもコアメンバーの方々、参加者の方々にお世話になりました。
皆様本当にありがとうございました。

今回のイベントもとても楽しく、学びが多かったので、
今後もJAZUGイベントを盛り上げるお手伝いをしていきたいと思います!