YAMAGUCHI::weblog

海水パンツとゴーグルで、巨万の富を築きました。カリブの怪物、フリーアルバイター瞳です。

「すごいErlangゆかいに学ぼう! 」という本が出版されました #すごいE本

はじめに

こんにちは、Erlang界のCBR400Rです。このたび、私の2冊めの翻訳書籍、印刷されたものとしては初となる書籍が「すごいErlangゆかいに学ぼう!」というタイトルでオーム社より出版されました。本日より書店ならびにAmazonはじめとするオンラインストアでご購入頂けます。

すごいErlangゆかいに学ぼう!

すごいErlangゆかいに学ぼう!

いま手元にある本の厚さや重さを実際に感じて、電子書籍では味わえなかった充実感、達成感を得ています。これの実現に至るまでに多くの方々にお世話になり、その方々のご協力なしには出版なんて到底ありえませんでした。本当に感謝しています。ありがとうございました。

「すごいErlangゆかいに学ぼう!」はどんな本なのか

これはFred Hebertの書いた"Learn You Some Erlang for great good!"の日本語訳書籍です。著者のFredはこの本の出版を評されて、2012年のErlang User of the Yearに選ばれています。Erlang公式コミュニティからも、推薦の一冊として紹介されている、という書籍です。

Learn You Some Erlang for Great Good!: A Beginner's Guide

Learn You Some Erlang for Great Good!: A Beginner's Guide

タイトルに「Erlang」と入っているので、当然プログラミング言語Erlangに関する本です。ただその内容の量、質が尋常じゃないんです、ほんとに。内容をいくつかの章ごとに大きく分けると、おおよそ次のような構成になっています。

  • 1-9章: Erlangの基礎と関数プログラミングの初歩について
  • 10-13章: 並行プログラミングについて
  • 14-17章: OTPの基礎
  • 18-25章: OTPアプリケーションについて
  • 26-29章: 分散アプリケーションについて
  • 30章と残り: 型と新仕様について

Erlangの本なので1-9章でErlangの文法の習得をするのは当たり前なのですが、それ以降の章はErlangを習得しようとする方のみならず、並行プログラミングや分散アプリケーションを実現する上で一体どのような機構を用意しなければいけないのかを理解したい他言語の方にも十分有用な内容となっています。OTPという「フレームワーク」がいかに先に述べたようなアプリケーションを容易にかつ堅牢に実現しているかを理解する上で、本書の構成が非常に優れていると私個人は思っています。その理由はこの本がOTPありきで進まないからです。まずかならず手持ちの機能だけで頑張ってアプリケーションを実装してみて、いよいよ実装が複雑になりお手上げとなったところでOTPを紹介し、その有用性を実感できる形になっています。一つ一つ確実にその有用性を理解することで、Erlangに限らず他の言語でも同様のアプリケーションを実装する際には似たような機構が必要になることを直感的に理解できるのではないでしょうか。このような内容を自分で手を動かしながら理解できる日本語書籍は、自分で言うのもなんですが、他に知りません。

また理解が進めば進むほど、OTPの強力さを思い知らされることになります。普通の言語では標準ライブラリ等はあくまで言語に付随するもので、とりだてて別称することはありません。しかしErlangではわざわざErlang/OTPと標準ライブラリであるOTPを併記します。個人的にはこの辺りにOTPの重要性が垣間見えると思っています。つまりOTPというフレームワークがあるからこそ、Erlangが存在しうる、という意志の表れではないでしょうか。

「新しい言語を学ぶ」というだけではなく「新しい仕組みを知る」という点でもおすすめです。ぜひご一読下さい。また本書は原著版にもない、最新のR17.0から導入されたマップについてのまるまる1章追加されています。R17.0対応している日本語のErlang書籍は本書だけです!

翻訳の思い出

この翻訳書籍を出版するきっかけは3年半前までさかのぼります。*1 訳者序文にもありますが、まだ僕が転職する前に、レビュアーの @voluntas から原著のウェブ版(当時はまだウェブ版しかなかった)を紹介されたのがきっかけでした。そして、Erlangという、よくわからないけどなにやら並行・分散プログラミングが非常に得意でネットワークサーバの作成にすこぶる向いている面白い言語がある、と前々から聞いていたので、勉強がてら翻訳を開始しました。

始めのほうは順調に翻訳を行っていたものの、後半になるにつれどんどん1章ごとの分量が増え、さらに内容も複雑化して、非常に苦労していたことを覚えています。その後、途中で別のことをしていたり、仕事が忙しくなったりして翻訳が滞り、ウェブ版の原著が30章まで完成しいよいよ印刷版が出るという噂が出始めた頃には、まだ22章までしか翻訳が終わっていませんでした。その後しばらくして転職をし、そろそろ翻訳を再開しようかと思っていた頃に、オーム社の鹿野さんと高尾さんに今回の翻訳書籍の出版のお話を頂きました。

とりあえずウェブ版原著の翻訳を終えることが肝心ということで、なんとかウェブ版原著の翻訳を終えました。その後、原著の書籍版が出版され、オーム社さんにウェブ版と書籍版の突き合わせ原稿を作成してらっているうちに、またバタバタしだしてしまい、翻訳が滞ってしまい、結局今年の頭から書籍版の翻訳を再開。とまあ、書籍版自体の翻訳を開始するまでがすでにウェブ版の翻訳から3年経っているという状況だったのですが、書籍版の翻訳が始まってからは、多くのレビュアーの方に的確なレビューをいただき、短い期間で非常に多くの改善を行うことが出来ました。現在公開されているウェブ版の日本語訳と比較すると、恥ずかしくてウェブ版を取り下げたいレベルです。

自分の中で4年間弱常に頭の片隅にあったモヤモヤが、こうやって無事に出版にこぎつけた今日ようやく消えた気がします。あー、長かった。

オーム社での翻訳体制の話

ウェブ版の翻訳は個人のBitbucketのhgレポジトリ、後半になってGitHubのprivateレポジトリ、そして書籍版の翻訳は最初はsvn+tracを使い、2013年11月からはオーム社GitHubのプライベートレポジトリに移行しました。このように何度かレポジトリの引越しをして出版まで来たわけですが、最後のGitHubでの運用が一番個人的に楽でした。運用方法は特に明文化されていたわけでなく、レビュアーに自由にチケットを切っていただきながら、ラベルやマイルストーンを適宜追加していったわけですが、いま振り返ると次のような方法で翻訳するのが楽だったなと思いました。

編集原稿

鹿野さんが用意して下さったのですが、拡張HTMLのようなマークアップ原稿でした。基本HTMLなのですが、原稿には日本語と英語原文の両方があり、日本語の部分のみ編集。たとえばつぎのような感じです。

<p lang="en">Learn You Some Erlang for great good!</p>
<p lang="ja">すごいErlangゆかいに学ぼう!</p>

このlang="ja"の部分だけど編集する形。GitHubへpushするとCIが回され、そこでLaTeX化の後にPDFになり、毎日夜中に最終版のPDFが共有のWebDAVサーバに置かれる形でした。

この原稿がよかったのは、CSSがきちんと用意されていたので、ローカルでもブラウザで簡単に読めたこと、そしてHTML、PDFという異なる形式でレビューできたので間違いを拾いやすかったことです。逆になれないと大変だったのは、HTMLを直接さわる感じなので、最初はタグがチラチラ目障りに感じたこと、そして < などの特殊記号のエスケープがたまに必要だったことぐらいです。自分の好きなエディタで気軽に編集できたのは助かりました。

ブランチ戦略

基本masterブランチ1本で、Pull Requestがある場合にのみブランチを切ってもらいます。ソースコードほど厳密にfeatureがあるわけでもないので、ブランチ名はレビュアー名とか、適当に分かる名前をつけてもらいました。mergeに関しては翻訳者である自分と編集者の鹿野さんが行うのみ。自然言語のmergeは時折うまくいかないことがあり、mergeツールに騙されたことが何度かありましたが、ほぼ問題なく運用できていました。

レビューのissueの切り方

それぞれにまちまちで、それぞれにわかりやすい点はあったのですが、個人的に一番対応しやすかったのは次のようなissue。

  • タイトル: <章番号> <該当箇所 or issue概要>
  • 本文: <GitHub上の該当箇所への行リンク> <issue内容>

GitHubでは行へのリンクが可能なので、ブラウザ上で読むときにリンクが該当箇所のリンクがあるのは非常に便利。さらに、行リンク内に行番号があるので、実際に手元で編集を行う上でも行リンクは便利でした。編集後に行番号がずれることはありましたが、基本的に10行もずれないのでこの方法でうまく行きました。

編集コメントの扱い

最初は僕と編集の方だけでやりとしていたので特にissueとか上げず タグでやりとしをしていました。が、レビューの段になって、編集コメントで質問されている内容が後々まで放置されてしまい、最後で慌てて回収するという事がありました。組版や作業報告以外は編集コメントではなく、issueに上げたほうが皆の目が入るし幸せかなと思いました。(もしくは両方に記載する)

おわりに

訳者序文でも書いていますが、本書の出版はレビュアーの方々のご協力なしには到底ありえませんでした。私がErlangを業務で書いているわけではない中で、実際にErlangで、しかも先端で仕事をされている方々からの実務経験に基づいた細かなアドバイスや、他の関数型言語のエキスパートとしての側面からの指摘、さらには他言語の経験がありつつErlang初学者としての視点からのフィードバッグなど、果ては私の拙い日本語の修正など、多くのレビューを頂きました。この場を借りてレビュアーの皆様に改めて感謝いたします。

書籍版レビュアーのみなさま(五十音順)

  • @ajiyoshi さん
  • 幾田雅仁さん (@cooldaemon)
  • 上西康太さん (@kuenishi)
  • 篠原俊一さん (@itawasa)
  • 渋川よしきさん (@shibu)
  • 島崎清山さん (@seizans)
  • 中居良介さん (@voluntas)
  • 廣江 深さん (@hiroe_orz17)
  • 山本和彦さん (@kazu_yamamoto)
  • 力武健次さん (@jj1bdx)
  • 若山史郎さん (@r_rudi)

Special Thanks

  • 古瀬 淳さん (@camloeba) :型について

オーム社

  • 鹿野桂一郎さん (@golden_lucky)
  • 高尾智絵さん

皆様からのレビュー(随時追加)

*1:原著者のFredに翻訳の許可をもらうメールを送ったのが2010年12月22日でした。