読者です 読者をやめる 読者になる 読者になる

give IT a try

プログラミング、リモートワーク、田舎暮らし、音楽、etc.

「Railsチュートリアル第3版・コーディング実況動画」を作りました

Ruby

はじめに

かつてはJavaやC#を書いていた僕がRailsを始めてから、かれこれ3年ぐらい経ちます。
Railsを始めるとき、最初にトライした学習資料が「Ruby on Railsチュートリアル」でした。


Railsプログラマとしてはかなり経験値を積んだので、初心者レベルはすでに脱したと思っています。
そんな僕が最近ふと「もう一回Railsチュートリアルをやってみよう」と思いました。
さらに、単にRailsチュートリアルをやるだけだと面白くないのでコーディングする様子をスクリーンキャストにして配信することを思いつきました。


そして完成したのが「Railsチュートリアル第3版・コーディング実況動画」です。
今回のエントリでは僕が作ったこの動画(スクリーンキャスト)を紹介します。

f:id:JunichiIto:20150422073540g:plain


「Railsチュートリアル第3版・コーディング実況動画」について

「Railsチュートリアル第3版・コーディング実況動画」はYouTubeで公開しています。
第1章から第12章まで全部の動画を無料で公開しています。
YouTube上に再生リストを作ったので、そこから再生してもらうのが便利です。


Railsチュートリアル第3版・コーディング実況動画 - YouTube

ちなみに全部再生するとトータルで約13時間半(!)あります。

オススメの視聴方法
  • 画面の文字が小さいので「PCのモニタ + HD画質」で再生する
  • 一本一本の動画が長いので2倍速で再生する

なお、画質や再生スピードはここ ↓ で変更できます。

f:id:JunichiIto:20150306082948p:plain:w250


ソースコードもあります

動画の中で書いたソースコードはGitHubに置いています。

第1章
JunichiIto/rails-tutorial-hello-app · GitHub
第2章
JunichiIto/rails-tutorial-toy-app · GitHub
第3章~第12章
JunichiIto/rails-tutorial-sample-app · GitHub


第3章~第12章で作っている sample-app は、章ごとにブランチを分けています。
ブランチをチェックアウトすれば各章を終えた状態のソースコードとアプリの挙動を確認できます。

f:id:JunichiIto:20150422043941p:plain


なお、sampl-app のソースコードに関してはMichael Hartl氏の作成した公式ソースコードもあるみたいです。

mhartl/sample_app_3rd_edition · GitHub


こんな方にオススメです
  • 自分でやってみたけどうまく動かないので何かヒントを得たい人
  • 「Railsチュートリアルって一体どんなの?」と思ってる人
  • 予習復習用の参考資料がほしい人
  • RubyMineに興味がある人(動画の中ではRubyMineを使ってコードを書いてます)

 

「Railsチュートリアル第3版・コーディング実況動画」はxxxではない

「Railsチュートリアル第3版・コーディング実況動画」はあくまで僕個人のコーディング風景を録画したものです。
多大な期待を抱いてガッカリされないよう、「えっ、そうなの?」と思われるようなポイントをいくつか挙げていきます。

日本語版のRailsチュートリアルではない

Railsチュートリアルには日本語版サイトがあります。
ただし、日本語版サイトは現在(2015年4月時点)第2版の翻訳になっています。
今回僕がトライしたのはまだ翻訳されていない第3版です。
日本語じゃないと無理、という方にはちょっとハードルが高いかもしれません。

ちなみに第3版は第2版から1章増えて全12章構成になっています。
新しく追加されたのは第10章の「Account activation and password reset」で、新規アカウント登録時の確認メールやパスワード再設定用のメールを送信する処理を実装しています。
その他にも第3版は基本的な構成や作成するサンプルアプリは第2版とほとんど変わらないものの、全体的に新しく書き直されているという印象でした。

本文の説明はほとんどしていない

実況動画は「コードを打ち込む → 動作確認する」の繰り返し(いわゆる写経)が基本です。
本文の内容を1から10まで詳しく説明するようなことはしていないので、この動画を見ればRailsチュートリアルの全てが分かる、ということはありません。

なお、動画の中では原則としてコードはコピペではなく全てタイプしています。

Exercise(演習課題)はやっていない

Railsチュートリアルには各章の終わりにExerciseコーナーが設けられていますが、この動画の中ではExerciseはやっていません。

開発環境がチュートリアルと同じではない

RailsチュートリアルではCloud9というクラウド上の開発環境を使っています。
しかし、僕はいつも使い慣れているRubyMineを使って開発しました。
また、コードのpush先もBitbucketになっていますが、僕の場合はGitHubです。
そんなこともあって環境セットアップの部分も動画の中ではほとんどスキップしています。

完璧ではない

実況動画はリハーサル無しの一発録りなので、ときどきエラー画面や予想外の動きに遭遇して「あれ?おかしいな。う~ん・・・」とコードを打つ手が止まったり、デバッグを始めたりする場面があります。

あと、そんなに頻繁ではありませんが、ところどころでミスをしたまま進んでいる箇所があります。
ミスに気付いた場合はその時点で「ごめんなさい、ミスしてました!」と修正を入れています。

公式スクリーンキャストではない

Railsチュートリアルには英語版にも日本語版にも公式スクリーンキャストが存在します。
作者のMichael Hartlさんと安川さん(@yasulab)にはコンタクトを取ってOKをもらっていますが、僕が作ったのはあくまで非公式なスクリーンキャストです。


公式スクリーンキャストは(僕の動画とは異なり)丁寧な解説が入った高品質な動画ですので、本気でRailsを勉強したい方は公式スクリーンキャストを視聴することをオススメします!


さて、ここから以下は動画作成にまつわる「よもやま話」です。

「なんでもう一度Railsチュートリアルをやろうと思ったの?」

一番の動機はMinitestとFixtureを使ったテストコードに興味があったからです。
(注:第3版からテスティングフレームワークがRails標準のMinitestとFixtureに変わりました)
今までMinitestとFixtureでテストを書いたことがなかったので、RSpec + FactoryGirlとどれくらい違うのか実際にコードを書いて確認したいなと思っていました。


もうひとつの動機は「初心者だったころと、経験値が上がった現在でRailsチュートリアルに対する見方がどう変わるのか」という好奇心です。
経験値が上がった今だからこそ、「初心者のころには分からなかった何か」が見えてくるんじゃないかと思いました。


では、実際にやってみた感想はそれぞれどうだったのでしょうか?

Minitest + Fixture と RSpec + FactoryGirl の違い

Railsチュートリアルをやってみると、Minitestを使ったテストコードは思った以上にRSpecと異なりました。


一番違うと感じたのはインテグレーションテスト(Integration Test)の考え方です。
RSpecだとCapybaraと組み合わせてブラウザの操作をシミュレートするテストを書きますが、Rails標準のテストではCapybaraを使わず「複数のコントローラーにまたがるコントローラーのテストを書く」のがインテグレーションテストになります。
あくまで「大きなコントローラーのテスト」なので、「インテグレーションテスト = ブラウザのシミュレート」に慣れている僕にとってはちょっと違和感がありました。

参考:インテグレーションテストのコード例

class UsersLoginTest < ActionDispatch::IntegrationTest
  def setup
    @user = users(:michael)
  end

  # ログイン・ログアウトのインテグレーションテスト
  test 'login with valid information' do
    get login_path

    post login_path, session: { email: @user.email, password: 'password' }
    assert is_logged_in?
    assert_redirected_to @user

    follow_redirect!
    assert_template 'users/show'
    assert_select 'a[href=?]', login_path, count: 0
    assert_select 'a[href=?]', logout_path
    assert_select 'a[href=?]', user_path(@user)

    delete logout_path
    assert_not is_logged_in?
    assert_redirected_to root_url

    # Simulate a user clicking logout in a second window.
    delete logout_path
    follow_redirect!
    assert_select 'a[href=?]', login_path
    assert_select 'a[href=?]', logout_path, count: 0
    assert_select 'a[href=?]', user_path(@user), count: 0
  end
end


また、Fixtureは最初からいきなり全部のデータがデータベースに投入される点がFactoryGirlと一番違うところだと思いました。


全体的にテストコードの書き方、考え方はかなり異なるため、実務ではRSpecやFactoryGirlを使っている、という場合はもう一度ゼロから学び直す感じになるような気がしました。
なので、時間があれば第3版のテストコードをRSpec版に書き直して公開しようかなと思っています。


ちなみに、RSpec + FactoryGirlを使ったテストコードの書き方については「Everyday Rails - RSpecによるRailsテスト入門」も初心者の方にとって非常に良いリファレンスになります。
ぜひこちらもよろしくお願いします!(宣伝)

leanpub.com


3年ぶりにRailsチュートリアルをやってみてどうだったか

3年ぶりにRailsチュートリアルをやってみた感想はまず「8章(ログイン・ログアウト)ぐらいから急に難しくなるな」ということです。
おそらくチュートリアルの後半戦は一回写経したぐらいでは身に付かない(仕組みを完全に理解して実務で応用するのは無理)と思います。
暗記するぐらい何度も繰り返すか、実務経験を積まないと本当に身についたと言えないんじゃないでしょうか。


また、「Railsチュートリアル」という名の通り、学習対象のメインはもちろんRailsなのですが、Railsだけ理解すればアプリケーションが作れるわけではありません。
HTML、CSS(SassやBootstrap)、JavaScript(jQuery)、データベース、Rubyの文法や標準ライブラリの機能、HTTPの仕組み、RESTの概念、HerokuやAWSといった運用環境の仕組み、等々も理解しておかないと実務では頻繁に行き詰まると思います。
今となっては僕は上記の技術知識を大体理解していますが、もし完全な初心者プログラマーだったら覚えることが多すぎて大変だろうなあと思いました。


大変と言えば、デバッグに関するの知識もないとしょっちゅう苦労すると思います。
動画を見てもらえればわかると思いますが、Railsチュートリアルのように「とりあえず右から左へ写経するだけでOK」な場合ですら、ときどきtypoしたり、サーバーの再起動を忘れたりして、エラーが起きたり画面の表示が崩れたりする場面が多々ありました。
こういうエラーに遭遇したときは「どこをどう調べれば原因と解決策が見つかるか」というノウハウをたくさん持っている人ほど早く解決できますし、逆にノウハウが少ない人は「しょーもない原因で何時間もハマる」ということを連発すると思います。
こういったノウハウもそのうちどこかでまとめて紹介したいな~とぼんやり考えたりしています。


最後に、経験値が上がったとはいえ、Railsチュートリアルの中にはいくつか「おお、Railsにはこんな機能があったのか」とか「こっちの書き方の方が便利かもしれない」と思う点がところどころありました。
こういった点は僕も改めて勉強になったところです。

まとめ

というわけで今回は「Railsチュートリアル第3版・コーディング実況動画」の紹介をしてみました。
この動画がこれからRailsチュートリアルを始めようと思っている人の参考になると幸いです。

あわせて読みたい

僕が浜松Ruby会議01でRails初心者からRails経験者に成長するまでの過程を発表したときのスライドです。
いやあ、このレベルに達するまでの3年間はなかなか大変でした。


Ruby未経験だった僕がドヤ顔で偉そうなことを言えるようになるまでの3年間 / #hmrk01 // Speaker Deck