黒魔術に入門している(Ruby メタプロ)

obregonia1
·

最近 Ruby のメタプログラミングについて学んでいて、勉強を始めるきっかけや、やっていることなどをゆるく書きたいと思います。具体的なコードの解説などはありません。

最後におまけあります!

---

この記事はフィヨルドブートキャンプのアドベントカレンダー2023 Part2の6日目の記事です。

フィヨルドブートキャンプ Part 1 Advent Calendar 2023

フィヨルドブートキャンプ Part 2 Advent Calendar 2023

きっかけ

Grow.rb第17回:Dataクラスを作ってみよう!

先日こちらの勉強会に参加しました。Ruby 3.2 で導入された Data クラスを再実装しようという内容で、みんなで Discord のボイスチャットに集まって最初にざっくり概要などを説明してもらってあとはそれぞれコードを書いて、最後に解説交えて答え合わせをやるというものでした。

以前にも Observerパターンを実装するやつ に参加したことがあり、難しかったけどまあなんとか実装できたので今回も軽い気持ちで参加しました。

しかし時間が経ってもほぼ進捗は無くて、途中逃げ出してしまおうかなと思うぐらい何もできなかったです。見積もりが甘すぎる。

参加者が各自コードを書く時間が終わった後は主催者の大倉さんによるライブコーディング交えての解説がありました。いわゆるメタプログラミングの知識がそれなりに無いと実装できないことを知り、普段 Rails を使っているにもかかわらず Ruby に対する知識や理解が足りてないなと実感ました。

そこでせっかく Ruby という柔軟性の高い言語を使ってるのでメタプロ勉強してみるかーとなりました

やってること

まずはメタプロを勉強するとなるとほぼ必須になるのがメタプログラミングRuby 第2版だと思います。すでに購入済で1回ざっくりと目を通しただけなので改めて最初から読み返しています。

1回目を通すだけで理解できるような内容ではなくいつか読み返そうと思ってたのでいいタイミングだったなと思います。メタプロ以外にも言語仕様に関することも書かれているので凄く勉強になります

---

https://github.com/kinoppyd/reading-metaprogramming-ruby

次にやっているのはメタプログラミング Ruby の問題集が OSS で公開されていて、書籍の各章ごとに問題が作られているので順番にテストがパスするようにコードを書いています。

https://tech.smarthr.jp/entry/2023/05/30/120853

これは書籍の関係者が作ったとかではなく、勉強用に有志で作られているものなのでめちゃくちゃありがたいです!

内容はメタプロ初心者には難しくて結構時間もかかってしまうと思うんですが、実際に手を動かすことで理解度もかなり上がるはずなので本を読んだ人は是非やってみるといいと思います。

それぞれ解答例も書いてあるのでどうしてもわからないときや、テストをパスさせた後に自分のコードと比べてみるのもいいと思います。

---

https://github.com/grow-rb

あとは Grow.rb で過去にやったライブラリやデザインパターンの再実装系のリポジトリがいくつかあるので、これらも今後時間ができたらやってみようと思ってます。

さいごに

メタプロは業務ではなかなか活用する機会が無いこともあり、いつかやろうと思いつつなかなかタイミングが無かったけどいいきっかけがあってよかったなと思います。

最近プライベートでの学習は書籍を読んだりぐらいしかできていなかったので、コードを書いて学べるのはやっぱり楽しいなと気付かされました。

機会があれば Gem を作ったり、ソースコードを読んだり、使い捨てのスクリプト書いたりとかで活用できたらと思ってます。

最後に書籍の冒頭に載っている Matz の言葉で締めくくりたいと思います。

Ruby は君を信頼する。Ruby は君を分別のあるプログラマとして扱う。Ruby はメタプログラミングのような強力な力を与える。ただし、大いなる力には大いなる責任が伴うことを忘れてはいけない。

おまけ

https://www.mixcloud.com/DJ_OB_ONE/greedy-bill/

歌モノメインでミックス録ったのでよかったら聴いてください〜