はじめに
hkob の雑記録の第451回目(通算25日目)は、3/30 に公開された Notion API の ChangeLog を解説します。
ChangeLog の更新
別件で developers のページにアクセスしたら、ChangeLog が更新されていることに気づきました。3/30 の日付になっています。1日遅れでした。このあとは一つずつ原文のスクリーンショットと和訳と解説を記載していきます。
Heading 4 block type

heading_4がサポートされるブロックタイプになりました。Append block children、Retrieve a block、Update a block エンドポイントを通じて、既存のheading_1、heading_2、heading_3ブロックタイプと同様に、見出し4ブロックの作成、取得、更新が可能です。
すでにリリース前に NotionRubyMapping v4.0.0 に実装してしまっていました。
Tab item icons

タブブロック の直下の子要素である 段落ブロック は、オプションの
iconフィールドをサポートするようになりました。Append block children または Create a page でタブを作成する際にタブ項目にアイコンを設定でき、Update a block で更新できます。タブ項目ではない段落にアイコンを設定すると、バリデーションエラーで拒否されます。
NotionRubyMapping の場合、icon は親の base.rb で実装しています。今は、 if page? || database? || data_source? と場合分けしていました。ここに Paragraph block も追加するだけでよさそうです。ダメならどうせエラーになるので、親が tab blocks かどうかまではチェックしなくてもいいかと思っています。
"me" relative filter for people properties

People のフィルター条件は、ユーザー UUID に加えて、
containsおよびdoes_not_containの値として"me"を受け付けるようになりました。公開インテグレーション では、"me"は接続を承認したユーザーに解決されます。内部インテグレーション では、"me"はユーザーに解決されません。そのためcontains: "me"のフィルターは結果が 0 件になり、does_not_contain: "me"のフィルターはすべてのエントリにマッチします。データベースクエリ、データソースクエリ、ビューのフィルターとクイックフィルター で利用できます。
NotionRubyMapping では今のところ内部インテグレーションのみの対応としているので、DataSource query としては実装する意味はありません。ただ、View API でも同じフィルタオブジェクトを利用するとのことなので、そちら側での実装を行う予定です。
Relative date filter values

ISO 8601 日付 文字列(
equals、before、after、on_or_before、on_or_after)を受け付ける日付フィルター条件で、次の相対日付値も受け付けるようになりました:"today"、"tomorrow"、"yesterday"、"one_week_ago"、"one_week_from_now"、"one_month_ago"、"one_month_from_now"。これらは現在の日付を基準に、クエリ実行時に解決されます。詳細は日付フィルターのリファレンスを参照してください。
Notion API ではタイムゾーンを別項目で設定できないので、タイムゾーンが設定されない日付だけのフォーマットでは、UTC での比較になります。このため、Notion API の Query での利用はあまり有効ではなく、相対日付のフィルタはこれまで実装されていませんでした。今回、急にこれらが追加されたのは、ビューに設定するフィルタとして使うためだと思われます。
View API fixes

views API に関するいくつかの修正:
- パーセントエンコードされたプロパティID: API が返すプロパティ ID(例:
%7DUlu)が、ビューのフィルタ、ソート、グループ化、その他のプロパティ参照で利用された場合に正しく解決されるようになりました。width: 0の拒否: 列幅は1以上である必要があります。これまでは0も受け付けられていましたが、効果はありませんでした。propertiesの部分指定: ビューでプロパティのサブセットを指定した場合、未指定のプロパティがすべて表示されるのではなく、正しく非表示になるようになりました。
View API はこれからの実装なので、特に NotionRubyMapping には大きな影響はありません。
おわりに
明日の Notion 座談会では、これまでの Notion API のアップデートについて解説してみようと思います。