7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事は、Ateam Finergy Inc. × Ateam Wellness Inc. のカレンダー | Advent Calendar 2023 - Qiita の15日目の記事になります

本日は、@tommy1038 が担当いたします

はじめに

今年の中頃に、Notionから「Notionプロジェクト」が、発表されました

プロジェクト&タスク | Notion (ノーション)テンプレート は、Notion公式が出してくれており、とても使い勝手が良きです

ですが、プロジェクトとしてタスクを進めていくにあたり避けて通れないのは、言わずもがな「進捗管理」ですよね

なので本記事では Make | Automation Software というノーコードで作業の自動化を構築できるアプリを用いて、進捗管理の助けになる通知の仕組みを作りたいなーと思います

この記事のターゲット

  • Notionでプロジェクト管理したい/している人
  • Slackでタスクの通知をしてほしい人
  • Makeでの自動化を試したい人

結論

先に結論ですが

MakeでNotionプロジェクトの直近1週間以内の未着手タスクを週次でSlackに通知する

を行います。設定のスクショとGIFを下記にまとめてみますので、振り返りなどの際にご覧ください

全体像

image.png

各種GIF

Kapture 2023-12-15 at 00.35.47.gif

Kapture 2023-12-15 at 00.45.51.gif

Kapture 2023-12-15 at 00.49.28.gif

Kapture 2023-12-15 at 00.49.55.gif

では順をおって説明していきます

目次

  1. 下準備
  2. NotionとMakeの紐付け
  3. SlackとMakeの紐付け
  4. リマインダーの作成
    4.1 本日~1週間後までのタスクを抽出する
    4.2 未着手のタスクを抽出する
    4.3 担当者にメンションできるようにする
    4.4 メッセージを1つにまとめる
    4.5 タスク数によってメッセージを変える
  5. スケジューラの設定
  6. Q&A

1. 下準備

下準備として Slack・Notion・Makeのセットアップが必要になりますので、それらができていればOKです

私が0から記載するより下記の記事が画像が多くとても参考になりましたので、そちらをご覧いただけるといいかなと思います

また、NotionとMake、SlackとMakeの紐付けがある程度わかっていれば 次の2つの章は読み飛ばしてもらっても問題ありません

2. NotionとMakeの紐付け

では NotionとMakeの紐付けを行っていきましょう

  1. Scenariosから[+ Create a new scenario]をクリック
  2. +ボタンを押すと Search applicationsとなるので Notionを選択
  3. データベースのタスクを抽出しようと考えているので [DATABASE/PAGE] のSearch Objectsを選択
Notionを選択 Search Objects を選択 Notionの詳細設定
スクリーンショット 2023-12-09 3.42.38.png スクリーンショット 2023-12-09 3.42.58.png スクリーンショット 2023-12-10 1.24.33.png

では次に、Notionのコネクションの設定に移ります

  1. Connectionのセクションで Addをクリックし Connection typeNotion Internalを選択する
  2. Connection name は自由に入力
  3. Internal Integration Token を入力(※)

Internal Integration Tokenという、ちょっとなんだろうというワードが出てきました
こちらは インテグレーション のページからインテグレーションを作成し、そのトークンを入力すれば問題ありません。下記画像の シークレットをコピーして入力してください

基本情報 シークレット 機能
image.png image.png image.png

(基本情報作成時の [送信ボタン] がわかりづらいですよね)

これで、トークンを入力してコネクションが反映されればOKです

では設定を続けていきます

  1. Search ObjectsDatabase Items を選択
  2. Database IDを入力(※)

Database IDについてです。プロジェクト&タスク | Notion (ノーション)テンプレート を用いるとタスクテーブルができているはずです

ここで リンクをコピー すると、URLが得られます(例: https://www.notion.so/{database_id}?v=*****&pvs=*

image.png

このhttps://www.notion.so/から?までの部分がデータベースIDになります

これでデータベースIDを手に入れたので 設定に追加します

この時 Database ID を入力してもFilterで絞り込みをするプロパティを選択できません

下記のように コネクトの追加 で、さきほどのインテグレーションを追加しておく必要があります。設定漏れがちなのでご注意ください

コネクトの追加ができていれば、画像のようにFilterで絞り込むプロパティを選択することができるようになります

これで一度、左下のRun onceをクリックして実行してみましょう

scenarioの画面 値の確認
 スクリーンショット 2023-12-09 4.00.48.png   スクリーンショット 2023-12-09 4.03.16.png 

二つめの画像のように、アプリケーションロゴの右上のアイコンから値を確認できればOKです

ちなみに、scenarioの画面の フロッピーディスク(?)のようなアイコンが保存ボタンになります。scenarioの作成をしている際、保存を忘れて何度か痛い目を見ているので、頻繁に保存ボタンを押すことをおすすめします

3. SlackとMakeの紐付け

続いて SlackとMakeの紐付けを行いましょう

  1. Notionのアイコンの右側でAdd another moduleをクリック
  2. Search applicaitonsSlackと入力し、Slackを選択
  3. Slackにメッセージを連携したいので [Messages] からCreate a Messageを選択
モジュールの追加 Slackを選択 Create a Messagegeを選択
スクリーンショット 2023-12-10 9.47.01.png スクリーンショット 2023-12-10 9.47.23.png スクリーンショット 2023-12-10 9.47.44.png

では次に Slackのコネクションの設定に移ります

  1. ConnectionのセクションでAddをクリックし Connection typeSlack (bot)を選択する
  2. Connection nameは自由に入力
  3. [Save]をクリックすると、「Integromat が NotificationSample Slack ワークスペースにアクセスする権限をリクエストしています」の画面になるので許可する
Connection type Connection name 権限のリクエスト
スクリーンショット 2023-12-10 9.57.07.png スクリーンショット 2023-12-10 9.57.19.png スクリーンショット 2023-12-10 9.58.54.png

Connection typeは、BotからのメッセージにするためにSlack (bot)を選択します
権限許可の箇所でIntegromatと表示されますが、Makeの名前になりますので問題ありません

Makeの前の名称がIntegromatだったようで、「Integromat」のキーワードで調べると もう少し情報が得やすいらしいです
(検証はしておりません)

設定を続けていきましょう

  1. Enter a channel ID or nameSelect from the listを選択
  2. Channel typeを選びます(今回は通知チャンネルとしてpublicで用意しているので Public channelを選択)
  3. Public channelをプルダウンで選択(今回は、test-notificationを選択)
  4. Texthogeと入力して、OKをクリック

これで準備ができたので、疎通確認をしましょう
Run onceで実行して、Slackに6回hogeが来たらOKです

Slackの詳細設定 Slack画面
スクリーンショット 2023-12-10 10.10.54.png スクリーンショット 2023-12-10 10.18.20.png

4. リマインダーの作成

それぞれの紐付けが完了しましたので、やりたいリマインダーを作成していきましょう

4.1 本日~1週間後までのタスクを抽出する

結論としては、Filterの設定は下記の通りです

  1. 期限(Date)を選択、Date: On or afternowを入力(nowは「Date and time」から選んでください)
  2. 期限(Date)を選択、Date: On or beforeaddDays(now; 7)を入力(addDays(;), nowは「Date and time」から通常入力でOKです)

こちらの設定でタスクテーブルに対して 「今日よりも後の日」かつ「今日の7日後よりも前の日」のタスクを絞り込むことができました

4.2 未着手のタスクを抽出する

NotionモジュールとSlackモジュールを繋ぐ線の中で、スパナーのアイコンをクリックします

下記のようにフィルターを設定していきましょう

  • Label: 未着手(自由に設定してください)
  • Condition:
    • {{1.properties_value.ステータス.name}}
    • Text operators: Equal to
    • 未着手
スパナーをクリック > Set up a filter フィルターの設定
スクリーンショット 2023-12-11 22.34.30.png スクリーンショット 2023-12-11 22.36.00.png

この設定で実行すれば、フィルターの箇所に数字が入り フィルターアイコン(ホバーすると虫眼鏡アイコン)をクリックすると詳細を確認することができます

実行後 詳細
スクリーンショット 2023-12-11 22.53.35.png スクリーンショット 2023-12-11 22.53.44.png

こちらの設定で、タスクテーブルに対して 未着手のタスクを絞り込むことができました

4.3 担当者にメンションできるようにする

では次に、担当者にメンションして通知できるようにしていきましょう

Slackでメンションをするためには @Tommy1038 という文字列ではなく、SlackのユーザーIDが必要になります。SlackのユーザーIDは、下記画像のようにメンバーIDをコピーで取得できます

無事ユーザーIDが取得できたと思いますので、次に進みます

タスクテーブルとは別で、下記のようなユーザーテーブルを作成します。SlackのユーザーIDですが、Notion側ではわかりづらいので SlackID という名前にしています(なお、今後楽をするために、@をつけています)

ここで忘れがちなのが ユーザーテーブルに対してもコネクトの設定をしてあげてください

すでにタスクテーブルで行っている下記の設定ですね

これで準備OKです。次の手順で新たなプロパティを定義します

  1. タスクの新規プロパティからリレーションを選択して ユーザーを選択します
  2. 名前を入力し リレーションを追加をクリック
リレーションのテーブル選択 リレーションの詳細設定
スクリーンショット 2023-12-12 0.17.23.png スクリーンショット 2023-12-12 0.17.38.png

これでタスクのプロパティとして、ユーザーを選択できるようになりました

では次に、SlackID(SlackのユーザーID)を取得しましょう

  1. タスクの新規プロパティからロールアップを選択
  2. リレーションとしてユーザーを選択
  3. プロパティでSlackIDを選択
ロールアップを選択 リレーション先の選択 プロパティの選択
スクリーンショット 2023-12-12 0.23.14.png スクリーンショット 2023-12-12 0.28.01.png スクリーンショット 2023-12-12 0.25.06.png

これで、タスクのプロパティとして ユーザーを介してSlackIDを取得することができました。これにより、新たにユーザーが増減した場合でもユーザーテーブルに名前とSlackIDを入力すれば簡単に管理することができます

このやり方でなくても、関数を定義して泥臭くif文を書けば実現はできるのですが、新しいメンバーが追加された時やメンバーが抜けた時などにif文の修理が属人化を招く危険性があるので、別テーブルに切り出す対応を行ってみました

あとは本題の SlackIDを用いてメンションさせるようにしましょう

makeの設定画面 実行結果
image スクリーンショット 2023-12-12 0.41.06.png

今回は「タスク名」と「メンバー」を連携させてみました。メンバーのプロパティでメンションさせるために<>で囲ってあげてください

こちらの設定で、担当者にメンションを飛ばすことができました

4.4 メッセージを1つにまとめる

4.1-4.3で、実行したいメッセージの大枠はできてきましたが、Slackを見てみるとタスク1つにあたり1つのメッセージとなりちょっと見栄えが良くありません

なので、メッセージを1つにまとめてみましょう

  1. 下部のToolsから、 Text aggregatorを選択
  2. 今までSlack側で定義していた処理をコピー&ペースト
  3. Slack側では、Toolsから渡されるtextを入れればOKです
Text aggregatorを選択 集約するテキストの1つ分を設定 Slackへ流すテキストの設定
スクリーンショット 2023-12-12 0.48.26.png スクリーンショット 2023-12-12 0.51.10.png スクリーンショット 2023-12-12 0.51.45.png

これでタスクが1つにまとまるはずです。実行してみましょう

こちらの設定で、メッセージを1つにまとめることができました

4.5 タスク数によってメッセージを変える

では最後に、タスク数による条件分岐を対応しましょう

現状だと、リマインドするタスクがなかった際にエラーになってしまうので

  • タスクが0件だった場合は、「リマインドするタスクはありません」的な文章を
  • タスクが1件以上あった場合は、「今週のタスクはこちらです」という文章を入れて、タスクを通知できるように

ということをやっていきましょう

まずは、ルーターの準備です。この機能により条件分岐を用意できます

  1. ルーターを追加
  2. 既存のSlackのモジュールと接続
  3. 既存のSlackのモジュールをクローン
  4. ルーターと接続
ルーターを追加 既存のSlackのモジュールと接続 既存のSlackモジュールをクローン 接続
スクリーンショット 2023-12-12 20.17.00.png スクリーンショット 2023-12-12 20.19.17.png スクリーンショット 2023-12-12 20.19.24.png スクリーンショット 2023-12-12 20.22.11.png

次に ルーターの条件分岐を設定しましょう

  1. タスクあり: ルーターとSlackのモジュールの間のスパナーをクリックしてフィルターを設定
    • Label: タスクが存在していれば
    • Condition:
      • {{3.text}}
      • Basic operators: Exists
  2. タスクなし: ルーターとSlackのモジュールの間のスパナーをクリックしてフィルターを設定
    • Label: タスクが存在していなければ
    • Condition:
      • {{3.text}}
      • Basic operators: Does not exist
タスクあり タスクなし 全体像
スクリーンショット 2023-12-12 20.24.43.png スクリーンショット 2023-12-12 20.25.08.png スクリーンショット 2023-12-12 20.25.22.png

これで条件分岐ができました

あとは、メッセージの箇所を修正して完了です。Slackのメッセージモジュールを変更します

タスクあり タスクなし
スクリーンショット 2023-12-12 20.25.44.png スクリーンショット 2023-12-12 20.26.00.png

これで、Slackのメッセージも それぞれの文章を通知させることができました

タスクあり タスクなし
image.png  image.png

5. スケジューラの設定

では最後に、スケジューラを設定していきましょう。下記の画像の箇所で設定できます

デフォルトが15分ごとになっているので、週次月曜日の10時に設定します

  • Run scenario: Days of the week
  • Days:
    • Monday
  • Time:
    • 10:00

あとは、SCHEDULINGをONにすればOKです

6. Q&A

設定を行なっていくにあたり、自問自答した問題をQ&A形式で書いてみます

Q. 現状タスク一覧を取得してから、Make側で絞り込んでいますが、非効率ではないですか?

僕もそう思いますね。ですが、Make側で操作できる、filterが下記のようになっておりまして、ステータスで絞り込むことができません

回避策として、Makeで絞り込む方法を紹介しましたが、他のやり方としては、Notion側で新たにステータス2の項目を作ることです。種類を「セレクト」とすれば、Make側のfilterに出てくるので効率的になるかなと思います

(なお、ステータス2と名前をしたのは、デフォルトのステータスを残している場合、同名は避けないといけないためです。そちらを消せば、「ステータス」の名前で使えます)

今回は、Notionのテンプレートをそのまま使う方を優先した次第です

Q. 担当者が複数人の場合はどうなりますか?

ここがうまく対応できずでして。。。

Arrayで帰ってきたユーザー情報を、mapしてIDだけ取り出せるものの、Make側でその配列に対して<@userId> <@userId2>みたいできず。

こんなやり方でできました!できそうかも!
みたいなコメントもらえると、とっても嬉しいです。笑

最後に

お疲れ様でした!ちょっと操作にクセがあったり、どこでエラーになった?(権限なのか、シンプルにできないのか)がわかりづらい部分もありましたが、なんとか思い描いていたリマインダーはできたような気がします

Makeをうまく活用しつつ、プロジェクトを成功に導きましょう〜!

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?