はじめに
最近 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 }