【エイプリルフール】管理画面で一回更新するだけで、コードとFigmaの多言語が全部同期される話(※本当です)

1. はじめに:今日はエイプリルフールですが、嘘みたいな本当の話です

皆さん、こんにちは! 株式会社ぐるなびで Principal Tech Lead を務めている小向です。

本日はエイプリルフールですが、嘘のような本当の話をします。

「管理画面を一度更新するだけで、アプリのコードもFigmaも、多言語対応がすべて自動同期される」

こう聞くと、「結局は誰かが手動で調整しているのでは?」と疑いたくなるはず。 エンジニアとして至極まっとうな反応です。

しかし、私たちが取り組んだのは、

「人力を排し、その労力を『自動化の仕組み』へ完全に移行させること」

でした。本記事では、この「嘘みたいに効率的な同期の仕組み」を具体的に解説します。

2. どんなプロダクトで実現しているのか

私たちが開発している UMAME!(うまみー!) は、

  • 生成AIがユーザーの趣味嗜好や行動を学習し
  • 最適な飲食店を提案する

次世代型飲食店マッチングアプリです。

AIネイティブなプロダクトを開発する中で、

「多言語対応だけ、やたら人力っぽい」

という違和感がありました。

そこで、

「これも仕組みで解決できるのでは?」

と考えた結果、今回の構成にたどり着きました。

3. 結論:多言語の“唯一の正”をFirestoreに寄せる

色々と考えましたが、結局のところ『マスターデータ、Firestoreに全部置いちゃえば良くない?』という一点に尽きます。

多言語データのマスターをFirestoreに一本化する

  • 翻訳はGeminiで生成
  • 管理画面で人が最終調整
  • 確定データはFirestoreに集約

つまり、

「すべての言語はFirestoreを見れば正しい」

という状態を作っています。

4. じゃあどうやって同期しているのか?

ここが一番「嘘っぽく見える」ポイントです。

流れはこうです。

  1. 管理画面で文言を更新
  2. Firestoreに保存
  3. GitHub Actionsが起動
  4. 各種ファイルを自動生成

生成されるのはこの2つ:

  • Figma用多言語定義JSON
  • アプリ用多言語定義ファイル

つまり、

一回の更新で、デザインと実装の両方に反映

されます。

5. 【to デザイナー】Figmaは“ほぼ自動で同期される”

デザイナー側の体験も、かなりシンプルです。

① JSONを取り込む

Figmaの「Export/Import Variables」プラグインを使い、
生成されたJSONを取り込みます。

とはいえ、

「毎回手作業でやるのでは?」

と思うかもしれません。

実際には運用に組み込むことで、

ほぼ更新を意識しなくてよい状態

になっています。

(このあたりは、まだ自動化の余地があります)

② Variables(バリアブル)として展開される

  • 言語ごとにMode(ja / en)が自動生成
  • キー構造もそのまま維持

③ テキストに紐付ける

一度Variableを紐付けておけば、

次回以降は「最新データを取り込むだけ」で全テキストが更新

されます。

④ 言語切り替えで確認

Modeを切り替えるだけで…

一瞬で英語版デザインが完成

Design Modeの場合

Dev Modeの場合

これにより、

  • 文字あふれ
  • レイアウト崩れ

実装前に潰せます。

6. 【to エンジニア】翻訳ファイル、もう触りません

エンジニア側はさらにシンプルです。

GitHub ActionsがFirestoreからデータを取得し、

  • アプリ用多言語定義ファイル

を自動生成して git push します。

つまり、

翻訳ファイルを手で編集することはありません

(地味ですが、かなり効きます)

7. 実行時はちゃんと現実的です

ここまで来ると、

「全部リアルタイムでやってるの?」

と思われるかもしれませんが、そこは現実的に設計しています。

  • 静的テキスト:ビルド時に組み込み(高速)
  • 動的テキスト:API経由で取得(柔軟)

パフォーマンスと柔軟性を両立しています。

8. 実は“制約”が一番大事です

この仕組み、魔法ではありません。

成立させるために、いくつかのルールを設けています。

  • 改行コード(\n)禁止
  • リッチテキスト禁止
  • 画像内テキスト禁止

一見不便ですが、

「データを純粋に保つ」ことで自動化が成立

しています。

9. おわりに:嘘みたいだけど、ちゃんと作るとこうなる

多言語対応はこれまで、

  • コピペ
  • 手修正
  • 差分地獄

といった「人力前提の作業」でした。

しかし仕組みで捉えることで、

「1回定義すれば、すべてに伝播する」

状態を作ることができます。

「嘘みたい」と思われるかもしれませんが、
ちゃんと設計すれば、ここまでシンプルにできます。

10. リリースしました

そして最後にお知らせです。

3月31日、UMAME!の英語対応を正式リリースしました!

エイプリルフールですが、

この記事の内容も、リリースも、全部本当です。

ぜひ、新しいUMAME!を触ってみてください。


ぐるなびのフルスタック&フルサイクル気味のエンジニア。
ワインとラグドールとピアノと園芸が好きです。