logo
kmnky blog

RustによるWebアプリケーション開発の読書日記

はじめに

2025年の目標2025年中期振り返りでも触れているように、Rustを学習しています。Rustの本を読むのは2冊目で、1冊目の記事はWebアプリ開発で学ぶ Rust言語入門の読書日記に記載しましたが、シンプルなTodoアプリの作成でした。

2冊目は実務でも使えるレベルのものがないかと思い探していたところ、RustによるWebアプリケーション開発 設計からリリース・運用までが以下の点で良さそうと思い、購入しました。

  • サンプルアプリケーションベースで学習できる
  • アプリケーションアーキテクチャについても説明している
  • 同時に勉強していたOpenTelemetryについても触れている

RustによるWebアプリケーション開発 設計からリリース・運用まで 豊田 優貴,松本 健太郎,吉川哲史 RustによるWebアプリケーション開発 設計からリリース・運用まで 2024/9/30

内容をざっくりかいつまんで

この本では蔵書管理サーバアプリケーションを題材に説明しています。作成するコードについてはGithubをご参照ください。流れとしては以下の通りです。

  1. 開発環境のセットアップ
  2. 新規プロジェクトを作成し、ヘルスチェックやユニットテストの簡単な実装
  3. 今回作るもののアプリケーション設計
  4. Rustで実装していく
  5. テストの実装+フロントとの結合
  6. オブザーバビリティやビルド周りの運用部分の説明
  7. 今回使ったエコシステムの紹介

Rustの実装は本で読むと大変なので、Githubのコードのブランチやコミットを参照しながら書きながら学習しました。

勉強メモ

この本で自分が学習したことで残しておきたいことを自分なりに書きます。

cargo-make

タスクランナーであるcargo-makeをこの本では使っています。コンテナの起動、テスト、初期セットアップなどの手順をコマンド一つでできるようになります。Makefile.tomlに記述したコマンドをcargo make <cmd>で実行します。

Rustの実装をしたあと起動コマンドを忘れては、コマンドが書いてあるところを見に行っていたのでブックマークしておくと良さそうです。別で勉強する際はMakefile.tomlを是非真似したいと思います。

レイヤードアーキテクチャ

この本では、3つのレイヤーに分けて実装しています。

  • apiレイヤー
    • 画面から入力情報を受け取るレイヤー
    • handlerを配置し、リクエストを受け取り、所定の処理をしてレスポンスに返す
  • kernelレイヤー
    • 受け取った入力情報をアプリケーションが扱いやすいデータに変換しつつ、必要な処理をかけるレイヤー
    • アプリケーション内で固有に扱うドメインモデルを扱う
    • 外部からデータを取り出し、モデル生成を行う、あくまでもインターフェースの定義
  • adapterレイヤー
    • データベースをはじめとした永続化層にアクセスし、データを保存するレイヤー
    • kernelのインターフェースの実装
    • 本書ではPostgreSQLとRedisへのアクセスに関する処理を行う

レイヤーのルールも参考になります。

  1. 上位レイヤーは、同一レイヤー内、もしくは下位レイヤーのコンポーネントを呼び出して利用する
  2. 隣接するレイヤーのコンポーネントしか呼び出せない
  3. 下位レイヤーは上位レイヤーのコンポーネントを呼び出さない

ログイン実装

本で紹介しているサンプルアプリケーションでRedisまで紹介している本はなかなかないと思い、参考になりました。もちろん実務では使っていますが、自分の学習アプリの中で取り入れたことがなかったので、次の学習で使いたいです。

感想

この本で学んだことはたくさんあるのですが、勉強メモに書きづらく、今回はここまでとします。

私はこの本にとても満足しています。当初の狙いである業務に近い学習というのができたからです。業務でもRustのプロジェクトに入ることがありますが、この本を読んでいたおかげでworkspaceであったりcargo-makeであったり抵抗感なく入れて、この本は実践的だったんだなと改めて感じました。

一方で、自分のアプリケーションの理解、Rustの理解が足りていないことも感じました。もし初心者で購入を検討している人がいれば、一回別の学習を挟んでから読むことをお勧めします。私は別の本を読んでいた、かつ業務で触れる機会があったのでついていけました。

ただ、自分の中できちんと理解できているか怪しいため、次のRustの勉強として以下をやろうと思っています。

  • Rustの公式ドキュメントでRust理解の基礎固めをする
    • 2回目ですが、多分実りのある学習になるはず!
  • 自分が作ったTodoアプリをこの本の知識を適用して理解を深める
    • 写経のようにコードを書くのではなく自分で考えて書きたい

Rustの勉強は今年までと決めているので、上記2つをやり切ったらあとは業務だけの学習になりそうです。やり切れるように時間をとってがんばります。

最後まで読んでいただきありがとうございました。