多言語MDXサイトのためのGitベースCMS
英語のコンテンツはリポジトリ内のMDXファイルで管理。AIによる翻訳はSQLiteファイルに保存され、両者はZodでバリデーションされます。ビルド時に型付きのランタイムですべてを読み込むため、CMSサーバーやリクエスト時のネットワーク通信は不要です。
pnpm add scribe-cms zod better-sqlite3仕組み
- 1
スキーマの定義
コンテンツタイプはZodスキーマで定義します。翻訳対象のフィールド、英語のみのフィールド、ドキュメント間の参照方法などを設定します。
// scribe.config.ts defineContentType({ id: "blog", path: "/blog/{slug}", slugStrategy: "localized", schema: z.object({ title: field.translatable(z.string().min(1)), description: field.translatable(z.string().min(50)), author: field.relation("author"), heroImage: field.structural(z.string().optional()), }), }); - 2
コンテンツの作成
1つのドキュメントにつき1つのMDXファイルを作成し、リポジトリにコミットします。ファイル名が英語のスラッグとなり、フロントマターはスキーマに基づいて検証されます。
--- title: "Hello, world" description: "A first post that says hello to the world." author: jane publishedAt: "2026-01-15" --- The body is MDX. **Markdown** and <Components /> both work. - 3
差分のみを翻訳
翻訳対象のコンテンツはハッシュ化され、不足分や古いページだけがGeminiに送信されます。Batch APIを利用するためトークンコストは半額。トランスクリエーションに特化したプロンプトで、ネイティブが書いたような自然な文章に仕上がります。出力はMDXとして解析されてから保存されるため、AIのミスでサイトが壊れることはありません。
export GEMINI_API_KEY=... npx scribe translate --locale fr de --dry-run # show the worklist npx scribe translate --locale fr de # translate, validate, store git add .scribe/store.sqlite # translations live in git - 4
型安全な読み込み
ランタイムが設定からドキュメントの型を推論します。リスト、検索、リレーション、hreflangの代替URL、サイトマップの各要素が、すべて型付きで取得できます。
const scribe = createScribe(config); const posts = scribe.blog.list("fr"); // BlogDoc[] const { document } = scribe.blog.resolve(slug, "fr"); // EN fallback built in const author = scribe.blog.related(document!, "author"); // AuthorDoc const hreflang = scribe.blog.alternates(document!);
主な機能
インクリメンタルな翻訳
翻訳は英語の元データのハッシュに紐付けられます。1段落だけ編集した場合はそのドキュメントのみが再翻訳され、実行前にドライランでコストを確認できます。
ネイティブのような自然な文章
プロンプトはトランスクリエーションに特化して構築されています。直訳ではなく、現地の表現に合わせて再構成するため、自然なコピーライティングが実現します。
保存前のバリデーション
すべての翻訳は保存前にMDXとして解析され、Zodスキーマに照らして再チェックされます。AIの出力ミスがあってもコマンドが失敗するだけで、本番環境には影響しません。
エンドツーエンドの型付け
Zodスキーマと推論されたドキュメント型を利用し、コード生成は不要。リレーションは自動的に解決され、完全な型付きデータとして取得できます。
インライントークン
リンク、アセット、翻訳不要な文字列を文章中に直接埋め込めます。トークンを編集するだけで、再翻訳することなくすべての言語に即座に反映されます。
SEO対策を標準搭載
hreflangの代替URL、x-defaultを含むサイトマップ、カノニカルタグ、noindex、JSONによるリダイレクトルール、ロケールのフォールバックチェーンに対応しています。
すべてをGitで管理
MDXファイルと1つのSQLiteデータベースをコミットするだけ。スナップショットで翻訳元の状態を記録し、scribe historyで変更履歴を確認できます。
サーバー不要
すべてビルド時にディスクから読み込まれるため、Next.js、Astroなど任意のNode環境で動作します。ローカルの管理画面では、閲覧、検索、翻訳の網羅率をひと目で確認できます。
AIファーストの設計
エージェントはコード編集と同じツールを使ってMDXを読み書きし、すべての変更はDiffとしてレビュー可能。AIモデルとコンテンツの間に不要なAPIは介在しません。
オープンな開発
scribe-cmsはMITライセンスで公開され、GitHub上で開発されています。このサイト自体もscribeで構築されており、すべてのページが10言語対応のSQLiteストアとしてコミットされています。ソースコードを読んだり、Issueを立てたり、プルリクエストを送ったりして、ぜひ参加してください。