はじめに
最近 Notionを使ってタスク管理を再度始めました(昔やっていたのですが、飽きてしまっていて)
しかし タスクがいつ完了したものなのか後から確認するためには、日付を入力してカレンダーから見る必要があります。
この日付入力が少しめんどくさいので、自動化しました。
成果物
https://t.co/nlkStKVe6I
— ようさん (@ayousanz) May 4, 2022
NotionのタスクがDoneになったら完了日付を自動入力するのを GitHub Actionsを使って定期実行できた pic.twitter.com/WFNuXhYKdt
コードや 実際に動いている スクリプト :
実装簡易説明
細かい部分の詳細はRepositoryもしくは以下の参考にしたサイトを確認してください。 実装時に時間がかかった部分のみ記載しておきます。
Notion DB 取得時に query Filter
Notion のDBからデータを取得する際にすべて取得してもいいのですが、重たくなる・一括で取得できる数に制限という問題のため Queryでフィルターをかけてなるべく必要なデータだけ取得していきます。
公式 API DOcumentに フィルターの書き方があるので、こちらを参考にしています。
フィルターを書く際に 期限は select 型にしているため、一致しているかどうか( equals )で判別することができます。
しかし、日付( 'date' )は nullなどがないため is_empty で判定をしています。
"filter": {
"and": [
{
"property": "期限",
"select": {
"equals": 'Done'
}
},
{
"property": "日付",
"date": {
"is_empty": True
}
}
]
}
フィルターはほかにも書き方があるため、必要に応じて変更していくといいかと思います。
GitHub Actionsから環境変数を読み込む
GitHub Actionsをpublic Repositoryで呼び出しているため、スクリプトにハードコーディングすることができません。 そのため、環境変数を使っていきたいと思います。
yml ファイルに以下のように設定すると スクリプト側から 呼ぶことができます。
- name: Run script
env:
NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
PRIVATE_DB: ${{ secrets.PRIVATE_DB }}
WORK_DB: ${{ secrets.WORK_DB }}
この際に GitHub 側に sercret keyで事前に登録しておく必要があります。

参考にさせていただいたサイト qiita.com
Notionのpage Property(date) の更新
地味に詰まったところで、data を更新するときには object 型を入れないといけないみたいです。(公式ドキュメントより)
今回は start と time_zone をオブジェクト側で指定していきます。
data 型のオブジェクト内容は PostManなどで以下のように確認できます。
"date": {
"start": "2022-05-02",
"end": null,
"time_zone": null
}