かなりいい本だった。設計からリリース・運用までと銘打っているように、なるべく業務の本番環境に近い形でアプリケーション全体を設計する本なので、この手の本によくある「確かに表題のアプリを作るには作ったけど、で、そのあとは?」みたいな迷いが発生しないのがよかった。以下で個人的に良かった点を列挙する。
cargo-makeをつかった足回りの整備
本書で作成するアプリはPostgreSQL、Redis、Jaegerコンポーネントに依存し、それぞれをDockerコンテナとして利用する。これらの設定や、ビルド、テストをcargo-makeというRust製のタスクランナーで管理していた。このツールは本書で初めて知ったけど、記法も直観的で書きやすく、アプリを動かすためのいろいろな設定を一元管理できて便利だったので知れてよかった。
設計をしっかりやってること
この手の本にしてはめずらしく、よい設計でアプリケーションを作ることを明示的に扱っていて、その一例としてレイヤードアーキテクチャに基づいた設計でアプリケーションを書いている。そのためアプリの規模に対してプロジェクトのディレクトリ構造が(Rustのmod.rs大量発生問題も相まって)かなり仰々しくなっているんだけど、アーキテクチャの勉強としてかなり助かったし、あとからAPIを追加する際もどこに何をかけばいいかはっきりわかって、そのご利益もいくらか体験できた。
テストもちゃんと書いてあること
業務コードとしての運用を見据えるならテストコードはさすがに外せないだろう。特にサーバーサイドアプリケーション実装でよく使うような次の2種類のテストがカバーされていたのが助かった。
1つ目はmockを使ったテスト。mockallというクレートを用いて、認証やDBとのインターフェースをmockで置き換え、リクエストハンドラーのテストを行うための設計方法や実装がカバーされている。
2つ目はDBとの接続テスト。sqlxとrstestを用いて、テスト用のDBデータを用いてDB接続部分のテストを行う方法もカバーされている。
また、全体としてrstestクレートを用いた、ボイラープレートコードを減らしてテストを効率的に、見やすく実行するための方法も勉強になった。
メタ情報や余談が多い
利用するクレートの歴史やほかのクレートとの比較など、本書で伝えんとする情報に対する情報や、本筋から少し離れて周辺情報を補足してくれるような描写が比較的多い。こういう情報は、モチベーションの向上や知識の肉付け、関連付けなど学習の観点から非常に重要だと個人的に思っているので、このスタイルはよかった。Rustを好きな人からカジュアルに口頭で開発のやりかたを学んでいるような気持になる。
Rustの入門的なパートがない
これはどの言語の初級より先の本にも言えるけど、入門向けの本なんてあふれるほどある(RustなんてThe Book[^1]があるのでなおさら)ので、それを焼き直しみたいなのを貴重な紙面をつかってやらないでほしいという気持ちがある。この本はばっさりそこをカットしていて、入門は他のところで済ませておいてと書いてある。とてもよい。だからこそこれだけ中身の濃い本になっていると思う。同じような形式をとっている本として『Rustの練習帳』とかもある。Rustの未来は明るい。
[1] The Book
個人開発に役立った
20個くらいのWeb漫画を毎日最新話が更新されているか確認し、更新されていればDiscord通知を送ってくれるbotをJavaで書いて1年ほど使ってたんだけど、いい機会なのでRustで書き直したかった。この本に書いてあることをふんだんに援用しながら書くことで、本書の内容もより身についた気がする。具体的には以下の点に反映されている。
- cargo-makeを使った運用体制の整備
- レイヤードアーキテクチャを使ったディレクトリ構成
- cargo workspaceを用いて機能群ごとに分割し、毎日動かす用の更新チェック用binライブラリと、追跡する漫画の設定をするバッチ処理用のbinライブラリの2つのエンドポイントを用意
- DIの方法
ちなみにつくったのはこんな感じ
GitHub - ose20/manga-update-notifier
総括
いい本でした。どの言語もその入門的な本はたくさんあるけど、そこから先へとなると途端に少なくなるし、ましてや仕事でつかえるレベルを見据えるとなるともっと少なくなるので本書は非常に貴重だと思った。こんないい本がRustで出てきてくれたのがうれしかった。執筆に関わったすべての方々、ありがとう...