🐨

Power Automateでnpmの新着パッケージを検知し、チャットへ自動で通知する

2024/12/24に公開

この記事は、Microsoft Power Automate Advent Calendar 2024 12月24日担当分の記事です。

npmの特定のパッケージの情報をしっかり追いたいという時、npmのレジストリの更新を検知してチャットに通知する仕組みを作っておくと便利です。

この記事では、Power Automateを使ってnpmパッケージに新しいバージョンがないかをチェックし、チャットツールに通知を送る方法を解説します。

1. はじめに

自動化の全体像

npmにはnpm Registry APIが用意されています。これはnpmパッケージに関する情報を取得するための仕組みで、GETリクエストを通じてパッケージの更新情報や詳細を取得することが可能です。

https://github.com/npm/registry/blob/main/docs/REGISTRY-API.md#get

取得できるパッケージ情報には更新日時などが含まれているため、これを利用して更新の有無を判別します。

自動化の全体の流れは下記の通りです。

  • 定期的にnpm Registry APIを利用してnpmパッケージの情報を取得
  • 更新日時をフローを実行した日付と比較して更新されているかどうかを判定
  • 更新されていたら、チャットに更新されたバージョン番号とURLを通知する

利用ツール・事前準備

  • Power Automate(※Premiumコネクタを使用します)
  • 更新を検知したいnpmパッケージのnpm Registry URL

2. 実装手順

トリガーの設定

Power Automateのホーム画面で「作成」をクリックし、「スケジュール済みクラウドフローを構築する」を選択します。

トリガーの実行頻度は、どれくらいの頻度で検知したいかによりますが、ここでは1日1回に設定していきます。

2-1. HTTPアクションでGETリクエストを送信する

次に、npm Registry APIを利用してnpmパッケージの情報を取得します。

プラスボタンをクリックして、アクションを追加するメニューを表示し、HTTPアクションを選択します。
HTTPアクションは似た名称のアクションがあるため検索では見つけづらいのですが、絞り込みフィルターで「ランタイム」を「組み込み」に設定すると見つけやすくなります。


※アクションではなく、トリガーの「HTTP」もあるのでご注意ください。

HTTPアクションを選択したら、次の項目を設定します。

設定値

項目 設定値
URI https://registry.npmjs.org/{パッケージ名}
Method GET

その他の項目は、今回は空欄で構いません。

2-2. JSONデータの処理

HTTP GETリクエストで取得したJSONレスポンスを「Parse JSON(JSONの解析)」アクションで解析します。このアクションは、ランタイムを「組み込み」に設定すると見つけやすくなります。「Data Operation」を選択し、「JSONの解析」を選択します。

JSONの解析アクションのContentには先ほどのHTTPアクションのBodyの値を選択します。

Schemaは「サンプルペイロードを使用してスキーマを生成する」機能を利用して設定します。

npm RegistryのパッケージのJSONデータは、URLにアクセスして閲覧できます。先ほど設定したURIにアクセスし、JSONデータをコピーしてサンプルペイロードに貼り付け、スキーマを生成しましょう。

npm RegistryのURIhttps://registry.npmjs.org/{パッケージ名}

2-3. 最新のバージョンの更新日時を判定

npmパッケージの最新のバージョン番号は、JSONデータの中のdist-tagのlatestに表示されています。
また、各バージョンの更新日時はtimeプロパティに格納されているので、timeの中の最新バージョンの更新日時を取得し、現在の日付と比較しましょう。

更新日時の取得

Data Operationsの「作成」アクションを選択し、分かりやすい名前を付けて、関数入力画面にします。(条件アクションにそのまま書いてもいいのですが、実行時に値を確認しやすいようにいったん作成アクションに値をいれます)

まず、動的な値から先ほど解析したJSONデータの「Body time」を選択します。数が多いので検索窓に"time"と入力すると見つけやすくなります。

timeプロパティには他のバージョンの更新日時も入っているので、最新バージョンだけを指定します。先ほど入力したBody timeの関数の後ろに?[]を付け、[]内にバージョン名を指定すれば最新バージョンの更新日時が取得できます。

body('JSON_の解析')?['time']?[body('JSON_の解析')?['dist-tags']?['latest']]

更新日時が前日~現在の日付の間にあるか判定

アクションの追加から「条件」アクションを選択し、次の2つをAND条件で設定します。

(1)更新日時が現在の日時の前日以降であること
左辺に先ほどの作成アクションに入れた最新バージョンの更新日時を指定し、演算子は"is greater than"を指定します。右辺は、utcNow()関数を使用して現在の日時を取得することができるので、-1日を加算することで前日の日付を指定します。

addDays(utcNow(),-1)

(2)更新日時が現在の日時より前であること
(1)と同様に先ほどの最新バージョンの更新日時を指定し、演算子は"is less or equal to"を指定します。右辺は、utcNow()関数で現在の日時指定します。

utcNow()

2-4. チャットへ通知

最後にTeamsチャットに通知するアクションを設定します。
条件アクションの「真(True)」で+ボタンをクリックし、Teamsの「チャットまたはチャネルでメッセージを投稿する」アクションを選択します。

通知先のチームやチャネルを指定し、メッセージ部分に最新のバージョン番号(Body latest)を記載します。

5. まとめ

今回は、Power Automateを使用してnpmの新着パッケージを検知し、Teamsに通知する方法を紹介しました。この仕組みを活用すれば、特定のパッケージの更新情報を効率的に検知できますし、通知先をチームで使っているチャットツールにすれば、チーム全体で更新情報を共有することができます。

この記事では通知先のチャットツールとしてTeamsを選択しましたが、通知先をTeams以外にもSlackに通知したり、メール送信で通知するなども可能です。通知先はご自身の使っているツールに変更するなどしてアレンジしてみていただければと思います。

Discussion