ネクストモードの南です。
先日Notionで関数2.0(Formula 2.0)がリリースされましたが、サポートする関数やプロパティについても
アップデートが多くありました。
特にリストの処理については新しく登場した内容で、map関数やリスト形式のプロパティに関して
やや理解しにくい部分があると感じましたので、今回の記事で解説をしていきたいと思います。
今回のリリースによって関数の操作性や仕様が大きく変更されました。
これまでの関数機能と比較して、新しくなった関数ではざっくりと以下のようなことができるようになっています。
詳細については以下のNotion公式の情報や先に公開した記事をご参考ください。
map関数は今回のアップデートで新しく追加された関数となります。
Notion公式のリファレンスでは以下のように解説されており、リスト形式のデータを数式に渡すことが
できる関数だということが理解できます。
そもそもですが、今回のアップデートから関数でリストを扱えるようになりました。
リストは[]を使って表します。
[1, 2, 3]であれば、数値の1、2、3という3つの要素を持ったリスト、ということになります。
以下の例1では[1, 2, 3]という数値のリストが入力値になり、リストの各要素についてcurrent + 1、
つまり1を加算した結果をリストとして返す、という処理をします。
currentは入力したリストの各要素を表す変数になります。
例1で考えると、まずリストの最初の要素である1がcurrentに代入され、current + 1は1 + 1として処理され、
出力結果のリストに渡されます。
要素の2と3に対しても同じ処理が行われる、というイメージです。
以下の例2のようにmap内の数式でcurrentを繰り返し記述することもできます。
例2はリストの値を二乗した結果を返す、という処理になります。
また、例3のようにテキストが要素となるリストを扱うこともできます。
ちなみに、リストの要素の種別は必ずしも統一する必要はないようです。
以下の例4のように数値とテキストを混在させたリストをmapに渡すと、数値は数値として処理され、
テキストはテキストとして処理されます。
これまでの関数機能の出力はテキスト、数値、チェックボックスのみとなっていましたが、
今回のアップデートでそれらに加えてページ、日付、ユーザー、リストの表示も可能になりました。
また、これらの各プロパティは個別の属性を持つものがあり、数式からアクセスすることができます。
例えば以下のように、ユーザープロパティからユーザー名のテキストデータを取得したり、eメールアドレスを
取得することができます。
Notoin公式の関数2.0のガイドや関数のリファレンスを見ると、上記のようなmapを使ったデータ取得方法が
けっこう登場していますが、初見だと理解しにくい構文になっていると思います。
一つ一つ分解しながら確認していきたいと思います。
まず、データベースのプロパティの中には、リスト形式で表示されるものがあります。
ユーザーやリレーションやマルチセレクトなどが該当します。
今回のアップデートから関数でリストを表示することが可能になったので、prop("ユーザー")で以下のように
そのまま表示させることができます。
ここで、ユーザーの持つeメールアドレスの情報を取得したいという場合、prop("ユーザー").email()で
アクセスしたくなりますが、これだとうまくいきません。
なぜならprop("ユーザー")はリストで、email()は引数にリスト(array)を持つことができない関数だからです。
一方、作成者や更新者のプロパティは必ず一意のユーザーとなる(リストではない)ため、そのままemail()関数を
使って情報を取得することができます。
そこでmap()の登場です。
前の項目で解説した通り、map()はリスト形式のデータを要素ごとに処理することができる関数となります。
まずはprop("ユーザー").map(current)として、どのような結果となるか見てみます。
ちなみにこれだとmap()の第一引数のリストがないじゃん、と思うかもしれないですが、これはリストから
ドットで関数を呼び出しているためです。
map(prop("ユーザー"), current)とイコールであるとお考えください。
map()内の数式がcurrentだけなので、そのまま入力したリストと同じ結果が出力されました。
(prop("ユーザー")とした場合と同じ出力結果)
さらにmap()内の数式をcurrent.email()としてみます。
map()内ではリストの要素ごとに処理することができるので、一つ一つのユーザーオブジェクトに対して
email()関数を使って情報を取得している、という動作になります。
これで冒頭に紹介した数式の説明ができました。
他のプロパティでいうと、リレーションプロパティもリスト形式になりますが、同じ考え方で扱うことができます。
1点注意となりますが、見た目上は1つの要素しかない場合でも、リストとしての処理が必要になります。
複数の要素を持つことができるプロパティなので、1つしか要素がなくてもリストなんですね。
今回はmap()をメインに取り上げましたが、リストを取り扱うことができる関数は他にもあります。
以下に一部を紹介させていただきます。
リスト形式のプロパティと組み合わせる場合は以下のような形で使います。
map関数とリスト形式のプロパティを扱う方法について解説をさせていただきました。
関数2.0のリリースによって、関数の操作性やデータの扱いやすさが大きく向上しました。
ただ、仕様が変わった部分も大きく、最初はややこしく感じる部分もあるかもしれません。
特にリストの処理については今までになかったもので、リストやmapへの理解がポイントになると感じましたので、
今回の記事でまとめさせていただきました。
本記事が少しでもお役に立つようなところがあれば幸いです。
ネクストモード社は、日本で3社しかないNotion販売代理店です。(2023年01月01日現在)
Notion導入を検討の際は是非下記からお問い合わせ頂けますと幸いです。