RORK LABEN
ENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれていますENGINE — Rork MaxはClaude CodeとClaude Opus 4.6を基盤に、ネイティブSwiftアプリを直接生成しますCORE ML — Rork MaxからCore MLの端末内推論・HealthKit・HomeKit・NFC・App Clipsといった機能に手が届きますSEED — Rorkは2026年4月にLeft Lane Capital主導で$15Mのシードを調達し、Peak XVやa16z Speedrunが参加しましたM&A — Rorkはアプリビルダー Paperline を買収し、エンジニアリング人材の獲得を目的に買収を継続する方針ですMARKET — Gartnerは2026年末までに新規アプリの75%がローコードまたはノーコードで作られると予測していますGROWTH — ノーコードAI市場は2024年の$4.9Bから2029年に$24.8Bへ、年38.2%の成長が見込まれています
記事一覧/アプリ開発
アプリ開発/2026-06-25上級

言語を増やすたびに未翻訳が本番へ漏れる — Rork(Expo) アプリの文言カタログ運用と抜け検出の設計

Rork で生成した Expo アプリを多言語化したあと、言語を足すたびに未翻訳が本番へ漏れる問題を仕組みで止めるための設計を共有します。文言カタログの一元化、CI でのキー抜け・余り検出、フォールバック連鎖、複数形、擬似ロケールでのレイアウト検証まで実装込みで解説します。

Rork499Expo139i18n2多言語対応3翻訳運用CI3フォールバックローカライズ7

プレミアム記事

言語を増やすたびに未翻訳が本番へ漏れる

個人開発で運用しているアプリのひとつに、ある週末に2言語を足したことがあります。翻訳ファイルを2つ追加し、画面をひととおり眺め、問題なさそうに見えたのでリリースしました。数日後、ある画面の見出しだけが英語のまま表示されているという報告が届きました。原因は単純で、その言語ファイルを書いた時点には存在しなかったキーを、別の機能追加であとから足していたのです。新しいキーは既定言語にしか入っておらず、追加した2言語には反映されていませんでした。

このとき気づいたのは、未翻訳が漏れるのは「言語を足したとき」ではなく「キーを足したとき」だということです。多言語アプリの破綻は、たいてい翻訳作業そのものではなく、キーの増減と翻訳の充足が静かにズレていく運用のほうから来ます。そのズレを目視ではなく仕組みで止めるための設計を、実装込みで共有します。

なぜ未翻訳は「あとから」漏れるのか

翻訳ファイルを最初に用意したときは、全言語が同じキー集合を持っています。ところがアプリは育ちます。機能を足せば文言が増え、その文言は普通、自分が書ける言語(多くは日本語か英語)にしか入りません。残りの言語へ反映するのは別の工程で、ここに時間差が生まれます。

問題は、多くの i18n ライブラリが「キーが無い」ときに沈黙することです。キーを引けなければキー名そのものを表示したり、既定言語にこっそり落としたりします。クラッシュしないのは利点ですが、未翻訳がエラーにならないため、本番に出るまで誰も気づきません。目視レビューは画面数と言語数の掛け算で破綻します。3言語で20画面なら60通り、ここに動的な状態が乗るので、人間が全部見るのは現実的ではありません。

ですから設計の出発点はひとつです。翻訳の充足は人間の注意力ではなく、機械的な差分検出で担保する。 以下、その土台から順に組み立てます。

文言カタログを単一の真実に置く

最初にやるべきは、文言を「型のあるカタログ」として一元化することです。既定言語(私の場合は日本語)を真実の源とし、ここに存在するキーの集合を全言語が満たすべき契約として扱います。

// i18n/catalog.ts — 既定言語(ja)がキーの真実の源
export const ja = {
  common: {
    save: "保存",
    cancel: "キャンセル",
  },
  paywall: {
    title: "すべての機能を解放",
    cta: "続ける",
    restore: "購入を復元",
  },
} as const;
 
// 既定言語からキーの型を導出する。他言語はこの型を満たさないと型エラーになる
export type Catalog = typeof ja;
 
// 他言語は Catalog 型で受ける(深いキーの抜けをコンパイル時に検出)
import type { DeepPartial } from "./types";
export const en: Catalog = {
  common: { save: "Save", cancel: "Cancel" },
  paywall: { title: "Unlock everything", cta: "Continue", restore: "Restore purchases" },
};

ここで enCatalog 型(DeepPartial ではない)で受けるのが要点です。en にキーが足りなければ TypeScript がコンパイル時にエラーを出します。つまり「既定言語に足したキーを英語に入れ忘れる」事故は、CI を待たずエディタ上で赤くなります。

ただし型で守れるのは、ファイルとして存在しキー構造を型で受けている言語だけです。翻訳者から JSON で受け取る言語や、機械翻訳でいったん流し込む言語は型の外に出るため、次の機械検出が必要になります。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
新しい言語を追加するたびに未翻訳が本番へ漏れる根本原因を「キーの増減」と「翻訳の充足」のズレとして整理し、止め方を設計から示します
全ロケールのキー差分を CI で機械検出して未翻訳を本番前に止めるスクリプトと、フォールバック連鎖・複数形・擬似ロケール検証の実装を、私が個人開発の多言語アプリで回している形のまま共有します
翻訳の充足率を計測してダッシュボードに出す方法と、言語追加を安全な定型作業に落とすチェックリストまで1本にまとめました
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

アプリ開発2026-06-27
アラビア語に切り替えても画面が鏡像化されない — Rork(Expo)アプリのRTL対応と再起動の罠
Rork が生成した Expo アプリにアラビア語を足したのに、画面が左右反転せず戻るボタンが逆側に残る——その原因は I18nManager.forceRTL が再起動を要求することにあります。expo-localization での方向判定、Updates.reloadAsync での確実な反映、marginStart への置き換え、矢印だけの鏡像化まで、動くコードで RTL 対応の本番設計を示します。
アプリ開発2026-07-07
高さの異なる画像を2列で美しく並べる—Rork の Expo アプリで壁紙ギャラリーを段組みにする
縦横比のばらつく画像を numColumns では美しく並べられない理由から、列の高さを見て振り分ける段組みアルゴリズム、FlashList の masonry での仮想化、依存を増やさない実装まで、壁紙ギャラリーを実コードで組みます。
アプリ開発2026-07-05
ワンタイムコードの入力欄をExpoで作る — SMS自動入力とセグメント表示を両立させる
6桁の確認コードを入れる画面は、見た目こそ単純ですが、SMSの自動入力・貼り付け・1文字ずつの削除まで含めると意外と作り込みが必要です。iOSとAndroidの自動入力を最初に押さえ、単一のTextInputで崩れにくいセグメント表示を組む実装をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →