🐙

NotionとGitHubを連携して、Notionのテーブルに連番を振る

2021/09/02に公開

こんにちは、Leaner Technologies の小久保です。

Leaner では社内のドキュメント管理およびタスク管理は Notion を使っています。他にもふりかえりや Timeline view を使った進捗の見える化など役に立ってくれています。
ドキュメントとタスクを同じツールで管理することによるメリットはいろいろあるのですが、純粋にタスク管理としてのツールとしてはイマイチなところもあります。

Notionのテーブルは行ごとに連番を振れない

普通、チームで使うタスク管理ツールはプロジェクトごとにタスクを管理できて、タスクがつくられるたびに id が割り振られます。
その id を通し番号として、ミーティングで呼び名として使ったり、システム連携に活用したりするのがよくある使い方です。

しかし Notion では Table view の行の 1 つ 1 つはページであり、ページには uuid 的な id が割り振られます。
これ自体はまったく問題ないのですが、タスクとして管理するには向いていません。

Notion のページはプロパティを自由に追加・設定できて、簡単な計算もできるのですが、連番を振ることはできません。

https://www.reddit.com/r/Notion/comments/env118/semi_autoincrementing_row_number/

そこでGitHub Issuesのidを連番として活用する

ちょうど Notion の API が Public beta としてリリースされたので、それを活用して何かできないかと考えました。
いろいろ試した結果、以下のような流れでやればいける、ということがわかりました。

  1. Notion の連番をふりたい Database からページを抽出する
  2. ページのタイトル、ページリンクを元に GitHub Issue を作成する
  3. 作成した Issue の issue 番号, url をページのプロパティとして設定する

こうすることで、GitHub の issue 番号を Notion 上の通し番号として使うことができるようになりました。

このツールのリポジトリはこちらです。
https://github.com/YusukeKokubo/create-github-issues-by-notion-database

技術的にもうちょっと詳しいことはこっちに書いてます。
https://zenn.dev/yusukek/articles/f08fd61c8bdc27

Issueをつくった後の情報の同期

issue 番号を割り振ることで、情報の同期もできます。
Notion のページ(タスク)を更新したときに関連する issue のタイトル、状態も更新するようにしています。
(タスクを完了にしたら、issue も closed にする)

const PROPERTY_VALUE_STATUS_DONE = 'Notion上で完了のステータスとして扱ってるラベル(カンマ区切りで複数指定)'
const state = PROPERTY_VALUE_STATUS_DONE.split(',').includes(task.status) ? 'closed' : 'open'

const updatedIssue = await octokit.rest.issues.update({
  owner: process.env["REPO_GITHUB_OWNER"],
  repo: process.env["REPO_GITHUB_REPO"],
  issue_number: task.issue_number, // taskに設定してるissue_numberからissueを特定する
  title: task.title,
  state: state,
})

詳しいことはリポジトリを見てください。
https://github.com/YusukeKokubo/create-github-issues-by-notion-database/blob/main/src/update_issues.ts

今回の連携は Notion から GitHub Issues への一方方向の同期しか想定していません。
GitHub の GFM と Notion の記法があわないので、双方向の同期はちょっと難しい気がしてます。
(Notion は Markdown 形式でエクスポートできるけど Markdown のインポートはできない)

Issueを経由してPull RequestとNotionのタスクを連携する

Notion は公式の GitHub 連携はありません。
Notion をソフトウェア開発のツールとして使ううえで、GitHub や GitLab などのリポジトリと連携できないのはわりと大きなデメリットです。

それがこのツールを活用することで、きれいにリンクされるようになります。

GitHub Actionsを使って定期実行する

Leaner では毎朝 9:30 ごろに job を設定しています。

  1. Notion 上に新規のページが追加されていれば GitHub Issue を作成して番号を割り振る
  2. Notion 上に更新されたページがあれば関連する Issue のタイトル、状態を更新する

ひとまずこれで完成

ということで、Notion のページに通し番号を割り振ることができました。
ミーティング中でも番号で呼べるようになってとてもいい感じです。

このツールでは実現できないこと

このツールをつくることで Notion と GitHub を連携させることはできました。
ただ、それでも純粋なタスク管理のツールには使い勝手の面ではまだ及びません。
たとえば純粋なタスク管理ツールは issue 番号で URL がつくられるのでブラウザの URL バーから直接 Issue 番号を打ち込んで開くことができますが Notion ではできません。

という使い勝手の面では劣りますが、それでもドキュメントとタスクをオールインワンで管理できるメリットが大きいので、まだまだ Notion で頑張ってみたいな、という気持ちです。

宣伝

Leaner Technologies では情報共有やタスク管理について熱く語れるエンジニアを募集しています!

https://careers.leaner.co.jp/

リーナーテックブログ

Discussion