Railsチュートリアル基礎力向上テスト〜第五弾〜

2022/04/06

就活同期との面接練習二回目のおかげで面接恐怖症が減ったおおのです。勉強にも身が入ります。明日も面接練習やります。

今日はいつもの勉強のほかに問い合わせ対応やサイトマップを見直すため久しぶりに真のナポリピッツァ部をいじってました。お問い合わせページにGoogleフォームを設置しているんですが、レスポンスが遅くなりそうなのでTwitterにDMしてくださいというページに置き換えようと思います。
それではRailsチュートリアルの『基礎力向上テスト』を深堀りしていきます。

最初は正直に自分なりの考えを簡単に書いて、その後に調べたことを(主に安川さんの解説を基に)書いていきます。 宣伝を兼ねて参考にしているリンクを貼っておきます。 https://railstutorial.jp/screencast

Railsチュートリアル完走者向け基礎力向上テスト〜第五段〜

Q9 第9章「ハッシュ化?暗号化?」

Q. 第6章のパスワード実装では、has_secure_password メソッドでユーザーのパスワード情報をハッシュ化しました。一方、第9章では、signedメソッドでユーザーの ID 情報を暗号化しました。なぜハッシュ化ではなく、暗号化にしたのでしょうか?その理由を簡潔に述べてください。

Ruby on Railsチュートリアル第9章より引用

 # ユーザーのセッションを永続的にする
  def remember(user)
    user.remember
    cookies.permanent.signed[:user_id] = user.id
    cookies.permanent[:remember_token] = user.remember_token
  end

(おおの)A.(わからん…)9章のタイトルが発展的なログイン機構、remember me機能の実装(永続的ログイン)でした。ハッシュ化は不可逆で暗号化は戻すことが出来る値なので、その辺にヒントがありそうですね。この章は難しかったしgemで実装できそうな内容だと思ったため1周しただけで余り覚えていません。。解説動画を見直さないと。

A. cookies の中のユーザーのIDを使ってユーザーを検索する必要があるので、ハッシュ化してしまうと元のID情報を復元できず認証できない。復元できる暗号化をする。

暗号化は復号化できる。ハッシュ化はできない。ハッシュ化と暗号化の言葉には不可逆なのか可逆なのか大きな意味の違いがある。
永続的ログインとは、ブラウザのcookiesに保存されているパスワード的な値と、ハッシュ化してDBに保存している平文(パスワード)を一致させる。 そうするとセッションを復元出来るのでログインしたことになる。
また、セッションの期限切れは、そのサービスができることに応じて適切な期限が異なる(適切な期限を設定する必要がある)
例えば、

  • 銀行振り込みなどの書き込みができるサービスは数分から数十分で期限切れにするべき。
  • 資産情報などの読み取りができるサービスは、セッション毎に(タブを閉じたら)期限切れにするべき。
  • SNSなどの個人情報を取り扱うサービスは、(任意で)セッションを永続的に復元可能としたほうがユーザーフレンドリーである。(例えばTwitter等がアップデートするなど、サーバーを再起動されたとしてもログインした状態が保持されているのはそのため)

解説を聞いてもやはり難しかったので今度通して復習します。。

Q10.第10章「Is it RESTful?」

Q. 完成した Sample App には Users リソースと Microposts リソース、Relationships リソースの3つがあります。これらのリソースは RESTful であると言えるでしょうか?それぞれにリソース毎に RESTful かどうかを判断し、そう判断した理由を簡潔に述べてください。

(おおの)A.まずサンプルコードのリポジトリを見に行きます routes.rbを確認し、resourcesメソッドを実装されているのでRESTfulかな。。と思う。

A. resourcesメソッドを使っているので全てRESTfulと言える。

Railsが掲げている設計思想のひとつがMVC、そしてもう一つがRESTful。routes.rbで記載したresourcesの七つのアクションを使ってシンプルな設計ができる。

そうすると、例えばモバイルアプリとして作る場合や、他社とコラボして作っていく場合などに、バックエンドのAPIとしてRESTfulな設計思想にしていると開発者がわかりやすいメリットがある。Railsのレールに則った開発をしていれば自然とRESTfulな設計となる。

resourcesの詳細についてはRailsガイドを参照してください!ここはテストで出ます!

おわりに

雑談中にワインの話をしていて、発酵の話になったので漫画の「もやしもん」を思い出してオススメしておきました。
久しぶりに読みたくなったので読んでます。 菌とか発酵メインの話です。お酒についても、ワイン、ビール、日本酒と結構取り上げられるので酒好きにもおすすめです。 急に趣味トークになりましたが本日もお読みいただきありがとうございました!


Profile picture

Written by おおの SalesTechのスタートアップでWebエンジニア
Twitter GitHub