コンテンツにスキップ
Documents for MorningStatusApp
Esc
↑↓移動↵開く⌘Jプレビュー
このページの内容

サイト設定(blume.config.ts)設計書

最終更新: 2026-09-28(Blume 2.0のアダプター方式への移行、#154)

1. 概要

本リポジトリ(Blumeで構築した設計書サイト)のサイト設定スクリプト blume.config.ts の仕様と、各設定を選んだ理由を定める設計書。MorningStatusAppの設計(docs/design/配下)とは別に、サイト自体の構成・運用に関する設計をここにまとめる。

blume.config.ts を変更する場合は、先に本書を改訂してから実装する。


2. 設定内容

import { defineConfig } from "blume";
import { vercel } from "blume/deploy";
import { orama } from "blume/search";

export default defineConfig({
  title: "Documents for MorningStatusApp",
  description: "Documentation powered by Blume.",
  deployment: vercel(),
  agents: {
    mcp: {
      enabled: true,
      route: "/mcp",
    },
  },
  i18n: {
    defaultLocale: "ja",
    locales: [{ code: "ja", label: "日本語" }],
  },
  search: {
    provider: orama(),
    indexing: {
      includeCodeBlocks: true,
    },
  },
});

3. 各設定の仕様と理由

3-1. deployment: vercel()

MorningStatusApp本体と同じVercelプロジェクト配下でホストするため。blume/deployのvercel()アダプターを指定するとサーバー出力になり、agents.mcpのMCPサーバーエンドポイントやAccept: text/markdownによるコンテンツネゴシエーションが機能する(静的出力ではこれらは動かない)。サーバー出力はプラットフォームの環境から自動推定されないため、アダプターの指定は省略できない。

3-2. agents.mcp.enabled: true, route: "/mcp"

外部エージェント・ツールから設計書を読み取り専用で参照できるMCPサーバーを公開するため。https://morning-status-blume.vercel.app/mcpで疎通確認済み(list_pages / get_page / get_navigation / search_docs)。

3-3. i18n.defaultLocale: "ja" / search.provider: orama()(blume#41で追加・変更)

背景: 本サイトの設計書・開発ノートはすべて日本語で書かれている。Blumeの検索機能(サイト内検索ダイアログ・MCPのsearch_docsツール・Ask AIグラウンディング)が日本語クエリで正しくヒットする必要がある。

検索エンジンはblume/searchのアダプター関数で指定する。providerを省略しても既定のOramaになるが、日本語検索のためにOramaを選んでいる意図を設定上に残すためorama()を明示する。

経緯:

  1. 初期構築時(blume導入時点、#1341 PoC): search.provider未設定=デフォルトのoramaのまま運用していた。
  2. 2026-07-23(#1341 PoC検証、コミット39c33e6): Oramaのデフォルト(英語専用)トークナイザーでは日本語クエリが単語境界を認識できず、検索結果が常に0件になる問題を確認。search.providerをflexsearchに変更し、forwardトークナイズにより日本語でもヒットすることを検証・採用した。
  3. 2026-07-31(project_blume_mcp_setupメモリで記録): FlexSearchへの切り替えはサイト自体の検索ダイアログは直したが、MCPのsearch_docsツールはsearch.providerの設定に関わらず独自の「共有Oramaインデックス」を内部で使い続けており、日本語クエリでは引き続き[]を返すことが判明。既知の制約として記録し、Blume側のアップデート待ちとした。
  4. 2026-08-12(#41): blume 1.4.xでi18n.defaultLocaleがCJK言語(日本語・中国語・韓国語・タイ語)の場合、OramaのインデックスがIntl.Segmenterベースの単語分割トークナイザーに自動的に切り替わる機能が追加されていることを確認。公式ドキュメント(apps/docs/content/docs/configuration/search.mdx、upstream)によれば、このトークナイザーはサイト内検索・search_docs・Ask AIグラウンディングの三者で共有される。search.providerをoramaに戻し、i18n.defaultLocale: "ja"を追加した。

検証結果(blume 1.4.3・本設定で実施):

  • サイト内検索ダイアログで「メンバー」を検索 → タイトル・本文中の一致箇所がハイライト付きで正しくヒット
  • MCPのsearch_docsツールに{"query": "メンバー"}を渡す → 「メンバー データ設計書」等9件の関連ドキュメントを関連度順に返却(変更前は[])

両方の経路で日本語検索が機能することを実証済み。flexsearchパッケージへの依存は不要になったためpackage.jsonから削除した。

Blume 2.0.3(orama()アダプター)での再検証(#154): アダプター方式への移行後も同じ挙動を維持していることを確認した。

  • 検索インデックス(/blume-search.json)に日本語(「メンバー」等)のエントリが含まれる
  • MCPのsearch_docsツールに{"query": "メンバー"}を渡す → 「メンバー データ設計書」等、関連ドキュメントを関連度順に返却

注意: search.providerを将来変更する場合は、flexsearch()にはi18n連携のCJKセグメンテーション機構がない(“FlexSearch has no equivalent segmentation hook”、upstream docs)。日本語サイトである限りorama()(デフォルト)またはpagefind()(pagefind_extendedがCJKをネイティブ対応)を選ぶこと。

3-4. search.indexing.includeCodeBlocks: true(blume 1.6.0で追加、#107)

本サイトの設計書・開発ノートには型定義・blume.config.ts例などのコードブロックが多数含まれるが、既定の検索インデックスはプレーンテキストのみを対象としており、コードブロック内の記述は検索対象外だった。有効化することで、orama()アダプターによるサイト内検索・agents.mcp経由のsearch_docsツールの双方で、コードブロック内容も検索対象に含まれるようになる。


改訂履歴(バージョン降順に記載)

版 更新日 変更内容
1.3 2026-09-28 【対応する実装: Blume 2.0.3(#154)】Blume 2.0のアダプター方式への移行を反映。deploymentをvercel()アダプター、ai.mcpをagents.mcp、search.providerをorama()アダプターに変更(#154)
1.2 2026-09-28 【対応する実装: Blume 1.7.1(#123)】ノート「サイト設定(blume.config.ts)」を設計書として改訂。章番号の付与、改訂履歴の新設(#154)
1.1 2026-09-14 【対応する実装: Blume 1.6.6(#107)】search.indexing.includeCodeBlocks: trueの採用理由を追加(#107)
1.0 2026-08-12 【対応する実装: Blume 1.4.3(#41)】新規作成。各設定の選定理由と、検索プロバイダーの変遷・日本語検索の検証結果を記録(#41)

このページは役に立ちましたか?