はじめに
hkob の雑記録の第344回目は、Section-010 の DataSource の修正を行なっていきます。本記事は2025年ユカスタマスの10日目(2023年ユカスタマスの741日目)の記事になります。
P.54 Database object → DataSource object
データソースが導入されたため、前回読み込んだ page の親はデータベースではなくデータソースに変更されています。このため、P.54 は DataSource object に変更します。早速 page の親を取得しようとしたところ、以下のようにエラーになってしまいました。
ds = page.parent /Users/hkob/.local/share/mise/installs/ruby/3.4.6/lib/ruby/gems/3.4.0/gems/notion_ruby_mapping-3.0.3/lib/notion_ruby_mapping/blocks/base.rb:289:in 'NotionRubyMapping::Base#parent': List does not have any parent (StandardError)
base.rb の該当部分を確認すると、確かに data_source_id に対応していませんでした。
# @param [Boolean] dry_run true if dry_run def parent(dry_run: false) parent_json = @json && @json["parent"] raise StandardError, "Unknown parent" if parent_json.nil? type = parent_json["type"] klass = case type when "database_id" Database when "page_id" Page when "block_id" Block else raise StandardError, "List does not have any parent" end klass.find parent_json[type], dry_run: dry_run end
早速以下のように修正します。
# @param [Boolean] dry_run true if dry_run def parent(dry_run: false) parent_json = @json && @json["parent"] raise StandardError, "Unknown parent" if parent_json.nil? type = parent_json["type"] klass = case type when "data_source_id" DataSource when "database_id" Database when "page_id" Page when "block_id" Block else raise StandardError, "List does not have any parent" end klass.find parent_json[type], dry_run: dry_run end
この修正を含めた NotionRubyMapping v3.0.4 をリリースしました。
取得した JSON は以下のようになりました。
print JSON.pretty_generate(ds.json) => { "object": "data_source", "id": "2bcd8e4e-98ab-8127-a7e7-000b1ca841bd", (中略: "cover", "icon", "created_time", "created_by", "last_edited_by", "last_edited_time"までは Page と共通) "title": [ { "type": "text", (中略) "plain_text": "サンプルデータベース", } ], "description": [], "is_inline": false, "properties": { "タグ": { "id": "mkN%5D", "name": "タグ", "type": "select", "select": { "options": [ { "id": "eda78983-0fde-413c-a2cd-9386ceb29da1", "name": "タグ1", "color": "pink" }, { "id": "f3d8b94c-2108-4d76-9c47-a6ada9315175", "name": "タグ2", "color": "green" } ] } }, "名前": { "id": "title", "name": "名前", "type": "title", "title": { } } }, "parent": { "type": "database_id", "database_id": "2bcd8e4e-98ab-813a-8b68-cfec895adc46" }, "database_parent": { "type": "block_id", "block_id": "2bcd8e4e-98ab-8127-8c53-ed60b09d42c7" }, (中略: "url", "public_url", "archived", "in_trash", "request_id" は Page と共通) }=> nil
4行目のデータソースID については、データベースと取得方法が異なるので説明を以下のように丸ごと変更しました。
4行目: ここにはデータソースの ID が格納されています。Notion でデータソースIDを取得するためには、データベースビューの「データソースを管理する」から該当するデータソースを選び「…」から「データソースIDをコピー」とします。クリップボードに格納されていたデータベース ID は以下のようになっており、4行目の値と一致していることが確認できます。
2bcd8e4e-98ab-8127-a7e7-000b1ca841bd
データソースIDをコピー
これ以外の部分はあまり変更がありませんが、parent がデータベースに変更になるので、その部分に以下の解説を追加しました。
- 44-47行目: parent には親となる database_id が格納されています。コンテナに変更されてしまった Database についてはこの後で解説します。
- 48-51行目: 以前はデータソースがなかったので、parent はデータベースが所属する上位ブロックまたはページが格納されていました。DataSource の親が Database になってしまったので、今までの parent に相当するものが、database_parent として格納されるようになったようです。
おわりに
今回、NotionRubyMapping のアップデートも実施してしまったので、データベースまで進められませんでした。明日は 10.4 として新規に Database object の節を起こします。