やったこと

  • Rails Tutorial 9.1.2~9.1.3

この章・節の目的

  • 一時セッションではなくトークンの永続化とその明示的破棄の実装
  • ブラウザを閉じても継続するログイン状態をよりセキュアな形で実装する
  • ユーザー自身が明示的にログアウト処理を行わない場合20年持続するCookieを記録・保持する

Tips

RubyのTimesヘルパー、数値操作の基底クラスFixnumクラス

>> 20.years.from_now.utc  
=> 2039-04-08 14:33:48 UTC  
>> 10.weeks.ago  
=> Mon, 28 Jan 2019 14:34:28 UTC +00:00  

残念ながら日本標準時(JST)の指定はできない模様

>> 3.days.ago.jst  
=>(普通にNoMethodError)  

以下のような記述も可能

>> 1.kilobyte  
=> 1024  

>> 5.megabytes  
=> 5242880  

画像アップロードの上限ファイルサイズ指定などに便利


リスト9.9

if (user_id = session[:user_id])  
  @current_user ||= User.find_by(id: user_id)  

上記の条件式は元は

if session[:user_id]  
  @current_user ||= User.find_by(id: session[:user_id])  

このsession[:user_id]の重複、つまりsessionメソッドが2回使われている無駄を排する為のリファクタリングの一環としての書き換え
筆者はこれが==演算子による比較ではなく代入であるということを明確にするために、代入式全体をカッコで囲むことを推奨している

9.1.2最後の演習

「コンソールを開き、リスト 9.6のauthenticated?メソッドがうまく動くかどうか確かめてみましょう。」

既にブラウザからアクセス済みの既存ユーザーでも確認可能だが、一連の流れを確認する為にコンソール上で新規ユーザー作成から開始

>> user = User.new(name: "hogehoge", email: "hoge@huga.com", password: "hogehuga")  
>> user.save  

この時点でpasswordはハッシュ化されpassword_digestは保存されているが、remember_digestはnil

>> user.remember  
(User.new_tokenにより生成されたランダムなトークンが更にdigest(ハッシュ化)されDBに保存される)  
>> user.authenticated?(user.remember_token)  
(rememberメソッドにより内部で生成されたremember_token属性を、is_password?メソッドの引数としてremember_digestと照合)  
=> true                                      

以上により、システムにより自動発行されたトークン(ランダム文字列)とそのダイジェスト(同文字列のハッシュ化)の照合が正常に機能していることが証明された。

所感

Rails Tutorial9章の学習を進めていて感じたが、現状エンジニアとしての仕事を得ることが再重視である為に必然的に言語学習優先ながら、やはりネットワークに対する深い理解はこれからのサーバーサイドエンジニアとして求められる各種知見(インフラのコード化やクラウドサービス連携必須化等)の基礎として必須であると思われる。

コードを書く=手を動かすこと最優先ながら、並行して(流し読みでも構わないので)「ネットワーク&TCP/IPのきほん」→「Webを支える技術」等の読書も時間を取って読み進めるようにしよう。

問題点

  • ホントに学習が進まない(遅い)
  • Rails Tutorialに取り組んでも1日に1章も進まなくなった(日増しにスピードダウン)
    何故?
    • 巻き戻りが多い(前章へのリンク等をいちいち見返している)
    • 読んでいても頭に入っていない
    • 同時進行で別のことを考えている
      • マルチタスク・マルチスレッドはAD/HDと診断される自分にとっては弱み
    • 相変わらず前から順に完璧に理解してからでないと先に進めない思考が抜けてない
    • Rails Tutorialも結局は「手を動かす」よりも「ただ読んで時々写経」に近い
    • 概ね「集中力」の問題だと思われる

対策

  • 理解が浅いように思えてもとにかく先に進む
  • 完璧に理解出来るまで前に進まない方式は捨てる(読書でも同じ。流し読み習慣を身に付ける)
  • 障碍を言い訳にしないこと
  • 問題を外に求めない、かといって自虐・自己否定しない
    ↑就活や学習効果や評価など何よりこの在り方といい気分を保つのが一番大事
  • 「できない部分」「できてない自分」に焦点を当てない
  • 考えるべきは対策・カイゼン・生産性向上のみ
  • Rails Tutorial自体を中止し(飛ばし)てポートフォリオ作成に取り掛かる方が良策か
  • 人と比べて焦ったり自虐しても仕方ないが、未経験2ヶ月でCircleCIやDockerも組み合わせポートフォリオ作成済ませ自社開発企業の内定を決めている人も少なくないことは無視できない
  • 「Railsに切り替え最速最短でポートフォリオ」と宣言してから既に1ヶ月以上経過してポートフォリオ完成度0%というのは周囲からは「できない人」「口だけでやらない人」と見做されて然るべき
  • それらを踏まえた上で「自分なりに」昨日より1時間前よりも成果の上がるやり方を探る

明日やること

  • Rails Tutorial9残り&10章