🍊

【簡単3分】Rails ConsoleでRedisにセッションデータを確認する具体例を紹介‼️🍜

2024/09/16に公開

はじめに

こんにちは、Takeです。都内の自社開発企業でエンジニアとして働いています。

こちらの記事では、動作確認の目的でRails Consoleを使用してRedisにセッションを保存し、そのデータを取得して確認する一連の流れを紹介します。

そもそもRedisとは何ぞや?という方向け👇

最低2分半でキャッチアップできる動画を厳選していますので、よろしければご覧ください。

https://zenn.dev/take_tech/articles/40fc1c8c11899d

結論

[1] pry(main)> redis = Redis.new(url: ENV['REDIS_URL'])

[2] pry(main)> session_id = SecureRandom.hex(16)

[3] pry(main)> session_data = { user_id: 1, created_at: Time.now }

[4] pry(main)> redis.set("session:#{session_id}", Marshal.dump(session_data))

[5] pry(main)> puts "Session ID: #{session_id} stored with data: #{session_data}"

[6] pry(main)> session_keys = redis.keys("session:*")

[7] pry(main)> session_keys.each do |key|
[7] pry(main)*   session_data = Marshal.load(redis.get(key))
[7] pry(main)*   puts "Key: #{key}, Data: #{session_data}"
[7] pry(main)* end  

解説

1. Redisへの接続

まず、Redisサーバーに接続します。Redis.newを使用して環境変数REDIS_URLからURLを取得し、接続を確立します。以下のコードをRails Consoleで実行します。

redis = Redis.new(url: ENV['REDIS_URL'])

これにより、指定されたRedisサーバーに接続できてクライアントオブジェクトが返されます。

環境変数`REDIS_URL`はこちらのファイルがソースとなっています。
config/environments/development.rb
Rails.application.configure do
  config.session_store :redis_store, servers: ENV['REDIS_URL'], ...
end

2. セッションIDの生成

セッションIDはセッションデータの識別子として重要です。SecureRandom.hex(16)で16バイトのランダムな16進数を生成してセッションIDとします。

session_id = SecureRandom.hex(16)

3. セッションデータの作成

セッションデータをハッシュで作成します。以下の例では、user_idcreated_at(セッション作成時間)を含んでいます。

session_data = { user_id: 1, created_at: Time.now }

4. Redisへのセッションデータの保存

redis.setを使用して、セッションIDをキーとしてデータを保存します。
Marshal.dumpを用いてデータをシリアライズし、Redisに保存します。

redis.set("session:#{session_id}", Marshal.dump(session_data))

5. セッションIDとデータの確認

保存したセッションIDとそのデータを確認します。以下のコードでセッションIDとデータを表示します。

puts "Session ID: #{session_id} stored with data: #{session_data}"

6. Redis内のセッションキーを取得

Redisに保存されたすべてのセッションキーを取得します。session:*でセッションIDを持つすべてのキーを検索します。

session_keys = redis.keys("session:*")

7. セッションデータの取得と表示

最後に、取得したセッションキーに基づいてデータを取り出し、元のRubyオブジェクトに戻して表示します。

session_keys.each do |key|
  session_data = Marshal.load(redis.get(key))
  puts "Key: #{key}, Data: #{session_data}"
end

参考記事

redis.newredis.setの構文について
https://github.com/redis/redis-rb?tab=readme-ov-file#redis-rb--
https://qiita.com/gestalt/items/3c03626d7a1d0edb9904

session生成時:
SecureRandom.hex(16)
https://railsguides.jp/v5.2/security.html#セッションid
https://docs.ruby-lang.org/ja/latest/class/SecureRandom.html

Marshal.dumpについて:
https://docs.ruby-lang.org/ja/latest/class/Marshal.html
https://qiita.com/WisteriaWave/items/1f799fa20f491b37989e#応用編

sessionについて:
https://railsguides.jp/security.html#セッション

Redisのキャッチアップに用いたリソース
https://zenn.dev/take_tech/articles/40fc1c8c11899d

まとめ

この手順では、Rails Consoleを使用してRedisにセッションデータを保存し、そのデータを後から取得して確認する方法を示しました。Redisは高速なセッション管理が可能で特にスケーラブルなWebアプリケーションで効果的です。

最後に

ここまで読んでいただきありがとうございました!
今回の記事が良かったと思ったらぜひ「いいね」を押していただけると嬉しいです 🎉

noteでも記事を執筆していますので、ぜひチェックしてみてください。
https://note.com/take_lifelog/n/n58df7ce7af6f

他にもこのようなことについて記載しているのでお読みいただければ幸いです。

https://zenn.dev/take_tech/articles/275e5f4242973d

https://zenn.dev/take_tech/articles/374817f256ec9d

最後までお読みいただき、誠にありがとうございました!

Discussion