見出し画像

1万超の記事をKibelaからNotionに約1ヶ月で移植した時の失敗談

こんにちは。くふうAIスタジオでQAエンジニアをしている岡です。

私は前回のような文脈でNotion起点で業務を行っていて、トクバイサービスに関わることが多いのですが、グループ内での情報共有に向けて、トクバイの運営会社であるロコガイドのKibelaにあった1万ページ以上の情報をNotionで参照できるようにした事例の紹介とその失敗談です。韻を踏んで1万字書きたかったのですが、5千字程度となります。

前提としては、こちらの記事を参考にしており、記事内でご紹介いただいているkibela-to-notionも一部使わせていただきました。また、社内で以前KibelaをNotionに移植した別の事例も参考にしました。

「いよいよ4月くらいを目安にロコガイドもKibelaからNotionに移行したいんだけど音頭取ってやってみて。もちろん1人でやる必要はないし手伝うよ」という軽いノリで3月頭に始めました。色々な人に協力してもらいつつ、作業期間中ChatGPTにもテクニカル・メンタル面でかなり助けられました。


解決したかったこと

  1. トクバイサービスに関わる情報がNotionとKibelaで散逸せずNotionに蓄積されていく状態にする

  2. Notionに移植する際の最大の課題である画像についてKibelaにあった1万以上のページでトラブルがなるべく減る状態にする。

  3. 長年Kibelaを使ってきていた為、Kibela記事内や、GitHubIssue、Slack等に設置されたKibelaのURLがたくさんあるのでURLから追跡できるようにする

やったこと

順を追ってやったことと各段階での失敗を記載します。各節最初の段落だけ読んで読み飛ばしていただくと良いかなと思います。

①Kibelaからのエクスポート

Kibelaからエクスポートします。

1つめの失敗です。Kibelaの管理者にダウンロード開始の操作をしてもらい、一定時間後ダウンロードリンクが発行されるのですが、そのリンクは管理者にしか使えません。リンクから各自でダウンロードすればいいと気楽に考えていた為、巨大なZIPファイルのダウンロード→アップロード→ダウンロードという手間があり、少し手間に感じました。
mdと添付ファイルのセットが一定の塊でZIPになっていますが、ZIPファイルは明示的にUTF-8指定で解凍する必要があり少し困惑しました。

②ダウンロードした記事の分析

期間が限られている為、スコープを減らします。
Notionへ大量にインポートする際は頻繁にエラーが発生するとの社内の経験談に従い、減らせるものを探しました。
長年蓄積されたmdファイルが2万以上ある中、目についたのが日報です。他の誰かの過去の日報は価値が低い情報とみなして移植対象外とし、必要な人はmdファイルをDLできるようにしました。その他明らかに賞味期限切れの情報等を機械的に除外し1万2千程度まで減らしました。

2つ目の失敗です。不要そうな単語を勘で適当に選んで簡単に成果が出てしまいました。「日報」・「週報」等の除外で数が減ることに満足したのですが、そのフォーマットが整備される以前には「人名」がページ名の日報・週報が存在していて更に1000ファイル程度減らせたことに後から気づきました。ファイル名に含まれる単語のランク付けをする等、さらに分析すべきでした。

③Notionにインポートしても画像がいい感じになる方法を探す

Pandocで、md → html → md → wordという冗長な変換を全てのMDファイルにかけます。MacBook上で線形に処理させて大体1万ファイルを変換するのに丸2日かかり、不気味な音や熱が怖かったです。

前提として、Notionのインポート機能は直接的な画像をサポートしていませんので、mdと画像ファイルのセットを無加工で取り込めません。
参考記事はストレージに画像を格納した上で、md内の画像URLを書き換える方法を取っていますが、社内の先行事例によると権限の公開範囲等によって画像が見えない等、管理が煩雑化するリスクのため、不採用にしました。
Wordには可能性がありました。Wordはバイナリファイルなので画像も中に埋め込まれます。
Pandocでmd→docxをいくつかファイルを抽出してインポートを試したところ、画像が埋め込まれる場合とそうでない場合がありました。mdからWordに変換する場合、マークダウン形式![](相対パス)の形式は問題なく埋め込まれますが、Imageタグが存在すると、Imageタグの部分は画像が埋め込まれません。
ここでhtmlからmd に変換するとImageタグがマークダウン形式に劣化するんじゃないかと試したところその通りになりました。

3つ目の失敗です。後から見つけたのですが、mdでテーブル内に画像を埋め込んでいた場合、Wordでも表形式の画像になるものの、さらにそれをNotionにインポートすると小さい画像が並んだインラインデータベースを含んだ可読性の低いページになってしまいました。さらに厄介なことに2x2の表が1x3のようになり、レイアウトも崩れます。
解消する為には画像のオリジナルを表示した上でURLを取得して、そのURLを画像としてページ内に埋め込み直せばいいので、解決方法を共有することで見つけ次第直してもらう形にしました。

2行2列の表がA,B,ファイル,ファイルのような1行3列のDBになった例

④約1500回のインポート操作

Wordに変換したファイルをNotionにインポートします。
1万ファイル以上ある.docx を5MB以下の塊になるようにフォルダに分割し直してフォルダ毎にインポートしていく作業です。1回1分程度ですが、フォルダ総数1482。インポートのWebAPIは存在しなく、かつインポートは不定期で失敗しますのでRPAも諦め、合間に無心でアップロードしました。。。

4つ目の失敗です。1482回手作業というのがそもそも失敗ですがそうではありません。作ったファイルをとりあえずまとめてアップロードしたのですが、途中でエラーになりました。
まとめて5MB以上のファイルはインポートできない仕様です。5MB以下毎になるようにフォルダ分けするスクリプトで分割しましたが、たまにエラーになりました。
単体で50MB以上のファイルは受け付けてくれません。50MBのファイルは諦めてMDをインポートし、できたページに画像付きのWordを直接添付するような対応にしました。ページへ直接添付する時の制限は不明です。100MBくらいのファイルでも添付できました。

尚、フォルダ名に数字をつけていましたが、上からやっていくとファイルダイアログを開くたびに位置がずれてどこまでやったかわからなくなるので下からインポートすると良いというのが地味なハックです。

⑤Notionに移植した記事をKibelaから追跡可能にする

NotionにインポートしたページのURLをNotionのインテグレーションを使って取得します。MacからPythonのスクリプトで取得しました。
NotionのURLはインポートしないと作られないので、Notion内でのURL置換までできなかったのですが、KibelaからエクスポートしたMDファイルは記事ID-タイトルとなるのでNotion上にあるKibelaのURLは'@[kibelaのid]'のページメンションで見つけたら変えてもらうように賄ってもらっています。

  1. NotionにDBを作る

  2. インポートしたページをDB配下に移動する。(ドラッグドロップ)

  3. Notionのインテグレーションキーを発行する

  4. ファイルの記事IDを検索キーとしてNotionAPIでFilterを実行する

  5. 記事のメタ情報から取得した元のKibelaURLの相対パスと検索されたNotionのURLを紐づけて、tsvやスプレッドシートに残す

  6. 記事のメタ情報をkibela-to-notionを利用してNotionのDB側に反映する。

  7. KibelaのURLを渡すとNotionのURLを返してくれるSlackBotを作る

Kibelaのメタ情報

---
id: [id]
path: "/notes/[pageid]"
author: "[UserID]"
contributors:
- "@oka-koji"
coediting: true
folders:
- 技術本部 / 技術部
- QA / 技術部/QA
groups:
- 技術本部
- Home
- QA
published_at: 'YYYY-MM-DD hh:mm:ss +0900'
updated_at: 'YYYY-MM-DD hh:mm:ss +0900'
archived_at: 
comments: []
---

Bot

SlackBotによるURL変換
Notion上のページメンション記事IDでのURL

5つ目の失敗です。実は過去にKibelaの移行があって locoguide.co.jpの前にtokubai.co.jpでKibelaを使っていました。
locoguide.co.jpの記事IDはtokubai.co.jpの記事IDと一致していないのですが、locoguide.co.jpのKibelaでは、tokubai.co.jpのKibelaのURLをリダイレクトしてくれていました。
locoguide.co.jpの記事リンクは取り残されることとなりました。。記事名が一緒なので記事名で検索することで解決しています。

⑥Notionに全てある状態にしてからKibelaを止める

さて、NotionでKibelaの情報を参照できるようになったものの、画像以外のマークダウンや互換性がないPlantUML等の記述や失敗3のような画像のレイアウト崩壊もしている状態です。Notionへの習熟度も鑑みて1ヶ月ほど並行期間を設けてKibelaを閉じました。

  • すぐKibelaをやめるのではなく、1ヶ月程度並走期間を設けてKibelaも参照できる状態を作っておく

  • 元のMDや添付ファイルはGoogleDriveから検索できるように案内する

  • 並走1ヶ月後1アカウント管理者アカウントを残して解約する

  • オンボーディングのためのSlackChannelを開設し、説明会を開く

6つ目の失敗は、検索性です。全文検索という観点で言うとKibelaはNotionより、高速で正確性が高いため、どうしてもNotion内で探すのが難しいという意見もあります。Notionはどういう法則性で何がどこにあるというのが頭に入っていて、情報の見せ方を整理できるのが素晴らしいツールなのですが、見せ方と言う観点で感じていることはまた別の記事でご紹介できればと思います。

できるだけ痛みを伴わない移行を心がけたつもりでしたが、銀の弾丸などないと改めて思っています。最後まで読んでいただいただいた方、ありがとうございます。

くふうAIスタジオでは、採用活動を行っています。

当社は「AX で 暮らしに ひらめきを」をビジョンに、2023年7月に設立されました。 (AX=AI eXperience(UI/UX における AI/AX)とAI Transformation(DX におけるAX)の意味を持つ当社が唱えた造語) くふうカンパニーグループのサービスの企画開発運用を主な事業とし、非エンジニアさえも当たり前にAIを使いこなせるよう、積極的なAI利活用を推進しています。 (サービスの一例:累計DL数1,000万以上の家計簿アプリ「Zaim」、月間利用者数1,600万人のチラシアプリ「トクバイ」等) AXを活用した未来を一緒に作っていく仲間を募集中です。 ご興味がございましたら、以下からカジュアル面談のお申込みやご応募等お気軽にお問合せください。 https://open.talentio.com/r/1/c/kufu-ai-studio/homes/3849

この記事が気に入ったらサポートをしてみませんか?