【ITニュース解説】Why I built Wuchale: Protobuf-like i18n from plain code

2025年09月10日に「Dev.to」が公開したITニュース「Why I built Wuchale: Protobuf-like i18n from plain code」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

Wuchaleは、面倒な国際化(i18n)作業を劇的に簡略化するツールだ。コード内の表示テキストを自動検出し、翻訳・コンパイルして、キー不要のコンパクトなデータに変換。元のコードを書き換えることで、開発者はクリーンなコードのまま簡単に多言語対応を実現できる。

ITニュース解説

システムエンジニアを目指す皆さんにとって、ソフトウェア開発における「国際化」(i18n、Internationalizationの略)というテーマは、いずれ必ず直面する重要な課題の一つだ。国際化とは、一つのソフトウェアを複数の言語や地域に対応させるための設計や実装を指す。例えば、日本語のアプリケーションを英語や中国語でも使えるようにする際に必要となる技術だ。しかし、この国際化の実装は、多くの開発者にとって非常に厄介な作業とされてきた。今回紹介するWuchale(ウチャレ)は、この国際化の煩わしさから開発者を解放するために開発された新しいツールキットである。

従来の国際化の実装では、開発者がユーザーに表示されるテキスト(メッセージ)を特定し、それらを専用のファイル(カタログ)に抽出し、翻訳を管理し、さらに元のコードからその翻訳されたメッセージを呼び出すための「お決まりの繰り返し作業」(ボイラープレートコード)を大量に書く必要があった。例えば、HTMLの<p>Hello</p>というシンプルな記述を国際化しようとすると、t('hello_message')のような関数を使い、hello_messageというキーに対応する翻訳文をカタログから取得する、といった一連の作業が伴う。プロジェクトのメッセージ数が増えれば増えるほど、この作業は膨大になり、コードの可読性(読みやすさ)は著しく低下し、開発の効率も落ちてしまうのが現状だった。記事の筆者も、1000以上のメッセージを抱える大規模なプロジェクトで国際化に取り組む中で、Lingui(リングイ)という既存のツールを使ったものの、結局はボイラープレートコードに埋もれてしまうことに不満を感じていたという。そのため、国際化が必要な別の小規模プロジェクトでは、その煩わしさから国際化自体を避けてしまうほどだったと述べている。

こうした経験から、筆者はある疑問を抱いた。「コードの中にあるテキストがユーザーに表示されるものなのか、そうでないのかは、開発者なら直感的に判断できる。例えば、HTMLタグの中のテキストは明らかにユーザーに見える。それなのに、なぜ国際化のためにわざわざ追加のコードを書いたり、複雑な管理をしたりする必要があるのだろうか?」この素朴な疑問こそが、Wuchaleが誕生するきっかけとなった。

Wuchaleは、この課題を根本的に解決するために二つの主要な機能を提供する。一つ目は、開発者が書いた「プレーンなコード」(通常のHTMLやJavaScriptなど)の中から、ユーザーに表示されるメッセージを自動的に探し出し、抽出すること。抽出されたメッセージは、必要に応じてAIなどを使って自動的に翻訳され、その後、非常にコンパクトで「キーを持たないカタログ」(ただの配列)としてコンパイルされる。これは、データ転送で使われるProtobuf(プロトバフ)という技術の考え方に似ており、無駄な情報を含まない効率的な形式であることを意味する。二つ目の機能は、元のコードをWuchaleが自動的に書き換えることだ。書き換えられたコードは、コンパイルされたカタログから「インデックス」(配列の何番目か)を使って直接メッセージを取得するようになり、これまで必要だったメッセージの「キー」(例えば'hello_message'のような名前)が一切不要になる。

具体例で考えてみよう。元のコードが<p>Hello</p>のように書かれているとする。Wuchaleはこれを解析し、「Hello」というメッセージがユーザーに見えるものだと判断する。そして、この「Hello」をカタログの0番目の要素として格納し、例えば「Hola」(スペイン語のこんにちは)と翻訳する。その上で、元のコードは<p>{_w_runtime_.t(0)}</p>のように自動的に書き換えられる。ここで_w_runtime_.t(0)は、「カタログの0番目のメッセージを取得する」というシンプルな意味を持つ。このように、開発者は元のコードをシンプルに保ったまま、Wuchaleが裏側で国際化の処理を全て担当してくれるのだ。

Wuchaleの技術的な基盤は、「ASTベースの静的解析」という手法にある。AST(Abstract Syntax Tree、抽象構文木)とは、プログラムのコードを解析して木構造のデータに変換する技術のことだ。これによりWuchaleは、コードの構造を深く理解し、メッセージがどこにあっても柔軟に見つけ出すことができる。この高度な解析能力のおかげで、開発者のソースコードは国際化のための特別な記述で汚されることなく、常にクリーンで読みやすい状態を維持できる。

また、Wuchaleによってコンパイルされたカタログは、実行時(アプリケーションが実際に動くとき)のパフォーマンスも考慮されている。従来の国際化ツールでは、実行時に文字列の置換などの複雑な処理が行われることがあったが、Wuchaleのカタログはビルド時(アプリケーションを作成するとき)に最適化されるため、実行時のオーバーヘッドが非常に少ない。これにより、複雑なメッセージや動的に値が変わるメッセージ(例:「残りN個」といった数値を含むメッセージ)でも、高速に処理することが可能になる。

Wuchaleは、React、Preact、Svelte、SolidJSといった主要なJavaScriptフレームワークはもちろんのこと、純粋なJavaScriptやTypeScript、さらにはサーバーサイドのメッセージ(サーバーから生成されるテキスト)にも対応している。開発体験(DX、Developer Experienceの略)の向上にも力が入れられており、「ホットモジュールリプレースメント」(HMR)という機能にも対応している。これは、開発中にコードを変更すると、アプリケーション全体を再起動することなく、変更した部分だけが即座に反映される仕組みだ。Wuchaleは、このHMRの恩恵を受け、開発者がコードを編集するとバックグラウンドで自動的に国際化カタログを同期してくれるため、開発者はスムーズに作業を進めることができる。

さらに、WuchaleにはAIによる自動翻訳のオプションも用意されている。もちろん、プロの翻訳家による品質には及ばないが、迅速にプロトタイプを作成したり、大まかな多言語対応を試したりする際には非常に有用だ。英語でコードを書きながら、ブラウザで別の言語の表示をリアルタイムで確認するといった使い方も可能だ。

多くの機能を持つツールは、往々にして多くの依存関係(そのツールが動作するために必要な他のソフトウェア)を抱え、結果としてツール自体のサイズが大きくなりがちだが、Wuchaleはこの点でも優れている。Linguiのような既存ツールが多くの依存関係を持っていたことへの反省から、Wuchaleは非常に少ない依存関係で動作するように設計されている。Vite(ヴィート)や使用しているフレームワークが共有する依存関係を除けば、Wuchale独自の追加依存関係は5未満という軽量さを実現している。

筆者はWuchaleを使って、以前に国際化を断念したプロジェクトを、AI翻訳(Gemini)を活用してわずか30分足らずで完全に国際化できたと語っている。その時間のほとんどは、言語選択用のユーザーインターフェースの実装に費やされたというから、Wuchaleの効率性がうかがえる。今後、WuchaleはGoやPythonといったバックエンド言語のサポートも計画しており、その進化は止まらない。

Wuchaleは、国際化という開発者が避けがちな複雑な作業を、開発者が意識することなく行えるようにすることで、より良い開発体験とよりクリーンなコードベースを実現する画期的なツールキットである。これは完全にオープンソースとして公開されており、誰でも利用できるだけでなく、開発に参加することも可能だ。システムエンジニアを目指す皆さんにとって、このような新しい技術トレンドや開発ツールに触れることは、これからのキャリアにおいて非常に価値のある経験となるだろう。