Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

さらっと流す。

どうも。マリンです。

Rails Tutorialも12章まで進みました。

この章をやっていてつくづく実感したことがあります。それは

「さらっと流す」ことです。

プログラミングの先輩方のお話を聞いていますと度々出てきますこの勉強テクニック。

私には実は結構ネック立たんですね。

というのも、どーーーーしても細かい部分までいちいち理解しないと気が済まないんです!

コードの端から端まで何が書かれてるのか?とか、

説明文の意味とか。

果ては日本語の意味とか(笑)

こんなことやっていてはそりゃあ進みませんよ・・・

今回気づいたこと

チュートリアルの11章と12章はやってる内容が似ています。

でも11章ははっきり言って90%くらい理解できませんでした。

しかし、まだ12章途中ですが、ここまででも75%くらいは理解できてる!気がします・・・

まぁ繰り返しだから理解できてるのもあると思いますが、

「なんで11章は理解できなかったのか?」

それを考えてみたところ、そもそも「今何をやっているのか?」

それすらわかっていなかったことに気づいたのです。

でも12章では何となく今やっていることがわかるようになりました。

その原因

その原因こそ、

「さらっと流す」

でした。

11章ではやっぱりいちいち細かいこと気にして読んでました。

そのせいで全体の流れがわからなくなっていたんですね。

全体の流れがわからない→今何やってるかわからない→わからないからわかるために一つ一つ理解しようとする→また流れを見失う

この悪循環だったわけです。

12章は前章の繰り返しということもあって結構サクサクっと進めています。

そのおかげで全体の流れや、そのコートが何のために使われていたのかが理解できました。

まとめ

ついつい「一つずつ理解しながらでないと!」と思ってしまうのですが、

「さらっと流して全体を把握」

そのことにやっと気づくことができたようです。

「理解すること」にも順序があるようですね。

2月。

今年に入ってすでに「早いなぁ〜」と感じているマリンです。 

なんたってもう2月ですから。 

なんで突然こんなこと思ったかと言いますと、

来週息子の1日体験入園があるんです。

11月に幼稚園の願書提出+面接があって、

「体験は2月かぁ・・・まだだいぶ先だな!」

なんて余裕こいてたらもう来週!?

ひぃ〜!30代の時の流れひぃ〜!!です(;゜0゜)

「去年の今頃はおねぇちゃんの入園準備でドキドキしてたっけ〜・・・」

なんて余裕こいて感傷に浸ってるとまた幼稚園グッズ揃えるの出遅れる!

今回こそは間際にドタバタしないようにせねば・・・

しかし、本当に早すぎますね。

二人とも生まれたのなんてつい最近に感じるのに、

気づけば息子まで幼稚園です。

1日1日を大切にって思うんですけどね(^_^;)

でも本当、目先のことに囚われて

まだ「時間ある」なんて思っていては何も成さないまま終わってしまいそうです!

せっかく気づいたことだし、

育児も勉強も後悔しないように考えを改めてみようと思います!

コピペの罠

どうもマリンです。

昨日からRails Tutorial 11章を進めています。

最初は「コードも自分で打たないと理解できん!」と意気込んで手打ちしてましたが、

ちょっと前から「とりあえず全体掴むことからじゃね?」と思い、

コピペで進めてます。

今回はこのコピペでハマったお話です。

概要

メールのプレビューを見ようとしたところ、activation_tokenに対してNoMethodErrorが出た。

「コピペだからコードに問題はないはず」と思い込み、小さなミスに気付かずハマってしまった。

原因

原因は細かいミスの積み重ねでした。

まず一番の原因が、Seedデータのコピペが不完全で「, 」が抜けていたことです。

「コピペだから間違ってないはず」という思い込みが発見を遅らせてしまいました。

これのせいで$ rails db:seedをしても読み込まれていなかったんですね。

さらに$ rails db:seedをした後も結果を完全にスルーしていました。

ここでも「当然通っているだろう」と思ってましたね。

さらに、NoMethodErrorも最後に書かれているnil Nil:Classに注目しなかったのでずっとactivation_tokenの部分ばかり気にしていました。

まとめ

やはり思い込みは一番の敵ですね。

今回は完全に「コピペだから間違ってるはずない」と思い込んだことが原因でした。

1文字間違えてても動かないのがコンピューターですから、やはり思い込みは捨てて懇切丁寧に作っていくことが大切だなって身にしみました。

ターミナルを再起動せよ!

こんな話が誰かの役に立つとも思えないほどあっけない話なんですけど・・・

まぁ、一応。

概要

Gitでmasterにマージしたら突然テストが通らなくなった。

詳細

チュートリアルの10章が終わったので、最後にGitやらHerokuやらにコミットとかプッシュとかしようとした。

トピックブランチからmasterにマージし、最後にHerokuにプッシュする前にもう一度

$ rails testしたら、突然テストが通らなくなった。

エラーの内容はindexページのテストに使われてるpaginateメソッドに対し、

「そんなメソッド知らん!」との事。

対処

いろいろやってみました。コードを見直したり、gemをインストールしなおしてみたり、

なんかよくわかんないけどrails db:migrateしてみたり。

で結局全部ダメで、最後に藁をも掴む思いでターミナルを再起動したら。

治りました。。。

まぁ、なんとなくわかってたんですけどね。

1回テスト通ってるから中身の問題ではないかもと。

また無駄な時間を使ってしまったorz

カスタマイズしたい・・・

すみません。ただの愚痴です。

このブログをカスタマイズしたくてたまらない今日この頃。

しかし、とてもじゃないけどRailsに必死で手を出す余裕がない・・・

それもこれも全てちょっとした誘惑に勝てないせい。

スマホゲームやりたい」「科捜研の女見たい」「相棒見たい」「眠たい・・・」などなど。

お家は誘惑だらけすぎ!!

そしてブログをカスタマイズしたいです・・・

どうでもいい話を失礼しました。

ローカルサーバを停止せずにターミナルを閉じてしまいました。

概要

タイトルの通りです。

これをやったことで何が起こるかと言いますと・・・

「ターミナルを再起動した時にローカルサーバーが立ち上がらない」

という状況に陥ります。

めっちゃハマりました。

私の場合

$ rails s -b 0.0.0.0

で起動させていて、この時に出るメッセージがこちら。

Address already in use - bind(2) for "0.0.0.0" port 3000

そして調べているうちに出てきた起動方法がこちら

$ rails s Puma

この時は特にメッセージは出てこなかったのですが、

実際にブラウザで確認してみると「localhostは機能していません」

と出てしまう状況でした。

対処法

こちらを参考にさせていただきました。

RackサーバーのPumaについて調べてみる - arakaji's diary

げ!ローカルサーバーを切らずにターミナルを消しちゃった! - Qiita

具体的な解決方法

まずはこの3000が既に使われているとのことでしたので、そこを調べました。

$ lsof -i :3000

出てきた結果はこちらです。

COMMAND   PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ruby     7620 takagimarin   12u  IPv6 0x7d655025f170834b      0t0  TCP localhost:hbci (L
ISTEN)
ruby     7621 takagimarin   12u  IPv6 0x7d655025f170834b      0t0  TCP localhost:hbci (L
ISTEN)
ruby    11748 takagimarin    9u  IPv4 0x7d655025f47508a3      0t0  TCP *:hbci (LISTEN)
rub

PID接続してるものが原因とのことでしたので、killコマンドで消しました。

$ kill -QUIT 7620
$ kill -QUIT 7621
$ kill -QUIT 11748
$ kill -QUIT 11752

これで実行できるようになりました!

まとめ

PIDについては深く調べていないので、今後ひと段落したら調べてみます。

しかしこれでたまに動かなくなっていたローカルサーバーの原因がわかったので良かったです。

ターミナルを閉じる時はきちんとサーバーを終了してからにしましょう(笑)

ちょいちょい引っかかってくるRails4.2とRails5の違い

Rails Tutorialを始めた頃、私は自分の使っているRailsが4.2なのを知らずに勉強を進めていました。 サーバーをPumaに変えるってあたりで初めて気づいたのですが・・・ そこで思い切ってRails5にアップグレードしました。 作ってる途中でこんなことするのはもちろん初めてだったので、後遺症がちょいちょい出て困ってます。

今回の概要

10章のbeforeフィルターのテストでNo route machesになった。

対処

beforeフィルターのテストをusers_controller_test.rbに書くのですが、

ここのclassがclass UsersControllerTest < ActionController::TestCaseのままだったせいで、

get edit_user_pathpatch user_pathがそんなルーティング設定されてないと怒られてしまいました。

ルーティングの方だということで確認したのですが、間違いなく設定はされていました。

    users GET    /users(.:format)          users#index
          POST   /users(.:format)          users#create
 new_user GET    /users/new(.:format)      users#new
edit_user GET    /users/:id/edit(.:format) users#edit
     user GET    /users/:id(.:format)      users#show
          PATCH  /users/:id(.:format)      users#update
          PUT    /users/:id(.:format)      users#update

          DELETE /users/:id(.:format)      users#destroy

全然わからなかったので、とりあえず教材のコードとめっちゃ見比べました。

コピペだから間違ってるはずないのに・・・と思いながら(笑)

そしてとうとうこの間違いに気づいたのですね!

classをclass UsersControllerTest < ActionDispatch::IntegrationTestに直したら無事成功! とはいかず・・・

今度はコントローラを作成した際に最初から書かれている

  test "should get new" do
    get :new
    assert_response :success
  end

が引っかかりました。

第5章まで遡って

get :newget signup_pathに変更。

なぜ私がこの部分を変えていなかったのかは不明ですが・・・

とりあえずこれでAll Greenになりました。

まとめ

何かをアップデートする際はきちんと仕様変更された部分を確認しましょう。

それ普通か・・・