よちよち.rb 第12回 #yochiyochirb

はろー銀座!
大人の街、銀座でよちよちしました。
渋谷でお世話になっている電源カフェbeezさんが銀座にもありました。

概要

自己紹介(今回は「最近ハマっているもの」というお題つき)
Railsチュートリアル(「2.2.2 MVCの挙動」から)

学んだこと

Railsチュートリアルの「2.2.2 MVCの挙動」からグループワーク形式ですすめました。
私のいたグループは、図2.11とその下にある説明1〜8を"読み砕いた"40分でした。

言いかえてみることの大切さ

他の部分でもあてはまる話なんですが、「目で読む」のと「声に出して読む」のと「それを自分の言葉で言いかえてみる」のはまったく違う!!
1〜8についても、よちよちが始まる前に自分で「目で読んで」、グループワークで「声に出して読んで」みたんですが、
そのあと「自分の言葉で言いかえて」みたら、
わかると思っていたところがわかっていなかったり、
他の疑問が浮かんできたりして、
結果ものすごく内容が濃くなりました。

マッピング、ルーティング、ディスパッチ

声に出してみたら、マッピングとルーティングの違いについて「?」となりました。
ふんわりはわかる気がするけど、言葉で説明するとなると…とみんなで話し合いました。

index create edit delete などをアクションしよう〜と決めるのがマッピングで、
それらをどのように結びつけるか、道筋を決めていくのがルーティング、
というように理解しました。
違っていたらご指摘ください。

ちなみにRailsのドキュメントにみるルーティング
(最近、ドキュメントを見るように癖をつけています)

ディスパッチっていうのは聞き慣れない言葉だったのですが、
「送信する」とか「派遣する」とか割り当てるとか振り分けるとかそういう雰囲気。

ハッシュとシンボル

チュートリアルには

(:usersという一見奇妙な記法は、シンボルと呼ばれるものです。詳細については4.3.3で説明します。)

とあって、後々で大丈夫?と言いつつも、たまに見かける「:」ってなんかすごい混乱する、っていう話になりました。

key: :val

とかちょっと。。
ということでハッシュとシンボルの話になり、↑のような書き方になったのはRuby1.9からで、

:key => :val

が元になっているんだよって教わりました。スッキリ!

そして「ハッシュとは辞書である」(マツ先生 @upinetree より)という名言を頂戴しました。

$ dictionary = { :hello =>  'こんにちは', :good => 'よい' }
=> {:hello=>"こんにちは", :good=>"よい"}
$ dictionary[:good]
=> "よい"

これすごいわかりやすくてよかったです。ありがとうございました!!

resouces を書きかえてみた

config/routes.rb に `resources :users` って書くだけでいい感じにルーティングされちゃって、
Rails様すげーなぁ!という話になって、
ふと先日、写経しているなかでルーティングについて悩んだときに、
`resources :users` の部分をコメントアウトして `rake routes` してみたらルートがなくなった(正確には別に書いていたルートが一個だけ残った)
というのを思い出して、その話をしたら、
「シンボルのところを別の文字列に置き換えるとその文字列をもとにルーティングしてくれるんだよ〜」と言われたので、やってみた!

config/routes.rb を書きかえる

#resources :users
resources :foo
$ rake routes
   Prefix Verb   URI Pattern             Controller#Action
foo_index GET    /foo(.:format)          foo#index
          POST   /foo(.:format)          foo#create
  new_foo GET    /foo/new(.:format)      foo#new
 edit_foo GET    /foo/:id/edit(.:format) foo#edit
      foo GET    /foo/:id(.:format)      foo#show
          PATCH  /foo/:id(.:format)      foo#update
          PUT    /foo/:id(.:format)      foo#update
          DELETE /foo/:id(.:format)      foo#destroy

おおおーーー!!!いい感じにしてくれたーーー!!!
foo は複数形にできないみたいで `users#index` となっていたところが `foo#index` とかなっていると、ゆかおさんが指摘してくださいました。


※ここから3/24追記※
tkawa さんがコメントしてくださったんですが、`resources :users` と複数形で書くところなので
`resources :foos` と書くと

  Prefix Verb   URI Pattern              Controller#Action
    foos GET    /foos(.:format)          foos#index
         POST   /foos(.:format)          foos#create
 new_foo GET    /foos/new(.:format)      foos#new
edit_foo GET    /foos/:id/edit(.:format) foos#edit
     foo GET    /foos/:id(.:format)      foos#show
         PATCH  /foos/:id(.:format)      foos#update
         PUT    /foos/:id(.:format)      foos#update
         DELETE /foos/:id(.:format)      foos#destroy

となるのでした!


ちなみに `resources :people` だと

     Prefix Verb   URI Pattern                Controller#Action
     people GET    /people(.:format)          people#index
            POST   /people(.:format)          people#create
 new_person GET    /people/new(.:format)      people#new
edit_person GET    /people/:id/edit(.:format) people#edit
     person GET    /people/:id(.:format)      people#show
            PATCH  /people/:id(.:format)      people#update
            PUT    /people/:id(.:format)      people#update
            DELETE /people/:id(.:format)      people#destroy

となるのでした!!
`new_person`って単数形になってるよ!!!!!

Rails様すごいー!


※追記ここまで※




遊んだあとは、 `git checkout .` で元通り。

やっぱり「やってみる」の大事ですね。

これをやったことでわかったのは、
resoucesの書き換えが即座に反映されるということで、RailsはブラウザからのリクエストのたびにRails routerさんが`とってきてる`ということ。
どう表現するのが正しいのがわからないのですが。。

ターミナルの別タブでサーバーを立ち上げたまんま、アプリを作成して、ブラウザをリロードすれば反映されるRails様。

その他

他にも、モデルと、データベースのテーブルの違いを再確認したり、
@users変数って?、とか(これはもうちょっと理解を先延ばしにしても大丈夫では、となった)、
「ビューは、その中に埋め込まれているRubyを使用してHTMLを生成する」っていう表現に疑問をもったり、
よちよち充実した40分でした。

わかんなかった

他のグループの発表を聞いた時に出てきた単語がよくわからい。
JSONとかjbuilderとかRESTfulとか。。
ちょっとこのへんはまだ保留にしておきます。

次回

データベース入門回のときにお世話になった21cafeさんで、
3/24(月)20時からです。
きれいな会場、あがる!!