会社の公用ドキュメントツールをDocbaseからNotionに変更した件

## はじめに
こんにちは。
Z-meこと、株式会社ABEJAの齋藤 創です。

この記事は
ABEJA Advent Calendar 2021の
10日目の記事です。

---
本記事は
Qiitaのスライドモード前提で記載していますので、
読む際はスライドモードをご利用ください。

※ コンテンツが大きい場合が多いので、スライドモードの全画面表示を推奨します。

---
##### ※注) <font color="crimson">本記事はDocbaseを批判するものではありません。 </font> <br><br> むしろ<br><br>「運用上の心構えを定めてから運用していくべきだったなぁ」<br><br>と反省している限りです。(’・ω・`)
---

## 第1章<br>Notionを公用ドキュメントツールにした経緯

---

### 1-1: Notionとは?
「Notionとはなんぞや」ということをざっくりと紹介すると

---
#### ① 様々な表現方法を実現
画像やリストなどの情報も自由に記載
![スクリーンショット 2021-11-29 17.50.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/053dbda1-b68f-07d0-4425-c58d1196b0ca.png)

---
#### ② ページに対し、関連情報を階層的に管理
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/6a89749d-b82e-d7b8-83ba-da9f33d1de45.png)

> - Homeとなる親ページに対して、各種項目に関する子ページを作成
> - 各種項目に関する子ページに対して、より詳細な情報を内包する孫ページを作成
> - 等
> と、関連性を持ってページを作成していくことが可能


---
#### ③ データベース(以下、DB)の要素を導入
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/e17d8e03-2106-e5f2-9520-f06b571a91d5.png)

> 一覧表示や情報のソート、簡単な計算処理や他のDBへのコネクションの作成など、DBとしての様々な機能を有する
> 表示方法に関しては、ギャラリー表示や、リスト表示、カレンダー表示など、データの内容に応じて様々なビューを作成することが可能

---
#### ④ 他ページからページやDBの参照
- ページ内で他のページへのリンクやDBを呼び出しが可能
    - ページの閲覧者が、呼び出す対象ページやDBの公開範囲に含まれない場合、対象ページ or DBは非表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/38696bd3-1618-c395-7c9c-a0ae3feb1379.png)


---
#### 等、Notionはドキュメントを関連付けて管理することが可能な、クラウドドキュメントツール

---
##### 一方で、Docbaseとは…
---
### 1-2: Docbaseとは

ABEJAでは今までDocbaseを利用していました。

DocbaseはMarkdown形式をリアルタイムで整形しながら記述することができるクラウドメモツールです。

---

#### Docbaseの利点
- Markdown形式で記載が可能
- 誰でも気軽にメモを追加することが可能
- 多くの集合知を集めることが可能


---
### 1-3: ABEJAがNotionに切り替えたワケ

Q. Docbaseだとどんな課題があった？
Q. Docbase利用の反省点は？
Q. Notionをどのように活用したい？

---
##### ここでもう一度

---
##### ※注) <font color="crimson">本記事はDocbaseを批判するものではありません。 </font> <br><br> むしろ<br><br>「運用上の心構えを定めてから運用していくべきだったなぁ」<br><br>と切に反省している限りです。(’・ω・`)

---
##### Q. Docbaseだとどんな課題があった？
---
#### ABEJA背景
ABEJAでは様々なスキルを持ったメンバーが在籍し、プロジェクト・チームに対してそれらの知識や経験を発揮してバリューを出しています。

---
#### ABEJA課題
新しいメンバーが該当プロジェクトに参加したり、他のチームから応援が来たりする場合、そのプロジェクトの概要などの情報のキャッチアップが必要となりますが、そのキャッチアップにおいて、今まで現状把握のために多くのメンバーの工数を必要としてしまっていました。

---
#### ABEJAでのDocbase利用の課題
1. メモを無作為に作成していくため、メモ自体の検索性があまり良く無い
2. チームメンバー以外、どこに情報があるのかわからない
    - チーム内でもわからなくなっている可能性がある
3. チーム内でのみ共有されている情報(以下、暗黙知)として蓄積されてしまっている

---
#### ①実際に発生した課題
- 作成されたメモの所在がわからなくなり、参照できない
    - 見つけるのに時間をかけてしまう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/deeafcbb-6686-64bc-09d6-1edb38360a45.png)

---
#### ②実際に発生した課題

- 定例などの議事録において、1つのメモにまとめて議事録を記載
    - 一つのメモが長大になり、どこに探している情報があるのかわからない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/b975261d-ef78-6133-f954-006dd0cbe213.png)


---
#### ③実際に発生した課題

- 秘匿性の高いメモを個々人で管理しており、管理していたメンバーが退社した際に、その管理ができなくなる
    - 編集権限を誰も持たないため管理できなくなってしまう可能性がある
    - どこにその機密情報があるのかすらわからなくなる
    - Docbaseのアカウントを失効させた際に併せて損失している可能性が高い

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/1e673a8b-ef48-a676-47e9-c554b8f72747.png)


---
#### 発生しうる課題

このように、メモが発見しづらい状態であり
チーム内ですら、メモの所在が不明になることがある。
古い情報が修正されないままメモとして残り続けてしまう。

---
#### Docbase利用の課題
情報が暗黙知化されているため、その情報の所在や内容自体がある種のブラック・ボックス化している。

この状態は新しいメンバーがそのチームへ参加するためのキャッチアップ時に、非常に大きな壁となる。

---
### Docbase運用の反省点
そもそも暗黙知が発生してしまうことが問題であるため、情報の分散や暗黙の生成がされないように検討した上で運用ルール、特に情報のつながりが分かるようにポータルページの運用に関するルール等を確立してから、運用を進めるべきでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/0054ecdd-7521-00c2-13c2-ff442c9dde83.png)

---
###　1−4: Notionに期待することは？
---
#### Notionへの期待
- 社内で蓄積されていく情報の透明性の向上
- 「〇〇のポータルページを見たら、〇〇に関して凡そ分かる」状態を維持して運用

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/5e765dfb-c390-8180-9114-03cd2fa1d8b2.png)

---
##### ① ABEJAでのNotion利用の理想の姿
先程の課題を解決する上でも、情報の透明性を上げて運用し続けることで、新しく参画したメンバーが快く業務にJoinすることができるようなってほしい

---
##### ② ABEJAでのNotion利用の理想の姿
Notion内での情報の発信も容易になるため
社内での困っている事や、使っている技術に対してスキルや経験があるメンバーの方から「お手伝いできますよ」と声をかけてもらうこともできるような環境の基礎として運用されるように願っています。

---
## 第2章<br>DocbaseからNotionへの移行
---
### 2-1: 【重要】 気をつけなければならないこと
---
#### 移行の前提条件
ABEJAでは情報透明性を担保するため、基本的にWordSpace配下のページはすべての参加者に対して`Can edit`もしくは`Full Access`の権限を付与する。

---
#### 機密情報の問題
移行スクリプトを実行した際、Docbase上の全体公開されていない、__<font color="darkorange">社内の機密情報系のドキュメントも同様にFull Accessの対象になってしまう。</font>__

---
#### 🔥もちろんそんなことは絶対に避けなければならない🔥

---
#### 解決策
実施のフローを安全に進め、機密情報が公開されないように注意を払う

---
##### 実施フロー(予定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/5392a85e-3232-21a8-a508-752a3688c3d6.png)


> 1. 手順（フロー)の検討
> 2. Docbaseのグループのうち機密情報を管理しているグループをリストアップ
> 3. ↑の担当者をアサイン
> 4. 並行作業
>     - 【担当者】
>         1. 機密情報メモの洗い出し
>         2. 機密情報メモの移行
>         3. 機密情報メモの移行確認
>     - 【わたし】
>         1. 機密情報ではないグループに対してグループに参加
>         2. 移行スクリプトの実装
>         3. 対象メモのエクスポート
>         4. 移行スクリプト実行
>         5. Docbaseメモの移行確認

---
### 2-2: 移行スクリプトに関して
---
### 2-2: 移行スクリプトに関して
1. DocbaseはMarkdownファイルを出力できる
2. NotionにはAPIがある

---
#### 結構楽にNotionに移行できると<font color="crimson">思っていた…</font>。
やりたかったこと
1. Markdownファイルを読み込み
2. NotionAPIからNotionのDBに投入

---
#### 現状
Notion APIではBlockという概念があり、Markdownのテキスト以外（ヘッダーとかリストとか）の要素に対して、それぞれpayloadにフォーマットを指定しなればならない。

---
つまり、APIを利用するためには膨大にあるマークダウンをすべてブロック単位で変換をしなければならない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/b86f8bed-b456-7f48-4b21-699885f59255.png)


---
#### ちょっと無理なので、別の方法を再検討

---
#### NotionはMarkdownファイルを___<font color="Red">一括インポート</font>___可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/8b0b512a-7267-89fa-3666-5d9708b72000.png)

---
##### 伴って実施フローを修正
---
##### 実施フロー(確定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/3b8e4900-efc9-61df-242f-f82644dc7ee8.png)

> 1. 手順（フロー)の検討
> 2. Docbaseのグループのうち機密情報を管理しているグループをリストアップ
> 3. ↑の担当者をアサイン
> 4. 並行作業
>     - 【担当者】
>         1. 機密情報メモの洗い出し
>         2. 機密情報メモの移行
>         3. メモの移行完了確認
>     - 【わたし】
>         1. 機密情報ではないグループに対してグループに参加
>         2. 移行スクリプトの実装
>         3. 対象メモのエクスポート
>         4. 移行スクリプト実行(ファイル名変更)
>         5. メモのインポート(マニュアル)
>         6. Docbaseメモの移行確認

---
#### Notionにインポートするために(前提条件)
- ダウンロードしたファイル名は、DocbaseのファイルID
- ダウンロードしたメモのタイトルは、ファイルの１行目
- Notionにインポートした際のページ名は、ファイル名

```markdown
#{1234567} // Docbaseでのページ差し込みにファイルIDを利用している
```
---
#### ダウンロードしたファイルのファイル名を一括変更するスクリプトを作成
(実装的にすごく小さくなってしまいましたが。。。)
___結局ファイル名を変更するだけになったので
シェルスクリプトで実装___

---
#### スクリプト要件
- タイトルにDocbaseのタイトルを含んでいる
- タイトルにDocbaseのファイルIDを含んでいる

---
#### 移行(ファイル名変更)スクリプト

```bash
#!/bin/bash
# OriginalFile内のmarkdownファイルを取得
files=(`ls ./OriginalFiles/ | grep ".md"`)
# for文でファイルのIDを取得
for file_name in "${files[@]}" ;do
    # IDをファイル名から取得
    id=`echo "${file_name}" | sed -e 's/[^0-9]*//g'`
    # ファイルの1行目がメモのタイトルなので、タイトルを取得し
    name="${id}_`head -n 1 ./OriginalFiles/${file_name}`.md"
    # ファイル名として破綻しないように、空白(「 」)とスラッシュ(/)を除外
    fileName=`echo ${name} | sed -e 's/ /_/g' | sed -e 's/\///g'`
    cp ./OriginalFiles/${file_name} ./results/${fileName}
    echo "${fileName}"
done
```

---
### 2-3: 移行作業に関して<br>※2021/12/13追記(ここから)
---

#### インポートされた <font color="royalblue">___Page___</font> を <font color="crimson">___DB___</font> に変換
- 今回のインポート作業でDocbaseからそれぞれ<font color="royalblue">Page</font>として、ドキュメントがインポートされました。

---

#### ファイルのインポート作業
ファイルのインポートはNotionの機能を用いて<font color="crimson">全て手動で</font>実施しました

---
##### インポート手順
1. サイドメニューもしくは右上のメニューからImportを選択
2. Text & Markdownを選択し、対象ファイルを選択
3. Import時、対象が多すぎるとタイム・アウトしてしまった場合の精神的負荷が大きいので、今回は１,０００件ずつ実施
4. データを一纏めにするため、別のページを用意
5. 作成したページにImportした対象を移動
6. Importしたページのタイプを「text」に変更
7. 投入用のDBを作成し、空データを削除
8. Importした対象を選択し、「Move to」から、先程作成したDBに移動
9. ページとして保存されているデータをDBにそのまま格納

---
##### インポート手順(画像)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/b91b54ef-a304-303a-03af-daa857b3a123.png)

---
##### DBに各ドキュメントのIDだけを切り出す
1. ID列を追加
2. TypeをFormulaに指定
3. 「Edit formula」を選択
4. `toNumber(replaceAll(prop("Name"), "_.*$", ""))`を設定

---
##### Edit formulaの中身について ①
- toNumber(): 文字列を数値に変換
- replaceAll(): 対象の文字列を正規表現に応じて置換
- prop("Name"): インポートしたときのファイル名

---
##### Edit formulaの中身について ②
1. ファイル名から、一番最初の「_」以降の文字列を全て削除
    1. "12345678_hogehoge" => "12345678" 
2. ↑で出力された文字列(数字)を数値に変換
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/f31308a2-5d92-7547-07a2-8cdf975422ad.png)

---
### 2-3: 移行作業に関して<br>※2021/12/13追記分(ここまで)
---
## 第3章<br>おわりに

---
### 3-1: 移行作業に関して
本記事を執筆段階(2021/12/09現在)では下記の実施が完了しています。
✔ Docbaseの各種グループ洗い出し
✔ 担当者への確認
✔ 対象メモのエクスポート
✔ 移行スクリプトによるファイル名書き換え
✔ ↑のファイルのインポート

---
### 3-1: 移行作業に関して
残りのタスクは
□ 機密情報の移行
□ 移行後の確認(通常メモ＆機密情報)
となっており、
移行の全行程は、12月中の終了に向けて引き続き移行作業を実施していきます。

---
### 3-1: 移行作業に関して<br>※2021/12/16追記分 ここから
---
### 3-1: 移行作業に関して
残タスクである、「機密情報の移行」と「移行後の確認」を終了し、現在は社内メンバーに向けて、利用時に問題がないかを含めての確認と、Docbaseの解約に向けて動いています

---
### 3-1: 移行作業に関して<br>※2021/12/16追記分 ここまで
---

### 3-2: おまけ
---
```anyResults.sh
[21:32:13]docbaseFiles % ll OriginalFiles | wc -l
  14395 # 移行時に実施したファイル数
[21:32:42]docbaseFiles % ll results | wc -l
  14395 # 移行スクリプトがうまく処理したファイル数
[21:33:09]docbaseFiles % ll Done | wc -l
  14352 # Notionへのインポートができたファイル数
[21:33:09]docbaseFiles % ll Faild | wc -l
  43    # ↑が満たされずに結局手動でインポートしたファイル数
```

---

- かかった時間
    - 対象グループ洗い出し: 1d
    - 対象グループ確認: 1w
    - スクリプト実装: 0.5d
    - スクリプト実行時間: 23s
    - 通常メモのインポート作業: 27h
        - 達成感はプライスレス
    - 機密情報移行: 3d

---
### 3-3 ABEJAでのNotion活用
---
現在Notionを導入してから、おおよそ3ヶ月が経過しました。
そんな中で、簡単にどんな感じにNotinoが利用されているのかご紹介します
(本当にざっくりと)

---
##### English Speaker対応
画像のようにドキュメントを左右に割って、「左を日本語」「右を英語」のように分割して、ドキュメントを共有しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/343fe2ba-ec88-7887-63f4-5e671a3b9e7b.png)


---
##### 議事録DBの利用
ABEJAでは、基本的な議事録は議事録DBを用意して、各プロジェクトのページから`create linked database`で呼び出すようにし、どのプロジェクトでも各チームの議事録を参照できるように(つまりは、議事録を一つのDBに集約)しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/d2b29ae6-52d2-79e6-3dd7-282dfbbfa832.png)

---
##### 個人ページのダッシュボード化
Notionの機能を利用して、自身の業務を管理するダッシュボードを作成するメンバーもいます(下記画像は私のものです)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102773/c95702bf-60f2-91f9-6605-b528d11833cf.png)


---
### 3-4 ABEJAでのNotionのさらなる活用への期待
---
##### ■___情報の所在___
Notionでは情報を階層的に管理することが可能になるため、各チームやプロジェクトがそれぞれのポータルページを作成することで
「あれ？ このドキュメントどこにおいたっけ？」という事象が少なくなると考えています。

---
##### ■___議事録DB___
こちらの議事録DBですが、どんどん情報が蓄積されていることを確認しています。
コレによって社内の情報透明性を担保しながら、通常通り業務ができるように推進していこうと考えています。

---
##### ■___議事録DB___
今後は更にこの議事録DBが活用され、
- 冗長な会議がないか？
- 会議のパフォーマンスが出ているのか？
- プロジェクトの進捗は正常か？
などのデータ分析ができるといいな〜と思っています。
~~(私個人の野望です)~~

---
##### ■___各ポータルページ___
Notionには様々な機能や、webサイトの機能を内包できる `Embed`という機能があるので、それらの機能をプロジェクトが活用して、プロジェクト特有のポータルページを自発的に作って欲しいと考えています。

---
##### ■___各ポータルページ___
今は検討段階ですが、どのプロジェクトのポータルページが`イカしてる`かを社内の全体定例で共有するなどして、よりNotionの活用を活発化していきたいと考えています。

---
### 最後に：ABEJA awaits your joining!
現在ABEJAでは一緒にAIの社会実装を進める仲間を募集しています。
[ABEJA Advent Calendar 2021](https://qiita.com/advent-calendar/2021/abeja) を読んで少しでもいいねとおもったら、まずはお話を聞きに来てください。
[【現在募集中の職種】](https://hrmos.co/pages/abeja/jobs) はこちらから確認できます。ご応募をお待ちしております。