give IT a try

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

「プロを目指す人のためのRuby入門」の効果的な読み方を動画で指南してみました #チェリー本

ありがたいことに、たくさんの人に読んでもらっている拙著「プロを目指す人のためのRuby入門(通称・チェリー本)」ですが、本書はそれなりのボリュームがあり、なおかつ後半(7章以降)がかなり難しくなってくるので、読み終わるのに苦労している方もたくさんおられるようです。

すでに他の言語でプログラミングの経験をたくさん積んでいる人であれば、その知識を活かしてスムーズに読み進めることができるかもしれませんが、これからプログラマになろうとしている初心者の方(独学で勉強したり、プログラミングスクールに通われたりしている方たち)は、なかなかハードルが高いと思います。

そこで今回、筆者である僕自身が動画を使って「プロを目指す人のためのRuby入門」の効果的な読み方を初心者のみなさんに指南してみることにしました。

その動画がこちらです↓


著者自身が語る「プロを目指す人のためのRuby入門」の効果的な読み方

こちらの動画では、

  • なぜチェリー本を読むのか、チェリー本の内容を理解するとどういう効果が期待できるのか
  • 初心者の人が必ず押さえておきたい項目はどこか
  • 逆に、初心者の人は最悪理解を後回しにしても良い項目はどこか

といったポイントを説明しています。

「チェリー本って難しい!」「全然読み終わらない!」とお悩みの初心者エンジニアさんは、ぜひこちらの動画を参考にして効率よくチェリー本を読破してください!😄

あわせて読みたい

今回の動画と同じような話は過去にブログでも書いています。こちらもあわせてどうぞ。
blog.jnito.com

「プロを目指す人のためのRuby入門」で6.3.3項のサンプルコードがなぜか動いてしまう場合の対処法

このエントリは拙著「プロを目指す人のためのRuby入門(通称・チェリー本)」のサポート記事です。

6.3.3項(187〜188ページ)に載っているサンプルコードをirb上で写経していくと、書籍ではエラーになるはずのコードがエラーにならないケースがあります。

f:id:JunichiIto:20200906144357p:plain

これはirb上で連続してコードを打ち込んでいるためです。
一度irbを再起動させてからエラーになるコードを入力すると、書籍の説明通りエラー(NameError)が発生します。

f:id:JunichiIto:20200906144614p:plain

もっとくわしく

6.3.3項のサンプルコードをirb上で打ち込むと、次のコードを実行することになります。

text = '私の誕生日は1977年7月17日です。'
# キャプチャの名前がそのままローカル変数に割り当てられる
if /(?<year>\d+)(?<month>\d+)(?<day>\d+)/ =~ text
  puts "#{year}/#{month}/#{day}" #=> 1977/7/17
end

この時点でyearmonthdayという3つのローカル変数がirb内に定義されます。

その次に出てくる以下のサンプルコードは、「正規表現を使ってもローカル変数が作成されない」ということを説明するためのコードです。

text = '私の誕生日は1977年7月17日です。'
# 正規表現が右辺に来るとローカル変数が作成されない
if text =~ /(?<year>\d+)(?<month>\d+)(?<day>\d+)/
  puts "#{year}/#{month}/#{day}"
end
#=> NameError: undefined local variable or method `year' for main:Object

なのですが、1つ前のコードを実行したことにより、すでにyearmonthdayがローカル変数として定義されてしまっています。
そのため、本来であれば「yearが未定義なのでエラー(NameError)」となるべきところが、エラーにならず普通に実行できてしまうわけです。

# 本当はyearもmonthもdayもないよ!となるはずが、すでに存在するので動いてしまう
puts "#{year}/#{month}/#{day}"

irbを再起動すればローカル変数はすべてクリアされます。
ですので、再起動した直後に先ほどのコードをもう一度実行すれば、期待どおり「yearが未定義なのでエラー(NameError)」になります。

まとめ

この件はフィヨルドブートキャンプの生徒さんやSNS上の読者さんで、同じ疑問を持っていた人を見かけたので、今回ブログ記事として説明させてもらいました。
記述ミスではないとはいえ、初心者さんにとってはたしかにややこしい落とし穴になってしまっているため、改訂版を出す機会があればこの点をひとこと補足しておこうと思います。

【動画公開】RSpec初心者向けのオンライン勉強会を開いてみた (RSpecビギナーズ!! vol.1)

はじめに

先日、僕の突然の思いつきでRSpec初心者向けのオンライン勉強会を開いてみました。
題して「RSpecビギナーズ!! vol.1」です!

・・・といっても、おそらくほとんどの人が「え、いつそんな勉強会やったの?告知ページはどこ?」と思われるかと思います。
それもそのはず、だってこの勉強会は僕がTwitterで「RSpecの勉強会があったらいいな」とつぶやいている人に声をかけて開催した、個人的な勉強会だからです!

ちなみにそのツイートがこちらです↓


勉強会を開こうと思った理由

上のツイートをしてくれた「かなさん」ですが、以前から面識があったのかというと、全くありません!!
本当にたまたまツイートを見かけただけです。

じゃあ、なんでそんなことを僕がしたのかというと、以前から初心者向けのRSpec勉強会をやってみたいな〜と思っていたからです。
Twitterを見てると、よく「RSpecがわからない、動かない、難しい!!」といった嘆きの声をよく見かけます。
僕としては「いったいどこで困っているの?どのへんが難しいの??」と思って気になるのですが、ツイートだけ読んでも具体的にどういう内容で困っているのかがわかりません。
なので、「そういった人たちをつかまえて、RSpecで困っている具体的なポイントを聞き、その問題を解決してあげたいな〜」という野望(?)をここ数年ずっと持っていたのでした。

「RSpecがわからない」だけだと声をかけづらいのですが、かなさんの場合はそれに加えて「勉強会がないかな」というコメントも一緒に付いてたので、「やりましょう!!」と僕も声をかけやすかった、というわけです。
(それでも見ず知らずの人にいきなり声をかけるのは、たぶん僕ぐらいと思いますが 😅)

どんな勉強会だったの?

開催方式について

最初は普通の勉強会みたいに告知ページを用意して、参加者を募ろうかと思っていたのですが、告知ページを作るのが面倒だったのと、告知ページを作って募集をかけるとそれだけで日数が経過するので、さくっと開催するために参加者は「かなさんの知り合い」に限定させてもらいました。

ただし、完全にクローズドな勉強会にして、僕の知見がかなさんとその知り合いの人たちだけに閉じてしまうのはもったいないと思ったので、勉強会の様子を動画で撮って無料公開することを開催の条件とさせてもらいました。

また、コロナ禍ということもあり、直接会いに行くわけにもいかないので(そもそも地理的にも遠い)、Zoomを使ったオンライン勉強会としました。
開催時間は1時間半です。

f:id:JunichiIto:20200829164757j:plain
Zoomで画面共有しながら勉強会を開きました
当日の内容について

参加者のみなさんに事前にRSpecに関する質問を考えてきてもらい、それに僕がその場で回答する、という勉強会にしました。
なお、対象レベルは「RSpecの完全な初心者」です。

具体的に以下のような質問に順に答えていきました。

  • Q1. 関連モデルのテストについて
  • Q2. type: :model って必要?
  • Q3. Docker で save_and_open_page
  • Q4. モデルのテストがうまく動かない
  • Q5. テスト駆動開発の回し方について
  • Q6. 現場にシステムスペックを導入したい
  • Q7. テストの優先順位について
  • Q8. 他の spec を require する?しない?

動画はこちらです!

前述のとおり、勉強会の様子は録画してYouTubeに公開しています。(約30分 x 3本)
いろいろと初心者の方に役立つお話があると思うので、RSpec初心者の方はぜひチェックしてみてください!

なお、動画の解像度の関係で、動画を見る場合はスマホよりもPCやタブレットのような大きな画面で見ることを推奨します。

1/3「関連モデルのテストについて」「type: :modelって必要?」「Dockerでsave_and_open_page?」

  • 05:18 関連モデルのテストについて
  • 12:55 type: :model って必要?
  • 18:28 Docker で save_and_open_page?
2/3 「モデルのテストがうまく動かない」「テスト駆動開発の回し方について」

  • 00:00 モデルのテストがうまく動かない
  • 20:40 テスト駆動開発の回し方について
3/3 「現場にシステムスペックを導入したい」「テストの優先順位について」「他のspecをrequireする?しない?」

  • 00:00 現場にシステムスペックを導入したい
  • 11:03 テストの優先順位について
  • 20:37 他の spec を require する?しない?

声をかけてもらったらvol.2も開催するかも?

今回開催した「RSpecビギナーズ!!」ですが、タイトルに"vol.1"と入れているので、今後もニーズがあれば続けてみようかな〜と思っています。

開催の条件はこんな感じ(=vol.1の条件と同じ)です。

  • 勉強会の様子を動画に撮って公開しても大丈夫なこと
  • 時間は1時間から1時間半程度
  • なるべく実際のコードを見せてもらうこと(コードがないと空中戦になってしまい、実のある議論にならないため)
  • 参加者は1人〜5人程度(僕が顔と名前が覚えられるぐらいの人数で)
  • 初歩的な質問を歓迎します(あまり高度な内容だと僕も答えられないかもしれないので、事前にご相談ください)

上記の条件に合致する場合は無料で開催します!
もし「自分のお悩み相談も聞いてほしい!」という人がいたら、TwitterのDM等で気軽にお声がけください😃

なお、「会社のコードを見せるので動画は公開しないでほしい」「丸1日使って教えてほしい」といった場合は「お仕事」として有料で対応しますので、ご相談ください。

まとめ

というわけで、今回のエントリでは先日開催したRSpec初心者向けのオンライン勉強会について紹介してみました。

RSpec、というかRSpecに限らずMinitestで書くときもそうなのですが、テストコードの書き方は慣れるとサクサク書けるようになるのですが、意外と変な落とし穴やツールのクセみたいなものも多いので、最初の頃はたくさんハマって無駄に時間を溶かしてしまうことも多いと思います。

実際僕もたくさんハマった結果、今のスキルが身に付いたわけですが、完全に自力でがんばるよりも、誰かの助けを借りながら習得した方が絶対効率が良いです。
変にハマりまくると「テストなんて大嫌い!!」といったマイナスの感情を持ってしまうかもしれません。

テスト大好きな僕としては、できるだけ「テスト嫌い」の人を減らし、「テスト好き」な人を増やしていきたいと思っているので、今後もこういう活動をやっていけたら嬉しいな〜と思っています。

「RSpecでハマりまくっててテストが嫌いになりそう😢」という初心者の方は、ぜひ僕と一緒にお勉強しましょう😘

あわせて読みたい

過去の公開したテストコード関連のブログ記事やスライド、訳書のリンク集です。
初心者の方はこちらもぜひ参考にしてみてください。
blog.jnito.com
blog.jnito.com
qiita.com
leanpub.com