こんにちは。SmartHRでRails顧問業をしているwillnet です。以前、SmartHRでのメタプログラミングRuby読書会と、その成果物というエントリを(kinoppydさんが)書いていました。今回のエントリはその続きの話です。
実際に手を動かすと身につく
上記エントリでは メタプログラミングRuby 第2版の読書会を、単に本を読むだけでなく、毎週新しい問題を作り参加者に解いてもらう、という流れで開催したことを紹介しました。
Rubyによるメタプログラミングは、普段の仕事ではなかなか使う機会がないテクニックも多く*1、一回本を通読しただけですべてを覚えるのは難しいと感じています。しかし、その読書会では実際に手を動かして解く問題を用意したため、通常の読書会よりも内容が身につく度合いが大きかったのではないか、と感じました。
いい問題があるのでもっと活用したいぞ
せっかく作った問題を活用しないともったいない。そこで僕がお手伝いしている他の会社でも、ここで作った問題を使ってメタプログラミングRuby第2版読書会を開催しました。
そこでも参加者の反応はよく、開催してよかったと思っています。しかし、問題自体はSmartHR社の当時の読書会参加者に最適化された形で作られており、解答例などもないため、僕が主催して補足や解説を入れる形式でないと読書会を成立させるのが難しいとも感じました。
もう少し頑張って問題を整えると、僕がお手伝いしている会社に限らずRubyのメタプログラミングを学びたい人が幅広く学べる教材にできるのでは?と思ったのでエイヤと頑張ってみました。次のPRがその成果です。
誰でもメタプロ問題に着手できるようにした by willnet · Pull Request #69 · kinoppyd/reading-metaprogramming-ruby
みんな解いてみて!!
上記PRに詳細を書いてますが、主に次のようなことをやりました。
- Ruby3.2対応にした
- 各章の入門用の問題を追加した
- 説明文を直して新規参加者が詰まらずに問題に取り書かれるようにした
- 解答例と解説を入れた
これで、メタプログラミング初心者の人がひとりで問題を解いてみて学ぶ、ということが可能になったはずです。Rubyのメタプログラミングがよくわからない人や、ちゃんとメタプログラミングを理解しているか確かめてみたいという人はぜひ本を片手に問題を解いてみてください。
kinoppyd/reading-metaprogramming-ruby
注意事項
これも上記PRに書いていますが、基本的にこの問題集はメタプログラミングRuby第2版の章ごとに対応する形で問題が作られています。しかし一部の問題はその問題に対応する章よりも後に書かれている機能を知らないと解けない(もしくは解きづらい)ものがあるので、とりあえず6章までざっと通読した上で問題に取り掛かるのがいいかと思います。
We are hiring!
直接willnetにメタプログラミングについて質問したい、という人は以下リンクからご応募よろしくお願いします!
*1:カジュアルにmethod_missingとか使ったらレビューで指摘されますよね…?