「実践Rust入門」を書いたよ

κeenです。実践Rust入門 言語仕様から開発手法まで(技術評論社)を書いた(3人で共著)のでどういう本なのか解説します。 5/8発売です。電子版もありますよ。Gihyo Digital PublishingだとPDFが手に入るので人気らしいです。

See Also 書籍『実践Rust入門』の詳細な目次です

目指したもの

Rustの入門書といえば公式ドキュメントのThe Book、TRPLなどと呼ばれるThe Rust Programming Languageやその有志による和訳が一番に挙がるでしょう。 それ以外にもオライリーよりProgramming Rustやその和訳版も出ています。 どちらもRustについてよく書かれており、本書の購入を検討されている方は上記2冊との違いが気になるかと思います。 本書の大きな特徴は以下の2点です。

  • Rust 2018 Editionに対応している
  • 実践を重視している

Rust 2018 Editionに対応している

Rustを知らない方にはEditionという概念に馴染みがないかと思いますが、C++03とかC++14とかのようなものです。 Rustは2015年にリリースされたあと、後方互換性を守りつつ言語を発展させてきました。それでしばらくは良かったのですがどうしても後方互換性を壊すけど便利な機能が欲しくなります。 そこで2018年に既存のコードは動くようにしつつ新たに書き始めるコードは先進的な機能を使えるようにする仕組みとしてEditionを導入しました。 上述のTRPLの和訳版やプログラミングRustはまだ2018 Editionに対応した Rust 1.31がリリースされていない時期のものなので2015 Editionを元に解説されています。 本書は2018 Editionを解説しています。現在でもどちらのEditionも使えるのですがRustのパッケージマネージャのCargoはデフォルトで2018を使う設定になっています。 和書では一番最初、現時点では唯一の2018 Edition対応の本になると思います。

実践を重視している

Rustの日本語コミュニティでの会話を見ていると、「公式ドキュメントを読んでRustの機能は理解できたけど実際にアプリケーションを書く方法が分からない」という感想が多いようです。 TRPLは公式ドキュメントという性質上、言語機能を紹介しないと意味がないので仕方ない話ですがユーザからしたらもう少し実践的な内容も欲しくなります。 「プログラミングRust」もどちらかと言うとTPRLに似た内容で、言語機能や標準ライブラリの紹介に重点が置かれています。

本書では言語仕様の紹介は緩急つけつつ、実践の部を設けることでアプリケーションの作り方を示しています。本書一冊で読者が自立してRustでプログラミングできるようになる本に仕上がっているはずです。 言語仕様については網羅的ではなく、最初にアプリケーションを書く上で必要にならなそうな言語仕様の細かな点の解説は省いています。 例えば「2つの存在 impl Trait が同じ型とみなされる条件」「||がいつクロージャの引数としてパースされていつ論理和の演算子としてパースされるか」などは解説していません。あるいは、マクロについてもTRPLやプログラミングRustで1章割かれていますが、本書では多少触れるだけにとどめています。 細かな点はTRPLへのポインタを示しているので必要になったら読めばいいでしょう。

簡単に書きましたがRustで言語仕様を程々に紹介するというのはかなり難しいです。 Rustはリソースを細かく管理してマシンの性能を引き出す目的で作られた言語なので、なんとなくで書いたらとりあえず動く言語の入門とは一線を画します。 適当に書いてもコンパイルエラーになるのは目に見えてますし、そこから格闘してランダムにコードを書き換えて、よしんば動いたとしても当初の目的であったマシンの性能を引き出すのとは程遠い結果になるでしょう。 そうなってはRustはただのコンパイラが口うるさいだけの書きづらい言語になってしまいます。 結局こういう部分は実践よりもガッと座学で原理を理解してメンタルモデルを築くのが習得への近道だと思います(個人の意見です)。 とはいえ動くコードがないと飽きるのもまた事実です。 本書では実例を交えつつ、理解すべき点は丁寧に説明して、必要とあらばメモリレイアウトの図も載せて、と(個人的感想では)バランス良く書かれています。 コミュニティでの質疑でよく見受けられるつまづきやすい所、疑問に思いやすいところをしっかりカバーしているのもポイントですね。

執筆しての感想

初めての経験なので大変でした(小並感)。実は編集者の方とのやり取りは2016年末頃から始まっており、振り返ると足掛け4年のプロジェクトでした。 4年もあると色々変わるもので、書き始めた頃からRustの仕様は大きく変わり、将来に期待と書いたはずの未来が訪れ、紹介していたフレームワークがメンテナンスされなくなり、2018 Editionが出たり、と様々な変化がありました。 著者のスケジュールやそれぞれが書きたい内容も色々なことがあって章が減ったり増えたりもしました。

完成までに時間がかかったのは申し訳ないことに著者の怠惰もありますが、シンプルに書いた内容が多いというのもあります。 最初に指定された字数制限を最終的に守った章は1つとしてなかったと記憶しています。 本のサイズ感も概ね「マスタリングTCP/IP」くらい、TAoCP Vol. 1より少し薄いくらいです。もしかしたら世界で一番内容が多いRustの本なのかもしれません。

私はブログをちょくちょく書いているので筆の速さには自信があったのですが、ちゃんとした内容を書くとなると書き捨てのブログとは勝手がずいぶん違いました。 初速こそ出るもののすぐに息切れしてしまいますし、後から見返すと構成が全然ダメで上手く内容が伝わってきませんでした。 テクニカルライティングの技能って大事だなーとひしひしと感じているところです。大学の専門教育って重要ですね。 何度も書き直して最終的に形になったと信じていますが、実際に手に取って読まれてどう評価されるのか今でも不安でいっぱいです。

因みに原稿はGitHubにMarkdownをpushする形で、コミュニケーションはSlackでした。普段どおりのツーリングなので違和感なく進められました。 基本的には章単位で担当なのでコンフリクトは気にしなくていいのですが、たまに編集が入ってmasterが書き換わることがあるのでmasterへのpush通知は常に見てました。 進行管理もGitHubのIssueやProject、Wikiなどを使っていましたし、ピアレビューはプルリクでした。便利! 出版社とのやりとりは結構ローテクなことが多いと聞いていたのでエンジニアに寄せた作業フローが意外でした。

その他

勘の良い方なら気づいたかと思いますが本書の著者陣はTRPL旧版の和訳に貢献した人たちで構成されています。河野さんと私がリポジトリの中の人、小松さんがこのissueによると最も翻訳に貢献した人です。その3人が執筆で忙しをしてしまったので結果として翻訳が止まってしまいました。 「すぐに書き終えるから少し待って」と思いつつ想定より時間がかかってしまったのでコミュニティには大変申し訳無く思っています。 しかし新版のドキュメントが出てから旧版とは独立に翻訳がプロジェクト始まったりしてコミュニティに助けられました。ありがとうございます。

ところでRustの公式ドキュメントについては変遷があったので少し纏めておきます。

呼称 別名 和訳 備考
旧版 1st Edition 河野さん、κeenなどの有志
新版 2nd Edition hazama-yuinyanさん 紙の本が出ている
2018 Edition -
現行版 -

旧版と新版では章レベルで内容がガラリと変わっています。新版以降は言語の進化に合わせて内容をアップデートしているみたいで、連続的な変化です。

本書は著者陣がTRPLの翻訳をやっていたので訳語も概ねTRPLの和訳に準じています(doc.rust-jp.rsにあるドキュメントはほぼ対訳表を共有(フォーク)しながら訳しているので訳語がある程度揃っています)。

プログラミングRustの翻訳はどうも独自で訳語を決めているみたいです。 プログラミングRustの訳者が大学のサークルのOBだったのでOB会で実際どうなのか聞こうと思ってたのですが私がOB会にいきそびれたので聞けませんでした。次の機会に聞こうと思います。

(こう書くと他の著者に失礼ですが)自分の書いた本が本当に刊行されていいのか今でも不安です。しかしちゃんと目指した通りの本になっていると思うので是非手に取ってみてください。 これを機にRustに入門する方が1人でも増えたら著者冥利に尽きます。

Written by κeen