Touma Hoshino

データ型

7つのデータ型

Notionの数式は、7つのデータ型を扱うことができます。

データ型
文字列 “数式をマスターしよう!”
数値 1, -2.5
日付 “2024-11-11T12:00:00Z”
ユーザー 🙋 とうまろ
真偽値 true, false
ページ 📄 日記
リスト [”1月”, “2月”, “3月”]

文字列

文字列型は、テキストコンテンツを保持および表示します。 文字列はほぼすべての文字を保持できます。

"モンキー D ルフィ"

"42"

"true"

join 関数や add 関数、+ を使って文字を連結することができます。

"本日の天気は" + "晴れ" + "になるでしょう"
/* 出力: 本日の天気は晴れになるでしょう */

join(["本日の天気は", "晴れ", "になるでしょう"], " ")
/* 出力: 本日の天気は 晴れ になるでしょう */

文字列に対して計算を実行することはできません。 Notionは文字列から数値への変換を行わないため、文字列を手動で数値に変換する必要があります。

文字列に数字のみが含まれている場合は、toNumber 関数を使用して変換できます。

/* これはエラーになります */
add(2, "2")

/* 文字列を数値に変換して計算 */
add(2, toNumber("2"))

特殊文字のエスケープ

文字列内に含まれている特殊文字を表示するには、エスケープ文字(\)を使用します。

例えば、ダブルクォーテーション(")を文字列内に表示したい場合は、次のように記述します。

"これは\"引用\"された文字列です" /* 出力: これは"引用"された文字列です */

同様に、バックスラッシュ自体を表示したい場合は、次のようにします。

"これはバックスラッシュです: \\" /* 出力: これはバックスラッシュです: \ */

数値

数値型は、加算や除算などの算術演算子と組み合わせて、数学的な演算や計算を実行できます。

2 + 2 /* 出力: 4 */

6 / 2 /* 出力: 3 */

演算は標準的な計算順序に従います。

3 + 4 * 5 /* 出力: 23 */

(3 + 4) * 5 /* 出力: 35 */

数値から文字列への自動変換

数値は、他のデータ型の組み合わせると自動的に文字列に変換されます。

"参加者は" + prop("メンバー").length() + "人です。" /* 出力: "参加者は12人です。" */

["参加者は", prop("メンバー"),"人です。"].join("") /* 出力: "参加者は12人です。" */

日付

Notionの数式は、特殊なデータ型である日付オブジェクトを出力できます。

これらは、dateAdddateSubtract などの日付関数を使用して操作できるため、文字列とは異なります。

内部的には、日付オブジェクトは3つの要素で構成されています。

💡 日付オブジェクトを構成する3つの要素


  • 開始日
  • 終了日(オプション)
  • タイムゾーン

次のNotionプロパティは日付オブジェクトを出力します。

  • 日付
  • 作成日時
  • 最終更新日時
  • ロールアップ(日付オブジェクトを出力するプロパティをロールアップするように設定されており、「オリジナルを表示する」に設定されていない場合)
  • 数式(数式が日付オブジェクトを出力する場合)

数式内では、次の関数が単一の日付オブジェクトを出力します。

関数 出力
now now() 2024年11月23日 15:00
fromTimestamp fromTimestamp(1656012840000) 2022年6月24日 4:34
dateAdd dateAdd(now(),3,"months") 2025年2月23日 15:00
dateSubtract dateSubtract(now(),3,"months") 2024年8月23日 15:00
dateRange dateRange(now(), prop("Date")) 2024年11月23日 15:40 → 2024年11月30日 23:59
parseDate parseDate("2025-01-01") 2025年1月1日

ユーザー

ユーザー型は、ユーザー、作成者、最終更新者プロパティなどで使用されます。このデータ型は、ワークスペース内の特定のユーザーを参照することができ、メンション機能と組み合わせることで効果的なコラボレーションが可能になります。また、フィルターやソートの条件としても活用できます。

name(prop("作成者")) /* 出力: "とうまろ" */

email(prop("作成者")) /* 出力: "toumaro@xxxyyyzzz.com" */

上記のように namemail を直接指定すると、単一の作成者や最終更新者、メールアドレスを出力します。

ユーザープロパティに対してこれらの関数を使用する場合は、first を使用して最初の項目を対象とするか、map を使用してフィールドに追加された各ユーザーの名前またはメールアドレスを返す必要があります。

prop("担当者").first().email() /* 出力: "toumaro@xxxyyyzzz.com" */

prop("担当者").map(current.email()) /* 出力: ["toumaro@xxxyyyzzz.com", "taro-yamada@xxxyyyzzz.com"  */

💡 メールアドレスをクリック可能にするには link 関数を使う

メールアドレスは文字列で返されます。クリック可能にするには link 関数でハイパーリンクを生成し、mailTo: を先頭に付けます。

link("メールを送信", "mailTo:" + email(prop("作成者"))) /* クリックするとメーラーが起動します */

真偽値

真偽値は、trueまたはfalseの値を返します。

チェックボックスでは、チェックされている場合はtrue、チェックされていない場合はfalseとなります。

10 > 5 /* 出力: True */

"東京" == "大阪" /* 出力: False */

論理演算子

論理演算子は、真偽値を返し、複数の式を組み合わせて評価することができます。

論理 シンボル 関数
AND(論理積) and && and() 2 > 3 and 4 < 8
OR(論理和) or || or() 2 > 1 || 6 > 5
NOT(否定) not ! not() not empty(”こんにちは”)

比較演算子

比較演算子は、2つの値を評価することができます。

比較 シンボル 関数
等しい == equal() 5 == 5
等しくない != unequal() 3 != 4
より大きい > 10 > 5
より小さい < 3 < 7
以上 >= 8 >= 8
以下 <= 6 <= 9

ページ

ページ型は、データベースやページへの参照を保持するデータ型です。データベースのリレーション機能で使用され、ページ間のリンクを確立することができます。

また、ページIDを使用して特定のページの情報にアクセスすることも可能です。

/* ページが持つデフォルトの情報群 */
prop("作成者") /* 出力: "🙋 とうまろ" */
prop("作成日時") /* 出力: 2024年11月23日 15:00 */
prop("最終更新者") /* 出力: "🙋 とうまろ" */
prop("最終更新日時") /* 出力: 2024年11月23日 15:00 */

/* リレーションで他のページの情報を取得する */
prop("リレーション").first().prop("作成者") /* 出力: "🙋 とうまろ" */
prop("リレーション").map(current.prop("作成日時")) /* 出力: ["2024年11月23日 15:00", "2024年11月23日 16:00"] */

/* ページIDを取得する */
prop("リレーション").first().id() /* 出力: "6f65542cde7b4c548155474684281d15" */
prop("リレーション").map(current.id()) /* 出力: ["6f65542cde7b4c548155474684281d15", "781a4fd8e8f243828872c6a5b21d7d0c"] */

リスト

リスト型は、複数の値を順序付きで格納できるデータ型です。配列とも呼ばれ、文字列、数値、日付など、異なる型の要素を含むことができます。

["りんご", "オレンジ", "ぶどう"]

[1, 2, 3]

[true, false, false]

[now(), prop("日付")]

[["りんご", "グリーンアップル"], ["オレンジ", "みかん"]]

リストの要素は0から始まるインデックスでアクセスでき、様々な関数を使用して要素の追加、削除、検索などの操作が可能です。

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]]

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]].at(0) /* 出力: "りんご" */

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]].at(1) /* 出力: 1 */

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]].at(2) /* 出力: true */

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]].at(3) /* 出力: 2024年11月23日 15:00 */

["りんご", 1, true, now(), ["オレンジ", "ぶどう"]].at(4) /* 出力: ["オレンジ", "ぶどう"] */

リストを扱う関数

  • at
  • first
  • last
  • slice
  • concat
  • sort
  • reverse
  • join
  • split
  • unique
  • includes
  • find
  • findIndex
  • filter
  • some
  • every
  • map
  • flat

リストの組み込み変数

  • current
  • index

map 関数を使用する場合、リスト項目の値とインデックスをそれぞれ currentindex を使用してアクセスできます。

["りんご", "オレンジ", "ぶどう", "いちご"].map(
    current
    + "はリストの"
    + (index + 1)
    + "番目の果物です"
)

/* 出力:
りんごはリストの1番目の果物です,
オレンジはリストの2番目の果物です,
ぶどうはリストの3番目の果物です,
いちごはリストの4番目の果物です */