読後感 β

IT業界で話題の技術書を読んで感想をしたためるブログです。

Rust 入門書の決定版「実践 Rust 入門」

実践Rust入門[言語仕様から開発手法まで]

Rust は C/C++ 並みの速度とメモリ安全性を併せ持った、近年注目を集めているシステムプログラミング言語の一つです。元々は Mozilla に所属していた Graydon Hoare 氏の個人プロジェクトとして誕生し、Firefox 次期ブラウザエンジンの実装言語としての採用をきっかけに本格的な開発がスタートされました。こういった経緯からもわかるように、Rust は高いパフォーマンスが求められるユースケースにマッチする言語です。さらに、モダンで安全な言語仕様を提供するという点から、他の言語では替えのきかなかった現場での導入が進んでいます。実際に Rust は非常に好意的に受け入れられており、Stack Overflow の主催する「エンジニアに最も愛されている言語」というアンケートでは 4 年連続 1 位(2016年~現在まで)という輝かしい成績を残しています。

そんな Rust の言語仕様からエコシステムまでを、まるっと一冊で押さえられる書籍が「実践 Rust 入門」です。Rust は学習コストの高い言語として知られていて、例えばモダンなメモリ管理機能(所有権借用、ライフタイム)は習得の難しいとされている仕様の一つでしょう。Go のような学習コストの低い言語であれば、オフィシャルのドキュメンテーションをサクッと読んで覚えるというのもアリだと思うのですが、Rust ではなかなかそうは行かないでしょう。そこで何らかのリソースにあたって学習に取り組むわけですが、日本人が日本語で書いた文章で覚えられるのであればそれに越したことはないですよね。本書ではその機能がどうして必要かという背景から入りつつ、図やコラムを交えた補足も充実しています。難しい内容をうまく噛み砕いて説明されていて、クオリティの高い文章であると思いました。

さらに、本書の後半は実践編と称したハンズオン形式の説明となっております。ここでは、エラー処理をどのように用意するか、ドキュメントやテストの書き方など、言語仕様の解説ではカバーできない範囲が網羅されています。それに加えて、個人的にはパッケージの選定が役に立ちました。例えば、コマンドラインツールの開発に必須なコマンドラインパーサのパッケージ(Clap)や、REST API のコールに必要な HTTP クライアントパッケージ(Reqwest)です。慣れていない言語だと「こういう時はこのパッケージ使っとけ」が分からず、調べる手間がかかりがちですよね。これを実用例を含めてサクッと知ることが出来たので、サンプルプログラムを実装する上で非常に助かりました。

総括として、わかりやすくコスパが高い書籍だと思います。難解と言われている言語の質の高い説明資料が、言語仕様からエコシステムまで手に入るので、これ一冊あれば Rust が始められるという安心感があります。あと、本書のような人に薦められるレベルの入門書があると、その言語の導入をチームに進めやすくて良いですね。ぜひみなさんこの書籍をきっかけに Rust を始めましょう!

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

 

(アフィリエイト無しリンクはこちら

モダンな分散システム設計をサクッと覚えられる一冊「分散システムデザインパターン」

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムの開発にはそれ特有の難しさがあります。私も前職でバッチベースの分散システムを設計した経験がありますが、失敗したジョブの管理やワーカー間でのデータの受け渡し、ジョブの重複実行をどう扱うかといったところで苦労しました。可能であれば全てのサービスは、よりシンプルな集中システムとして設計すべきです。開発の難易度が低いため、生産性や品質を担保しやすいでしょう。ですが、スケーラビリティや可用性の向上、処理の高速化といった要件を理由に、現場で分散システムが求められる案件は少なくありません。そして近年、K8s を始めとするオーケストレーションツールの発展によって、分散システム開発を取り巻く環境も大きく変わりました。

GoF によるソフトウェア設計パターン(参考:増補改訂版Java言語で学ぶデザインパターン入門)、SQLアンチパターン など、ソフトウェア業界でパターンと呼ばれるものは古くから存在しますが、本書は分散システムの代表的な設計パターンを紹介する書籍 Designing Distributed Systems の訳書です。原著は K8s の開発者として知られている Google 所属の Brendan Burns 氏の手によって執筆されました。ちなみに、著者は過去にも 入門 Kubernetes を Kelsey Hightower 氏と共著で出版されており、K8s 開発者によって執筆された入門書として印象に残っている方も多いのではないかと思います。

エンジニアにとってパターンを覚えることの利点は、大きく二つあると言われています。一つはそのパターンを業務に取り入れることで設計の質が上がること、もう一つはコミュニケーションの質が上がることです。前者は言わずもがなで、後者についてはそのパターンの存在を各メンバーが共通認識として持つことで、チーム内での設計イメージの共有が容易となります。設計パターンをまとまった情報として提供する本書は、設計業務に携わるシステムエンジニア・インフラエンジニアにとって非常に有益な一冊でしょう。

本書はパターンを淡々と紹介するような内容ではなく、各パターンに対するハンズオンを挟むことで読者に具体的なイメージを提供してくれます。なお、ハンズオンもそうですが「コンテナを使ったスケーラブルなサービス設計」というサブタイトルが付けられているように、K8s を使ったコンテナベースでのインフラ運用という視点で解説は進められます。ただし、頭の中で読み替えることで広いユースケースに適用可能だと思いますので、あなたやあなたのチームが K8s やコンテナの本番運用に現状取り組めていなくても気後れする必要はございません。

参考:紹介されるパターンとその分類

(1) シングルノードパターン
  - サーバシステムにおいて、一台のホスト内に立てられた複数のコンテナが協調する設計。
  - 紹介されるパターン:サイドカー、アンバサダ、アダプタ
(2) マルチノードパターン
  - サーバシステムにおいて、ホスト間にまたがって展開されたコンテナ同士が協調する設計。
  - 紹介されるパターン:ロードバランサの利用、キャッシュの利用、シャーディングなど
(3) バッチパターン
  - バッチシステムにおいて、コンテナ同士が協調して効率的な処理を実現する設計。
  - 紹介されるパターン:ワークキュー、イベント駆動、結合など

ちなみに、本題から逸れる詳細な話題については詳しく書かれていないことがあります。ただし、その辺りについては実際に業務を進める中で必要になったときにガッツリ調べれば良いだけですし、むしろサクッと読めるボリュームに抑えられている点が評価されるべきでしょう。

本書の翻訳を担当されているのは松浦隼人氏です。ご自身も技術者として業務に取り組む傍ら、数々の技術書の翻訳や(私も参加させて頂いている)海外記事の翻訳コミュニティ Yakst の運営など、英語と日本語での情報量のギャップ改善に対して積極的に活動されている方です。本書においてもその実力を遺憾無く発揮されていて、日本のソフトウェア業界で使われる一般的な用語を使いつつ平易な文体で訳されており、非常に読みやすい仕上がりとなっています。

ちなみに、著者は HotCloud '16 において Design Patterns for Container-based Distributed Systems という本書の内容に近い論文を発表しており、この論文は日本でも複数のブログで取り上げられました。HotCloud は USENIX が毎年開催している世界的なカンファレンスの一つで、世界の研究者が集まって主にクラウド技術に関する内容が発表されます。エンジニアとしての裾野を広げる手段として、英語圏のSNSをフォローすることが挙げられますが、こういった著名なカンファレンスの発表内容をチェックするのも世界のトレンドがわかるので面白いですよ。

以上、オライリー新刊「分散システムデザインパターン」の感想でした。次回は、2019年4月26日に技術評論社から発売された「実践Rust入門 [言語仕様から開発手法まで]」の感想を書く予定です。お楽しみにどうぞ。

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

分散システムデザインパターン ―コンテナを使ったスケーラブルなサービスの設計

(アフィリエイト無しリンクはこちら