プロジェクト概要
ものしりAI(monoshiri.ai)は、社内ドキュメントをアップロードするだけで、管理画面・LINE・チャットウィジェットから自然言語でAIに聞ける企業向け社内ナレッジベースSaaSです。企画・設計・実装・運営を一気通貫で担当しているソロSaaSです。
「社内にナレッジはあるのに、必要なときに見つからない」という組織共通の課題を、ベクトル検索(RAG)と生成AIで解決します。無料プランを提供し、ユーザー数無制限・最短1分で利用開始できる手軽さを強みにしています。
運営元として、ブランドサイト兼将来のコーポレートサイト「ものしり(monoshiri.jp)」を展開。「知識を、事業の力に」をミッションに掲げ、Knowledge / Decision / Practice の3視点から企業の知識活用を支援しています。
プロダクトの特徴
3ステップで導入可能
- ドキュメントをアップロード: PDF / Word / Excel / PowerPoint / HTML / CSV / 画像をドラッグ&ドロップ
- AIが自動解析: ベクトル検索用のインデックスを自動生成
- AIに聞く: 管理画面・LINE・チャットウィジェットから自然言語で質問
マルチチャネル対応
- 管理画面: Next.js 15 + React 19 による SPA。社員が普段使う業務ツール感覚で利用可能
- LINE 連携: 公式アカウントからトーク形式で質問。外出先や現場からすぐに確認
- チャットウィジェット: 自社サイトに埋め込み可能。訪問者の問い合わせをAIが24時間自動回答
- MCP 連携: Claude Desktop / Codex / Dify 等から MCP プロトコルで社内ナレッジを参照
エンタープライズ品質のセキュリティ
- 国内データセンター(AWS 東京リージョン)でデータを保管
- 保存・通信ともに暗号化(KMS / TLS)
- テナント間のデータ完全分離(ベクトルインデックスも tenant × folder 単位で分離)
- フォルダ単位のアクセス制御(admin / manager / member の3ロール)
- 顧客データは AI の学習に一切利用しない
- MFA(TOTP)・ソーシャルログイン・JWT + リフレッシュトークンによる認証
技術スタック
フロントエンド
- Next.js 15 (App Router): LP と管理画面を別アプリに分離し、LP は静的エクスポート + CloudFront で配信
- React 19 / TypeScript: Server Components と Client Components を明確に分離し、LCP を最小化
- Tailwind CSS v4: ユーティリティファーストで高速にデザイン反復
- next-intl: 日本語 / 英語 / 中国語 / 韓国語の4言語対応
バックエンド
- NestJS + Fastify: Repository パターンで責務を分離したモジュラー構造
- Prisma v6 + MySQL 8.0: 本番は Aurora MySQL Serverless v2、ローカルは Docker の統一構成
- 自前 JWT 認証: bcrypt + MFA(TOTP) + ソーシャルログイン + リフレッシュトークン
AI / ベクトル検索
- AWS Bedrock Cohere Embed v4: 多言語対応の高精度 Embedding モデル
- Amazon S3 Vectors: テナント×ナレッジ単位でベクトルインデックスを分離
- Bedrock Claude: 回答生成とハルシネーション抑制のプロンプト設計
- Lambda ベクトル化パイプライン: アップロードイベントでファイルをチャンク分割・Embedding・インデックス登録
課金・決済
- Stripe Checkout Sessions: Free / Light / Standard / Pro の4プラン
- Webhook 冪等処理: webhook_events テーブルで重複イベントを排除
- クォータ管理: team_quotas / team_usage テーブルで月間AI回答数を制御
インフラ / DevOps
- AWS ECS Fargate: API サーバを Blue/Green デプロイ
- CloudFront + S3: LP を静的配信、CloudFront Function で i18n リダイレクト
- Terraform: すべての AWS リソースを IaC で管理
- SES / KMS / Secrets Manager: メール送信・暗号化・シークレット管理
システムアーキテクチャ
ベクトル化フロー
- アップロード: ユーザーが管理画面からドキュメントをアップロード(S3 に保存)
- S3 イベント通知: S3 → SQS → Lambda の非同期パイプラインを起動
- テキスト抽出: PDF / Office ドキュメント / 画像(OCR) からテキストを抽出
- チャンク分割: 意味的なまとまりを保ちながら最適サイズに分割
- Embedding 生成: Bedrock Cohere Embed v4 でベクトル化
- インデックス登録: S3 Vectors にテナント×ナレッジ単位で保存
RAG 質問回答フロー
- 質問受付: 管理画面・LINE・Widget・MCP のいずれかからクエリを受信
- クエリベクトル化: ユーザー質問を Cohere Embed v4 でベクトル化
- 類似検索: S3 Vectors から関連度の高いチャンクを抽出(tenant + folder でアクセス権フィルタ)
- 回答生成: 検索結果をコンテキストに Bedrock Claude へプロンプト投入
- ソース明示: 回答とともに参照元ドキュメントへのリンクを返却
- ストリーミング配信: SSE で生成中の回答をリアルタイム表示
設計上の工夫
1. ベクトルインデックスの tenant × folder 分離
S3 Vectors インデックスを {tenantId}-{folderId} 単位で分離。これにより、マルチテナント環境でもアクセス権ごとに検索空間が物理分離され、情報漏洩リスクを構造的に排除。
2. LP の徹底した SEO 対応
- ロケール別 canonical + hreflang alternates を全ページ出力
- Organization / SoftwareApplication / FAQPage / HowTo / Product / BreadcrumbList の JSON-LD 構造化データ
llms.txtを配信し、AI検索時代の LLMO にも対応- GPTBot / ClaudeBot / PerplexityBot / Google-Extended など主要AIクローラーを robots.txt で明示的に許可
3. マルチテナント認可の徹底
Controller → Service → Repository の各層で teamId スコープを強制。リクエスト毎のガード(AuthGuard + RolesGuard)でテナント横断アクセスを防止。Prisma クエリには必ず teamId のWHERE句を付与する設計。
4. 課金 Webhook の冪等性
Stripe の Webhook は同一イベントが重複配送されうるため、webhook_events テーブルで event_id を記録し、二重処理を防止。決済と権限付与のトランザクション整合性を担保。
担当領域
ソロSaaSとして以下すべてを担当しています:
- プロダクト企画・事業設計・価格戦略
- UI/UX デザイン・LP コピーライティング
- フロントエンド実装(Next.js / React / Tailwind)
- バックエンド実装(NestJS / Prisma / MySQL)
- ベクトル化パイプライン・RAG 実装(Bedrock / S3 Vectors / Lambda)
- 課金システム実装(Stripe)
- インフラ構築(Terraform / AWS ECS / CloudFront / Aurora)
- セキュリティ設計・プライバシーポリシー / 利用規約の起草
- SEO / コンテンツマーケティング・ブログ記事執筆
- カスタマーサポート・問い合わせ対応
技術的な学び
- S3 Vectors(GA 直後の新サービス)を本番採用した際のインデックス設計と運用ノウハウ
- マルチテナント SaaS におけるデータ分離・課金・認可の実装パターン
- Next.js 15 App Router での SEO 最適化(canonical / hreflang / 構造化データ / LCP)
- Stripe Checkout と Webhook の冪等処理、プラン変更に伴うプロレーション処理
- LINE Messaging API・MCP プロトコルなど複数チャネルへの単一RAGコア統合
- ソロSaaS運営における「何を作らないか」の判断軸