notion-page-repeaterの導入について

はじめに

こんにちは。FIREしてキャンプ三昧の生活を送りたいと思っている@tositeと申します。

先日「社内ツールを作成したと思ったらいつの間にかOSS活動になっていた話」で話していたOSS「tosite/notion-page-repeater」が完成したので使い方の実例を交えつつ紹介していきます。なお、導入についてはGitHub Actionsを用いることを前提としています。

また、現在β版ですので使ってみて不具合などありましたらご連絡いただけると大変助かります。

具体的な導入手順はドキュメントに残してありますが、手順としては大まかに次の通りになります。

  1. Notion側の設定
    1. リピートする設定を保持するSettingsページを複製する
    2. Notion APIトークンを発行する
    3. 自動生成したいページのテンプレートページを作成する
    4. 自動生成したいページのプロパティにDatetimeカラムを作成する
    5. テンプレートページのページIDを1-1.で複製したSettingsページのカラムに記載する
    6. 1-1.で複製したSettingsページ・自動生成したい親ページにAPIからのアクセス許可設定を行う
  2. GitHub側の設定
    1. GitHubシークレットに秘匿情報を記載する
    2. GitHub Actions用のymlファイルを記載する

設定手順

1-1.リピートする設定を保持するSettingsページを複製する


「複製」をクリックします。

1-2.Notion APIトークンを発行する

https://www.notion.so/my-integrationsにアクセスし、「New integration」をクリックします。
以下のように設定します。
  • Name - 自由
  • Associated workspace - 先程Settingsページをコピーしたワークスペース
  • Capabilities - Read content / Update content / Insert content
以下のAPIトークンは後で使用するため控えておきましょう。

1-3.自動生成したいページのテンプレートページを作成する

特に迷うことはないかなと思いますが、ページのテンプレートを作ります。

1-4.自動生成したいページのプロパティにDatetimeカラムを作成する

カラム名は必ず「Date型」で「Datetime」と命名してください。

1-5.テンプレートページのページIDを1-1.で複製したSettingsページのカラムに記載する


先程作成したテンプレートから「Copy link」を選択し、URLを取得します
https://www.notion.so/xxx/657a983eefcd4f84a3b29ed5fe3122b6のうち赤く塗られている部分をコピーします。
議事録テンプレートページのページIDを直接取得する必要がある点に注意してください(テンプレート横の三点リーダーをクリックして「Edit」を選択した上でURLを取得する必要があります)。

1-1.で複製したSettingsページにテンプレートのページIDをペーストします。

1-6.1-1.で複製したSettingsページ・自動生成したい親ページにAPIからのアクセス許可設定を行う

次はAPIからのアクセスを許可する設定を行います。
「Share」から「Invite」をクリックします。
先程設定したAPIトークンに編集許可を与えます。
以下のように「Can edit」になっていたら設定完了です。
この作業をSettingsページと議事録テンプレートを準備したページに対して行います。

2-1.GitHubシークレットに秘匿情報を記載する

続いてGitHubに移ります。
https://github.com/{$user}/{$repo}/settings/secrets/actionsから「New repository secret」を選択します。

1-2.で生成したNotion APIトークンをNOTION_TOKENという名前で追加します。

同様の手順で、1-1.で生成したSettingsページのIDをSETTING_DB_IDキーとして、SlackのWebhookURLをSLACK_WEBHOOK_URLキーとして追加します。

2-2.GitHub Actions用のymlファイルを記載する

name: Notion Page Repeater Demo
on:
  push:
    branches:
      - main
  schedule:
    - cron: '00 * * * *'

jobs:
  sync:
    name: Notion Page Repeater
    runs-on: ubuntu-latest
    container: node:latest
    env:
      TZ: Asia/Tokyo
      LANG: ja_JP.UTF-8
    steps:
      - name: Sync
        uses: tosite/notion-page-repeater@v1
        env:
          NOTION_TOKEN: ${{ secrets.NOTION_TOKEN }}
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
          SETTING_DB_ID: ${{ secrets.SETTING_DB_ID }}

デバッグするのであれば以下のコードと差し替えるとすぐに動作確認できます。
on:
  push:
    branches:
      - main
  pull_request:

このように定期的に議事録が生成されるようになりました。便利ですね。

今後の展望・注意事項

現在、テンプレートページのうちプロパティ(カラム)についてはコピーをすることが可能ですが、テンプレートページのブロックをコピーすることはできません。その場合は作成された空のページからテンプレートを選択するようお願いいたします。
また、祝日スキップの機能は現時点でありません。ページは開催1日前、土日を挟む場合は前日の金曜日にページが作成されます。

この辺りの機能は今後追加していこうと思っています。
ぜひ使っていただき、機能追加の希望などあればIssueからフィードバックいただければありがたいです!