📖

gemini-cli に OSS の翻訳をやらせてみる

に公開

注意

はじめに

ふと思い立って gemini-cli で PHPマニュアル の翻訳作業をしてみました。

速度とコストを除けば、概ね満足。楽をさせてもらいました。

OSS の翻訳作業も AI の時代です。。というのも、あながち嘘ではないのかもしれません。

長い間放置された PHPマニュアル の更新は面倒

PHPマニュアル は、気がついた人が 英語版 をどんどんエンハンスしていくスタイルで更新しています。そのため、更新をウォッチして日本語版に追随する人がしばらくいないと、どんどん日本語版は古くなってしまいます。

たとえば、 配列のマニュアル は1年近く放置されていたので、英語版と比較して 大量の diff が生じてしまいました。ほんの一部をスクショで示すと、以下のようになります (完全な diff は 1000行近くあります )。

これを日本語版に適用するのは激しく面倒です。上のスクショだけ見ると patch コマンド一撃で適用できそうに見えますが、日本語訳が当たっているファイルに、英語版の diff の patch コマンドが一撃で全部成功することなどまずありません。

これまでのメンテナ達は、日本語訳された XML ファイルに patch コマンドを試しに当ててみて、reject された Hunk (変更点の塊) については手で変更を適用し、翻訳していたのです。まあ、しばらく放置されたマニュアルの更新なんてやる気なくなりますよね。はは。

gemini-cli の出番

さて、このような入り組んだ変更を人間の目と手で patch するなどやりたくありません。当然ですよね。そこで、AI の出番。

まず、適用したい patch ファイル を生成しておきます。
下記は、PHP マニュアルの英語版を clone して実行しています。

$ cd /path/to/phpdoc-en
$ git diff 8859c8 e8600fe language/types/array.xml > /home/mumumu/array.diff.txt

その上で、PHP マニュアル日本語版 のリポジトリで gemini-cli を起動し、以下のように命令すればよいです。

$ cd /path/to/phpdoc-ja
$ gemini

> read /home/mumumu/array.diff.txt and apply changes to language/types/array.xml 

こうすると、勝手に AI が英語の部分は勝手に翻訳してくれ、Hunk(変更の塊) ごとに apply するか聞いてきてくれます。Hunk を vim などのエディタで編集もさせてくれます。また、全部自動で apply させることだって可能でした。

そのような作業を経て、コミットした変更は下記。かなり楽をさせてもらいました。

https://github.com/php/doc-ja/commit/d5bfce951c04de87224b430f0d603cbe43c47e21

目と手で変更を適用する負担から開放されるのはかなり大きいです。但し、遅い。。もう少し速度が速くなれば、、と思うんですが。

新規に追加された大量のマニュアルの翻訳

PHPer であれば、PHP 8.4 で HTML5 対応の DOM クラスが大量に追加された のは御存知でしょう。

追加されたクラスやメソッドのマニュアルファイルだけで、71ファイルありました。

これも、かつてのメンテナは XML とそうでない部分を区別しながら翻訳していたわけです。面倒ですよね。
さっきの件で味を占めた筆者は、これらについても翻訳してみることにしました。

新しく追加されたファイルは、reference/dom/domnode/* などいくつかあります。
英語版のファイルを日本語版のリポジトリにコピーし、以下のように命令します。

> translate reference/dom/domnode/*.xml into japanese, untouch xi:include reference.

すると、ファイル単位できちんと翻訳してくれました。XML 部分はちゃんと無視してくれますし、ファイル単位で適用するかどうかを確認することもできます。精度は高い印象でした。

そのような作業を経て、コミットした変更は下記。
ただ、ひとつひとつファイルをレビューしつつ、修正しつつでしたので、割と時間がかかりました。2時間弱だったと思います。

https://github.com/php/doc-ja/commit/7fda1664d9159f7635316b86bdc764374db5fd1f

コストや使用感はどうだったの?

この記事に書かれている作業ふたつで、2000 JPYくらいかかりました。
OSS の作業は完全にボランティアなので、これだけかかるのはちょっとオススメできないかもです。

また、gemini-cli の個別のプロンプトに対する応答も、そんなにサクサクというわけでもないので、超快適というわけではないです。とはいえ、これまでのメンテナンスで負担だった部分はかなり軽減してくれるのは確かです。

翻訳作業に関するあれこれ

もはや、日本語でなにかメモやぼやきを書いていても、それを日本語ネイティブでない人が読んで、別の場所で英語で議論をふっかけてくることも珍しくなくなりました。翻訳の精度はかなり上がってきていますし、こういった作業ももっと快適になっていくのは確実でしょう。どんどん言葉の壁ってなくなっていくんだなー、と。

Discussion