RustとActix Webで投稿アプリに状態管理を導入しようWebアプリ実装で学ぶ、現場で役立つRust入門(5)

第5回は、第4回の続きとして、テンプレート化した投稿アプリにセッションによる状態管理の仕組みを導入し、それを利用した入力情報の記憶やフラッシュメッセージの実装例を紹介します。

» 2024年02月16日 05時00分 公開

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Webアプリ実装で学ぶ、現場で役立つRust入門」のインデックス

連載:Webアプリ実装で学ぶ、現場で役立つRust入門

 本連載のサンプルコードをGitHubで公開しています。こちらからダウンロードしてみてください。


複数ページでのデータ共有の手段

 まずは、「状態管理」という複数ページでのデータ共有の手段について触れておきます。Webの通信手段であるHTTPはステートレス(連続したリクエスト/レスポンスの間で状態を引き継ぐ仕組みを持たないこと)なので、例えばログインユーザーの情報などは別の仕組みを用いて共有する必要があります。

 状態管理の方法としては、「クッキー」や「セッション」を使うのが一般的です。以前は、安全性の面でクッキーよりもセッションの利用が推奨されていましたが、サーバ負荷の低減などを理由にセッションのデータストアにクッキーを利用することが多くなっています。

 このため、クッキーとセッションの境界は曖昧なのですが、セッションにはデータが暗号化される、データストアに選択肢がある、保存形式にも柔軟性があるといったメリットがあるので、特に秘匿性のあるデータを扱う場合にはセッションを使うことをお勧めします。本稿では、投稿アプリにセッションを導入し、幾つかの活用事例を紹介していきます。

アプリへのセッション導入

 ここからは、アプリにセッションを導入していきます。セッションの利用例として、新規作成時に投稿者の名前を記憶して、次回以降の入力を省く機能を追加してみます。連載第4回で作成したアプリactix-postsをベースに、セッションの導入を進めていきます。

セッションのクレートをプロジェクトに追加する

 Actix Webのセッション管理クレートであるactix-sessionをプロジェクトに追加します。ただし、actix-sessionの新しいバージョン(例えば本稿作成時点の0.9.0)は後述するactix-web-flash-messagesとの組み合わせで正常に動作しないので、正常に動作するバージョン(ここでは0.6.2)を明示して追加しています。

% cargo add actix-session@0.6.2

 actix-sessionは、既定ではデータ格納のためのバックエンドが無効になっているので、使いたいバックエンドを有効にする必要があります。バックエンドには、クッキーベースのセッションであるCookieSessionStore(cookie-session)、オンメモリデータベースRedisを使ったセッションであるRedisActorSessionStore(redis-actor-session)やRedisSessionStore(redis-rs-session)を利用することができます。ここではクッキーベースのセッションを使うことにします。Cargo.tomlファイルのactix-sessionエントリを、リスト1のようにcookie-sessionを使うように修正します。

actix-session = { version = "0.6.2", default-features = false, features = ["cookie-session"] }	(1)
リスト1:Cargo.toml

アプリでセッションを扱えるようにする

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。