はじめに
hkob の雑記録の第434回目(通算7日目)は、NotionRubyMapping の 2026-03-11 への対応を記録していきます。まずは、Block#append_block_children の after を position に変更していきます。
スクリプトの修正
まず、 append_block_children_append_after.sh を修正します。これまで after: block_id だった部分を position に変更しています。
#!/bin/sh curl -X PATCH 'https://api.notion.com/v1/blocks/03f6460c26734af484b95de15082d84e/children' \ -H 'Notion-Version: 2026-03-11' \ -H 'Authorization: Bearer '"$NOTION_API_KEY"'' \ -H 'Content-Type: application/json' \ --data '{"children":[{"type":"numbered_list_item","object":"block","numbered_list_item":{"rich_text":[{"type":"text","text":{"content":"Middle block","link":null},"plain_text":"Middle block","href":null}],"color":"default"}}], "position": {"type": "after_block", "after_block": {"id": "263f125b179e4e4f996a1eff812d9d3d"}}}'
make すると json が生成されます。
make sh append_block_children_append_after.sh > append_block_children_append_after.json % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 3341 0 3027 100 314 1782 184 0:00:01 0:00:01 --:--:-- 1967 sleep 1
作成された json は以下のようになりました。
{ "object": "list", "results": [ { "object": "block", "id": "325d8e4e-98ab-8180-84fb-cc1756204848", "parent": { "type": "block_id", "block_id": "03f6460c-2673-4af4-84b9-5de15082d84e" }, "created_time": "2026-03-16T11:51:00.000Z", "last_edited_time": "2026-03-16T11:51:00.000Z", "created_by": { "object": "user", "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd" }, "last_edited_by": { "object": "user", "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd" }, "has_children": false, "in_trash": false, "type": "numbered_list_item", "numbered_list_item": { "rich_text": [ { "type": "text", "text": { "content": "Middle block", "link": null }, "annotations": { "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default" }, "plain_text": "Middle block", "href": null } ], "color": "default" } }, { "object": "block", "id": "26dd8e4e-98ab-81dd-a004-fec6512815a6", "parent": { "type": "block_id", "block_id": "03f6460c-2673-4af4-84b9-5de15082d84e" }, "created_time": "2025-09-13T06:06:00.000Z", "last_edited_time": "2025-09-13T06:06:00.000Z", "created_by": { "object": "user", "id": "019a87c7-d197-44a4-b19a-baa684400f81" }, "last_edited_by": { "object": "user", "id": "019a87c7-d197-44a4-b19a-baa684400f81" }, "has_children": false, "in_trash": false, "type": "numbered_list_item", "numbered_list_item": { "rich_text": [ { "type": "text", "text": { "content": "Middle block", "link": null }, "annotations": { "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default" }, "plain_text": "Middle block", "href": null } ], "color": "default" } }, { "object": "block", "id": "67c0e9bd-bbe4-456c-8731-27763d7fa580", "parent": { "type": "block_id", "block_id": "03f6460c-2673-4af4-84b9-5de15082d84e" }, "created_time": "2023-07-12T12:20:00.000Z", "last_edited_time": "2023-07-12T12:20:00.000Z", "created_by": { "object": "user", "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd" }, "last_edited_by": { "object": "user", "id": "40673a87-d8ed-41e0-aa55-7f0e8ace24cd" }, "has_children": false, "in_trash": false, "type": "numbered_list_item", "numbered_list_item": { "rich_text": [ { "type": "text", "text": { "content": "Middle block", "link": null }, "annotations": { "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default" }, "plain_text": "Middle block", "href": null } ], "color": "default" } }, { "object": "block", "id": "28b314c5-d2b5-4df8-8760-95b67a673d69", "parent": { "type": "block_id", "block_id": "03f6460c-2673-4af4-84b9-5de15082d84e" }, "created_time": "2023-07-12T09:44:00.000Z", "last_edited_time": "2023-07-12T09:44:00.000Z", "created_by": { "object": "user", "id": "2200a911-6a96-44bb-bd38-6bfb1e01b9f6" }, "last_edited_by": { "object": "user", "id": "2200a911-6a96-44bb-bd38-6bfb1e01b9f6" }, "has_children": false, "in_trash": false, "type": "numbered_list_item", "numbered_list_item": { "rich_text": [ { "type": "text", "text": { "content": "Last block", "link": null }, "annotations": { "bold": false, "italic": false, "strikethrough": false, "underline": false, "code": false, "color": "default" }, "plain_text": "Last block", "href": null } ], "color": "default" } } ], "next_cursor": null, "has_more": false, "type": "block", "block": {}, "request_id": "546c471d-477c-44ee-9a69-0da25822e711" }
テストの修正
呼び出し側のテストを修正します。この中の APPEND_AFTER_ADDED_ID は新しく追加されたブロックの ID に変更しています。
describe "append block children with after" do parent_id = TestConnection::APPEND_AFTER_PARENT_ID previous_id = TestConnection::APPEND_AFTER_PREVIOUS_ID append_block = NumberedListItemBlock.new "Middle block" let(:parent_block) { Block.find parent_id } let(:above_block) { Block.find previous_id } shared_examples "append_block_children_append_after" do context "dry_run" do it_behaves_like "dry run", :patch, :append_block_children_page_path, id: parent_id, json: { "children" => [append_block.block_json], "position" => { "type" => "after_block", "after_block" => { "id" => previous_id, }, }, } end context "create" do it { expect(block.id).to eq TestConnection::APPEND_AFTER_ADDED_ID } end end context "after option" do let(:dry_run) { parent_block.append_block_children append_block, position: previous_id, dry_run: true } let(:block) { parent_block.append_block_children append_block, position: previous_id } it_behaves_like "append_block_children_append_after" end context "append_after method" do let(:dry_run) { above_block.append_after append_block, dry_run: true } let(:block) { above_block.append_after append_block } it_behaves_like "append_block_children_append_after" end end
実装の修正
Base#append_block_children の after の部分を position に変更します。
# @param [Array<Block>] blocks # @param [String, nil] position block id of previous block, page_start, or page_end # @param [Boolean] dry_run true if dry_run # @return [NotionRubyMapping::Block, String] # @see https://www.notion.so/hkob/Page-d359650e3ca94424af8359a24147b9a0#44bbf83d852c419485c5efe9fe1558fb # @see https://www.notion.so/hkob/Block-689ad4cbff50404d8a1baf67b6d6d78d#2c47f7fedae543cf8566389ba1677132 def append_block_children(*blocks, position: nil, dry_run: false) raise StandardError, "This block can have no children." unless page? || (block? && can_have_children) only_one = blocks.length == 1 json = { children: Array(blocks).map do |block| assert_parent_children_pair block block.block_json end, } if %w[page_start page_end].include? position json["position"] = {"type" => position} elsif position json["position"] = {"type" => "after_block", "after_block" => {"id" => position}} end if dry_run path = @nc.append_block_children_page_path(id) self.class.dry_run_script :patch, path, json else response = @nc.append_block_children_request @id, json raise StandardError, response unless response["results"] answers = response["results"].map { |sub_json| Block.create_from_json sub_json } only_one ? answers.first : answers end end
Block#append_after も after から position に変更しておきます。
# @param [Boolean] dry_run true if dry_run # @return [NotionRubyMapping::Block, String] # @param [Array<Block>] blocks def append_after(*blocks, dry_run: false) parent.append_block_children(*blocks, position: id, dry_run: dry_run) end
WebMock の修正
実装したところ、API 呼び出しでエラーになりました。WebMock の修正をしていないためです。append_after の mock についても、position に修正しておきます。
def append_after generate_stubs_sub :patch, :append_block_children, :append_block_children_block_path, { append_after: [ APPEND_AFTER_PARENT_ID, 200, { "children" => [ { "type" => "numbered_list_item", "object" => "block", "numbered_list_item" => { "rich_text" => [ { "type" => "text", "text" => { "content" => "Middle block", "link" => nil, }, "plain_text" => "Middle block", "href" => nil, }, ], "color" => "default", }, }, ], "position" => { "type" => "after_block", "after_block" => { "id" => "263f125b179e4e4f996a1eff812d9d3d", }, }, } ], } end
テスト確認
これでテストが成功することを確認しました。
(中略)
append block children with after
after option
behaves like append_block_children_append_after
dry_run
behaves like dry run
is expected to eq "#!/bin/sh\ncurl -X PATCH 'https://api.notion.com/v1/blocks/03f6460c26734af484b95de15082d84e/children...sition\":{\"type\":\"after_block\",\"after_block\":{\"id\":\"263f125b179e4e4f996a1eff812d9d3d\"}}}'"
create
is expected to eq "325d8e4e98ab818084fbcc1756204848"
append_after method
behaves like append_block_children_append_after
dry_run
behaves like dry run
is expected to eq "#!/bin/sh\ncurl -X PATCH 'https://api.notion.com/v1/blocks/03f6460c26734af484b95de15082d84e/children...sition\":{\"type\":\"after_block\",\"after_block\":{\"id\":\"263f125b179e4e4f996a1eff812d9d3d\"}}}'"
create
is expected to eq "325d8e4e98ab818084fbcc1756204848"
(後略)
Finished in 0.08157 seconds (files took 0.35474 seconds to load)
94 examples, 0 failures
おわりに
とりあえず、これまで after で呼び出していたテストを position に変更するだけを実施してみました。明日は page_start, page_end へのブロック追加のテストを追加します。実装は書いてしまっているので、あくまでテストで確認するだけということになります。