初めまして、スプラシアに24卒で入社しました、滝花と申します。
スプラシアのエンジニアチームはドキュメント管理ツールにNotionを利用しています。
最近では、とある開発プロジェクトのチケット管理にも利用しているくらい活用度合いが上がっています。
Notionのチームスペースの中に、技術系イベントの情報を共有できるページがあります。
イベント名や開催日時、URL、概要をメンバーが興味のあるものを見つけ次第記入していくページで、私が普段見つけられなかったイベントでもこのページから知れたイベントがいくつもあります。
今回は、タイトルにもありますように、イベント情報ページの更新をTeamsで通知するツールを作成したので、各ツールでの設定方法や、Teamsのアップデートに伴う修正点についても書こうと思います。
- 目次
ツール作成の経緯
実はこのツールは完成して実際に使用し始めて半年くらい経つのですが、きっかけは1つ上の先輩エンジニアの鳥居さんとの会話でした。
ある日先輩との会話の中で、Notionでイベント情報ページを作ったものの、情報が追加されたことをページに直接アクセスしないと気づけないという話をしました。
私は大学生時代にGASとスプレッドシートやLINE BOTなどと連携させて作業を自動化させるツールを作ったことがあったので、ひょっとするとNotionでもできるのでは?と思い、調べてみました。
すると予想通り、NotionとGAS、GASとTeamsを連携させる記事がいくつも出てきたので、「Teamsに通知してくれるBotを作れそうです!」と上司の安部さんに相談し、実際に作らせていただけることになりました。
ツールの構成
作成したツールの大まかな構成は画像のようになっています。
① GASの関数にトリガーを設定し、毎日午前9〜10時の間に実行するようにしています。
② 実行された関数(checkNotionUpdates)が指定したNotionのDBのデータを取得し、最新更新日時が24時間以内のアイテムだけ抽出します。
③ 抽出したアイテムからイベント名や開催日時、URLなどのプロパティをそれぞれ変数に格納してメッセージを作成しTeamsに送信します。
次から手順やコードを説明していきます。
Notionのインテグレーションを作成する
https://developers.notion.com/にアクセスし、右上の「View my integrations」→「新しいインテグレーション」へ進みます。
名前の入力、どのワークスペースで作成するかなどを設定して保存を押して、詳細の設定に進みます。
機能ではこのトークンでできることを設定できます。今回は次のように設定しました。
・コンテンツ機能:DBの読み取りだけなので、「コンテンツを読み取る」にチェックを入れる
・コメント機能:使用しないのでチェックを入れない
・ユーザー機能:誰が書いたか、などは実装しないので「ユーザー情報なし」にチェックを入れる
保存を押して、「内部インテグレーションシークレット」を表示するとコピーできます。
NotionでDBを作成してIDを取得する
Notionでイベント情報を登録するDBを作成します。
今回のDBは次のようなカラム構成にしました。
◼️DBのカラム名(プロパティの種類)
・イベント名(タイトル)
・開催日時(日付)
・URL(URL)
・開催場所(マルチセレクト:オフライン/オンライン)
・概要(テキスト)
・カテゴリ(マルチセレクト)
・最終更新日時(最終更新日時)
先ほど作成したインテグレーションのシークレットの他に、NotionのDBのIDが必要になります。
これは、NotionのDBをフルページで表示させたときのURLの”.so/”の後から”?v=”までの間の英数字の部分です。
Power Automateのワークフローを作成する
Teams側に送られてきたメッセージを表示する機能を作成します。
この機能は今まではTeams上でコネクタの「Incomming Webhook」を設定するだけで良かったのですが、2025年に廃止される発表を受け、代替手段として案内されているPower Automateでワークフローを設定する手順を書きます。
参考にさせていただいた記事はこちらになります。
▶︎Qiita:TeamsのIncomming Webhookコネクタが廃止されるようなのでPowerAutomateのワークフローに移行してみる
Power Automateのトップページから「テンプレート」を選択し、「webhook」と検索します。
すると、画像のような結果が出ますので「Webhook要求を受信するとチャンネルに投稿する」を選択します。
テンプレートが読み込まれたら、下図の①の箇所を選択し、投稿先のチームとチャンネルを設定します。
すでに「@」が入力されていますが、消してから再度テキストボックスを選択すると選べるようになります。
チームとチャンネルを設定したら一度保存をします。
その後、下図の①の箇所を選択するとWebhook URLが生成されます。
シークレットやWebhookURLなどをGASに登録する
前の手順までで作成したインテグレーションのシークレットとWebhookのURL、NotionのDBのIDをGASのプロジェクトに登録していきます。
GASのプロジェクトはGoogleドライブで左上の「新規」->「その他」->「Google Apps Script」から作成できます。作成したら、左の歯車アイコンから「プロジェクトの設定」を開きます。
ページ下部の「スクリプトプロパティ」にシークレットなどを登録できます。ここに登録したプロパティはソース上で次のよう記述することで取得できます。
これらを下図のように登録します。
登録したら「スクリプト プロパティを保存」をクリックします。
GASのコードを書く
全てのコードを貼って解説すると、とても長くなってしまうので、Teamsに送信する部分のコードをピックアップしました。
実際に作成するときにはChatGPTにお世話になったので、実際に作成される際には聞いてみてください。
まずは44行目でDBから取得してきたアイテムが引数で渡ってきます。このときにはすでにDBにアイテムが追加されてから24時間以内のものが抽出されています。
49〜54行目で取得したアイテムからそれぞれのプロパティ(カラム)の値をそれぞれの変数に格納しています。それぞれのプロパティが空欄だったときの値も設定しています。
50行目のformatDateRangeは日付のフォーマットを整えるために作成した関数ですが割愛させていただきます。
60〜79行目は以前、TeamsのIncomming Webhookで送信するときに書いたコードから、Power Automateのワークフローで作り直した際に修正した箇所になります。こちらも先ほどのPower Automateのワークフローでご紹介した記事の中のコードを参考にさせていただいています。
トリガーを設定する
左の目覚まし時計のようなアイコンをクリックして、右下の「トリガーを追加」を押してトリガーの設定画面を開きます。
実行する関数に「checkNotionUpdates」、イベントソースに「時間主導型」を選択します。
時間ベースのトリガータイプに「日付ベースのタイマー」、時刻を「午前9時〜10時」で選択することで、毎日午前9時〜10時に関数を実行してくれます。
上記のように設定する場合、下図のようになります。
保存を押して、画面を閉じます。
終わる前に、実際に問題なく動くかの確認をします。
エディタ画面にもどり、画面上部で下図のようにトリガーで設定した関数を選択し、実行を押します。
問題なく動作する場合、指定したチームのチャンネルにこのようにメッセージが投稿されます!
必要最低限の機能のみを実装したというような感じなので、もっとカスタマイズができると思いますが、どうやらアイコンや投稿者名の変更ができなさそうです(Power Automateのワークフローの中でも探しても見つかりませんでした…)。
もし変更できないとすると、以前のIncomming Webhookではアイコンと投稿者名を変更できたので少し残念です。
最後に
新卒で入社して2〜3ヶ月ほどで、社内のチームで使われるツールを作成させていただけるという、貴重な経験をさせていただきました。
NotionとGASはとても相性がいいと思っていて、Notion側のアップデートもペースが早いので、Notion APIを活用してちょっとした便利ツールをこれからも模索していきたいと思います!
また新しいツールを作ったらこちらのブログで紹介できたらと思います!