まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

Railsチュートリアルやってて驚いたこと(1)

 

みなさんこんばんは、まさです。

 

東京での日々でプログラミング学習から離れつつも、空港での待ち時間などをうまく利用してProgateとRails Girlsをなんとか終わらせました。

 

 

 

そしてついに今日からあの有名なRuby on Railsチュートリアルの勉強に入りました。

 

作業場は「死ぬほど捗る」というキャッチコピーで有名な(嘘です、いまつくりました)ギークハウス沖縄です。

f:id:masaincebu:20170722224147j:plain

爆速Wi-Fiで大好きな洋楽が大音量で聞けてディスプレイも使える。理想の環境です。写真が全体的に暗いのは完全にまさのテクニックの問題。

 

そこで今回は僕がRailsチュートリアルの序盤(第一章〜第三章)を終えて学んだことをここでまとめていきたいと思います。と言っても僕は完全なRubyRails初心者ではなく

  • RubySinatraを使ってLINE風アプリケーション制作の経験がある
    ActiveRecordは既に使ったことがあるし、ルーティングやflash、layout.erbなどSinatraRailsとの共通点についてはある程度の理解はある

  • ProgateのRuby on rails講座を終えていて、Rails girlsはざっと通している
    Railsにいろいろ便利なコマンドやgemがあるんだなーくらいは知っている。なので基礎的なことであれば必要とあれば調べながら実装できる

という感じなので、そんな僕が「意外!」とか「そこまでProgateで説明されてなかった!」など感銘を受けたポイントについて書いていきたいと思います。

 

では、いきましょー! 

 

日本版のRailsチュートリアルの主要な翻訳者の方にすでに会っていた

さっそく一つ目が技術的なお話とは別で申し訳ありませんが、どうやら僕は凄い方と飲み会の席で会っていたようなのです。

 

Railsチュートリアルでは原作である英語版Railsチュートリアルを書いたマイケル・ハートルさんからのありがたいお言葉の中に、二人の日本人の名前が挙げられていました。

 

(前略)

また、安川 要平氏や八田 昌三氏を始めとする多くの協力者の方々が Rails Tutorial を翻訳してくれたことを、私は光栄に思います。

 

そこで僕は「そういや安川さんっていう同じ苗字の方と以前参加したハッカーズチャンプルーで会ったなあ」とか思ってたら

 

 

!!!

 

もうこんな感じになりますよね。

 

f:id:masaincebu:20170722225834j:plain

 

 

この安川 要平さんというのは僕が色々お話させていただいたYassLabの安川さんだったのです。

 

正直お会いした時は僕はただただ「すげえ(小並感)」と思っていただけだったので今になって改めてその凄さを感じました。

 

 

 

 

(bundle exec) rake db:migrateとrails db:migrateの真相がわかった

僕がLINE風アプリケーションMINEを作ったときに、Active Recordを使っていたわけですが、その際になんどもdb:migrateをする必要がありました。

 

その時に例えば「Active Record db:migrate」とかで調べると出てくるのが

  • rake db:migrate
  • rails db:migrate

の二つなんですよね。その時の僕は「RailsじゃなくてSinatra使ってるんだからrake db:migrateっしょ」みたいなノリで乱暴にmigrateをしていたのですが、今となってその違いがはっきりしました。

 

 

補足としてrakeについての理解を深めるために本サイトのコラム2.1から引用。

Unixでは、ソースコードから実行用プログラムをビルドするために主にMakeというツールが使われてきました。Rakeはいわば、Rubyで記述することのできるRuby版のMakeといった言語です。

(中略)

Rails 4以前のアプリケーションでは、rakeコマンドのバージョンをGemfileで定義しているため、Bundlerのbundler execコマンドを通して実行する必要があります。

 

 

ルーティングは必ずしもget "hoge" => foo#barみたいな形じゃなくてもいい

これも衝撃でした。

 

 

簡単にいうと、/home/indexというGetリクエストが飛んできた時にhomeコントローラーのindexアクションにルーティングしたい場合、僕は

 

get "/home/index" => home#index 

 

と当然すべきものだと思っていたわけです。Progateさんだってそうしろと言ってきたわけです。

 

f:id:masaincebu:20170722233433p:plain

 

しかし、Railsチュートリアルではルーティングについて別の説明がなされています。

 

例えばview/static_pages/にあるhome.html.erbやhelp.html.erbにマッピングさせるには、以下のように書けばいいとのこと。

 

 Rails.application.routes.draw do
 get 'static_pages/home'
 get 'static_pages/help'
 root 'application#hello'
end

 

「=>」がない。。。

 

これ以上違いを詮索することはやめてそのまま頭に入れておこうと思っているのですが、一つだけ気になることは/static_pages/homeにマッピングするための上記のルーティングが'/static_pages/home'ではなく'static_pages/home'であること。

 

最初の '/' の有る無しで urlについての表記かどうかを仕分けるという意味では、ProgateのRails講座で使ったrenderメソッドに似通ったものがあります。

 

もし render 'home/index' とすればこれはurlの/home/indexを示しているのではなく、homeディレクトリのindexファイルを出力するという意味になります。

 

んー、どうなんだろう。

 

 

テストについて一から教えてもらえる

正直ここが感動のあまり震えたところですね。

 

 

人間本当に驚いたらこんなもんです。そんなに言葉でないです。

一護がこうなるのもわかるでしょう(2回目)

 

f:id:masaincebu:20170722225834j:plain

 

 

正直僕は開発において「テストをする」ということを考えてきませんでした。

 

もちろん、バグが出ないようにチェックすることはありましたが、それは決してクールなものではありませんでした。

 

具体的には一々実行してはブラウザで確認する、または「できた!」と思っても誰かに指摘されて気づく・・・という決して実際のサービス開発では通用しない方法。

 

そこに関して、Railsチュートリアルでは、簡単にではありますがテストをするということはどういうことかについてわかりやすく教えてくれています。

 

RED(失敗するテストを最初に書く)GREEN(成功させるためのコードを書く)→REFACTOR(必要であれば機能を維持したまま改善する)という三つのフェーズに分けて教えてくれているのもわかりやすかったです。

 

 

最後に

多分しばらく(数日間)はRailsチュートリアルについての投稿になると思います。これからもこの調子で学習を続けては学んだ点をまとめていきたいと思います。

 

また、何かおかしいところや僕が間違って受け取っているところがあれば僕のTwitterにコメントよろしくお願いします。

 

広告を非表示にする