Notionのオートメーションで日付プロパティに昨日/明日/今週/先週/来週を設定する

Notionchat_bubble0

普段からNotionを使用していますが、NotionのDBのテンプレート機能は日付の面で融通が利かないことが以前から気になっていました。テンプレート機能によるページ名では「@今日」以外に「@昨日」「@明日」が使えるのでまだ良いのですが、日付プロパティでは特定の日付を選択する以外では「今(複製時の日時)」か「今日(複製時の日付)」しか使用できません。

オートメーション機能を活用することで上記の問題に対処できたので、この記事では対処方法を解説します。この記事で解説する方法を取ることで、ページ作成時に「昨日」「今週」などの日付を自動で設定することが可能になります。なお無料プランではオートメーションの作成はできません。オートメーションの作成は有料プラン(学割プラン含む)でのみ可能です。

ページ名で日付の種別判定をする

日付の種別ごとにオートメーションを作成するとして、「昨日」「今週」など、種別判定を行う必要があります。オートメーションのトリガーではプロパティの状態を判定できるので、ページの作成と合わせてページ名を判定します。

判定用のプロパティを用意しても構いませんが、今回はテンプレート機能で予めページ名に判定用の文字列を設定しておくという方法を取ります。この方法を取るとオートメーションのプロパティ編集の関数内でreplace()を使用してページ名の任意の位置に日付を挿入可能になります。

判定に使用するのはどのような文字列でも構いませんが、私は以下の画像のように#と英単語を組み合わせました。

ページ名に日付を含める

ページ名に日付を含めたい場合は、オートメーションのプロパティ編集アクションで関数を使用してページ名を編集します。以下のようにreplace()を使用すると判定用の文字列を日付に置換可能です。

replace(トリガーページ.名前, "#yesterday", 日付)

日付についてはこの関数内で用意するか、後述の変数定義アクションで予め変数を定義しておきそれを使用します。なお日付の変数を定義しておくと日付プロパティの編集アクションでそのままそれを設定できるので、日付プロパティの編集についての解説は省きます。

変数定義アクションで日付を用意する

オートメーションのプロパティ編集アクションの関数内で日付を用意しても構いませんが、私の場合は名前プロパティと日付プロパティの両方で同じ日付を使いたかったので、オートメーションの変数定義アクションを使用しました。

オートメーションの変数定義アクションでは、1つの変数定義アクション内で複数の変数を定義する場合、そのアクション内で定義されているそれぞれの変数は互いにそれぞれの関数上で参照できない、という点については注意が必要です。具体的には、変数定義アクション1で変数Aと変数Bを定義している場合、変数Bの関数では変数Aを参照できません。変数Bの関数で変数Aを参照したい場合、変数定義アクション2を用意してそちらで変数Bを定義する必要があります。

「昨日」

dateSubtract()で1日引くことで「昨日」の日付になります。日付プロパティに時間を含めたい場合はtoday()の代わりにnow()を使用すると良いかもしれません。

dateSubtract(today(), 1, "days")

「明日」

dateAdd()で1日足すことで「明日」の日付になります。

dateAdd(today(), 1, "days")

ISO8601の暦週表記の用意

Notionでは日付プロパティで範囲を設定可能です。週の初めと終わりを範囲として設定することで週を表現したいとします。その場合、「今週」「先週」「来週」などの週の初めと終わりを用意するに当たり、予めISO8601の暦週表記を用意する必要があるのでその変数定義を行います。ISO8601では暦週は「2025W01」(年とWと週番号2桁)のように表す必要があります。

変数定義アクションで以下を「暦週表記」変数として定義します。

formatDate(now(), "GGGG[W]WW")

元々は変数定義を分けて「年部分を用意(1月の初めは前年の週の場合もある)」「週番号をゼロパディング」「年部分と週番号を結合」を実装したんですが、年部分の用意方法に不安があって一応ChatGPT o4-miniに聞いたら"GGGG[W]WW"で良いということが分かったので…。o4-miniは何度かエラーを吐く関数を出してきたのですが、最終的には以下を参考にしたみたいです。

https://thomasjfrank.com/formulas/functions/formatdate

Moment.jsのフォーマットが使えるっぽい?Notionのドキュメントには「"YYYY" は年、"MM" は月、"DD" は日、"h" は時、"mm" は分です。」としか書いてないので、分かるかそんなもんという感じです。はい。

「今週」

parseDate()で暦週表記を使用すると「その週の月曜日」を取得できます。「日曜日」はその6日後です。暦週表記はnow()を使用して生成しているので、parseDate()によって取得できる日付は「今週の月曜日」となります。

parseDate(暦週表記)
dateAdd(parseDate(暦週表記), 6, "days")

dateRange()を使用することで日付の範囲として扱うことが可能です。後述の「先週」「来週」の解説ではdateRange()についての言及は省きます。

dateRange(月曜日, 日曜日)

「先週」

「先週の月曜日」は「今週の月曜日」の7日前、「先週の日曜日」は「今週の月曜日」の前日です。

dateSubtract(parseDate(暦週表記), 7, "days")
dateSubtract(parseDate(暦週表記), 1, "days")

「来週」

「来週の月曜日」は「今週の月曜日」の7日後、「来週の日曜日」は「今週の月曜日」の13日後です。

dateAdd(parseDate(暦週表記), 7, "days")
dateAdd(parseDate(暦週表記), 13, "days")

藤乃音りょう