はじめに
hkob の雑記録の第468回目(連続41日目)は、Select などへの multi value フィルタについて確認します。
テストデータの作成
まず、スクリプトを作成します。equals の中が Array になっています。
curl -X POST 'https://api.notion.com/v1/data_sources/4f93db514e1d4015b07f876e34c3b0b1/query' \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ -H 'Notion-Version: 2025-09-03' \ -H "Content-Type: application/json" \ --data '{ "filter": { "property": "SelectTitle", "select": { "equals": [ "Select 1", "Select 2" ] } }, "page_size": 100 }'
make して json を取得します。
make sh query_data_source_select_multi_values.sh > query_data_source_select_multi_values.json % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 9731 0 9572 100 159 23388 388 --:--:-- --:--:-- --:--:-- 23792 sleep 1
テストの作成
実際の API アクセスと dry_run の二通りのテストを実行しています。filter_equals の部分に Array を渡しています。
describe "query with multivalue filter" do let(:target) { DataSource.new id: TestConnection::DATA_SOURCE_ID, assign: [SelectProperty, "SelectTitle"] } let(:sp) { target.properties["SelectTitle"] } let(:query) { sp.filter_equals ["Select 1", "Select 2"] } context "when API access" do let(:result) { target.query_data_source query } it { expect(result.count).to eq 1 } end context "when dry_run" do let(:dry_run) { target.query_data_source query, dry_run: true } it_behaves_like "dry run", :post, :query_data_source_path, use_id: true, use_query: true end end
WebMock の追加
当然、新規の Web アクセスが行われて失敗します。これに対応した WebMock を追加します。equals に配列が渡された select_multi_values キーに対応した payload を追加します。この payload により、query_data_source_select_multi_values.json の結果が mock として返却されます。
def query_data_source generate_stubs_sub :post, __method__, :query_data_source_path, { limit_2: [DATA_SOURCE_ID, 200, {"page_size" => 2}], next_2: [DATA_SOURCE_ID, 200, {"start_cursor" => "6601e719-a39a-460c-908e-8909467fcccf", "page_size" => 2}], last_2: [DATA_SOURCE_ID, 200, {"start_cursor" => "dcdc805c-85fa-4155-a55c-20fc28771af7", "page_size" => 2}], filter_properties: [DATA_SOURCE_ID, 200, {"page_size" => 100}], select_multi_values: [DATA_SOURCE_ID, 200, { "filter" => { "property": "SelectTitle", "select" => { "equals": [ "Select 1", "Select 2", ], }, }, "page_size": 100, }], } end
テストの確認
実は、このテストは自動的に通過してしまいました。こちらのポストに書いたように filter_equals に渡す引数にはなんの制約もつけていないので、今までも配列を渡すと JSON にそのまま配列が設定されてしまうのでした。
Select property などの multi value フィルタに関して、NotionRubyMapping は特に対応の必要がなかったです。そのまま JSON で渡しているだけなので、うまく動いてしまいますね。#Notion #NotionAPI pic.twitter.com/kLow6QIlVy
— hkob|Notion Ambassador (@hkob) 2026年4月19日
実際に dry_run の結果はちゃんと配列になっていました。

おわりに
とりあえずテストでは確認しましたが、特に NotionRubyMapping を更新することもなく、multi value のフィルタは今でも利用可能でした。是非使ってみてください。
https://hkob.notion.site/hkob-16dd8e4e98ab807cbe3cf3cc94cdfe0f?pvs=4hkob.notion.site