こんにちは、趣味でコーポレートエンジニアをやっていますyamashuです。
みなさん、社内ドキュメント管理ってどうしてますか?
これ、永遠に解決しない非常に難しい問題だと思っています。
- どの製品を使うのか?
- どのようなルールを作って管理していくのか?
- そもそも誰が管理するのか?
- どのようにナレッジを抽出するのか?
- etc
今日はその中でも、ほしいドキュメントにたどり着けない課題(検索しても出てこない問題)を改善した過去話になります。
課題 🤔
弊社SmartHRは情報をオープンにすることを大切にしている会社です。
全従業員にあらゆる情報が見えるように、全従業員から日々情報がアウトプットされ蓄積されていきます。
従業員みんながそれを心がけているからこそ情報のオープンさが保たれているのですが、それゆえに爆発的なスピードで社内ドキュメントの数が増えています(現在進行系)。
SmartHRではMarkdownツールを全社ドキュメント管理に使っています(プロダクトとしてはDocBase)。
ただ、3年前当時で既に6万以上の記事が格納されており「検索してもほしい記事がでてこない!」状態になっていました 🤮
ドキュメント数の増加に合わせて検索精度の低下は回避できないものですが、SmartHRだとドキュメント量が膨大だったことがそれに拍車をかけていたのです。
夢の社内横断検索エンジン ✨
とにかく検索精度をあげたいというのが課題でした。
しかし情シスはそもそも少人数であるため、現実問題として開発工数やメンテナンス工数が大きいことはできません。
そこでいろんな製品を調査している中で、最初に目をつけたのがElastic Enterprise Searchでした。
検索エンジンの細かい管理はしなくてよさそうですし、なによりドキュメントツールだけでなく、Salesforce, GitHub, Slack等の様々なプラットフォームとシームレスに繋がるので、社内のあらゆるリソースの横断検索が可能という夢のようなプロダクトに見えました。
さっそくトライアル環境を立ち上げて、インデックスを作り始めて触ってみたのですが、残念ながら当時(3年前)としては導入できる水準にありませんでした。
日本語の形態素解析がうまくいかず、思うようなインデックスが作成できなかったのです。
日本向けへのローカライズがあまり進んでいないという話を、当時先方から聞いたような記憶があります。
簡単に導入して使えるものは、逆に細かい設定やチューニングができないため、ここは本当に痛し痒しです。
という流れで、まるっと使えそうなオールインワンパッケージの方向は一旦諦めました。
検索エンジンSaaS選定と検証 🔍
そうなると検索エンジンを何かしら管理しないといけないのですが、繰り返しになりますが情シスは少人数なのでそれでもなるたけ省力化したいです。
SolrやElastic Searchなどをそのまま使うより、導入やメンテコストの低く、いい感じのSaaSがないか調査を始めました。
そしてこれまた製品探しに時間をかけたところ、Algoliaというプロダクトに行き着きました。
「Algoliaいいよ!」みたいなブログや記事も多く見られ、まず試してみようとなりました。
AlgoliaのAPIで全6万記事をバルクインサートして、インデックス作成をしたのですが、その瞬間にまず驚きました。
1,000記事単位でインサートしてたのですが、それが1秒足らずでインデクシングされるのです。
「めちゃくちゃ速いぞ、なんだこれは!!」というのが当時の感想です。
結局1分くらいで全6万記事のインデクシングが終わって、あっという間に検証ができる状態になりました。
また実際に検証したところ、検索精度も申し分ありませんでした。
インデックス作成をした直後のデフォルトの状態でも、そこそこほしい検索結果が上位にくるようになっていました。
少しチューニングすればいい結果が出せるという確信を得られました。
開発 🔧
検証で確信が持てたので、従業員が実際に利用する検索画面を開発していきます。
Algoliaを選定したのにはもう1個理由がありまして、様々な開発プラットフォームに対応したSDKが提供されていることです。
これがあったのでフロントエンドの開発をあまりやったことがなかった私でも、なんとか動くものに仕上げることができました。
このとき、インフラや認証(SAML)まわりのことは同僚のyoyogiさんにすべてお任せしていました。
その分、私がアプリレイヤーに全振りできたので、お互いに背中を預けることのできた良いチームワークだったなぁと今でも思います。
とにかく従業員に最高の検索体験を提供したかったので、圧倒的な検索精度の高さと、インクリメンタルサーチによる爆速な検索(1文字入力するごとに検索結果がリアルタイムに変わっていく)を実現したのが、リリース当時の大きな特徴でした。
(画像はいろいろ機能追加が加わったもので、当時のものではないです、すいません🙏)
あとは細かいところとして、インデックスの状態を常に最新ドキュメントに追随させるために、ドキュメントの追加・更新・削除のWebhookをトリガーにて、インデックスも追加・更新・削除する連携処理を実装して終わりです。
構想や製品選定から開発が終わってリリースできる状態になるまで、だいたい3ヶ月かかりました。
情シスは他のいろんな仕事もあるので、なかなかこれ開発1本に集中できず歯がゆいのがいつも思うことです。
反応と利用状況 🎉
リリース直後の反応です。
他にも「今まで15分かけて探していたドキュメントが5秒で見つかるようになりました!」みたいな効果の手応えが具体的に感じられるフィードバックもいただけました。
多くの従業員の方々から嬉しい声をいただいたのを今でも覚えています、作ってよかったなぁと思った瞬間でした。
(ちなみに「アレ」から後日正式に名前が決まりました)
2024年7月現在の直近90日の利用状況を見てみたところ、在籍1,185人に対して、1,079人の方(約90%)に利用していただいているみたいです。
日ごとだとだいたい2,000回くらいの検索が走っているようです。
その後の改修や機能追加、そして課題
その後は同僚のyoyogiさん、coyoteさんにリファクタリングやら機能追加やらを積極的にやっていただき、今の形になりました。
1人では到底できなかったので、本当にありがとうございます!!
- リファクタリング(とにかくリリース優先に全振りしてたので、あらためてコードを綺麗にしてもらいました)
- 検索窓のオートコンプリート機能の追加
- 検索結果のソート機能の追加
- 検索結果のタグフィルタリング機能の追加
- 検索結果のインフィニットスクロール機能の追加(検索結果のページ遷移が不要)
また、2024年7月現在だとドキュメント数が12万となり、リリース当時の2倍になっています。
じわじわと検索精度が落ちているのも観測できているので、なんとかしなければいけませんね。
一緒に働くメンバーを募集しています🙏
もしよかったらこんな課題を一緒に解決しませんか?