AirbnbのOSS, Knowledge Repo を触ってみた。

airbnb/knowledge-repo を触ってみたので流れや感想などを残します。

Knowledge Repoとは

Airbnbによって公開されたナレッジシェアの機能を提供するOSSです。

一般的な類似ツールとは異なりデータサイエンティストを中心としたデータ分析を行う技術職を想定ユーザーとしており、markdownで記述された記事だけでなくjupyter notebookやR markdownで記述されたファイルも記事として扱えるようになっています。

モチベーション

日々データ分析を行なっていく中でナレッジシェアは一つの課題に感じます。 Airbnb Engineering BlogのKnowledge Repoに関するポストでも詳しく触れられていますが、よくある場面としてはwikiのようなものにグラフや考察などは載っていますがデータ抽出や可視化のソースコードが見つからないケースです。

出ているデータに何かおかしいところを見つけたり、集計自体が過去に行われたもので現在の状況でも同じ傾向が続いているのかを確かめようとした時など、そのようなソースコードを参照したいケースは多くあります。wikiなどグラフの画像を貼り付けなければならないツールではグラフごとにこれらのソースコードを紐付けて置くのはそれなりに手間です。代案として、Jupyter notebookはどうでしょうか?

Jupyter notebookにはmarkdownも記述することができるので、やろうと思えば一つの.ipynbファイルで分析から得られた示唆とデータ抽出や可視化のソースコードをまとめることができます。しかし、どのようにそのファイルを共有すれば良いでしょうか?

一つ考えられるのは、GitHubに専用のリポジトリを作ってそこにipynbファイルを格納していくということです。GitHubにはipynbファイルのプレビュー機能があるのでこの方法であれば蓄積、共有という観点では十分に見えます。

しかし、ファイルサイズが大きかったりするとSorry, something went wrong. Reload?と表示されてしまい何度もリロードする羽目になることもあり、筆者の経験上そこまで体験の良いものではありません。また、GitHub自体はそうしたナレッジシェアのためのツールではないためナレッジとしての検索機能は弱いこともあります。

他にも様々な方策は考えられると思いますがそれぞれ一長一短なように思え、ちょうど良いツールはないものかと探していたところ、AirbnbのEngineering BlogでこのOSSを見つけ、良さそうだったので一通り触ってみることにしました。

以下ではドキュメントに沿ってKnowledge Repoにポストを追加しローカルでservingするというところまでをやっていきます。

ドキュメントはこちらから

knowledge-repo.readthedocs.io

Installation

$ pip install --upgrade "knowledge-repo[all]"

基本的に単一のリポジトリで作業することになるので、そのリポジトリ用の仮想環境にインストールするなどすると良いかもしれません。

Get Started

$ knowledge_repo --repo ./test_repo init

repoのinitializeをします。--repoディレクトリを指定します。この先もknowledge_repo コマンドを実行する場面が何度もありますが、毎回このオプションを渡す必要があります。煩わしければ、環境変数を登録しておくと省略できるようです。

export KNOWLEDGE_REPO=<repository uri/path>

次にポストを生成するための ipynb ファイルを追加します。

$ knowledge_repo --repo <path/uri_of_repo> create ipynb example_post.ipynb

他にもR MarkdownMarkdownも作成できます。テンプレートから作成すると、Knowledge Repoのポストを表示するのに必要なメタデータの入力欄が自動で補完されます。

---
authors:
- XXX
- YYY
created_at: 2016-06-29 00:00:00
tags:
- knowledge
- example
thumbnail: images/output_5_1.png
title: This is a Knowledge Template Header
tldr: This is short description of the content and findings of the post.
updated_at: 2022-01-16 18:14:58.994567
---

次に、作成した ipynb ファイルをKnowledge Repoのポストとして登録します。

$ knowledge_repo --repo <path/uri_of_repo> add example_post.ipynb -p project/example_ipynb

このコマンドを実行すると、指定したipynbから画像やmarkdownなどを抽出したのち指定したディレクトリに格納してくれます。実際にはここで生成されたファイルがKnowledge Repoの表示には使われるようです。

最後にローカルでサーバーを動かしてみます。

$knowledge_repo --repo <repo_path> runserver

表示されました!

f:id:yaginuuun:20220120224811p:plain

個別のポスト

f:id:yaginuuun:20220120224927p:plain

コードセルの折りたたみやLikeなどもできます。 UIも綺麗です。

所感

AirbnbOSS, Knowledge Repoをサクッと触ってみました。UIも綺麗ですし、機能もLikeやキーワード検索、フィルタリングなどリッチです。 Jupyter notebookやR Markdownをそのまま読み込んで表示できるのもやはり便利だと感じました。

一方でコマンドによる操作が前提になっている点はちょっと煩わしいなと思いました。UI上でポストの作成、編集やJupyter notebookなどの読み込みができればもっと便利なのかもしれません。 また、分析系のファイルをそのまま読み込めるのは便利ですが分析者によって分析環境が違うこともまあまああると思うので、そういった依存関係までも再現するには至っていないと少し課題も感じました。

使用者は意外と選ぶツールなのかもしれません。

References

medium.com

github.com