Scalaのドキュメント翻訳に挑戦してみた話
先日、Scalaの公式ドキュメントのツアー部分(前書き | Scala Documentation
)の日本語訳がマージされたので、
- なぜ、挑戦したのか?
- 結果どうだったのか?
- 翻訳作業における学びは?
この辺を振り返ってみたいと思います。
経緯
翻訳作業を始めるに至った要因はいくつかあります。
1つめ:Scalaに対する苦手意識を払拭
5年ほど前に数ヶ月に業務でScalaを触る機会がありました。当時「アロー関数、何それ怖い…」なレベルでクソ雑魚だったため全然Scalaを理解できませんでした。このトラウマを払拭して「俺成長したじゃん?」をやりたかった。
2つめ:「得意言語の獲得」と「プログラミング言語に関する知識の底上げ」
僕は基本的にJava, PHP, Ruby, JavaScript辺りは初心者に毛が生えた程度には書けるつもりですが、「得意な言語が無い」、「言語の仕様に詳しくない」というコンプレックスがありました。Scalaは比較的難しいとされる言語だと認識しており、使いこなせれば強キャラになれるんじゃないか?と1つ目の理由と相まって挑戦する機会をうかがっていました。
3つめ:Scala福岡とOSS Gateという2つの勉強会への参加
2019年1月に以下の2つのイベントが開催されました。
“Scala福岡”はScalaのカンファレンスであり、参加する前にある程度Scalaに関する知識を学び直そうと思いました。その過程で今回日本語訳をしたScalaの公式ドキュメントのTourの部分を読んでいたのですが、日本語訳のページがありませんでした。
丁度タイミングが重なる形で”OSS Gate”というOSSに貢献しようというイベントが福岡で開催されました。その際にせっかく英語ドキュメント読むんだし、日本語訳をしてOSSに貢献してみよう!と思い立ったのが今回の翻訳作業の始まりでした。
こちらにOSS Gateの時に作成した作業ログissueが残っていましたのでご参考までに。
おまけ要素:公式ドキュメントだけで学習できるかの検証
僕は今まで言語を学習する場合は基本的に書籍を購入して学習していました。この方法は数千円でわかりやすい日本語の資料が手に入りとても効率的ですが、最新の技術のキャッチアップが1年半〜2年遅れてしまいます(最近は技術書典などもありますが)。そこで実際、英語の公式ドキュメントだけでどこまでできるのかを検証したいと思いました。
翻訳作業の流れ
Scalaの公式ドキュメントはJekyll(Jekyll • シンプルで、ブログのような、静的サイト)で作られており、まずScalaのドキュメントを翻訳するための環境が必要となりました。「俺はScalaのドキュメントを読みたいのだ…」と思いながらJekyllのドキュメントを読んでいたのは懐かしいですね…
学び1:翻訳を作業するにはまず作業環境の知識が必要になる
開発環境が出来上がってからはひたすらGoogle先生とWeblio先生に頼りながら翻訳作業を進めました。単純な翻訳ならGoogle先生がすごく有能なのですが、翻訳ワークとなると文脈から意味合いを探る必要があるのでWeblio先生できちんと取りうる意味を確認する必要がありました。
最近、WEB+DB Press vol.110の名前つけ特集で、Mac標準の辞書は英和・和英・英英辞典が付いていて良いぞ!という記事を読みました。まだ使用する文化が根付いていないのですが、この辺を使うのも良いのでしょうね。
学び2:Weblio先生は色々な意味が載っていて良いぞ
翻訳作業を進める中で、最初に意味が判らないとなったのが、高階関数と複数パラメータリスト(カリー化)の辺りですね。この辺は関数型界隈でよく見かけるワードなのですが、その辺のドメイン知識がきちんと解っていなかったので、翻訳はしたものの意味がわからないという壁にぶち当たりました。
その後もジェネリッククラス、変位指定、上限型境界、下限型境界の辺りは本当に意味がわからない、なんなら今でも解ってないレベルで泣きそうになりながら翻訳を進めました。
学び3:前提となるドメイン知識がないと訳しても内容が合ってるか判らない
“名前渡しパラメータ(by name parameters)“と”名前付き引数(named arguments)“がゴッチャになったりもしましたね。何をどうしたら”by name parameters”で”名前渡しパラメータ”になるんだ…
学び4:言葉の訳し方が判らない…最初に翻訳する人すごいなぁ…
みなさん「いや、よくそんな状態で翻訳続けたな?」、「そんな奴が翻訳した文章を本当にリリースして良いのか?」と思われるかもしれませんが、今回の場合はScala福岡にてふじたまさんという強キャラにレビューワーをお願いしていたので、本番にプルリクを送る前に怒られない、呆れられないレベルの内容にすることができました。
ふじたまさん本当に半年間ありがとうございました。
学び5:できる人にきちんと見てもらうことで安全性を担保
そうこうして翻訳を終え、2周のレビューを経て、プルリクを送信。本当に送って良いのか手が震えましたね。プルリクではexoegoさんとeed3si9nさんにレビューをしていただき、1週間後にマージされるという流れになりました。
exoegoさん、eed3si9nさんにつきましてもレビュー、マージありがとうございました!
翻訳の結果
では、翻訳の結果どう成長したかを見返してみます。
Scalaに対する苦手意識を払拭
ふんわりとした「怖い奴」という印象から、やつある程度「読めるところは読めるけど、変位指定周りが相変わらず判らぬ」と少し進歩しました。またScalaによる関数型プログラミングの部分に関しては全然実践できていません。
変位指定周りはデザインパターン勉強したら使い所が判るのかなー?となり、増補改訂版Java言語で学ぶデザインパターン入門 のサンプルコードを地道にJavaからScalaに書き換えています。今の所、問題の変位指定周りの理解には至っていませんが、ScalaはJavaの資産が使えるので単純にScalaの勉強になります。
また、_(アンダースコア)などの記号周りの読み書きはおぼつかない感じです。この辺はドキュメント読んだから、すぐ認識できるわけではない部分なので地道に慣らして行くしかありません。
「得意言語の獲得」と「プログラミング言語に関する知識の底上げ」
色々と新しい知識は手に入りましたが、きちんとした理解には至っていないなというところ。そもそも初学者が公式ドキュメントの一部を翻訳しただけで強キャラにはなれぬのです。一朝一夕でレベル上がるならみんな苦労していないはずなので、この辺は地道にScalaのソースコードを読み書きしたり、色々な言語の仕様を勉強するしかないのかなと思います。
公式ドキュメントだけで学習できるか
今回で言えば、レビューワーのふじたまさんに色々と教えていただかないとかなり厳しかったというのが本音です。実はScalaスケーラブルプログラミング(コップ本)も購入して日本語の内容も読んでみたのですが、苦手な部分の解決までは至っていません。根本的に利用ケースの理解など自分の頭が足りないのが原因のような気がします。
その一方で、プログラミング言語ではありませんが先日Redisのドキュメントを読んだところ、ある程度理解できたつもりです。そのため公式ドキュメントだけでの学習の成否は学ぶ内容のレベルや学習者の前提知識次第としか言えません。
ただ英語のドキュメントを読む場合、他の言語やライブラリにも似た機能があり、こういう翻訳がされているという知識は非常に重要になってくると思いました。その点で色々な知識があるか、インデックスだけでも頭に入っているかは新しいことを学ぶ上でやはり非常に重要だなと再認識させられました。
英語力は上がったのか?
英語力自体は上がってないし、基本的に記憶力がザルなので語彙が特段増えたという認識はありません。ただ英語のドキュメントを怯まずに読み始めるという力はついたと思います。
あと解りづらい英語を読むときに無理をして頭の中で読むのではなく、エディタに英文を貼り付けて、日本語訳を打ちながら読んだ方が良いと思いました。これは長い英文を読む過程で、前に読んだ内容が頭から消えても読み直せるし、判らない単語を飛ばしまくる雰囲気読みを防いでくれます。
終わりに
今回、OSSに貢献させていただいて、日本語ドキュメントを最初に作ってくださる方々は本当に凄いなと実感させられました。
今後もなんらかの形でOSSに還元しつつ、自己成長ができればなと考えています。
PS: Scala3が2020年に出るそうですが、僕の翻訳したドキュメントはあと何年WEB上に存在していられるのでしょうか…