人生42日目
Railsチュートリアル⑼2週目
この章難しくね!?!?!?!??!?!?!?!?うわあああああ!!!!!
ってなった。ややモヤなのでこの辺りはもう一周やっておきたいかなあ。
JavaScript(2)Progate
結構簡単だと思ってたけどややこしさの片鱗が出てきた。
テンプレートリテラル
Rubydでいう変数展開。
`hoge${piyo}huga`
"`"バッククォートで囲まないといけないところ、"${}"を"#{}"と間違えちゃったりが多い。慣れだろう。がんばろ。
人生41日目
Railsチュートリアル⑼2週目
半分くらいまでやった。ちょっとサボりすぎちゃったかもしれない。
正直言ってかなり難しい。あんまり理解できないので明日は9章の頭から復習します。
今日の学び
attr_accessorについて
railsチュートリアルの内容でいえば、「ユーザーオブジェクトに仮想的な属性を付与する」ために使っている。
外部から属性を読み書きできるようにするためのもの。
attr_accessorはattr_writerとattr_readerを合わせたもの。
辞書によると「access 」は 「コンピューターで,記憶装置や周辺機器にデータの書き込みまたは読み出しをすること」。
今回も完全に合致している。
思うに、メソッドがどうなっているかわかりにくい時はまず辞書で単語の意味を調べてみて、それからGoogleで検索して記事を読むほうが圧倒的に理解が早い。
今後もこの方法で勉強していきたいと思った。
今日の困り
本質的なことじゃないのかもしれないけど、一度うーんと思うと前に進めない。
user_idとかなんども出てくるけどユーザーオブジェクトにそんな属性ないしこれってなんだっけ?←これで30分止まる
Railsがよしなにしてくれる部分と、自分がどっかで定義した変数がごっちゃになってしまう。
多分慣れなんだと思うけど、結構大変である。
人生40日目
Railsチュートリアル(8)2週目
基本的なログイン機構を実装する章。
sessionの使い方とかfixtureを用いたテストの方法など。
じっくり読んでるので理解はできるけど、モヤッとくる部分が浮き彫りになる形だった。
moduleとclassとか、incrudeとrequireとか。
結構調べて色々読んだのでややモヤくらいになった。
今日の学び
params[:session][:email]
のような入れ子ハッシュについて
sessionメソッドを使ってcookieにログイン情報を書き込むことを学ぶあたりの話。
恥ずかしながらRubyの基本的な部分もおぼろげなままやっていて、この辺りの書き方?にちょっと違和感があったので納得するまで調べた。
まず、Railsチュートリアルではフォームの入力内容をparams[:session]
で受け取る。(form_for(:session ....)となっているため)
そして入力情報は
{email: "hogeeeee@fugamail.com", password:"boooooooom" }
のような形でparams[:session]に渡される。
つまりこれは
params{session: {email: "hogeeeee@fugamail.com", password: "boooooooom" }}
という構造になっている。
ハッシュのキーと値はそれぞれ対応していて、params[:session]
で取り出せる。
[:session]の中には入力内容のハッシュが入っている。
それもまたキーと値が対応しているため、たとえばメールアドレスを取り出したければparams[:session][:email]
のようにすればいい。
文章にすればこれだけのことなんだけど、感覚だけでやってるとモヤっときてしまった。
moduleとclass、includeとrequire
初学者は結構この違いが分からず混乱してしまうようで、ぼくも漏れなくそのひとりです。
完全解決とまではいかないものの、ややモヤくらいにできた。
開発用語で調べて記事を読むと色んな表現があってわかりづらかったので、まずは辞書で調べた。
module
ソフトウエアやハードウエアを構成する部分のうち,独立性が高く,追加や交換が容易にできるように設計された部品。
class
オブジェクト指向プログラミングにおいて,オブジェクトの構造を記述するための抽象データ型。属性とメソッドにより定義される。
「module」は処理そのもののこと、という感じで書いてた記事があったが、なるほどなという感じだった。
辞書にもあるが、「module」は「部品」であり「class」は「構造」なのだから全く別物なんだな。うん。(ややモヤ)
「module」は「include」で「ミックスイン」することで組み込むことができる(変換でミックス院ってなって花京院コラ作りたくなった)
「class」は「A<B」のようにすることで「継承」して使うことができる。確かにこの辺も「違う」。
ちなみに「require」は「外部ファイルやライブラリ」を読み込むために使うので「include」とは全然違う。
結局のところ、「違うものなんだな」ってことだった。
これをそれぞれ別のものとして扱うことによるメリットはパッと思いつくものではないが、それは触っていくうちに分かることであって、さわる前からビクビクしなきゃいけないようなことじゃない、っていうことにしてややモヤながら先に進むことにした。
JavaScript(1)(Progate)
JSもさわり始めた。やっとかよって感じですが、複数言語並行することで混乱しないかなっていう心配があって今日まで触らなかった。
結果全く混乱することもなく、むしろRubyで学んだことを活かせるのでいい感じだった。
結構楽しいし、スイスイ進むので明日からこっちもちょっとずつやっていこうと思いました。
人生39日目
なんか人生の日数に対して記事数がおかしくね?と気づいたのが昨日。
やってしまっていたので調整しておいた。なんなら昨日やったのRailsチュートリアル6章なのに5章とか書いてるし、深夜のブログ執筆の危険性を表している。
Railsチュートリアル⑺
7章からRailsのことばかりになってくるチュートリアルくん。
1週目のsample_appを見るに、この辺から心が折れてるっぽい。
ネットリと舐め回して5時間くらいで走破。わからない部分を徹底的に潰した。
RESTアーキテクチャの話が出てくるんだけど、これがまあわかりにくい。
なぜかというと言葉の表す範囲が広すぎる(定義が曖昧)から。
感覚的に掴んで、人によっては意味合いも違ってくるため文脈で判断するしかなさそう。
RESTアーキテクチャが〜って日常的にエンジニアが言ってるのかはわからんけども。
学び
本格的にRailsみが増してきたので7章以降は学びもここに記すことにする。
"assert_select"なんでも指定できる
assert_select "div#id_name"
<div id = "id_name">
が存在することを宣言assert_select "div.class_name"
<div class = "class_name">
が存在することを宣言assert_select 'form[action="/signup"]'
<form action = "/signup">
が存在することを宣言
(form_forメソッドで送信先urlを明示的に指定すると、それに対応したアクションを呼び出すformタグが生成される)
URLの違和感
例えばユーザー登録に失敗した際など。
ルートが以下のようになっていると…
get '/signup', to: 'users#new' resources :users
ユーザー登録ページのURLは/signup
でusers#new
には対応するビューがある(登録ページなので当たり前)
登録情報の送信先は名前つきルートのルールに従うと、users_path
になる。
users_path
に対応しているのはusers#create
なのだが、createアクションにはビューがない。(作ることはできる)
ここで登録に失敗すると、見た目は変わらないのにURLが/users
となるのでなんだか気持ち悪い。(幾らかのエラーメッセージも添えられてる)
なのでルートを
get '/signup', to: 'users#new' post "/signup", to: "users#create" resources :users
のようにすることで、ユーザー登録に失敗した場合などでもURLは変わることがない。
多分これは運用・管理していく際にわかりやすいっていうのと、使用者にアプリケーションの構造を知られてしまうことになるというのが大きな理由だと思う。(違うかも)
紙のノートにもメモってることなので焼き直しみたいになっちゃってるけど、まあなんども反芻するのは悪いことではないと思う。
なんか間違ってたりしたら物好きな人がコメントしてくれるシステム欲しい。
システムの名は「人脈」。
俺には実装されていなかったのである・・・。
人生37日目
Railsチュートリアル(5)
2週目を終えた。ノートに色々メモってたけどコードにもコメントアウトするようにした。
ちなみにノートのメモだけで15ページくらい書いてる。
古い人間というべきなのか、自分で指動かして書かないと覚えられない。
まだまだ簡単で、Railsってなんでも勝手にやってくれるんだなーっていう感じ。
頭悪いのでassert
とassert_not
の使い分けに苦労していたが、例えばブラウザ上の表示を確かめたければ前者、バリデーションを調べたければ後者というように覚えてしまって良さそう。
1週目は7章のテストでわからなくて投げてしまったので、ここから集中して一歩ずつ確実に進んでいきたい。
今日の名言
人生はいつでも最初の一歩が一番難しい
-スーパーエリート