verbaly について
Verbalyは、コード内に文言を書き、型付き翻訳とCIチェックを行うアプリ開発チーム向けのi18nコンパイラー兼ランタイムです。メッセージを抽出してキーを生成し、エージェントが翻訳案を作るMCPサーバーも提供しますが、承認は人が行います。
主な機能
- 01メッセージの抽出と安定キーの生成
- 02文言から型付きパラメーターを推論
- 03CIで翻訳の欠落や不整合を検査
- 04翻訳ワークフロー向けカタログの出力
- 05ローカルパネルで翻訳案を確認
活用シーン
- 01アプリの文言を実装しながら翻訳を追加
- 02リリース前にパラメーターや複数形の不足を検出
- 03エージェントで翻訳案を作成
- 04Studioで翻訳案を確認して承認
MCP 対応
@verbaly/mcpは翻訳ワークフローをツールとして提供し、プロジェクト設定とカタログをリソースとして公開します。エージェントは翻訳案を作成できますが、承認は人が行います。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
9掲載時のツール一覧 · 今日に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| dir | string | いいえ | カタログのディレクトリ(デフォルト:locales) |
| root | string | いいえ | verbaly.config を含むプロジェクトルート(デフォルトはサーバーの作業ディレクトリ) |
| locales | array | いいえ | ソースロケールを含むすべてのロケール |
| sourceLocale | string | いいえ | 記述に使用する言語(デフォルト:en) |
詳細
コードにテキストを書いて、あらゆる言語でリリースしましょう。
React、Vue、Svelte、Next.js、Nuxt、SvelteKit、Astro、プレーンな HTML 向けの i18n コンパイラーと小さなランタイムです。
同期を保つキー管理ファイルは不要です。テキストからパラメーターの型が推論され、CI ゲートが翻訳の不備を防ぎます。
アイデア
ほとんどの i18n ツールでは、文ごとにキーを考え、言語ごとにファイルへ記述し、コードに合わせて手作業でファイルを同期し続ける必要があります。Verbaly はその発想を逆転させます。
// with key files: name it, write it in en.json, es.json, pt.json, keep them in sync
t('dashboard.welcome_back', { name });
// with Verbaly: write the sentence where it is used
t`Welcome back, ${name}`;
// and the compiler writes a stable key and a typed call for you
t('ESsQIvlA', { name });
リリースされるランタイムは依存関係ゼロで gzip 圧縮後 3.35 KB です。リリースごとに、このリポジトリのチェックゲート(pnpm --filter verbaly size)で測定しています。
クイックスタート
pnpm add verbaly @verbaly/vite
pnpm add -D @verbaly/compiler # the verbaly command: init, extract, check
npx verbaly init
// vite.config.ts
import verbaly from '@verbaly/vite';
export default { plugins: [verbaly()] };
// anywhere in your app: extracted and typed on save
import { t, setLocale } from 'verbaly/app';
t`Hello ${name}`;
await setLocale('es'); // loads only the Spanish module
verbaly/app はプロジェクト独自のモジュールです。プラグインが設定をもとに、言語とカタログを組み込んで生成します。Next.js、Nuxt、SvelteKit、Astro にはそれぞれ1行で設定する方法があります。上の一覧から該当するものを選ぶか、https://verbaly-web.vercel.app/docs で完全なドキュメントをご覧ください。
Verbaly を選ぶ理由
✍️ キーファイル不要文を書くだけです。コンパイラーが名前を付け、すべての言語ファイルをコードと同期させます。 | 🧷 テキストから型を推論{name}、複数形、通貨、日付はメッセージ自体から定義されるため、誤ったパラメーターや不足しているパラメーターはコンパイル時にエラーになります。 | 🛑 問題のあるものは出荷されないverbaly check は、翻訳の不足や、{param}、タグ、複数形のケースが失われた翻訳を、分かりやすく検出します。 |
🪶 小さく高速依存関係ゼロ、言語ごとに1つのモジュールを用意し、すべてのリリースで i18next と比較したホットパスのベンチマークを実施します。 | 🔄 あらゆるワークフローに対応翻訳者向けのプレーンな JSON、XLIFF、CSV、gettext PO、Android と iOS 向けのエクスポート、そして人が承認する AI の下書きに対応します。 | 🤖 エージェント対応MCP サーバー、Agent Skill、llms.txt を備え、エージェントが下書きを作成できても承認はできない仕組みです。 |
npx verbaly-studio
Studio は localhost でプロジェクトを表示します。未対応の項目、壊れている項目、機械が生成した内容、コード内の各テキストの場所を確認できます。JSON ファイルがデータベースで、git が履歴です。保存時には verbaly check と同じ検証が実行され、ソーステキストが編集されることはありません。
比較
| Verbaly | i18next | Lingui | Paraglide | typesafe-i18n | |
|---|---|---|---|---|---|
| 型安全なキーとパラメーター | ✅ テキストから推論 | プラグイン/手動 | 部分的 | ✅ | ✅ |
| 実行時サイズ(gzip) | 3.35KB、依存関係ゼロ | 13.6KB(+React 19.0) | 2.2KB(+React 3.3) | コンパイル済み | 1.2KB |
| セットアップ | Vite プラグイン1つ | 複雑な設定 | マクロ + Babel/SWC | inlang プロジェクト | ジェネレーター |
| キーのメンテナンス | 不要、抽出済み | 手動 | 抽出 → コンパイル手順 | 手動 | 手動 |
| 動的コンテンツ/CMS コンテンツ | ✅ 実際の実行時パス | ✅ | ✅ | ⚠️ 弱い | ✅ |
| プレーン HTML(フレームワークなし) | ✅ DOM インタープリター | ❌ | ❌ | ❌ | ❌ |
| 未翻訳の検出ゲート | ✅ CI でのみ失敗 | 実行時の警告 | CI の手順 | ✅ | ❌ |
| 不適切な翻訳の検出ゲート | ✅ CI でのみ失敗 | ❌ | ❌ | ❌ | ❌ |
| カタログ形式 | プレーン JSON | JSON | PO/JSON | inlang 形式 | TS ファイル |
サイズは各ライブラリのメインエントリーを min+gzip で測定したもので、React は外部依存として扱っています。2026-10-15 に同じ方法で測定しました。
コーディングエージェント
claude mcp add verbaly -- npx -y @verbaly/mcp
MCP サーバーは、構造化出力と設定やカタログを読み取るためのリソースを備え、エージェントに一連の作業全体をツールとして提供します。機械翻訳は、人が承認するまで下書きのままです(verbaly review --approve または Studio)。意図的に、承認はツールとして提供していません。Agent Skill では、書き込み、抽出、チェック、翻訳の一連の作業を説明しています(npx degit AronSoto/verbaly/skills/verbaly .claude/skills/verbaly)。また、ドキュメントは llms.txt を公開しています。
パッケージ
| パッケージ | 内容 |
|---|---|
verbaly | ランタイム:t、Intl フォーマット、ロケールヘルパー、DOM インタープリター |
@verbaly/compiler | 抽出、型付きコード生成、ゲート、verbaly コマンド |
@verbaly/vite · @verbaly/unplugin | バンドラープラグイン:Vite、webpack、Rollup、esbuild、Rspack |
@verbaly/react · @verbaly/vue · @verbaly/svelte | フレームワークアダプター:フックまたはコンポーザブルと <Trans> |
@verbaly/next · @verbaly/nuxt · @verbaly/sveltekit | サーバーレンダリング:リクエストごとの言語、ちらつきのないハイドレーション |
@verbaly/astro | Astro 統合:.astro の抽出と言語ごとの静的ビルド |
@verbaly/mcp | MCP サーバー:エージェント向けツールとしての翻訳サイクル |
@verbaly/studio | 上記のローカルレビュー用パネル |
すべて同じバージョン番号を共有し、各リリースは npm provenance 付きで CI から公開されます。
エディター:ホバー時にキーの背後にあるテキストを表示
生成されたキーはハッシュなので、差分にある t('a1B2c3D4') を見ても何もわかりません。i18n-ally 拡張機能をカタログに向けると、実際のテキストがインラインで表示されます。Verbaly の設定変更は不要で、ファイルは 2 つです。
.vscode/settings.json
{
"i18n-ally.localesPaths": ["locales"],
"i18n-ally.keystyle": "flat",
"i18n-ally.sourceLanguage": "en",
"i18n-ally.displayLanguage": "en"
}
.vscode/i18n-ally-custom-framework.yml
languageIds:
- javascript
- typescript
- javascriptreact
- typescriptreact
- vue
- svelte
- astro
usageMatchRegex:
- "[^\\w\\d]t\\(\\s*['\"`]({key})['\"`]"
monopoly: true
keystyle はカタログに合わせる必要があります。ドット区切りのキーには flat、グループには nested を指定します。この拡張機能は読み取りに使い、書き込みには使わないでください。抽出と名前変更のアクションはキーを自分で管理していることを前提としており、ここではコンパイラーが管理するためです。
開発
pnpm install
pnpm build # tsdown: ESM + CJS + .d.ts
pnpm test # each package's suite
pnpm typecheck
pnpm --filter verbaly bench # the hot path against i18next
Verbaly は 0.x であり、マイナーバージョン間でも API が変更される可能性があります。すべての変更は変更履歴に記載されています。貢献を歓迎します。CONTRIBUTING.mdをご覧ください。
フィードバック
- 問題が起きた、または予想外の動作があった場合: バグを報告してください。最小限のコードスニペットで十分です。
- 使いづらさを感じた場合: 内容をお知らせください。ロードマップは実際の利用状況に基づいています。
- 問題なく動作した場合: スターや言及があると、ほかの人にも見つけてもらいやすくなります。
スポンサー
Verbaly は MIT ライセンスで、依存関係がなく、独立して開発されています。時間の節約に役立ったなら、スポンサーになることで、1.0 に向けた取り組み(統合の拡充、リリースの迅速化、長期的なメンテナンス)を支援できます。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。