SODA Engineering Blog
📒

エンジニアのための「Notion」入門

2023/01/25に公開

株式会社SODAの社内勉強会で使用した資料です

こちらは株式会社SODAのエンジニア社内勉強会にて @decoch が発表したときの資料です。
株式会社SODAについては以下リンクなどをご覧ください。

https://recruit.soda-inc.jp/
https://recruit.soda-inc.jp/engineer

これはなに?

いま流行りの Notion を使っている方は多いと思うのですが、いまいち使いこなせていない、メモ帳としては使っているけどデータベースってなに? というエンジニアの方向けに Notion の使い方を書いた入門記事です。

Notion とは


notion.so からお借りしました

ドキュメントやテーブルだけでなく望み通りに機能するようにカスタマイズできるワークスペースです。

基本的な使い方

新しくページを作りメモをとったりチェックボックスでタスクを管理したり、Markdown のように使うことができます。

/ と打つことでサジェストされ /page と入力し決定をすると新しいページを作成できます!

ページ内ではマークダウンのようにメモを取ることができ、

  • #, ##, ### でタイトル
  • - で Bullet List
  • 1. で Numbered List

チェックボックスやトグルなども作成できます。

チェックボックス トグル

Database と RDB の比較

ここではエンジニアの方向けにDatabaseをRDBと比較します。
/database で新しいデータベースを作成することができ RDB のテーブルのようにデータを扱うことができます。

Notion MySQL
データベース テーブル
プロパティ カラム
ページ レコード
フィルター where
ソート order
リレーション join
ロールアップ select 小テーブル.カラム
フォーミュラ select 計算式

タスク管理ツールを作ってみよう

今回はスクラム開発で行えるような以下のような仕様を満たすタスク管理ツールを作りながら Notion の説明をしていきます。

  • Sprint に対して複数の Task が紐づく
  • Task に対して複数 SubTask が紐づく
  • SubTasks はタスクの大きさを表すポイントと進捗を表すステータスを持つ
  • Task には SubTask の総ポイントを表示できる
  • Sprint は Tasks の合計ポイントと完了の進捗率が表示できる


データ構造

UML
@startuml
entity sprints as "Sprints" {
  + id [PK]
  --
  number [スプリント番号]
}

entity tasks as "Tasks" {
  + id [PK]
  --
  name [名前]
}

entity sub_tasks as "SubTasks" {
  + id [PK]
  --
  sprint_id
  epic_id
  name [名前]
  point [ポイント]
  status [ステータス]
}


 sprints ||-d-o{ tasks
 tasks ||-o{ sub_tasks
@enduml

データベース作成

まずは3つのデータベースを作成し必要なプロパティの設定を行います。

Sprints Tasks SubTasks

リレーションの追加

MySQL では関係性を Tasks が SprintId を保持し FK を貼るといった形で実現しますが、
Notion では Sprints と Tasks にリレーションを貼ることで実現します。


プロパティを追加してリレーションを選択


リレーションで該当のデータベースとその関係性を設定する

同様に SubTasks にも設定すると現在のデータベースは以下のようになります。

Sprints Tasks SubTasks

ここまでの作業をすることで仕様の中の、

  • Sprint に対して複数の Task が紐づく
  • Task に対して複数 SubTask が紐づく
  • SubTasks はタスクの大きさを表すポイントと進捗を表すステータスを持つ

を実現することができました!

ロールアップで子データベースのプロパティを表示


Tasks にロールアップのプロパティを追加する


SubTasks のポイントをロールアップで集計する


ロールアップのロールアップをすることはできないので一度フォーミュラのプロパティを作成する


集計したポイントを数字として扱えるように toNumber する


Sprints で Tasks の集計したポイントをまた集計する

MySQL であれば join や group_by を使うことができるので簡単に集計できますが、
Notion だとロールアップやフォーミュラを使う必要がありちょっと複雑になってしまいます。

フォーミュラとロールアップで進捗を表示

進捗率を表示するためには完了したポイント数と全体のポイント数を割れば表示することができるので、Notion でも実現をしていきます。
今回は Notion のフォーミュラの if を使い Done の場合のみポイントを加算するようにして実現します。


フォーミュラで Done ではない場合 Point が 0 になるようにする


フォーミュラの設定後

その後「ロールアップで子データベースのプロパティを表示」と同様に Tasks の設定をし Sprints の設定を行っていきます。


フォーミュラで進捗を100%で表示できるように計算する


計算した結果をもとにプログレスバーを表示する

最終的なデータベース

Sprints Tasks SubTasks

最後に

Notion は苦手意識がある方も多いと思いますが、エンジニアにとって馴染みのある Markdown や RDB のように捉えるとわかりやすいのではないかと思い記事を書いてみました。
Notion をまだ使ったことない人やメモ帳としては使っているけどデータベースはよくわからないという方は、この記事を参考にしていろいろな機能をカスタマイズしてくれると嬉しいです!

SODA Engineering Blog
SODA Engineering Blog

Discussion