append_block_children: NotionRubyMapping 解説 (10)

はじめに

NotionRubyMapping 解説の第10回目です。RichTextArray の解説が済んだので、段落ブロックの追加を行う append_block_children メソッドを解説します。今日は以下のページで

hkob.notion.site

Page#append_block_children

ページもブロックなので、append_block_children メソッドにより子ブロックを追加できます。上のページに段落ブロックを追加してみます。まず、ページを取得します。

irb(main):002> page = Page.find "https://www.notion.so/hkob/append_block_childre
n-10-573b218d93fc405b9bf467ac2ac2928d?pvs=4"
=> NotionRubyMapping::Page-573b218d93fc405b9bf467ac2ac2928d

取得したページに append_block_children でブロックを渡すとページの最後に追加されます。この時ブロックは複数個指定できます。

irb(main):003> page.append_block_children ParagraphBlock.new("最初の段落"), ParagraphBlock.new("二番目の段落")
=>
[NotionRubyMapping::ParagraphBlock-2f8b551fdf924add8f46db4871237522,
 NotionRubyMapping::ParagraphBlock-aa735b8fa78a403eb96fb4091b31e83e]

実行した結果、ページには二つの段落ブロックが追加されました。

二つの段落を追加

当初、ブロックは一番最後にしか追加できませんでしたが、その後のアップデートで after を設定できるようになりました。after には block_id を指定します。上の最初の段落の後ろに段落を追加してみます。

irb(main):004> page.append_block_children ParagraphBlock.new("追加した段落"), af
ter: "2f8b551fdf924add8f46db4871237522"
=> NotionRubyMapping::ParagraphBlock-758dd263cac64e5ebc1f1264ba6b48d0

結果は以下のようになりました。

追加1

Block#append_after

append_block_childrenafter オプションは Notion API の指定通りなのですが、block_id を指定するのがあまりカッコいいものではありません。そこで、append_after というメソッドを用意してみました。最初のブロックを取得し、その後ろに append_after で段落ブロックを追加してみます。

irb(main):005> first_block = page.children.first
=> NotionRubyMapping::ParagraphBlock-2f8b551fdf924add8f46db4871237522
irb(main):006> first_block.append_after ParagraphBlock.new("さらに追加した段落")
=> NotionRubyMapping::ParagraphBlock-cefd3be7bf2b4025bc374f55c44b0d82

結果は以下のようになりました。

追加2
c

Block#append_block_children

ブロックの中には子ブロックを持つことができるものがあります。段落ブロックも子ブロックを持つことができるブロックです。先ほど取得した first_blockappend_block_children で子ブロックを追加してみます。

irb(main):007> first_block.append_block_children ParagraphBlock.new("子ブロックの追加")
=> NotionRubyMapping::ParagraphBlock-4e2f4da82d5043e68b24469663293435

結果は以下のようになりました。

子ブロック

おわりに

すでに紹介した段落ブロックをページに追加する append_block_children を解説しました。また、通常はブロックの一番最後に設置されるのですが、after オプションで場所を指定することができます。残念ながら after しかオプションがないので、一番先頭には追加できないです。また、オプションの設定は面倒なので、append_after というメソッドも用意しています。こちらは親のページやブロックではなく、追加したい場所の前のブロックに対してメソッドを投げる形になります。

Page, Block のマニュアルはこちら。

hkob.notion.site

hkob.notion.site

NotionRubyMapping解説