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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Shinichi Maeshima
November 07, 2025
Technology
2
1.5k
メタプログラミング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.7k
What's a well-behaved Rails extension gem?
willnet
0
780
Sidekiq vs Solid Queue
willnet
14
14k
どうしてこうなった?から理解するActive Recordの関連の裏側
willnet
6
1.6k
Exceptional Rails
willnet
6
8.1k
Breaking the Flaky Test Cycle
willnet
2
2.4k
mrskで広がるインフラの選択肢
willnet
1
1.2k
アプリケーションを長期にわたって無理なく運用するためのたったひとつの方法
willnet
2
2.3k
HotwireからDHHが考えるこれからのRailsとJSの付き合い方を知る
willnet
14
14k
Other Decks in Technology
See All in Technology
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
22k
DX Improvement at Scale
ntk1000
2
290
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
1.6k
GitLab Duo Agent Platform + Local LLMサービングで幸せになりたい
jyoshise
0
110
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
EMからVPoEを経てCTOへ:マネジメントキャリアパスにおける葛藤と成長
kakehashi
PRO
7
870
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
7
7.1k
自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics
codmoninc
1
1.1k
LY Tableauでの Tableau x AIの実践 (at Tableau Now! - 2026-02-26)
yoshitakaarakawa
0
1.3k
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
30
9k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.1k
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
850
The Curious Case for Waylosing
cassininazir
0
260
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
310
Evolving SEO for Evolving Search Engines
ryanjones
0
150
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Site-Speed That Sticks
csswizardry
13
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
230
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
99
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