メインコンテンツにスキップ
株式会社ゼットリンカー - Next.js システム開発専門
AI開発

AIが社内規定を参照して回答するチャットボットをNext.jsで実装する|情シスのための最小構成

Conclusion

AIが社内規定を参照して回答するチャットボットは、Next.js + Firebase + ベクトル検索の最小構成で数週間規模から着手できます。

結論、社内規定チャットボットはNext.js 16 + Firebase + ベクトル検索で数週間規模から内製できます。就業規則や経費規定への同じ質問を減らしたい情シス担当者向けに、設計パターンと費用感、失敗しやすいポイントを整理しました。

10分で読めます
Next.jsNext.jsAI駆動開発中小企業FirebaseFirebase社内検索

AIが社内規定を参照して回答する「規定チャットボット」は、Next.js + Firebase + ベクトル検索の最小構成で数週間規模から着手できます。総務・人事への同じ質問の繰り返しを減らしたい情シス担当者向けの設計指針です。

こんな状況ではありませんか?

  • 就業規則や経費精算のルールを聞かれるたびに、総務担当が同じ説明を繰り返している
  • 規定集はPDFやWordで社内共有フォルダに置かれているだけで、誰も読まずに毎回担当者に聞く
  • 「AIチャットボットを作りたい」と思っても、既製ツールは月額数万円からで、自社の規定更新にどう追従させるか見えない

この記事で分かること

  • 社内規定チャットボットが「検索」ではなく「対話」であるべき理由
  • Next.js 16 + Firebase + ベクトル検索での最小構成の作り方
  • Vercel AI SDK 6のAgent機能を使った実装のポイント
  • 費用感・導入期間・運用でつまずきやすい失敗パターン

情シス担当者の方へ——規定集の管理と問い合わせ対応を一人、あるいは兼務で抱えている状況を想定し、既製SaaSに頼らずNext.jsで内製する場合の設計を整理します。

なぜ「検索」ではなく「対話」型で作るべきか?

社内規定は条件分岐が多く、キーワード検索だけでは該当条文にたどり着けないことが多いためです。

たとえば「育休から復帰したときの時短勤務は何時まで申請できるか」という質問は、就業規則の「育児休業」の章と「勤務時間」の章の両方にまたがっていることがあります。単純なキーワード検索では、質問文に含まれない条文(例:時短勤務の申請期限を定めた別条項)を拾えません。

これは、以前この連載で紹介した社内マニュアルのベクトル検索とは目的が異なります。マニュアル検索は「該当ページを探し出す」体験に向いていますが、規定チャットボットは「複数条文を横断して、質問に対する一つの答えを合成して返す」体験が求められます。検索エンジン型のUIではなく、対話型のUIを選ぶべき理由はここにあります。

もう一つの理由は、規定は改定されるという点です。就業規則も経費精算ルールも、年に数回は更新が入ります。対話型のチャットボットであれば、参照元のドキュメントを差し替えるだけで回答内容が自動的に更新されます。FAQページを手動で書き換え続ける運用と比べて、更新の手間が大きく減ります。

典型的な問い合わせパターンをどう分解するか?

「勤怠・休暇」「経費・稟議」「福利厚生」の3カテゴリで全体の大半を占めるのが一般的な傾向です。

規定チャットボットを設計する前に、実際にどんな問い合わせが総務・人事に来ているかを棚卸しすることが最初のステップです。過去のメール・チャットのやり取りを1〜2週間分でも見返すと、次のようなパターンに分類できます。

  • 勤怠・休暇系:有給休暇の繰越上限、時短勤務の申請期限、慶弔休暇の対象範囲
  • 経費・稟議系:交通費の精算ルール、出張時の宿泊費上限、稟議の承認ライン
  • 福利厚生系:健康診断の対象者、資格取得補助の申請方法、社宅制度の条件

このパターン分解が甘いまま実装に入ると、「なんでも答えられる汎用チャットボット」を目指してスコープが膨らみがちです。最初のMVPは、問い合わせ件数が多い1〜2カテゴリに絞り、そのカテゴリの規定文書だけをベクトル化して回答精度を高めるほうが現実的です。

ここで一度お知らせ

15分のカジュアル相談

事例・要件未定でもOK/営業はしません/所要時間15分

カジュアルに相談する

Next.jsでどう設計するか?最小構成と拡張ステップ

Next.js 16のRoute HandlersとFirestore、Vercel AI SDKを組み合わせれば、規定チャットボットの最小構成は3つのレイヤーで完結します。

構成は次の3層に分けて考えます。

社内規定チャットボットの3層構成図。社員の質問がベクトル検索による検索層を経て、条文を根拠に回答を生成する層に渡り、根拠が見つからない場合は総務確認へフォールバックする流れを示す図

  1. ドキュメント取り込み層:就業規則・経費規定などのPDF/Wordファイルをテキスト抽出し、章・条文単位でチャンク分割してFirestoreに保存する
  2. 検索層(Retrieval):ユーザーの質問をベクトル化し、関連する条文チャンクを類似度検索で取得する
  3. 回答生成層(Generation):取得した条文チャンクを根拠として、LLMに「この条文の範囲内で答える」よう指示して回答を生成する

コード例(Route Handlerの骨子、30行程度):

// app/api/rules-chat/route.ts
import { streamText, embed } from 'ai';
import { anthropic } from '@ai-sdk/anthropic';
import { getFirestore } from 'firebase-admin/firestore';

export async function POST(req: Request) {
  const { question } = await req.json();

  // 1. 質問をベクトル化
  const { embedding } = await embed({
    model: 'text-embedding-3-small',
    value: question,
  });

  // 2. Firestoreから類似条文を検索(findNearest)
  const db = getFirestore();
  const snapshot = await db
    .collection('ruleChunks')
    .findNearest('embedding', embedding, { limit: 5, distanceMeasure: 'COSINE' })
    .get();
  const context = snapshot.docs.map((d) => d.data().text).join('\n---\n');

  // 3. 根拠条文の範囲内で回答を生成
  const result = streamText({
    model: anthropic('claude-sonnet-4-5'),
    system: `以下の社内規定の抜粋のみを根拠に回答してください。根拠が無い場合は「規定に記載がないため総務にご確認ください」と答えてください。\n\n${context}`,
    prompt: question,
  });

  return result.toTextStreamResponse();
}

Firestoreはネイティブでベクトル検索(findNearest)に対応しているため、別途ベクトルDBを立てずにFirebaseだけで最小構成を組めるのがこの構成の利点です。既にFirebase Authenticationで社員認証を組んでいるプロジェクトであれば、会員認証の仕組みをそのまま流用して「社員だけが使えるチャットボット」に絞り込めます。

拡張ステップとしては、まず1〜2カテゴリの規定でMVPを動かし、社内テストで「根拠なく答えてしまうケース」を洗い出してプロンプトを調整し、そのあとで対象規定を広げていく順序が現実的です。

いくらで作れるか?費用感の目安

最小構成であれば、開発工数は数週間、月々の運用コストは数千円〜数万円が目安です。

内訳の考え方は次のとおりです。

項目内容目安
初期開発規定の取り込み・チャンク分割・チャット画面の実装数週間の開発サイクル
LLM APIコスト質問1件あたりの推論コスト(Claude/GPT等)従量課金、月間問い合わせ件数に比例
ホスティングVercel + Firebase小規模なら無料枠〜月数千円
保守規定改定時のドキュメント差し替え都度数十分〜1時間程度

既製のAIチャットボットSaaSは月額1万円〜5万円程度からのプランが多く、社内規定という特化用途であれば内製のほうがランニングコストを抑えられるケースがあります。ただし、これは「開発を内製・外注どちらで行うか」の初期投資とのトレードオフであり、問い合わせ件数が少ない組織では既製SaaSのほうが総コストで有利な場合もあります。台数(問い合わせ件数)と改定頻度が費用対効果を左右する変数です。また、LLM APIコストは選ぶモデルのティアに大きく左右されるため、検証段階と本番でモデルを切り替える設計を含めて、GPT-5.6のティア構成を踏まえたPoC設計の考え方が判断材料になります。

失敗しやすいパターンと回避策

実装を進める中でつまずきやすいのが次のようなケースです。

  • 根拠のない回答を生成してしまう(ハルシネーション):プロンプトで「根拠条文の範囲内でのみ回答する」ことを明示し、根拠が見つからない場合は「総務に確認してください」と答えさせるフォールバックを必ず入れる
  • 規定改定への追従を忘れる:ドキュメント差し替えの運用フローを決めずに公開すると、古い規定のまま回答し続けるリスクがある。改定時のチャンク再生成を運用手順に組み込む
  • 全社規定を一度に対象にしてスコープが膨らむ:最初から全カテゴリを対象にすると、精度検証の負荷が跳ね上がる。問い合わせ頻度の高いカテゴリから段階的に広げる
  • 認証を後回しにする:社内規定は機微な情報を含むため、Firebase Authenticationなどで「誰が使えるか」を先に設計しておく。Next.jsのセキュリティ設計にある入力検証の考え方は、チャットの入力欄にもそのまま当てはまります

AI駆動開発で何が変わるか?

Vercel AI SDK 6のAgent抽象化により、モデル・指示・ツールを一度定義すれば使い回せるようになり、実装の見通しが立てやすくなりました。

2025年12月にリリースされたVercel AI SDK 6では、Agentという抽象化が導入され、モデル・システムプロンプト・使用ツールをひとまとめに定義して、アプリ全体で再利用できるようになりました。また、Anthropic Claude向けにプログラム的なツール呼び出しがサポートされ、中間的な検索結果をコンテキストに含めずに処理できるため、トークン消費とコストを抑えやすくなっています(出典: Vercel AI SDK 6 公式ブログ)。

Claude Codeでこの構成を組む場合、Route Handlerの骨組みやFirestoreのクエリ部分はAIに下書きさせやすい領域です。一方で「どの条文を根拠として扱うか」「ハルシネーションをどう防ぐプロンプトにするか」といった業務ロジックの判断は、実際の問い合わせパターンを見ている人間側の設計判断が必要です。この線引きを曖昧にしたままAIに丸ごと任せると、もっともらしいが実際の規定と食い違う回答を返すチャットボットになりかねません。

ゼットリンカーでの進め方

私たちが受託で関わった小規模プロジェクトの範囲では、まず問い合わせ件数の多いカテゴリを1つに絞ってMVPを作り、数週間の短いサイクルで実際の質問パターンをテストしながらプロンプトと根拠条文の紐付けを調整する、という進め方をとることが多いです。全社規定を一度に対象にするのではなく、小さく動かして精度を確認してから対象を広げるほうが、手戻りの少ない進め方だと考えています。

よくある質問

Q. 既存のAIチャットボットSaaSと内製、どちらを選ぶべきですか?

問い合わせ件数が少なく規定改定も稀であれば、既製SaaSの方が総コストで有利な場合があります。逆に、社内規定という特化領域で回答精度を継続的に調整したい場合や、既にFirebaseなど自社基盤がある場合は、内製の方が長期的な柔軟性で優位になりやすいという傾向があります。

Q. 規定が改定されたら、チャットボットの回答もすぐ反映されますか?

対話型の構成では、参照元のドキュメントを差し替えてベクトルを再生成すれば回答内容が更新されます。ただし自動追従ではなく、改定のたびにドキュメント差し替えの運用フローを回す必要があります。

Q. 誤った回答をしてしまうリスクはどう抑えますか?

プロンプトで「根拠条文の範囲内でのみ回答する」ことを明示し、根拠が見つからない質問には「総務にご確認ください」と答えるフォールバックを組み込むことが基本です。加えて、公開前に想定される質問パターンで検証しておくことが欠かせません。

Q. 小規模な組織でも導入する意味はありますか?

社員数が少なくても、同じ質問が繰り返されている状況であれば効果はあります。ただし問い合わせ件数自体が少ない組織では、開発コストに見合わない場合もあるため、まず1〜2週間分の問い合わせを棚卸しして件数を把握してから判断するのが現実的です。

まとめ

社内規定チャットボットは、検索ではなく対話型として設計し、根拠条文の範囲内で答えるフォールバック設計を最初から組み込むことが要になります。全社規定を一度に対象にせず、問い合わせ件数の多いカテゴリから小さく始めるのが、手戻りの少ない進め方です。規定の管理と問い合わせ対応に負荷を感じている情シス担当者の方は、まず自社の問い合わせパターンの棚卸しから始めてみてください。

自社の問い合わせパターンを整理してから相談したいという方には、15分のカジュアル相談(事例・要件未定でもOK/営業はしません)をご用意しています。要件が固まっている方は、ゼットリンカーの無料相談フォームからご相談ください。

本記事は Next.js 16.x 時点の情報です

最終更新:2026年7月15日

Share this article

15分のカジュアル相談

事例・要件未定でもOK/営業はしません/所要時間15分

カジュアルに相談する

次に読む記事

ALL ARTICLES →

プライバシーポリシー

株式会社ゼットリンカー(以下、「当社」といいます。)は、お客様の個人情報の重要性を認識し、 その保護の徹底を図るため、以下のプライバシーポリシー(以下、「本ポリシー」といいます。)を定めます。

1. 個人情報の定義

本ポリシーにおいて「個人情報」とは、生存する個人に関する情報であって、 当該情報に含まれる氏名、生年月日その他の記述等により特定の個人を識別することができるもの、 及び他の情報と容易に照合することができ、それにより特定の個人を識別することができることとなるものを指します。

2. 個人情報の収集

当社は、お客様が当社のサービスをご利用になる際、お客様の個人情報を収集することがあります。収集する個人情報は以下の通りです:

  • 氏名
  • メールアドレス
  • 電話番号
  • 会社名・組織名
  • 住所
  • その他当社が定める入力フォームにお客様が入力する情報

3. 個人情報の利用目的

当社は、お客様からご提供いただいた個人情報を、以下の目的で利用します:

  • お客様への連絡やサービスの提供
  • お客様からのお問い合わせへの対応
  • 当社サービスの改善や新サービスの開発
  • メールマガジンの配信(お客様の同意がある場合)
  • 契約や法令等に基づく権利の行使や義務の履行
  • その他、上記利用目的に付随する目的

4. 個人情報の第三者提供

当社は、以下の場合を除き、お客様の同意なく個人情報を第三者に提供することはありません:

  • 法令に基づく場合
  • 人の生命、身体または財産の保護のために必要がある場合であって、本人の同意を得ることが困難である場合
  • 公衆衛生の向上または児童の健全な育成の推進のために特に必要がある場合
  • 国の機関もしくは地方公共団体またはその委託を受けた者が法令の定める事務を遂行することに対して協力する必要がある場合

5. 個人情報の管理

当社は、お客様の個人情報を正確かつ最新の状態に保ち、個人情報への不正アクセス、 個人情報の紛失、破損、改ざん及び漏洩などを防止するため、 セキュリティシステムの維持・管理体制の整備等の必要な措置を講じ、安全対策を実施し個人情報の厳重な管理を行います。

6. 個人情報の開示・訂正・削除

お客様は、当社に対してご自身の個人情報の開示を求めることができます。 また、開示の結果、個人情報の内容が事実でないことが判明した場合には、 速やかに訂正または削除に応じます。

7. 導入事例の公開について

当社は、お客様から依頼いただいたプロジェクトを導入事例として記事にさせていただく場合があります。導入事例として公開する場合は、以下の点に配慮いたします:

  • 機密情報や個人情報は公開いたしません
  • 社名を公開する場合は、公開内容について事前にお客様に確認いただきます
  • 社名を非公開とする場合でも、お客様のご要望に応じて公開内容を確認いただくことが可能です

8. Cookie(クッキー)の使用について

当社のウェブサイトでは、お客様により良いサービスを提供するため、Cookie を使用することがあります。 Cookie により個人を識別できる情報を収集することはありません。 お客様はブラウザの設定により Cookie の受信を拒否することができます。

9. SSL(Secure Socket Layer)について

当社のウェブサイトはSSLに対応しており、ウェブブラウザとウェブサーバーとの通信を暗号化しています。 お客様が入力する個人情報は自動的に暗号化されて送受信されるため、 万が一、第三者が傍受した場合でも内容を解読することは困難です。

10. プライバシーポリシーの変更

当社は、必要に応じて、本ポリシーの内容を変更することがあります。 変更後のプライバシーポリシーについては、当社ウェブサイトに掲載したときから効力を生じるものとします。

11. お問い合わせ

本ポリシーに関するお問い合わせは、以下の窓口までお願いいたします。

株式会社ゼットリンカー

〒160-0023

東京都新宿区西新宿3丁目3番13号西新宿水間ビル2F

代表取締役: 金原隆利

お問い合わせ先: info@zetlinker.com

制定日:2024年1月1日

最終改訂日:2026/7/19

利用規約

この利用規約(以下、「本規約」といいます。)は、株式会社ゼットリンカー(以下、「当社」といいます。)が 提供するウェブサイトおよびサービス(以下、「本サービス」といいます。)の利用条件を定めるものです。 お客様は、本規約に同意した上で、本サービスをご利用ください。

第1条(適用)

1. 本規約は、お客様と当社との間の本サービスの利用に関わる一切の関係に適用されるものとします。

2. 当社は本サービスに関し、本規約のほか、ご利用にあたってのルール等、各種の定め(以下、「個別規定」といいます。)を することがあります。これら個別規定はその名称のいかんに関わらず、本規約の一部を構成するものとします。

3. 本規約の規定と個別規定の規定が異なる場合は、個別規定において特段の定めなき限り、個別規定の規定が優先されるものとします。

第2条(定義)

本規約において使用する以下の用語は、各々以下に定める意味を有するものとします。

  • 「利用契約」とは、本規約を契約条件として当社とお客様との間で締結される、本サービスの利用契約
  • 「知的財産権」とは、著作権、特許権、実用新案権、意匠権、商標権その他の知的財産権(それらの権利を取得し、またはそれらの権利につき登録等を出願する権利を含みます。)
  • 「投稿データ」とは、お客様が本サービスを利用して投稿その他送信するコンテンツ(文章、画像、動画その他のデータを含みますがこれらに限りません。)

第3条(本サービスの提供)

1. お客様は、本規約に同意の上、当社の定める方法によって利用登録を申請し、当社がこれを承認することによって、本サービスを利用することができるようになります。

2. 当社は、お客様に以下のいずれかの事由があると判断した場合、利用登録の申請を承認しないことがあり、その理由については一切の開示義務を負わないものとします。

  • 利用登録の申請に際して虚偽の事項を届け出た場合
  • 本規約に違反したことがある者からの申請である場合
  • その他、当社が利用登録を相当でないと判断した場合

第4条(ユーザーIDおよびパスワードの管理)

1. お客様は、自己の責任において、本サービスのユーザーIDおよびパスワードを適切に管理するものとします。

2. お客様は、いかなる場合にも、ユーザーIDおよびパスワードを第三者に譲渡または貸与し、もしくは第三者と共用することはできません。

3. 当社は、ユーザーIDとパスワードの組み合わせが登録情報と一致してログインされた場合には、そのユーザーIDを登録しているお客様自身による利用とみなします。

第5条(禁止事項)

お客様は、本サービスの利用にあたり、以下の行為をしてはなりません。

  • 法令または公序良俗に違反する行為
  • 犯罪行為に関連する行為
  • 本サービスの内容等、本サービスに含まれる著作権、商標権ほか知的財産権を侵害する行為
  • 当社、ほかのお客様、またはその他第三者のサーバーまたはネットワークの機能を破壊したり、妨害したりする行為
  • 本サービスによって得られた情報を商業的に利用する行為
  • 当社のサービスの運営を妨害するおそれのある行為
  • 不正アクセスをし、またはこれを試みる行為
  • 他のお客様に関する個人情報等を収集または蓄積する行為
  • 不正な目的を持って本サービスを利用する行為
  • 本サービスの他のお客様またはその他の第三者に不利益、損害、不快感を与える行為
  • 他のお客様に成りすます行為
  • 当社が許諾しない本サービス上での宣伝、広告、勧誘、または営業行為
  • 面識のない異性との出会いを目的とした行為
  • 当社のサービスに関連して、反社会的勢力に対して直接または間接に利益を供与する行為
  • その他、当社が不適切と判断する行為

制定日:2024年1月1日

最終改訂日:2026/7/19