Rust.Tokyoオーガナイザー・豊田優貴が薦めるRust本6選

2024年9月26日

Rust.Tokyoオーガナイザー

豊田 優貴

Sansan株式会社のソフトウェアエンジニア。金融機関向けのリスク管理計算機の開発に携わってから、しばらく広告配信の仕事に従事した。前職のUSの企業では実務でRustを利用した。本業のかたわら、Rustの国内カンファレンス「Rust.Tokyo」の運営や、いくつかのOSSの開発や貢献を行っている。共著で『実践Rustプログラミング入門』(秀和システム)、『RustによるWebアプリケーション開発』(講談社サイエンティフィク)など。また、『Web開発で学ぶ最新言語Rust』(日経クロステック)の連載を持つなどした。
※アイキャッチとプロフィールに使用しているアイコンは「めぶイカメーカー」を使用し生成しております

 

GitHub: https://github.com/yuk1ty

書籍リスト
  1. 1. 『詳解Rustプログラミング』Tim McNamara 原著、吉川 邦夫 監訳
  2. 2. 『プログラミングRust 第2版』(Jim Blandy、Jason Orendorff、Leonora F. S. Tindall 著、中田 秀基 翻訳
  3. 3. 『並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ』高野 祐輝 著
  4. 4. 『Rust for Rustaceans: Idiomatic Programming for Experienced Developers』Jon Gjengset 著
  5. 5. 『Zero To Production In Rust: An introduction to backend development』Luca Palmieri 著
  6. 6. 『RustによるWebアプリケーション開発 設計からリリース・運用まで』豊田 優貴、松本 健太郎、吉川 哲史 著

この記事では、Rustへの入門をある程度終えた方、あるいはすでに実務でRustを利用している方––初級者から中級者へのステップアップを図る方々が、さらなる熟達を目指す際に参照できる書籍を紹介します。Rustの初学者向けの書籍は近年、国内においても、訳書を含め急速に出版されてきました。しかし、中級者以上向けの書籍は、英語圏含めなかなか見当たらないのが実情です。日本語で読めるもので中級者以上向けをターゲットとした書籍は、これから出版が始まる段階なのではないかと筆者は思っています。

Rustはただでさえ奇抜な言語仕様をもっています。場合によっては、コンセプトをそれなりに理解していなければ使いこなすことさえ難しいといった事態に陥ります。入門書をサラッと読んだだけではこの辺りを骨の髄まで理解することは難しく、なんとなく「このままでよいのか」という思いを抱きながらRustのコードと向き合うこともままあるでしょう。

そこでこの記事では、Rustの新しいコンセプトについて深く学べたり、あるいはRustを使ってアプリケーションを実装する際にある種の正解カードを与えたりしてくれるような書籍を紹介してみることにしました。先述の通り邦訳の書籍は数が少ないことから、未邦訳の書籍も含んでいます。洋書に抵抗感のない方はぜひ読み進めてもらえればと思っています。

本題に移る前に、免責事項です。Rustは幅広い分野で利用されるプログラミング言語です。こうしてRustに関する話題を書くにあたっては、その主張に少なからず著者が普段仕事をする分野によって多少のバイアスがかかることを認識しておく必要があります。私はいわゆるWebアプリケーションのバックエンドを主軸とするエンジニアであるため、「Webアプリケーションから見たRust」という視点から今回の記事を執筆しています。たとえば、システムプログラミングをメインでRustを使っている方にとっては、また別の中級者向けの一冊があるかもしれません。

システムプログラミング言語としてのRustにフォーカスした『詳解Rustプログラミング』


▲『詳解Rustプログラミング』Tim McNamara 原著、吉川 邦夫 監訳、翔泳社

もしかすると、この本を入門書として手に取った方もいるかもしれませんが、個人的には何かしらの入門書やドキュメントを読んだ後におすすめしたい一冊です。

本書はシステムプログラミング言語としてのRustにフォーカスを当てた一冊です。比較的軽めにRustの文法に入門した後、Rustを使っていわゆる低レイヤーな題材をひたすら実装していきます。さまざまな題材をつくる際に、Rustの機能をどのように使ってソフトウェアを構築していけばいいかを主眼に置いています。

本書では非常に幅広い低レイヤーの題材をフルスクラッチで実装していきます。たとえばCPUエミュレータ、動的メモリマッピングのビューワー、ファイルストレージ、DNSリゾルバ、簡易的なOSのカーネルを実装します。著者の幅広い実装力に敬服します。

意外に思われるかもしれませんが、Rust公式が発表したアンケート「2023 Annual Rust Survey Results」によると、Rustの利用事例として最も多いのは、今ご覧いただいているようなWebサービスのバックエンド(サーバーサイド)開発の用途のようです。もちろん、そもそもこうした開発を行う企業に従事するエンジニアの割合が高く、母数が多い可能性はあります。それに引っ張られてこのようなアンケート結果になったかもしれません。

ところで、Rustの出自はシステムプログラミングにおける課題の解決でした。そういうわけで、システムプログラミング言語としての側面をきちんと理解しておくと、バックエンドのようなレイヤーの高い開発においてもRustの強みを適切に活かせるのではないでしょうか。そうした理解が不十分だと、たとえばスマートポインタのように、何のためにある機能なのかを理解することすら難しいものもあります。

こうしたいわゆるレイヤーの低い領域に対する理解は、自身のソフトウェアエンジニアとしての力量の向上にもつながります。ソフトウェアエンジニアとして一皮剥けてみたい方はぜひ、本書を通じて成長していきましょう。

リファレンスとして1冊もっておきたい『プログラミングRust』


▲『プログラミングRust 第2版』Jim Blandy、Jason Orendorff、Leonora F. S. Tindall 著、中田 秀基 翻訳、オライリージャパン

本書も入門書として手に取った方が多くいらっしゃるでしょう。ただし内容はとても重厚で、一旦気になるところだけ読んでコードを書き始めた、という経験をもつ方も多いはずです。Rustの中級者へのステップアップを目指すにあたって、もう一度この本を紐解き直すことは、よい手段となるでしょう。

本書の特徴は、まずRustの文法や機能を詳細に解説している点です。それに加え、Rustの言語設計上の狙いやRustのもつ新しいコンセプトが私たちの日々のソフトウェアエンジニアリングにどのような結果をもたらすかについてよく説明している点です。

たとえば4章や5章を読み解くと、Rustの急峻な学習曲線を形作る所有権やライフタイムといった概念が、何を目的として導入され、どのような嬉しさを我々にもたらすのかを知ることができます。また、ぜひ読んで欲しいのは22章で、この章を読むとRustの言語デザインに対する理解が一層深まります

私自身はRustを書き始めて7年近く経ちますが、いまだにこの本に助けられることがあります。また、実務でRustを利用していたときもやはり、この本は手放せませんでした。リファレンスとして一家に一冊、家宝として置いてもよい本です。

Rustを通じて並行処理への理解を深める『並行プログラミング入門』


▲『並行プログラミング入門 ―Rust、C、アセンブリによる実装からのアプローチ』高野 祐輝 著、オライリージャパン

Rustに特化しているというよりは、並行プログラミングそのものについて深く理解することのできる一冊です。

今記述しているコードのパフォーマンスを向上させたいとき、さまざまな最適化を施していくでしょう。その過程で、並列処理や並行処理なども検討のテーブルに上がるはずです。本書に登場する概念への深い理解は、そうした場面で大いに役立つはずです。

Rustでバックエンド開発に従事するソフトウェアエンジニアの方にもぜひ、この書籍を読んでもらいたいと思います。というのも、バックエンド開発ではasync/awaitに代表されるような非同期プログラミングを多用する傾向にあるためです。非同期プログラミングのモチベーションや、どのような仕組みで動いているかを理解しておくと、コーディングで行き詰まった際、解決までの糸口を早く見つけられるかもしれません。

貴重なRust中級者向けの1冊『Rust for Rustaceans』


▲『Rust for Rustaceans: Idiomatic Programming for Experienced Developers』Jon Gjengset 著

本書は、まさにRust中級者向けに書かれた一冊です。

著者のJon Gjengset氏はYouTubeで「Crust of Rust」というRustの特定の機能やライブラリを深く解説するライブ配信をよく行っています。配信で得られた経験などをもとに、初級者から中級者へのステップアップでつまづきやすいポイント、すなわちRustの裏側に潜んでいる理論やメカニズム、よく登場するRustのイディオムを紹介しています

Rustは、入門のための資料がまずまず充実してきました。その背景として、Rust公式が学習のためのツールを充実させる方針をとっており、これまで熱心にそうしたドキュメントを整備してきました。一方で、入門を終えたあと必要になる資料が足りていません。たとえば、「Rustで」どのように考えたら良いのか、あるいはRustでどう書くとRustらしいコードになるのかといった議論をしている資料や書籍はほとんど見受けられませんでした。本書は、そうしたニーズに応える一冊でもあります。

Rustの入門書や公式ドキュメントでは、各機能について表面的な説明で終始している傾向にあります。

一方、本書のアプローチは、表面的な説明にとどまらずに、コンパイラ内部でどのように実装されているかといった話題や、Rustの仕様上裏で整理されている概念を一つひとつ丁寧に解説しています。私の知る限りでは、こうした応用的な話はRustが出している資料をかき集めれば把握することはたしかに可能でしょう。しかし、いかんせん断片的な資料をかき集めて自分の理解できる文脈に落とし直すのは面倒な作業です。本書を読むとそのあたりの手間をショートカットすることができます。

読み方ですが、まずは1章を読むことです。Rustを扱う上で、所有権、借用、そしてライフタイムへの理解はなくてはならないものです。初心者のうちは一旦触りで理解していたこれらの概念をあらためて理論的に見つめ直せます。

次に3章と4章を読んでいただくことです。この章を読むと、Rustプログラマがどのような思考をしながらコードを書いているかがわかるようになるはずです。

できれば9章も読むとよいでしょう。これはunsafeなRustの側面に着目した章です。Rustのunsafeな面は、Rustの根幹である「安全性」をゆるがすものであると一見感じられてしまうかもしれません。実際、そのような議論を多々ソーシャルメディアなどで見かけます。しかし、Rustのunsafeは完全に「安全でない」わけではなく、さまざまな不変条件(invariants)を固守した上で初めて成り立つものなのです。Rustに対するこのような疑義を打ち返すようないい章になっていると思います。

実装しながらさらに理解を深めるための『Zero To Production In Rust』


▲『Zero To Production In Rust: An introduction to backend development』Luca Palmieri 著

Rustで「Webアプリケーション」を作る一冊です。先述した通り、Rustはシステムプログラミング言語でありながら、Webアプリケーション開発においても利用事例が多々あるプログラミング言語です。RustでもWebアプリケーションを実装できるのだというのを力強く示してくれる一冊です。

本書ではactix-webというHTTPサーバーを実装するためのライブラリを中心に、実際にRust製のアプリケーションを本番で運用することを視野にいれつつ実装を進めます。保守性を高めるためにRustの機能がどのように利用できるかや、ロギングやオブザーバビリティの向上のための話題、エラーハンドリングやCIまで満遍なく説明されます。

また、すでに実装されたサンプルコードについて説明を加えるだけの形式をとっていない点もよいところです。内容を進める際、どのように考えながら実装を進めていくべきかや、またある機能を実装する際に必要となる背景知識などについて丁寧に説明が加えられています。

Rustの文法や機能を一通り学んだのち、何か「実際に使える」アプリケーションを実装しながらさらに理解を深めたいと思った場合におすすめできる一冊です。新しいプログラミング言語に入門したとき、他の人が実装をどう進めているかを見られると、より理解が深まることがあると思います。本書はそうした体験を提供してくれる一冊です。

番外編:『RustによるWebアプリケーション開発 設計からリリース・運用まで』


▲『RustによるWebアプリケーション開発 設計からリリース・運用まで』 豊田 優貴、松本 健太郎、吉川 哲史 著、講談社

この書籍に関連して、実は筆者も中級者以上にステップするための書籍を共著で執筆しました。Webアプリケーションの実装を主眼に置いた一冊で、題材となるアプリケーションの実装を通じながらRustを使った開発についての理解を深められるよう仕上げました。

本書は初級者向けの入門書ではないので、Rustに関する文法はほとんど解説されません。それらに対する理解を前提とし、Rustのイディオムの解説や頻出クレートの説明などを盛り込みました。実装には、axumという、近年Rustのバックエンド開発でよく用いられるクレートをしようしました。これをベースに、RESTfulなアプリケーションの実装を進めます。

Rustによるバックエンド開発の中級者へのステップアップを日本語の書籍でやってみたい!という方はぜひお手に取ってみてください。2024年9月26日発売予定です。

おわりに

Rustの中級者にステップアップしていきたい方向けに、2024年現在でおすすめできる書籍を何冊か紹介しました。Rustはまだまだ若いプログラミング言語であり、他の歴史あるプログラミング言語と比べるとまだまだ書籍も資料も少ない状況です。今後も多くの中級者向けの書籍が発売されることになるでしょう。中級者向け、はたまた上級者向けの情報へのアクセスがより容易になることを願ってやみません。

人気記事

  • コピーしました

RSS
RSS