Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

LogicApps:配列のフィルターアクションでORなどの複合条件を作る

LogicApps の配列フィルターのアクションをよく使うんですが、OR条件とかAND条件とか使いたくなるときがありますよね。

f:id:sugimomoto:20210126232620p:plain

docs.microsoft.com

何度か使ってるので、書き残しておこうと思います。

通常の使い方

通常は配列の要素を「Item()」で取り出して、判定します。

配列にオブジェクト要素が入っていれば、「Item()['ObjectName']」で取り出します。

あとは条件を書くだけ、というシンプルなものですね。

例えば、以下のような設定であれば、

f:id:sugimomoto:20210126232637p:plain

こんな感じの結果になりますね。

f:id:sugimomoto:20210126232643p:plain

ただ、このフィルター条件、初期のUIだと一つしか条件を記述することができません。

そこで、詳細モードが利用できます。

詳細モードの使い方

詳細モードの使い方は単純です。配列の要素が一つ一つ取り出されて条件にかけられるものなので、その一つ一つに対して「True」か「False」を返すだけです。

なので、equalsやcontaincsなどの論理比較関数を使って結果を返すのが通常の使い方です。

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#equals

さっきと同じ条件の書き方が以下のようになります。

@equals(item(), 3)

f:id:sugimomoto:20210126232655p:plain

最終的に「True」として判定されたものだけが、結果の要素として取り出すことができます。

AND・OR条件の書き方

詳細モードの使い方がわかっていれば、そんなに難しいことはありません。シンプルにand・or の関数が利用できます。

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#and

https://docs.microsoft.com/ja-jp/azure/logic-apps/workflow-definition-language-functions-reference#or

例えば、[1,2,3,4,5] の配列のうち、「3」もしくは「4」に一致する場合のみ抽出したい場合は、以下のように記述します。

@or(equals(item(), 3),equals(item(), 4))

f:id:sugimomoto:20210126232703p:plain

f:id:sugimomoto:20210126232712p:plain

これで、and条件も同様に記述できます。

and or をネストさせれば、さらに細かな複合条件も書けますが、あとは見渡し次第かなと思います。

参考

関数が書きづらい、といった場合には複数のフィルターアクションを作ることでも実現できます。

以下のHiroさんのブログが参考になると思います。実現することは一緒なので、お好みのやり方でどうぞ。

mofumofupower.hatenablog.com

LogicApps で追跡対象プロパティを利用して Log に任意のデータを出力する方法

LogicApps のデバッグって結構面倒ですよね。

四六時中実行しているようなフローを作成すると、時々どんな処理を得ているのか、外部からどんなデータを取得して、実行結果がどうなったのかをもう少しうまく把握したいシチュエーションがあります。

でも、LogicAppsの実行結果って成功か失敗かしか判別できず、細かな詳細を見たいときは一つ一つ実行結果を開いて確認する必要があるんですよね。

f:id:sugimomoto:20210108225035p:plain

これがAzure Functionsとかなら、Azure Monitor(Log Analytics)にでもデータを出力するのに! と考えていたら、

そこで最近知った良い方法が 以下のLogicApps でのログ出力で追跡対象プロパティを設定するというものです。

https://docs.microsoft.com/ja-jp/azure/logic-apps/monitor-logic-apps-log-analytics#view-logic-app-runs-status

これを使うことで、各アクションの実行結果もしくは入力データや固定メッセージをLog Analyticsに出力して、結果を分析しやすくなります。

前提条件

この機能は予めLogicApps をLog Analyticsワークスペースと紐付けて置く必要があります。

f:id:sugimomoto:20210108225042p:plain

以下のWorkflowRuntimeを設定しておきましょう。

f:id:sugimomoto:20210108225050p:plain

追跡対象プロパティの設定方法

追跡対象プロパティは各アクションの「設定」から登録します。

f:id:sugimomoto:20210108225055p:plain

以下の部分ですね。

f:id:sugimomoto:20210108225101p:plain

追跡対象プロパティは大きく分けて2つの設定方法があります。

一つは単純に固定メッセージを常に出力する方法です。

左側にProperty名、右側に出力メッセージを指定します。

f:id:sugimomoto:20210108225110p:plain

もう一つは各関数を利用して動的に出力する方法です。

docs.microsoft.com

例えば対象のアクションに設定された値や出力結果の値をログに出力したい場合は「@action()」で取得できます。

「@action()」以降は入力(Inputs)と出力(Outputs)の2つのオブジェクトに別れて、

f:id:sugimomoto:20210108225117p:plain

その後、それぞれのオブジェクト(未加工出力の表示)のデータにアクセスできるようになります。

f:id:sugimomoto:20210108225124p:plain

例えば、上記のHTTPアクションの出力結果のステータスコードを追跡対象プロパティとしてログに吐き出したい場合は

「@action()['outputs']['statusCode']」になりますし

「@action()['outputs']['body']['args']['foo1']」といった形でレスポンスボディにアクセスすることも可能です。

f:id:sugimomoto:20210108225132p:plain

出力結果の確認方法

出力結果はログの「AzureDiagnostics」から確認できます。

f:id:sugimomoto:20210108225139p:plain

デフォルトでは項目が表示されないので「trackedProperties_XXXXX」で出力したプロパティ名を指定します。

f:id:sugimomoto:20210108225149p:plain

項目を表示すると、以下のように結果が出力されていることが確認できます。

f:id:sugimomoto:20210108225212p:plain

2020年 の活動棚卸しと 2021年 の方針をまとめてみる

あけましておめでとうございます!

去年・一昨年と継続している1年の活動の棚卸しと、2021年の方針を今年もまとめてみたいと思います。

kageura.hatenadiary.jp

kageura.hatenadiary.jp

2020年の活動棚卸し

Blog

例年通りであれば、このBlogの状況を棚卸しするのですが、2020年はこのMorning Girl Blogよりも、会社Blogにフォーカスしていました。

なので、2019年の「51件」と比べて「20件」と30件以上少ない件数になっています。

ただ、会社Blogは2019年「33件」に対して、今年は「125件」で大きく増加!初めて1年間で100件以上の記事を投稿しました。ちなみに2020年 会社Blogの全メンバー投稿数は297件だったので、40%ほどを投稿していたようです。

www.cdatablog.jp

流石に具体的な数字は出せないですが、会社BlogのPVも前年比300%近くの増加という結果を残すことができ、とても良かったです。日々の積み重ね、継続的なコンテンツの作成はすぐには目に見えた効果は産まないですが、大事な要素ですね。

自分のBlog PVは流石に落ちました。平日であれば1日あたり700PVほどでしたが、今は500〜600ぐらいといったところです。まあしょうがないところではあります。

f:id:sugimomoto:20210101152013p:plain

また2020年はBlog関連活動として、Qiita アドベントカレンダーのWeb APIカテゴリを立ち上げました。

qiita.com

当初はどのくらい人が集まるか不安でしたが、終わってみれば購読者数149件と全体ランキングの中でも14位となる素晴らしい結果を残すことができました!記事も多種多様なものが集まって、とてもありがたかったです。

ちなみに、2020年に書いたBlogの中で人気だった記事は以下の4つです。

Horizontal SaaS APIの調査は個人的に最も力を入れた記事であり、調査だったので、はてなブックマークTwitterそれぞれでとても良い評判をいただけたのが良かったですね! 

なぜそのAPIは使われないのか? といったコラム記事も想定より良い評判・アクセス数があってよかったです。

www.cdatablog.jp

www.cdatablog.jp

kageura.hatenadiary.jp

kageura.hatenadiary.jp

TwitterSNS

SNSはほぼTwitterに絞った感じになりました。継続的に続けているのはAPIに関する投稿ですね。主に各社のAPI関連プレスリリースの取り上げや触ってみたAPIなどに関してツイートしました。

twitter.com

ちなみに、API関連のツイート数は12月16日時点で1453件、およそ1500件ほどAPIAPI!とツイートしていたようでした。去年が1165件ほどだったので、なかなか良い具合に伸びていたようです。

もともと2020年は1500件を目標にしていたので、あまり意識していなかったのですが、結果的に達成することができました。

それに、ずっとやりたかったAPI関連ニュースのまとめも、このTwitterAPI投稿をまとめることで、実現することができました。

www.cdatablog.jp

コミュニティ・イベント

Blogをがんばった分、コミュニティやイベント関連での登壇は控えめとなり、 2019年は19のイベントで登壇を行っていましたが、2020年は5件ととても少なくなりました。

それとコロナで各種イベントには参加しやすくなったものの、どちらかと言えば家庭優先を心がけたので、通常参加もそこまでしませんでした。

主な登壇イベントは以下の通り。

lets-go-study-meeting.connpass.com

sendai-lt.connpass.com

power-platform.connpass.com

toyama-eng.connpass.com

dotnetlab.connpass.com

ただ、お仕事関連で登壇することがいくつかあってそれはとても良い経験となりました。社外とのコラボレーションが広がっていますね。

www.cdatablog.jp

autifyjapan.connpass.com

また、登壇そのものは少なかったのですが、Blog記事・スライド・API検証などとの組み合わせでしっかりと相乗効果を狙い打ち出せたのも良い傾向でした。(ビジネス面もしかり)

個人的には勉強会に向けて準備するのではなく、結果的に勉強会で出せるだけのネタがすでにBlogなりで用意されているというのが理想です。そこにいくつかの取り組みでは近づけたかなと。

API 検証関連

2020年も数多くのAPIを検証しました。API仕様書を見た数であれば、Horizontal SaaS APIの調査レポートのおかげで、300件近くに登ります。

ちなみに、2019年のPostman Collectionの数は49件で、現在のPostman Collectionを数えてみたところ、138件 となっていました。

そのことから、2020年で実際に手を動かして検証したAPIは89件ほどだったようです。(若干重複しているものもありますが)

CData Driverと組み合わせたものは60件ほどでしょうか。正式にリリースしたものは以下のプレスリリースでも取り上げてもらっています。

www.cdata.com

この取り組みはAPI検証からDriver化、そして提供企業へのコンタクト、マーケティング協業の調整とほとんど担当していたので、良い経験となりました。その中でAPI提供企業の課題感、難しさみたいなものも垣間見えたのが興味深かったです。

また、個人的な取り組みとしては、各SaaS APIのエコシステムの促進を外部から働きかけてみようということをやっていました。

例えば、以前からもやっていた APIの使い方・ファーストステップ記事は今年も色々と書きました。

www.cdatablog.jp

www.cdatablog.jp

また、スマレジのAPIエクスプローラーを作ってみたり

kageura.hatenadiary.jp

非公式の Postman Collection を作って公開するといったこともしていました。

github.com

Tesla API に関しては、PowerAutomete・LogicAppsなどで利用可能なカスタムコネクターも公開してみました。

github.com

直接的にビジネスに繋がるというわけではないですが、APIカルチャー・ビジネス全体の隆盛につながればいいなと思い、引き続き取り組んでいきたいところです。

英語

今までもちまちま英語の勉強はしていたんですが、2020年は継続的に英語学習に取り組むことができました。

特に今年前半に購入した iPad Air が大活躍! 文字を書くのが苦手な私にとって、タイピングは自分の理解力促進と記憶への定着のために重要な要素なのですが、iPad Air とキーボードは最良のツールでした。

このおかげで、毎朝20〜30分ほど、アプリで継続的に学習する習慣が身について、1年間ほぼ毎日取り組むことができました。

アプリは最初に「Duolingo 」で基礎的な部分を網羅。

www.duolingo.com

f:id:sugimomoto:20210101154728p:plain

ただ、10月ぐらいですべての科目をコンプリートしたので、現在はiKnowに切り替えています。iKnow はとにかく Sentence Trainer の歯ごたえがあって、いい感じです。例文も幅広いのがいいですね。

iknow.jp

f:id:sugimomoto:20210101154756p:plain

途中、Eigooo! という英語教師の方々とチャットでコミュニケーションを取りながら、学習できるサービスも試したんですが、講師の固定ができず、コミュニケーションの取り直しが発生してしまうのが面倒で1ヶ月でやめました。

www.eigooo.com

以前少しやっていたスタディサプリはタイピング問題が無い感じなので、保留中。iPadにアプリ対応していないので、やめておきましたが、今調べたらブラウザからも行ける感じ? もしかしたら、2021年はやるかもしれないですね。

app.eigosapuri.jp

健康

英語と合わせて、今年大きく力を入れて、成果を発揮したのが健康面でした。

IT関係の仕事をはじめてからというもの、頭痛・肩こりは年々ひどくなり、2019年は腰痛も出てきて、月に2,3回はゲロゲロ状態になり平日だと仕事にならないこともままありました。

また、2018年・2019年は出張も多かったので、体重もどんどん増えて、90キロの大台に・・・。2016年ごろは75キロだったので、恐ろしい増加ですね・・・。

というわけで、運動をはじめました。ただ激しい運動は継続できない、目標を立てて計画的に取り組むのは苦手、食事制限なんてしたくないし無理やり抑え込むとストレスが溜まる、という怠け者極まりない人間なので、今年はとにかく痩せようとか、筋肉をつけようとか、そんなことの前に、運動習慣を付けようということだけにフォーカスしました。

とりあえず最初にとっかかりとして始めたのは、ヨガ。近くでプライベートレッスンをやってくれるところがあったのと、空中ヨガって面白そう、ネタになりそう、という安易な考えではじめましたが、結果的にこれが一番良かったです。

butch-yoga.com

1週間に1回ペースではありましたが、プライベートだったので自分の低レベルに合わせて内容を調整してくれたのがとても良かったですね。途中コロナウイルスの影響で現地からOnlineベースに移行しましたが、1年間無事継続することができました。

それと、5月の一時給付金でフィットネスバイクを買ったんですが、これがめちゃくちゃ良かったです。

家から出るのが億劫なインドア派人間であり、さらにコロナの影響でWFHな自分にとって、自宅で手軽に開始できる有酸素運動器具は、体を動かし始めるための第1ステップとしてめちゃくちゃ機能しました。買ったばかりのiPad Airを載せて、動画を見ながらできるのも大変良いですね。

これでヨガと合わせて最終的に体重は10キロ減。肩こり・腰痛・頭痛も驚くほど改善しました!

2021年はどうしようかな

Blog

2020年は140件ほどの投稿だったので、200件くらい投稿できればいいなと思っています。

こちらも引き続き会社のBlogがメインになるとは思いますが、個人的に取り組んでいるTesla API連携プロジェクトなどは個人活動としてこっちのBlogで公開していく感じかなと思います。

また、どうしても会社の製品連携が中心になってしまいますが、最近APIそのもののアップデート・変更トピックもしっかり追っているので、APIの基本的な使い方のみならず、そういった細かなアップデートトピックも捉えながら、書いていきたいところです。

TwitterSNS

引き続きAPIに関する投稿は続けていきますが、もう少し海外のAPI News・Topicも取り上げていきたいところです。

現在 Google Alertはてなブックマークを活用して情報収集していますが、アンテナの貼り方を変えようかなと考えています。

www.google.co.jp

Google Alertを見る習慣ができているので、そこにうまく外部ソースも交えていきたいところ。ここは仕組みづくりから考えていきたいところですね。

API関連ツイート・1500というのは悪くない数字だと思っていますが、単純に数値目標を上げるというよりは、仕組み・アンテナ作りで改良を重ねたいかなというところ。それで結果的に2000いけば良いかなと思っています。

コミュニティ・イベント

2020年は初めから絞っていこう、と思って結果的に絞った感じでした。今年もどちらかと言えばコンテンツファースト精神で、Blogや発表に耐えるネタを日々作りつつ、発表できる場があれば、そこに乗っていくという方針かなと思っています。

とはいえ、10件くらいが目標でしょうか。

API

2021年も引き続きAPI検証・トライアルは活発にやっていきたいところですが、方向性としてはもう少しAPI開発・マイクロサービス側・認証周りにも舵を取りたいなと思ったりです。

今までの方向性としてどちらかと言えば、すでに公開されているAPIの「活用」を主眼に置いていたので、「開発」の部分にも力を入れたいところ。

また、何かしらAPIエコシステムに寄与できるコンテンツ(SDK・Postman Collection・コネクタ)も引き続き追加できればなと。

Tesla API は引き続き色々と実験していきたいですね。

英語

iKnowを継続してやっていく予定ですが、徐々にオンライン英会話も交えていこうかなと考えています。あと今年は英語Blogのアウトプットにも取り組んでみたいところですね。

あと今まであまりにもレベルが違うと思って、試してなかったTOIECにも一度は挑戦してみたいなと思っています。(私のレベルからすると英検からでもいいくらい)

健康

ヨガは今年も継続したいなーと思いつつ、筋力アップにも少しづつ力を入れていきたいところ。体重は75キロとかになると嬉しいですが、まああまり気負いはせずに、今年同様1年間運動習慣を継続できればそれで良いです。

あとなんか特に大きな理由は無いんですが、逆立ちができるようになりたいなと思っています。

Tesla API のデータをリアルタイムで可視化:Azure LogicApps & Power BI ストリーミングデータセット

f:id:sugimomoto:20201130205742p:plain

先日開催された .NET ラボで Tesla APIのセッションを行ったのですが、その中で Tesla API のデータをリアルタイムで分析するセッションが好評でした!

dotnetlab.connpass.com

以下のツイートでも動画を公開しています。

内部的には Azure のローコードサービス・iPaaS である LogicAppsと BIツール・Power BI を利用しているので、特に難しい処理は意識せず実現できるようになっています。

というわけで、この記事ではその作り方を紹介します!

ちなみに Web API アドベントカレンダー1日目の記事です!

qiita.com

  • なぜこんなことをしたの?
  • 必要なもの
  • どうやってやるの?
  • Power BI ストリーミングデータセットの作成
  • Power BI ダッシュボードの構成
  • LogicApps の作成
  • 実行
  • 参考
続きを読む

Tesla API のカスタムコネクタを公開しました PowerApps/PowerAutomate/LogicApps

先日公開した Tesla API の Postman Collection に続いて、今度は Microsoft PowerApps/PowerAutomate/LogicApps 用のカスタムコネクタを公開しました!

github.com

これでローコード・iPaaSでも、Tesla APIを存分に楽しめます!

使い方

使い方は簡単です。Githubで公開しているので、カスタムコネクタ画面の「URLからOpenAPIをインポートします」で、取り込むことが可能です。

f:id:sugimomoto:20201128094021p:plain

任意の名称を入力し、以下のURLを貼り付けて、インポートしてください。

https://raw.githubusercontent.com/sugimomoto/TeslaAPICustomConnector/main/TeslaAPICustomConnector.json

f:id:sugimomoto:20201128094029p:plain

あとは、お好みのアイコンを設定すればOKです。

f:id:sugimomoto:20201128094036p:plain

セキュリティや

f:id:sugimomoto:20201128094043p:plain

定義情報をいじる必要は特にありません。「コネクタの作成」をクリックして、登録できます。

f:id:sugimomoto:20201128094051p:plain

認証・テスト方法

認証方法はAccess TokenをAuthorizationヘッダーに指定する方式を採用しています。

小難しいことを言うと、Tesla APIはOAuth 2.0のPassword Grantを使用しているので、Access Tokenの取得は任せることができません。(頑張ればできなくもないですが)

なので、Access Tokenは前回の記事 を参考に手動で取得しておきましょう。

取得後、「新しい接続」を開き

f:id:sugimomoto:20201128094105p:plain

APIキーの項目に取得したAccess TokenをBearer込みで指定します。

Access Token が「qts-12345」なら「Bearer qts-12345」と、頭にBearerをつけて入力してください。

f:id:sugimomoto:20201128094113p:plain

あとは任意のアクションを実行できます。一番最初はVehiclesなどで、車両IDを特定するのが良いでしょう。

f:id:sugimomoto:20201128094121p:plain

なお、Access Tokenは45日間有効です。

作例

このカスタムコネクタを使って、毎日テスラのデータ収集と、バッテリーの使用状況の可視化を行ってます。

f:id:sugimomoto:20201128100224p:plain

私は自宅に充電設備が無いので、どのくらいバッテリーを日々消費しているか可視化するのは、次の充電タイミングの予測のためにもとても便利です!

f:id:sugimomoto:20201128094739p:plain

終わりに

全部のエンドポイントをカスタムコネクタで叩いてみたわけではないので、色々と調整が必要な部分もあると思います。

何かあれば、GithubのIssueまで連絡ください。

github.com

Tesla API の Postman Collection を公開しました

mainimage

前回の記事 でTesla APIの使い方について解説したんですが、実は内部ではせっせと Open API Specを書いていまして、それを元に Postman Collectionを作ったので、公開してみました。

通常のOpen APIをインポートして使うよりも、若干設定をいじってあるので、使いやすいと思いますl。

github.com

Open API ももうちょっと綺麗にしたら公開予定。

Githubにも使い方を書いていますが、英語なのでこちらでは日本語で。

  • Collection と Environmentのインポート
  • Environment の設定・Access Tokenの取得
  • Tesla Id を特定
  • 終わりに
続きを読む

Tesla API の検証環境(物理)が手に入ったので、改めて Tesla API の使い方を解説してみる

今年の1月にこんなエントリーを書いたわたくしですが、

kageura.hatenadiary.jp

5月に少し気を失っていたら、以下のような画面が iPad に表示され

9月末にとうとう Tesla API 検証環境(物理)が届いてしまいました。

上記エントリーでは、ダミーデータを返すモック環境のAPIだったので、常にバッテリーが減らない、いくら操作をしても壊れない夢のような(そしてちょっと寂しい)テスラだったのですが、ちゃんとバッテリーが減るAPIとして試すことができるようになりました!

というわけで改めてこのTesla APIの使い方を解説していきたいと思います!

  • そもそも Tesla API とはなんなのか?
  • Tesla API のちょっと気をつけたいこと
  • Tesla API はどんなことができるの?
  • Tesla API のここが面白い!
  • Tesla API の使い方
    • 認証方法
    • Product IDの特定
    • Tesla の起動
    • 車両のデータを取得してみる
    • ライトの点灯
  • おわりに
続きを読む