Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
メタプログラミングRuby問題集の活用
Search
Shinichi Maeshima
November 07, 2025
Technology
2
1.4k
メタプログラミングRuby問題集の活用
RubyWorld Conference2025での発表資料です
Shinichi Maeshima
November 07, 2025
Tweet
Share
More Decks by Shinichi Maeshima
See All by Shinichi Maeshima
rails g authenticationから学ぶRails8.0時代の認証
willnet
5
4.3k
What's a well-behaved Rails extension gem?
willnet
0
730
Sidekiq vs Solid Queue
willnet
14
13k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.6k
Exceptional Rails
willnet
6
8k
Breaking the Flaky Test Cycle
willnet
2
2.3k
mrskで広がるインフラの選択肢
willnet
1
1.1k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.3k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
14k
Other Decks in Technology
See All in Technology
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
140
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Scrum Guide Expansion Pack が示す現代プロダクト開発への補完的視点
sonjin
0
610
プロンプトエンジニアリングを超えて:自由と統制のあいだでつくる Platform × Context Engineering
yuriemori
0
420
Master Dataグループ紹介資料
sansan33
PRO
1
4.2k
コールドスタンバイ構成でCDは可能か
hiramax
0
130
会社紹介資料 / Sansan Company Profile
sansan33
PRO
11
390k
困ったCSVファイルの話
mottyzzz
0
190
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
12k
ソフトとハード両方いけるデータ人材の育て方
waiwai2111
0
140
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
1
640
Qiita Bash アドカレ LT #1
okaru
0
190
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
270
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
120
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
46
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
0
1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
6.8k
The Curse of the Amulet
leimatthew05
0
7.1k
How to Think Like a Performance Engineer
csswizardry
28
2.4k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
A designer walks into a library…
pauljervisheath
210
24k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
Transcript
© SmartHR, Inc. メタプログラミングRuby問題集 の活⽤ 2025/11/07 前島 真⼀ 株式会社ウィルネット kinoppyd
株式会社SmartHR
None
kinoppyd - SmartHR のプログラマ - メタプログラミングRuby⼤好き https://kinoppyd.dev/blog @GhostBrain kinoppyd
メタプログラミング Ruby is 名著 of 名著 4
5 🙄 メタプログラミングRubyは名著 これ読まないと死んでしまうな ⽬がバッキバキの⼈
読書会やりましょう - みんなで読むことによって底⼒向上 - でもこれ普通に輪読するのキツそう - 実習形式にすればいいか 6
たくさん買った 7
実習!? 正気か!? めちゃつらいぞ!? 8
つらいっす、でも - 将来JOINした⼈に残せるテキスト - 作問と読書会のまとめを別の⼈が担当 - PublicにすることでRubyに貢献できる 9
将来JOINした⼈に残せるテキスト - ⼊社してくる⼈はRuby初めてかも - 都度勉強会開くのはしんどい - 鍛錬したテキストを残しておこう 10
作問と読書会のまとめを別の⼈が担当 - 参加者にもグラデーションがある - すでに詳しい⼈には僕と⼀緒に作問を - 未読の参加者はその回のテキストまとめを 11
PublicにすることでRubyに貢献できる - 技術顧問のレビューも通ったしいける - 社外の⽬に触れてより鍛錬される - Rubyを使う会社全体で底⼒あげてこ 12
どういう実習をしましたか?
まずレベル分け - 修⾏僧(初学者) - ヌンチャク使い(中級者) - マスター⽼師(メタプロ⼤好き) 14
章を要約して全員の前で講義してもらいます - 初学者が要約 - 中級者がレビュー - テキストは⾮公開(著作権に触れる) 15
⽤意したtestをパスしてもらいます - メタプロ⼤好きなできる⼈が作問 - 講義の後に解いてもらう - 問題は公開 16
17 実際の出題 # Q1. # Hogeクラスは次の仕様を持つ # "hoge" という⽂字列の定数Hogeを持つ #
"hoge" という⽂字列を返すhogehogeメソッドを持つ # HogeクラスのスーパークラスはStringである # ⾃⾝が"hoge"という⽂字列である時(HogeクラスはStringがスーパークラスなの で、当然⾃⾝は⽂字列である)、trueを返すhoge?メソッドが定義されている class Hoge end https://github.com/kinoppyd/reading-metaprogramming-ruby/blob/master/02_object_model/01_hoge.rb
テストをActionsでグリーンに もう残っていませんが、当時 はCIのBadgeをREADMEに 貼って、全員グリーンを⽬指 しました 18
19 https://tech.smarthr.jp/entry/2020/03/13/123745
そして何が残りましたか?
鍛錬された問題集! 21 https://github.com/kinoppyd/reading-met aprogramming-ruby Star me !
あなたも明⽇から メタプログラミング Ruby読書会が始め られます! 22
バトンタッチ! 23
Shinichi Maeshima https://blog.willnet.in Willnet Inc. @netwillnet @willnet
技術顧問業をしています
読書会が終わりメタプログラミング問題集が残った • @willnetは複数社の技術顧問をしている • 他社でもこの問題集を使ってメタプログラ ミングを教えようと思った 26
3社で試した • 進め⽅は次のようにした • メタプログラミングRuby第2版を読む • 要約パートはなし • 問題を解く •
コロナ禍以降での開催だったので基本フルリモートで実 施 27
実施⾵景1 28
SmartHR読書会から⼤きく変えた点 • GitHub上でコード差分を眺めつつ@willnetによる解説をつけ た • SmartHR社内の読書会では時間の問題もありとにかく解く のがメインになっていた • 正答は必ずしも1つとは限らない •
他の⼈が書いた別解を⾒ることで勉強になる • @willnetの解答も合わせて解説した 29
会社の状況に合わせてやり⽅を変えてすすめた • 基本的に週1実施 • モチベーションの⾼い参加者が集まっているか、みんな業務で忙しいかなどで 細かい内容を調整した • 予習ありで30分で終える • 先に本を読んで感想を話す
• 先に問題を解いて参加者の解答例を⾒ながら解説をする • 予習無しで1時間時間を取る • みんなで本を⾳読する • もくもく問題を解く 30
他社での読書会を重ねるごとに問題が洗練されていく • 実際に問題をすすめるとtypoや、問題の裏をかくような解法が⾒つかる • GitHub上で公開されているため、気づいた⼈が修正⽤のPRを出せる 31
参加者の感想 • 難しい! • 基礎問題を解かずにいきなり応⽤問題が始まっている • 対応する章に出てこないメソッドを使わないと解けな い問題が時折ある • コードの差分を眺めることや@willnetの解説は好評だっ
たはず 32
対策 • 応⽤問題前に肩慣らしができる基礎問題を追加した • willnet/reading-metaprogramming-ruby-first-steps • 応⽤問題を解くために必要なメソッドの素振りをする 形の問題 • @willnetが解説するときに楽ができるようにその場で
読める解説と回答例もつけた 33
基礎問題例 34
35
実施⾵景2 36
基礎問題を作ってからのメタプロ読書会 • 応⽤問題はやっぱり難しいけど好評 • @willnetのお⼿伝い先に提供するだけであ ればこれで良さそう 37
でもこれでいいのかな? • でもこんな良いコンテンツを⾃分の⽬の届く 範囲だけしか提供できないというのはもった いない • ⾝近に技術顧問がいないひとでも問題に取り 組めるようにしたい 38
None
• READMEに進め⽅を追加 • 基礎問題集をマージ • 解答例と解説の追加
41
⼀定の認知は得たはず? 42
採⽤にも効果があったらしい 43
でももっと⾊んな⼈ に解いてもらいたい … 44
そんなときに現れたruby.wasm 45
ブラウザで問題を解け るようになればもっと メタプロ問題集にチャ レンジする⼈が増えるの では? 46
英語版を作れば世界中 の⼈がメタプロ問題集 にチャレンジするので は? 47
48 https://willnet.github.io/metaprogramming-challenges-in-ruby/
49 英語と⽇本語を切り替え
50 問題の切り替え
51 問題⽂
52 コードを書く
53 テスト実⾏
54 テスト結果
55 解答例と解説の表⽰
56
仕組み • あらかじめ⽤意しているテストコード(minitest)とフォームに⼊⼒し たコードをあわせて都度実⾏する • 実⾏した後の標準出⼒を画⾯に表⽰する • 標準⼊出⼒はデフォルトだとconsole.log()としてコンソール表⽰ されるので、jsで扱えるようにRubyVMを修正する必要があった •
上記以外は素直にruby.wasmを利⽤するだけでいけた 57
実装 • 可能な限りAIエージェント(主にClaude Code)を利⽤してみた 58
AIエージェントでwasm版を作った感想 • GitHub上の問題をそのままwebにするだけでは扱いづらかったのをAIエージェ ントを利⽤して解決した • 例えば1つの問題として6つのコードを要求する問題がある • web上で解きやすいように1つずつにバラした • エージェントに任せたが問題の切れ⽬がわかっていなかったり等指⽰出しが
難しい • バラしたことによりテストの再構成も必要になりエージェントは詰まりがち • 英語化等はすんなりいった 59
今後の展望 • 英語圏での宣伝 60
まとめ • どのような形でメタプログラミングRuby問題集が⽣ま れ、改善されたかを話しました • 問題を作るというのは⼤変だけど本を読むだけよりも知 識として定着しやすい • ⾃分たち以外の⼈にも残せる •
採⽤にも⼀定影響ある模様 61
みなさんも問題作っ てみませんか? 62