Skip to content

Latest commit

 

History

History
727 lines (531 loc) · 29.4 KB

File metadata and controls

727 lines (531 loc) · 29.4 KB

sb2n 仕様書

概要

sb2nは、Scrapboxの全ページを指定したNotionデータベースへ移行するためのツールです。

目的

Scrapboxから機械的にページをコピーし、ラベルを作り、適宜他のデータベースなどに移行するための基盤ツールを提供します。

主な機能

1. Scrapboxからのページ取得

  • Scrapbox APIを使用して、指定したプロジェクトの全ページを取得
  • ページのメタデータ(タイトル、作成日、更新日、タグなど)を収集
  • ページ本文の取得

2. Notionデータベースへの移行

対象データベース構造

Notionの移行先データベースは**フルページデータベース(Full Page Database)**として作成し、以下のプロパティを持つ:

プロパティ名 タイプ 必須 説明
Title Title ページタイトル(Scrapboxのページ名)
Scrapbox URL URL 元のScrapboxページへのリンク
Created Date Date Scrapboxでのページ作成日時
Tags Multi-select Scrapboxページに含まれるタグ

注意: マイグレーション実行時に、これらの必須プロパティが正しく設定されているかを自動的に検証します。検証に失敗した場合、マイグレーションは中止されます。

データベース作成手順
  1. Notionでフルページデータベースを作成

    • Notionで新規ページを作成
    • /database と入力して「データベース - フルページ」を選択
    • または、既存ページで /table と入力して「テーブルビュー - フルページ」を選択後、右上の「...」から「データベースに変換」
  2. プロパティを追加・設定

    • デフォルトの「Name」プロパティを「Title」に変更(またはそのまま「Name」でも可)
    • 「+」ボタンをクリックして以下のプロパティを追加:
      • Scrapbox URL: タイプを「URL」に設定
      • Created Date: タイプを「日付」に設定
      • Tags: タイプを「マルチセレクト」に設定
  3. インテグレーションとの共有

    • データベースページの右上「...」メニューから「接続を追加」
    • 作成したインテグレーションを選択して共有
  4. データベースIDの取得

    • データベースのURLから32文字のIDをコピー
    • 例: https://www.notion.so/{workspace}/{database_id}?v=...
    • database_id 部分(ハイフンなし32文字)を .envNOTION_DATABASE_ID に設定

移行データ

  • タイトル: Scrapboxのページタイトルをそのまま使用
  • Scrapbox URL: https://scrapbox.io/{project}/{page_title} 形式
  • 作成日: Scrapboxページの作成日時(Unix timestamp から変換)
  • タグ: Scrapboxページ内のハッシュタグ(#tag 形式)を抽出してMulti-selectとして設定
  • 本文: Notionページの本文として、Scrapbox記法からNotion Blocksへ変換して格納

データベース検証

マイグレーション実行時には、Notionデータベースのプロパティを自動的に検証します。

検証項目
  1. 必須プロパティの存在確認:

    • Title (または Name) プロパティが存在するか
    • Scrapbox URL プロパティが存在するか
    • Created Date プロパティが存在するか
  2. プロパティタイプの確認:

    • Title/Nametitle タイプであるか
    • Scrapbox URLurl タイプであるか
    • Created Datedate タイプであるか
  3. オプションプロパティの確認:

    • Tags プロパティが存在しない場合は警告を表示(タグ情報は無視される)
    • Tags が存在するが multi_select タイプでない場合も警告を表示
検証の実行タイミング
  • sb2n migrate コマンド実行時、最初のページを移行する前に自動的に実行されます
  • --dry-run モードでは検証をスキップします(実際にAPIアクセスしないため)
  • 検証に失敗した場合、エラーメッセージを表示してマイグレーションを中止します
エラー例
ERROR: Database property validation failed
ERROR: Database must have a 'Scrapbox URL' property
ERROR: Migration aborted.

3. 画像の移行

  • Scrapboxページに含まれる画像([image_url] 形式)を検出
  • 画像がScrapbox上にホストされている場合(https://gyazo.com/ など)は、画像をダウンロード
  • ダウンロードした画像をNotionへアップロード
  • Notion Block内で画像を適切に配置

4. 認証情報の管理

認証情報は以下の2つの方法で指定できます:

方法1: .env ファイル

.env ファイルから以下の認証情報を読み込む:

# Scrapbox API設定
SCRAPBOX_PROJECT=your-project-name
SCRAPBOX_COOKIE_CONNECT_SID=your-connect-sid

# Notion API設定
NOTION_API_KEY=secret_xxxxxxxxxxxxx
NOTION_DATABASE_ID=xxxxxxxxxxxxx

方法2: コマンドラインオプション(優先)

コマンドライン引数で直接指定することも可能です。.envファイルと同時に指定された場合、コマンドラインオプションが優先されます。

sb2n migrate -P project-name -S connect-sid -N token -D database-id

認証情報の説明

  • SCRAPBOX_PROJECT / -P, --project: 移行元のScrapboxプロジェクト名
  • SCRAPBOX_COOKIE_CONNECT_SID / -S, --sid: Scrapbox APIアクセス用のCookie(プライベートプロジェクトの場合に必要)
  • NOTION_API_KEY / -N, --ntn: Notion Integration Token
  • NOTION_DATABASE_ID / -D, --db: 移行先のNotionデータベースID

技術仕様

使用言語・ライブラリ

Python

  • バージョン: Python >= 3.14

主要ライブラリ

scrapbox-client

Scrapbox APIとのやり取りを行うためのPythonクライアントライブラリ。

主な機能:

  • ScrapboxClient: Scrapbox APIクライアント
    • get_pages(project_name, skip, limit): ページ一覧取得
    • get_page(project_name, page_title): ページ詳細取得
    • get_page_text(project_name, page_title): ページテキスト取得
    • get_page_icon_url(project_name, page_title): ページアイコンURL取得
    • get_file(file_id): ファイル(画像など)のダウンロード
  • 認証: connect_sid Cookie による認証(プライベートプロジェクト用)
  • レスポンスモデル: PageListResponse, PageDetail, PageListItem, Line

使用例:

from scrapbox.client import ScrapboxClient

# 認証情報付きでクライアント初期化
with ScrapboxClient(connect_sid="s%3AykQ__xxxxx-...") as client:
    # 全ページリストを取得
    pages = client.get_pages("project-name", skip=0, limit=100)
    
    # 個別ページの詳細取得
    page_detail = client.get_page("project-name", "Page Title")
    
    # 画像ファイルのダウンロード
    image_data = client.get_file("1a2b3c4d5e6f7g8h9i0j.JPG")
notion-client

Notion APIとのやり取りを行うためのPythonクライアントライブラリ。

主な機能:

  • Client / AsyncClient: Notion APIクライアント(同期/非同期)
  • APIエンドポイントへのアクセス:
    • pages.create(): ページ作成
    • blocks.children.append(): ブロック追加
    • data_sources.query(): データベースクエリ
  • ヘルパー関数:
    • iterate_paginated_api(): ページネーションAPIのイテレータ
    • collect_paginated_api(): ページネーションAPIの一括取得
    • is_full_page(), is_full_block(): レスポンス型判定
  • エラーハンドリング: APIResponseError, APIErrorCode
  • ログ設定可能

使用例:

import os
from notion_client import Client

# クライアント初期化
notion = Client(auth=os.environ["NOTION_TOKEN"])

# データベースにページを作成
new_page = notion.pages.create(
    parent={"database_id": database_id},
    properties={
        "Name": {"title": [{"text": {"content": "Page Title"}}]},
        "URL": {"url": "https://scrapbox.io/project/page"},
    },
)

# ページにブロックを追加
notion.blocks.children.append(
    block_id=new_page["id"],
    children=[
        {
            "object": "block",
            "type": "paragraph",
            "paragraph": {
                "rich_text": [{"type": "text", "text": {"content": "Hello, world!"}}]
            },
        }
    ],
)
その他のライブラリ
  • python-dotenv: .env ファイルからの環境変数読み込み
  • httpx: HTTP通信(scrapbox-client/notion-clientが内部使用)

使用API

Scrapbox API

  • ベースURL: https://scrapbox.io/api
  • ページ一覧取得: GET /pages/{project}
  • ページ詳細取得: GET /pages/{project}/{title}
  • ファイル取得: GET /files/{file_id}

Notion API

  • ベースURL: https://api.notion.com/v1
  • データベースページ作成: POST /pages
  • ブロック追加: POST /blocks/{block_id}/children
  • 画像アップロード: external または file タイプを使用

データ変換ロジック

Scrapbox記法 → Notion Blocks 変換

現在実装されている記法
Scrapbox記法 Notion Block Type 実装状態
通常テキスト paragraph
[* 見出し] heading_3 (H3)
[** 見出し2] heading_2 (H2)
[*** 見出し3] heading_1 (H1)
[https://example.com] bookmark or link
[image_url] image
[icon_name.icon] image
[/icons/icon_name.icon] image
`code` code (inline) 部分的
code:filename ブロック code block
table:テーブル名 table block
箇条書き(インデント) bulleted_list_item
[link text] 内部リンク(通常テキストとして扱う)
#tag タグとして抽出(Multi-selectへ)
> 引用文 quote
Scrapbox記法の完全なリスト(公式Syntax参照)
テキスト装飾
Scrapbox記法 説明 実装状態 優先度
[[文字列]] 太字(bold) -
[* 文字列] 太字(bold)※文中の場合 -
[** 文字列] 太字(bold)※文中の場合 -
[- 文字列] 取り消し線(strikethrough) -
[_ 文字列] 下線(underline) -
[/ 文字列] 斜体(italic) -
`code` インラインコード -
[! 文字列] 赤背景 -
[# 文字列] 緑背景 -
[% 文字列] 青背景 -

注: Scrapboxでは行頭の [* 見出し] が見出しで、文中の [* 文字列] が太字として扱われる。見出しは行全体が [*...] の形式の場合のみ。

見出しレベルのマッピング:

  • Scrapboxでは * の数が多いほど文字が大きくなる([***] > [**] > [*]
  • Notionでは # の数が多いほど文字が小さくなる(# > ## > ###
  • そのため、アスタリスクの数を逆にマッピング:
    • [*] (1個) → Notion H3 (###)
    • [**] (2個) → Notion H2 (##)
    • [***+] (3個以上) → Notion H1 (#)
  • 引用記号 > と見出しが組み合わさった場合(> [* 見出し])は、引用を無視して見出しとして扱う
リンク
Scrapbox記法 説明 実装状態 優先度
[リンクテキスト] 内部リンク(同一プロジェクト) ✅(テキスト化) -
[page#fragment] フラグメント付き内部リンク
[/project/page] クロスプロジェクトリンク
[リンクテキスト URL] 外部リンク(表示テキスト付き) -
[URL リンクテキスト] 外部リンク(表示テキスト付き・逆順) -
http://example.com URL自動リンク 部分的
#ハッシュタグ ハッシュタグ(内部リンク) ✅(タグ抽出) -

フラグメント付き内部リンクの変換:

Scrapboxでは [page#fragment] 形式で同一プロジェクト内のページの特定セクションへリンクできます。これをNotionでは外部URLリンクとして変換します。

  • [PageTitle#section]https://scrapbox.io/{project}/PageTitle#section へのリンク
  • [ページタイトル#セクション]https://scrapbox.io/{project}/ページタイトル#セクション へのリンク

クロスプロジェクトリンクの変換:

Scrapboxでは [/project/page] 形式でScrapbox内の他のプロジェクトへリンクできます。これをNotionでは外部URLリンクとして変換します。

  • [/icons/hr]https://scrapbox.io/icons/hr へのリンク
  • [/help-jp/記法]https://scrapbox.io/help-jp/記法 へのリンク

クロスプロジェクトリンクのフラグメント:

クロスプロジェクトリンクもフラグメントをサポートします:

  • [/project/page#fragment]https://scrapbox.io/project/page#fragment へのリンク

アイコン記法との違い:

  • [/icons/hr.icon] → アイコン画像として表示(--icon フラグ使用時)
  • [/icons/hr] → Scrapboxページへのリンク(常に変換)

実装方針:

  1. / で始まり .icon で終わらないパターンを検出
  2. https://scrapbox.io/project/page 形式のURLに変換
  3. Notionでは外部リンク(link_url)または bookmark ブロックとして表示
メディア
Scrapbox記法 説明 実装状態 優先度
[image_url] 画像埋め込み -
[youtube_url] YouTube埋め込み 対応不要
[vimeo_url] Vimeo埋め込み 対応不要
[spotify_url] Spotify埋め込み 対応不要
[soundcloud_url] SoundCloud埋め込み 対応不要
[twitter_url] Twitter埋め込み 対応不要
構造
Scrapbox記法 説明 実装状態 優先度
[* 見出し] 見出しレベル3 (H3) -
[** 見出し] 見出しレベル2 (H2) -
[*** 見出し] 見出しレベル1 (H1) -
> [* 見出し] 引用付き見出し → 見出しとして扱う -
スペースによるインデント 箇条書き ✅(最大2階層) -
code:filename コードブロック -
table:テーブル名 テーブル記法

箇条書きのネスト制限:

Notion APIの制限により、箇条書きのネストは最大2階層(トップレベルを含めて合計3レベル)までサポートされています。

  • トップレベル(インデントなし)
    • 第1階層(インデント1)
      • 第2階層(インデント2)
        • 第3階層(サポートされない)

Scrapboxで3階層以上のネストがある場合、インデントレベル3以降はすべて第2階層にまとめられます。

例(Scrapboxの深いネスト):

test0
 test1
  test2
   test3
    test4

Notionでの表示:

test0
- test1
  - test2
  - test3(第2階層に配置)
  - test4(第2階層に配置)

これはNotion API仕様による制限です(エラー: bulleted_list_item.children[0].bulleted_list_item.children[0].bulleted_list_item.children should be not present)。

アイコン
Scrapbox記法 説明 実装状態 優先度
[icon_name.icon] プロジェクト内ページのアイコン画像 🚧 実装中
[/icons/icon_name.icon] /iconsプロジェクトのアイコン画像 🚧 実装中

アイコン記法の詳細:

Scrapboxのアイコン記法は、指定したページに設定されているアイコン画像を表示する機能です。

  • [icon_name.icon]: 同じプロジェクト内のicon_nameページのアイコン画像を表示

    • 実際のURL: https://scrapbox.io/api/pages/{project}/icon_nameimage フィールドから取得
    • 例: [hr.icon] → プロジェクト内のhrページのアイコン画像
  • [/icons/icon_name.icon]: /iconsプロジェクトのicon_nameページのアイコン画像を表示

    • 実際のURL: https://scrapbox.io/api/pages/icons/icon_nameimage フィールドから取得
    • 例: [/icons/hr.icon]/iconsプロジェクトのhrページのアイコン画像

実装方針:

  1. パーサーでアイコン記法を検出(.icon]で終わるパターン)
  2. /icons/で始まる場合はiconsプロジェクト、それ以外は現在のプロジェクトから取得
  3. Scrapbox APIのget_pageを使ってページ情報を取得し、imageフィールドからアイコン画像URLを取得
  4. 取得した画像URLをNotion APIで画像ブロックとして追加

参考: https://scrapbox.io/help-jp/アイコン記法

引用・吹き出し
Scrapbox記法 説明 実装状態 優先度
> 引用文 引用(quote)
その他
Scrapbox記法 説明 実装状態 優先度
空行 パラグラフ区切り -
--- 水平線
実装の注意事項
  1. テキスト装飾の入れ子: Scrapboxでは [[*文字列]] のような入れ子が可能だが、Notionでも同様に対応する必要がある
  2. 内部リンク: Scrapboxの内部リンクは移行後のNotionでは同名ページへのリンクに変換可能(データベース内検索が必要)
  3. リッチテキスト: Notion APIでは rich_text 配列で複数のスタイルを表現可能
  4. テーブル: Notion APIでは table ブロックがあるが、複雑な構造のため対応は慎重に
  5. 数式: Notionでも equation ブロックで対応可能
優先実装すべき記法
  1. 太字・斜体・取り消し線などのテキスト装飾: 最も頻繁に使われる
  2. 外部リンク(表示テキスト付き): [Google https://google.com] 形式
  3. 引用ブロック: 一般的な記法
  4. テーブル記法: データ整理に有用
対応不要の記法
  • メディア埋め込み: YouTube、Vimeo、Spotify、SoundCloud、Twitter等の外部サービス埋め込みは対応しない
  • これらのURLは通常のbookmarkまたはリンクとして扱う

エラーハンドリング

  • APIレート制限への対応(リトライロジック)
  • ページ移行失敗時のログ記録
  • 部分的な移行失敗時の続行可否判断
  • 画像ダウンロード失敗時の代替処理

ログ出力

  • 移行進捗状況の表示
  • エラー・警告のログ記録
  • 移行完了後のサマリー表示

実行フロー

1. 環境変数の読み込み(.env)
   ↓
2. Scrapbox APIから全ページリストを取得
   ↓
3. 各ページに対して以下を実行:
   a. ページ詳細を取得
   b. タグを抽出
   c. 画像URLを検出・ダウンロード
   d. Scrapbox記法をNotion Blocks形式に変換
   e. Notionデータベースにページを作成
   f. 画像をアップロード
   g. ブロックをNotionページに追加
   ↓
4. 移行結果のサマリーを表示

コマンドラインインターフェース

# Notion移行コマンド
sb2n migrate                      # 基本的な実行(.envファイル使用)
sb2n migrate --env-file /path/to/.env  # .envファイルを指定
sb2n migrate -P project -S sid -N token -D db  # コマンドラインで認証情報を指定
sb2n migrate --dry-run            # ドライラン(実際には移行しない)
sb2n migrate --pages "ページ1,ページ2"  # 特定のページのみ移行
sb2n migrate --skip               # 既存ページをスキップ
sb2n migrate --icon               # アイコン画像も移行

# 内部リンク復元コマンド
sb2n restore-link                 # 移行済みページの内部リンクを復元
sb2n restore-link --dry-run       # リンク復元のドライラン
sb2n restore-link --pages "ページ1"  # 特定ページのみ処理
sb2n restore-link -N token -D db  # コマンドラインで認証情報を指定

# Markdownエクスポートコマンド
sb2n export                       # デフォルト(./out)にエクスポート
sb2n export -d /path/to/output    # 出力先ディレクトリを指定
sb2n export --limit 10            # エクスポートするページ数を制限
sb2n export -P project -S sid     # コマンドラインで認証情報を指定

migrate コマンド

ScrapboxページをNotionデータベースに移行します。

migrate のオプション

共通オプション(全コマンド共通)
  • -P, --project TEXT: Scrapboxプロジェクト名(.envのSCRAPBOX_PROJECTを上書き)
  • -S, --sid TEXT: Scrapbox connect.sid cookie(.envのSCRAPBOX_COOKIE_CONNECT_SIDを上書き)
  • -N, --ntn TEXT: Notion統合トークン(.envのNOTION_API_KEYを上書き)
  • -D, --db TEXT: NotionデータベースID(.envのNOTION_DATABASE_IDを上書き)
  • --env-file PATH: 環境変数ファイルのパス(デフォルト: .env
  • -v, --verbose: 詳細ログを出力
migrateコマンド固有のオプション
  • --dry-run: 実際には移行せず、動作を確認
  • --limit N: 移行するページ数の上限
  • -s, --skip: Notionに既存のページをスキップ
  • --icon: Scrapboxのアイコン記法([icon.icon])の画像も移行

export コマンド

ScrapboxページをMarkdown形式でエクスポートします。画像ファイルは assets/ ディレクトリに保存され、Markdownファイルから相対パスで参照されます。

使用例

# デフォルトディレクトリ(./out)にエクスポート
sb2n export

# 出力先を指定
sb2n export -d ./my-export

# 件数制限付きでエクスポート
sb2n export --limit 10

出力構造

output-dir/
├── assets/              # 画像ファイル
│   ├── abc123def456.png
│   ├── 789ghijk012.jpg
│   └── ...
├── page1.md            # Markdownファイル
├── page2.md
└── ...

変換内容

Scrapbox記法 Markdown出力
[* 見出し] ## 見出し
[** 見出し] ### 見出し
[*** 見出し] #### 見出し
[[太字]] **太字**
[/ 斜体] *斜体*
[- 取り消し線] ~~取り消し線~~
[_ 下線] <u>下線</u>
`コード` `コード`
[! 赤背景] <span style="background-color: #ffebee">赤背景</span>
[# 緑背景] <span style="background-color: #e8f5e9">緑背景</span>
[% 青背景] <span style="background-color: #e3f2fd">青背景</span>
[画像URL] ![image](assets/xxx.png)
[リンクテキスト URL] [リンクテキスト](URL)
[/project/page] [https://scrapbox.io/project/page](https://scrapbox.io/project/page)
リスト項目 - リスト項目
> 引用 > 引用
code:python ```python

export のオプション

共通オプション(全コマンド共通)
  • -P, --project TEXT: Scrapboxプロジェクト名(.envのSCRAPBOX_PROJECTを上書き)
  • -S, --sid TEXT: Scrapbox connect.sid cookie(.envのSCRAPBOX_COOKIE_CONNECT_SIDを上書き)
  • --env-file PATH: 環境変数ファイルのパス(デフォルト: .env
  • -v, --verbose: 詳細ログを出力
exportコマンド固有のオプション
  • -d, --output-dir DIR: 出力先ディレクトリ(デフォルト: ./out
  • --limit N: エクスポートするページ数の上限
  • --pages TEXT: カンマ区切りで特定のページのみエクスポート
  • -s, --skip: 既存ファイルをスキップ

注意事項

  1. 画像のダウンロード: Scrapbox内の画像および外部画像URLはすべてダウンロードされ、assets/ ディレクトリに保存されます
  2. ファイル名: ページタイトルがそのままファイル名になります。特殊文字は _ に置換されます
  3. 相対リンク: Markdown内の画像参照は相対パス(assets/xxx.png)で記述されます
  4. Notion移行不要: このコマンドはScrapbox APIのみを使用し、Notion APIは不要です

restore-link コマンド

移行済みのNotionページ内にあるScrapbox内部リンク([ページ名] 形式)を、Notion上の実際のページリンクに変換します。

背景

Scrapboxでは [ページ名] という記法で同じプロジェクト内の他のページへのリンクを作成できます。sb2n migrate による初回移行時は、これらは通常のテキストとして扱われます。restore-link コマンドは、移行後にこれらの内部リンクを復元し、Notion上でも適切にリンクとして機能させます。

動作仕様

  1. 既存ページの取得

    • Notionデータベース内の全ページを取得
    • 各ページのタイトルとページIDをマップとして保持
  2. ブロックの走査

    • 各ページのブロックを再帰的に取得(子ブロックも含む)
    • テキストを含むブロック(paragraph, heading, list, quote等)を対象
  3. 内部リンクパターンの検出

    • [ページ名] パターンを検出
    • ただし、以下は除外:
      • 既にリンクとして設定されているもの(link_url が存在)
      • 外部URL形式(http://https:// を含む)
      • 画像URL(画像拡張子で終わる)
      • Scrapbox特殊記法([* text], [- text], [/ text], [_ text], [[text]], `code`
  4. リンクの置換

    • 検出された [ページ名] の「ページ名」が、同じデータベース内に存在するか確認
    • 存在する場合、そのテキスト部分をNotionのページリンク(mention)に置換
    • rich_text配列を更新し、ブロックを更新
  5. 進捗とエラー処理

    • 処理済みページ数と更新されたリンク数を表示
    • エラーが発生してもスキップして継続
    • 最終的なサマリーを表示

コマンドオプション

# 基本的な実行
sb2n restore-link

# ドライラン(実際には更新しない)
sb2n restore-link --dry-run

# 特定のページのみ処理
sb2n restore-link --pages "ページ1,ページ2"

# 詳細ログを表示
sb2n restore-link --verbose

処理例

Before (Scrapbox風のテキスト):

This is a reference to [HomePage] and [Another Page].

After (Notionリンク):

This is a reference to @HomePage and @Another Page.

(実際のNotion APIでは、mention タイプのrich_textとしてページリンクが設定されます)

制約事項

  1. 曖昧さの解決: 同名のページが複数存在する場合は、最初に見つかったページにリンクされます
  2. 大文字小文字: ページ名の大文字小文字は区別されます(完全一致のみ)
  3. 部分一致: [ページ名の一部] のような部分一致はサポートしません
  4. 更新頻度: このコマンドは移行後に1回実行することを想定しています。頻繁な実行はAPI制限に注意が必要です

実装における注意点

  1. rich_text構造の維持: リンク置換時に既存の装飾(bold, italic等)を保持
  2. ブロック更新API: Notion APIの blocks.update を使用
  3. ページメンション形式: {"type": "mention", "mention": {"type": "page", "page": {"id": "page_id"}}}
  4. バッチ処理: 大量のページを処理する際のAPI制限対策

懸念

  1. Scrapboxの全ての記法がNotionで完全に再現できるわけではない
  2. Scrapboxの内部リンク構造はNotionでは単純なテキストとして扱う
  3. 大量のページを移行する場合、API制限により時間がかかる可能性がある
  4. Gyazo以外の外部画像サービスについては対応が限定的な場合がある

今後の拡張可能性

  • 双方向同期機能
  • 段階的な移行(バッチ処理)
  • カスタムマッピング設定(プロパティのカスタマイズ)
  • Scrapboxのバックリンク情報の保持

参考リンク