rikuto tech blog

ゆる〜くやってます

ja.react.devにcontributeしました

翻訳初contribute

どうも。ブログを放置している人です。今日は珍しく更新します。

初めてドキュメントの翻訳なるものに挑戦してみたので、その感想を書きます。

翻訳したのは以下の記事です。

ja.react.dev

Next.js等のサーバーサイドレンダリングを行う環境で使う hydrate というAPIのdocsです。機能開発している上ではほとんどお目にかかることはないでしょう。

ja.react.devはかなり翻訳が進んでいて、チュートリアルや主要なhookのドキュメントといった記事はすでに翻訳されていましたが、このようなニッチで古くなったAPIのドキュメントは、着手した当時そんなに翻訳が進んでいませんでした。

動機

ふだんお世話になっているreactに何らかの貢献をしたい、という思いだけです。

コードに手を入れるのはハードルが高く感じましたが、高校、大学と英語だけは死ぬほど鍛え上げられた自信があったので、翻訳ならできるだろうと思っていました。(この自信は後に崩れることになります)

まずルールを確認する

ドキュメントだけでなく、一般的にOSSにはContribute Guidelineなるものがあり、PRを出すルールなどが記載されています。

ja.react.dev の翻訳は、専用のissueが立てられており、まずそこで宣言してから1週間を目処にPRを出すのがルールでした。

github.com

あとは記載の通り、スタイルガイドに従うなどのルールを守りながらやるだけです。

まずChatGPTを使う

これが最近の翻訳事情か…と思いました。

ChatGPTでまず機械翻訳を行い、それに手を加えることが推奨されていました。

というのも、スタイルガイドを守りながら翻訳するには、機械の方がそれを抜けもれなく守ってくれるので、そのほうが良いんだろうなーなどと思ったりしました。

以下のgithubwikiに詳細があるので、くわしく知りたい方は見てみてください。

github.com

いざ

早速、メンテナーの@smikitkyさんが作成されている、以下のツールを使ってChatGPTに機械翻訳をしてもらいました。

github.com

この時点でもある程度きれいにできてびっくりしましたが、用語の統一や文章がおかしなところを修正していきます。

さらに、あまり使わないAPIのドキュメントなので、実際にコードを動かし、翻訳と実際の挙動に矛盾がないか、一つ一つ確認していきました。

そして数回のレビュー指摘対応の結果、無事マージしてもらうことができましたが、多くの反省点を残すことになります。

github.com

反省と学び

①翻訳≠和訳だった

表題のとおりですが、翻訳と和訳は似て非なるものだと痛感しました。

たとえば、今回レビューで指摘を受けた以下の文章

reactNode: The "React node" used to render the existing HTML. This will usually be a piece of JSX like <App /> which was rendered with a ReactDOM Server method such as renderToString(<App />) in React 17.

これは大学入試問題などで出ると嫌な文ですよね。関係代名詞の which 以下が長いと日本語に訳すのが本当に難しいです。

(ChatGPTの力を使わず)真面目に和訳すると、以下のような文になるかと思います。

reactNode : すでに存在するHTMLをレンダーするのに使われるReact nodeです。これは通常、React17における renderToString(<App />) 等の ReactDOM Server のメソッドでレンダーされる <App /> のような、JSXの一部分を指します。

たぶん、入試問題ではこのような訳が解答例として提示されることがしばしばあると思いますが、正直何を言ってるのか、一度読んだだけではナンノコッチャという感じです。

読みづらさの原因は、which以下の修飾部分を「a piece of JSX like <App /> 」の訳の前にすべて書いていることです。

この文をChatGPT先生は、以下のように訳してくれました。

reactNode: 既存の HTML をレンダーするのに使用される「React ノード」。これは通常、React 17 における ReactDOM Server のメソッド(例:renderToString(<App />))でレンダーされた JSX の一部である<App />のようなものです。

なるほど!と思いました。such as 以下を(例:〜)のように括弧書きにすることで、可読性が大幅に向上しています。

しかしこの文章でレビュー依頼をしたところ、この文章は a piece ofは訳す必要はないというレビューを頂きました。

この文章では、「reactNodeとは ReactDOM Server のメソッドでレンダーされたJSXである。それは <App /> のようなものである」ということがわかれば十分です。

したがって、ここに愚直にa piece ofを訳してしまうと、読者に「一部とはなんぞ?」みたいな疑問を抱かせてしまうことになります。

英語的には、レンダーされるJSXはここでいう <App /> 以外も考えられるので、a piece ofをつけているのでは?と僕は考察しました。(詳しい人いたら教えてほしい)

翻訳は「和訳」ではない

ペーパーテストの和訳問題のように、愚直にすべての英語を訳すこととは翻訳は違うとひしひしと感じました。

原著者が伝えたいことを、そのニュアンスを残しながらも読者にわかりやすく日本語に変換する、みたいなのが翻訳ということなのかなと思いました。

したがって、技術翻訳には、ある程度翻訳者の配慮というかセンスというか、読みやすくするための工夫が必要なのかなと。

たぶん、小説の翻訳など文学要素の強い翻訳だと、また変わるのかもしれませんが。

②ChatGPTはまだ未完成だった

上記の通りChatGPTが優秀だったので、ちょっと過信していた部分があります。

レビュー指摘で、よくよくみると論理が逆転しているとか、変な日本語になっているとか、そんな指摘が散見され、レビュワーの方々に負担を強いる結果となりました。

これは防げたミスだったので、正直悔しいです。

github.com

③レビュー指摘対応漏れ

指摘事項が多く、レビュー対応で漏れがありました。

これもレビュワーの方々に本当に申し訳ないことです。

対応したところにチェックを付けるなどしていけばよかったなーと思っています。

そもそもですが、②に関連して、指摘が少なくなるよう精査した状態で最初のレビュー依頼できればよかったんですが。

学びは多かった

初の技術翻訳への挑戦でしたが、ほとんどレビュワーの@smikitky さんのおかげで、僕のPRはマージすることができました。

他のページがどんな訳をしているかを見るためにドキュメントを眺めていたので、翻訳対象のページだけではなくその他のreactの知識も増えた気がします。

何より、翻訳という貴重な体験ができたのは良かったなと思います。

次に機会があれば、今回よりもいい翻訳ができるはずなので、またやってみたいです。

「世界は誰かの仕事でできている。」

というBOSS(缶コーヒー)のCMが昔ありましたが、まさにそのとおりです。

日頃参照することの多いドキュメントの翻訳に、ここまでの工数がかかるとは正直思っていませんでした。

翻訳は地味な作業ですが、無償で対応されているかと思うと、メンテナー・コントリビューターの方々には本当に頭が下がります。

日頃の開発で気づいたほんの小さなバグの修正だったり、こういったドキュメントの翻訳というどんなに小さなことでも、誰かの仕事でできているんだと感じるいい経験になりました。

また対応力をつけて、どんどんコミットしていきたいです。