NotionをGitHubに自動バックアップ【プログラミング不要】

ビジネス

最近、Notionという新しいドキュメント管理ツールが話題になっています。
手軽に文章の作成や整理を行う事ができます。
エンジニアの方は利用している人も多いと思います。

しかし、新しいサービスであるため、将来性などに不安があります。
サービス終了やサイバー攻撃で、ある日突然、皆さんの書き溜めたNotionのデータが消えてしまう危険もあるのです。

そのため、今回はNotionを定期的にバックアップを行うシステムを構築していきたいと思います。

方針

まずは全体の方針を整理します。

バックアップ先としては、GitHubを用いて行います。
理由としては、差分管理ができ、日々更新されるNotionとの相性も抜群だからです。

バックアップを自動で行うため、一度にバックアップ作業を行い、トークンを取得しておきます。
そこで得たトークンを用いて、プログラムで定期的にバックアップデータを取得します。

ツールは、GitHub Actionsを利用します。
GitHub Actionsの詳しい説明は省きます。
今回は、条件に応じて自動的に決まった処理を行うための仕組みと理解していれば十分です。

またここで説明する方法は、以下のリンクを参考にしたものです。

GitHub - darobin/notion-backup: Simple command to backup a Notion workspace
Simple command to backup a Notion workspace. Contribute to darobin/notion-backup development by creating an account on GitHub.

注意:私の環境では、言語設定が英語で、ダークモードなので見た目が違いますが、基本的なボタンの配置などは同じです。

GitHubのリポジトリ準備

GitHubで新しいリポジトリから、Notionのバックアップデータを保存するためのリポジトリを制作します。

リポジトリ内にはアクセスキーを書き込む必要あるため、モードは「Private」を選択します。
以下のように設定し、「Create repository」をクリックします。

Notionのトークン取得

ご自身のNotionにアクセスし、“Settings & Members” → “Settings”をクリック。

Notionの画面で、「デベロッパーツール」を起動(Chromeブラウザの場合、Command+Option+J (Mac)、Control+Shift+J (Windows))します。
その後、以下の画像に示すように作業を進め、トークン情報を表示します。

エクポート作業が終われば、enqueueTaskHeadersタブには、色々な項目が表示されています。
必要になる値は、token_v2spaceIdです。

まずtoken_v2からです。Request Headers > cookieの値を右クリックでコピーします。

その値の中から、以下のような表示を探し(メモ帳などで検索機能を使うと楽です)、token_v2xxxの部分を記録しておきます。
※ 実際にxxxの部分はものすごく長いです。

token_v2=xxx;

次にspaceIdです。画像のようにRequest Payloadの値をコピーして保存します。

同様にその値の中から、以下のような表示を探し、xxx-xxx-xxx-xxx-xxxを記録しておきます。

spaceId: “xxx-xxx-xxx-xxx-xxx”

GitHub Actionsの設定

GitHub Actionsは、リポジトリ内に.github/workflowsというフォルダを作り、そこにYAMLファイルを書き込むことで設定できます。

まずは、作成したGitHubのリポジトリ内で、.github/workflowsというフォルダを作ります。

そのフォルダ内で、.github/workflows/whatever.ymlという名前で、ファイルを作成し、以下の内容を書き込み保存します。
その際に、先ほど取得したNOTION_TOKENNOTION_SPACE_IDを書き込みます。

name: "Notion backup"

on:
  push:
    branches:
      - master
  schedule:
    -   cron: "0 */4 * * *"

jobs:
  backup:
    runs-on: ubuntu-latest
    name: Backup
    timeout-minutes: 15
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: '12'
      - name: Setup dependencies
        run: npm install -g notion-backup

      - name: Run backup
        run: notion-backup
        env:
          NOTION_TOKEN: [ここにtoken_v2の値を貼り付ける]
          NOTION_SPACE_ID: [ここにspaceIdを貼り付ける]

      - name: Delete zips
        run: rm -f *.zip

      - name: Commit changes
        uses: elstudio/actions-js-build/commit@v3
        with:
          commitMessage: Automated snapshot

お疲れ様です!
以上で全ての作業が終了です。

whatever.ymlがmasterブランチにアップロードして、少し待つと、以下のように自動的に指定した形式でファイルが保存されます。

メンテナンス

前節で設定したクッキー値が、一定期間で無効になります。

クッキーが無効になるとバックアップに失敗し、上のようなメールが届きます。

この際に、前節と同じ作業を行い、NOTION_TOKENNOTION_SPACE_IDを再設定してください。

私の場合は、1ヶ月くらいで再設定が必要でした。

まとめ

Notionは、使いやすく、見た目もオシャレで便利なサービスです。
しかし、まだ微妙に機能が足りないことがあり、その場合には自分でなんとかするしかありません。

個人的に、バックアップ機能は非常に重要だったので、今回その方法についてまとめました。

この記事が、皆さんのお役に立てれば幸いです!

コメント

タイトルとURLをコピーしました