こんにちは、ヤプリのサーバーサイドグループでマネージャーをしている鬼木です。
社内ドキュメントの検索で「あの情報どこにあったっけ...」と困った経験はありませんか? 今回は、Claude CodeとNotebookLMを活用して社内のドキュメント検索を劇的に改善した取り組みについてご紹介します。
はじめに:Confluence検索の課題
弊社では社内ドキュメントの管理にAtlassianのConfluenceを活用しています。Confluenceは優れたドキュメント管理ツールですが、実際に使っていると検索機能に課題を感じることがありました。
- キーワード検索で欲しい情報がヒットしない
- 関連する情報が散在していて見つけにくい
- 過去の議事録や仕様書から特定の情報を探すのに時間がかかる
このような課題は、おそらく多くの企業で共通の悩みではないでしょうか。
解決のヒント:NotebookLMとの出会い
昨今のAI技術の進化により、この課題を解決できる可能性が見えてきました。弊社ではGemini for Workspaceをエンタープライズ契約しており、NotebookLMを含む各種サービスを業務で活用できる環境が整っています。
NotebookLMは、複数のソースを基に質問応答ができるAIツールです。社内でも開発部門内外を問わず活用が進んでおり、「これにConfluenceの情報をソースとして取り込めれば、検索性の課題を解決できるのでは?」と考えました。
しかし、調べてみるとNotebookLMが対応しているソース連携方法にはConfluenceとの直接連携がありません。そこで別のアプローチを検討することにしました。
Claude Codeによる解決策の実装
NotebookLMはローカルのファイルをアップロードする時にディレクトリ配下のファイルをまとめてアップロードできることから、以下のアプローチを考えました。
- Confluenceの情報をAPIで取得
- ローカルに適切な形式で保存
- ディレクトリごとNotebookLMにアップロード
この1,2を行うスクリプトをClaude Codeで実装させることにしました。
第一段階:単一ページの取得
まずはシンプルに、Confluenceの単一ページを取得するコードの作成から始めました。Claude Codeとの対話はvibe codingスタイルで進め、やりたいことが明確だったため、それほど時間をかけることなく実装できました。
このテックブログ用に作成したtestページの内容を、問題なく取得できているようでした。
第二段階:階層構造の再帰的取得
次に、本来の目的である「複数ページの効率的な取得」に取り組みました。「特定のページを指定し、その配下のページを再帰的に取得できるようにコードを修正してください」という指示を出したところ、期待通りの実装が完成しました。
「テストページ」の下に「Sample」ページが紐づいていますが、全て取得できているようです。
第三段階:設定ファイルによる柔軟な管理
運用を進めていくと、以下のようなニーズが出てきました。
- 1つのNotebookに複数の親ページ配下の情報をまとめたい
- 複数のNotebookを目的別に作成したい
そこで、YAMLファイルで設定を管理できるように改良しました。これにより、柔軟なNotebook構成が可能になりました。
以下は実際に使用しているYAMLファイルの一部になります(space, page_idはダミーになります)
notebooks: - name: "corporate-handbook" display_name: "社内ルール・制度・人事情報ノートブック" description: "社内ルール・制度・人事情報に関するノートブック" pages: - space: "space1" page_id: "page_id1" description: "人事関連情報まとめ(組織・規程/人事制度・評価/人事系申請・手続き/研修)" - space: "space1" page_id: "page_id2" description: "セキュリティガイドライン" - space: "space1" page_id: "page_id3" description: "社内ルール・制度" - space: "space1" page_id: "page_id4" description: "入社ガイダンス" - space: "space1" page_id: "page_id5" description: "入社後よくある質問集" exclude_pages: - space: "space1" page_id: "page_id6" description: "人事発令のまとめ" - space: "space1" page_id: "page_id7" description: "輪読部" - name: "offise-information-handbook" display_name: "オフィス情報ノートブック(オフィス機器・ネットワークも含む)" description: "オフィス情報に関するノートブック" pages: - space: "space2" page_id: "page_id8" description: "パソコン・業務携帯・OA機器関係" - space: "space2" page_id: "page_id9" description: "六本木オフィスについて"
Confluenceは階層構造になっていますが、例えば上記のoffise-information-handbook(オフィス情報ノートブック)であればConfluence上の以下が対象になります。
このYAMLファイルを指定して実行すると、以下のようにYAMLファイルの設定に基づいて出力してくれます。
実際の活用と成果
NotebookLMへのソース追加
ローカルに保存したファイル群をNotebookLMにソースとして追加することで、Confluenceの情報に対してAIを使った自然言語検索が可能になりました。
ノートブック新規作成画面でファイルを選択します。
YAMLで指定した通りディレクトリごとにファイル群がまとまっているので、MacのFinderでCommand + Aで対象ディレクトリ配下のファイルを全選択し、ソースに追加します。
Confluenceの特定のページをソースとしたノートブックの完成です。
具体的な活用例
例えば「社内ルール・制度・人事情報ノートブック」を作成しました。これにより、以下のような質問に即座に回答を得られるようになりました。
- 「有給休暇の申請方法は?」
- 「経費精算のルールを教えて」
- 「リモートワークの規定について知りたい」
前章で作成した東京オフィス関連情報ノートブックだと、以下のようにオフィスの機器などに関する質問に答えてくれます。
このNotebookLMのレスポンスの文末の番号を選択するとサイドパネルでのソース表示はもちろん、前章のローカルにファイルを落とす際にConfluenceのURLも入れるようにしているので(Sourceの部分)、元のドキュメントを辿ることもできます。
Slackとの連携:「いでよノートブック」
さらに使いやすさを追求し、Slackのカスタムレスポンス機能を活用して「いでよノートブック」というコマンドを作成しました。これにより、Slack上から簡単に各種ノートブックへアクセスできるようになりました。
まとめと今後の展望
今回の取り組みを通じて、以下のような成果を得ることができました:
半自動化でも十分な価値創出:完全自動化ではないものの、初手として十分価値のあるツールを作ることができました。ソースの変更を自動検知できない点は課題ですが、社内ドキュメントは頻繁に更新されるものでもないため、現時点では許容範囲と考えています。
アイデア勝負の効率化:Claude Codeの登場により、このようなスクリプトを低コストで作成できるようになりました。ConfluenceとNotebookLMのように直接連携ができないサービス同士でも、アイデア次第で実質的な連携を実現できます。
継続的な改善の土台:完全自動化も技術的には可能ですが、他にも効率化したいタスクは山積みです。まずは「あったら便利」なツールを素早く作り、実際の利用状況を見ながら改善していくアプローチが効果的だと感じています。
今後もこのように、AIツールを活用しながら業務効率化のアウトプットを続け、同時にAI技術についても学んでいきたいと思います。
最後まで読んでいただきありがとうございました。
弊社では一緒に働くサーバーサイドエンジニアを募集しています。興味を持っていただけた方は、ぜひカジュアル面談でお話ししましょう!