おもしろwebサービス開発日記

Ruby や Rails を中心に、web技術について書いています

gonのv6.6.0をリリースしました

gemたちをRails8.1に対応させた - おもしろwebサービス開発日記の続き。CIを頑張って整備してRails8.1でも動くことを確認したので新しいバージョンv6.6.0をリリースしておきました。テストやCI以外の修正はないのでシュッとアップグレードできるはずです。どうぞご利用ください。

Release v6.6.0 · gazay/gon

RubyWorld Conference 2025でメタプログラミングRuby問題集について登壇してきました

先日開催されたRubyWorld Conference 2025にて、「メタプログラミングRuby問題集の活用」というタイトルで kinoppydさんと一緒に登壇してきました。スライドはこちら。

SmartHR Tech Blogにてkinoppydさんも同様に登壇してきましたエントリを書いています。基本情報はそちらを参照してもらって、以下は内容が被ってない部分について書いていきます。

登壇に至るまで

もともとSmartHR Tech BlogにてメタプログラミングRuby問題集の情報については公開済みでしたが、カンファレンスなどで「作りました!」と宣言してもっと周知させたいな〜という気持ちでいました。

また、ruby.wasmでブラウザ版問題集を作る、英語版も出すというのは構想としては以前からあったのですが普段仕事に子育てにと忙しいのでなにかきっかけがあるといいな〜、と思っていました。というところでRubyWorld Conference 2025のプロポーザル募集が良いタイミングで開始されたため、プロポーザル駆動でブラウザ版が完成。

登壇は僕だけで行うこともできたのですが、問題集のきっかけとなったメタプログラミングRuby読書会を主催したkinoppydさんからも話してもらえたほうがより楽しいだろう、と思って二人で発表する形式にしてみました。

ブラウザ版の実装

ruby.wasmにおけるブラウザ版問題集の実装は、発表中に言及した通りwasmに関する部分ではほとんど詰まる所がなくスムーズに実装できました。大変だったのは問題をブラウザ用に再構成する部分。

最初は既存の問題をそのままブラウザ版として移植すればよかろう、と思っていたのですが、例えば1つの大問中に小問が6つあるのをそのままブラウザ内のテキストエリア内で解くのは体験が悪いなと思い小問ごとに問題を分けていきました。これをClaude Codeにやらせてみたのですが…単純にはいきません。「できました!」と言われて中身を見ると実はできてない、というAIエージェントあるあるをたくさん踏んでなんとか完成までこぎつけました。

ところでRubyWorld Conferenceでは他にもwasm関連の発表がありましたね。スモウルビー甲子園2025Tangible Code。ruby.wasmによってRubyの活用シーンが増えているのを感じます。

みんなもやってみてほしい

メタプログラミングRuby 第2版は、Railsアプリケーションを作るのであれば個人的に必読の本だと考えています。仕事でmethod_missingを書くことはほぼありませんが、gemのコードを読むには必須の知識です。僕はそう思って各お手伝い先にて通算10回以上読書会を開催してきました。

そんなメタプログラミングRuby 第2版を読破する人を増やすために、みなさんもぜひ読書会を実施してほしいです。これからメタプログラミングRuby読書会を主催するひとが参考にできるように、どのような形式で読書会を開催したのかを発表内容に盛り込んでいます。良ければ参考にしてみてください。

また、独自の問題を作るというのもやってみてほしいです。メタプログラミングRubyに限らず、技術書の理解を助けるための教材として問題を作るのはとても有効だと思っています。そして可能なら作った問題を公開してみてください。社外のひとにも役立つリソースになります。

もし読書会をやりたいが自分たちだけだと不安なので誰かに手伝ってほしい、という方がいたらなんらかの形で僕にお声がけください。問題づくりの方でも力になれると思います。

余談

RubyWorld Conference後に参加したRWC後に一畑電車のおでん電車でおでんを食べよう!の写真がバズってびっくりしました。こんなにいいねされたの初めて。

ginza.rb 第93回を開催してKaigi on Rails 2025の振り返りをした

Ginza.rb 第93回 - Kaigi on Rails 2025の振り返りをするぞ - connpass

第93回はKaigi on Rails 2025の振り返りをしました。

何を振り返ったか

僕含めて2人の登壇者が参加していたので、まず登壇者からの発表に関する話(どういう観点で登壇内容を決めたのかなど)をしました。

あとはみんなでこれは良い発表でしたね、というものを振り返りました。振り返った発表一覧*1

個人的にはReActionViewがとにかく圧巻だったなという印象。あとはやはりベテラン勢の発表が強かったように思います。

次回

次回は11/28(金)開催で、Rails8.1について学んでいきます。12月は開催しない予定なので年内最後のginza.rbです。忘年会を兼ねて気軽にご参加ください。

*1:開催からエントリ書くまでだいぶ間が空いているので漏れがあるかも

gemたちをRails8.1に対応させた

自分のリポジトリ配下にあるRails関連gemのCIにRails8.1を足す作業をしてバージョンアップしました。どのgemも特別な対応は不要でスッと対応できました。

修正したのはCIのみで、コード部分は変更がないのに新しいバージョンをリリースするかについて少し悩みました。しかし新しいRailsに対応しています!というのを広く周知するためにバージョンを上げてもよかろうという結論でエイヤとリリースしています。

CiLoggerのこれまでのバージョンがv0.9.1で、0.10.0のように二桁にするのはなんかアレだしいい機会なのでこの度v1.0.0にしました🎉。安定して動いていると思うのでいいんじゃないかな。

一緒に gazay/gon: Your Rails variables in your JSもRails8.1対応しようと思いましたがこれはCIが壊れていてすんなり対応できなかったので、少し時間がかかりそうです…(興味あるひとのPRをお待ちしています)。

Rails8.1のマイナーフィーチャーをまとめました

今日Rails8.1.0がリリースされましたね。めでたい。前回Rails8.0がリリースされたときはginza.rb駆動でマイナーフィーチャをまとめましたが、早くまとめたほうがお手伝い先含めてみんなでワイワイできて便利、ということで取り急ぎgistにまとめておきました。

Rails8.1のマイナーフィーチャーで気になったもの

内容は普段お手伝い先で共有しているものを整形したものになっています。間違いや「これ入れてないのおかしいでしょ」みたいなものがあったら指摘してください。

Rails8.2のメジャー/マイナーフィーチャーについていち早く知りたいひとは…?

そうですね。お近くの技術顧問にきくといいですよね。

willnet-inc/business-details: 株式会社ウィルネットとして提供する技術顧問サービスについて

Kaigi on Rails 2025で認証の話をしました #kaigionrails

2025年9月26~27日に開催されたKaigi on Rails 2025にて「rails g authenticationから学ぶRails8.0時代の認証」というタイトルで登壇してきました。スライドはこちら。

動画もたぶん近日中に公開されるのではないでしょうか。

スライドにもあるのですが、9月27日の誕生日は僕の誕生日(かつ結婚記念日)でした。Kaigi on Rails 2024の感想エントリを書いたときからなんとか登壇したいな〜と思っていたので無事希望通りになりよかったです。

どのようにして今回の発表内容に落ち着いたか

RubyKaigi 2025のあたりから今年のKaigi on Railsのネタどうしようと考え始めました。そのときは認証とは別の内容が頭にあったのですが、最終的にRails8.0でrails g authenticationが導入されたいまのタイミングで認証の話をするのがタイムリーで良かろうと思って認証を選択することに。選ばなかった内容*1は今のところKaigi on Railsでは話されていない手つかずのトピックなんだけどやや地味なのでどうやって供養するといいかな…、となっています。

また、締め切り直前でRails8.1で追加されるActiveJob::Continuationの話もいいなと思いつき*22つ目のプロポーザルも出していたのですがこちらはあえなく落選しました。締め切り直前でプロポーザルの作り込みが足りなかったのと、2024にSidekiqで実現する長時間非同期処理の中断と再開という似たトピックがあったのが敗因かと推測しています。

発表の狙い

近年では認証機能を実装するのに求められる知識量は増える一方です。そのためdeviseなどのオールインワンなgemをブラックボックス的に使わざるを得ないのではないでしょうか。しかし使うだけで実装について何もわからない状態でヨシ!!としてしまうと、脆弱性に関する何かが起きたときに妥当な解決策を考えることができません。困りましたね。

そこで僕が17年前に restful-authentication を通じてセキュリティに関する知識の下地を作り始めたのと同じことがrails g authenticationでできるんじゃないかなと思って今回発表してみました。この発表がセキュアな実装について考え始めるきっかけになってくれたら嬉しいです。

合わせて読みたい

Ruby on Rails Guidesの新しい章として、rails g authenticationを利用したRailsアプリケーションの上に自分の名前やメールアドレスを変更する、とか管理者しかアクセスできないページを作るなどの機能を追加するコード例が作成されています(執筆時点ではedge扱いですが、Rails 8.1がリリースされたら普通に読めるようになるはず)。初学者のひとでもrails g authenticationによって認証機能を簡単に作ることはできるようになりましたが、それだけだと実際にアプリケーションを作るには足りない機能はまだまだあります。その足りない分を埋める資料として良さそうです。

Sign Up and Settings — Ruby on Rails Guides

日本語訳の方も近日中に公開されそうです。

一緒にセキュアな実装について考えましょう

僕はセキュリティについて専門家ほど詳しいわけではないですが、gemの脆弱性情報をウォッチしたり、日々の開発の中でセキュリティ的に問題ない実装になっているかを気にするようにしています。自社のRailsアプリケーションをセキュアに運用したいぞ、というひとがいたら一緒にどのようにしたらいいか考えることができます。

もし興味があれば株式会社ウィルネットとして提供する技術顧問サービスについてをお読みいただいたうえで株式会社ウィルネットのお問い合わせフォームよりお問い合わせ*3ください。

*1:もっと詳細書いてもいいんだけどもしやっぱりこのネタで来年のKaigi on Railsでプロポーザル出すぞとなったときに個人が特定できてしまうとアレだなと思うので伏せてます

*2:2024のときほどプロポーザルが通る確信がなかったのもある

*3:Xでもfacebookでも連絡の付く方法ならばなんでも良いです

ながらRuby会議01に参加してスポンサーLTをしました #nagara01

2025年9月6日に開催されたながらRuby会議01において、お手伝い先のSmartHRさんのスポンサーLTとして登壇させていただきました。岐阜は初めて訪れましたが自然が豊富でありつつも街もそれなりに大きくて良い場所だなと感じました。

今回は一人でしたが今度は家族を連れて旅行したいと思います。

発表について

発表資料はこちら。

資料を見ていただくとわかるように、このLTは元々ながらRuby会議01に出したプロポーザルの内容を5分に短縮したものになっています。最近はRailsの細かい話をする場所が少なく*1この話を供養するのに困っていたのでちょうど良い機会をもらえて良かったです。

お作法に則っていないgemがあるとRailsの設定を安心して変更できない

僕は仕事としてお手伝い先のconfig.load_defaultsのバージョンを上げていく作業をすることがあります。Railsの設定をアップグレードしていく技術に書いたようなやりかたで一つずつ設定を有効にするのですが、お作法に則っていないgemを使っているのが原因でなぜか適用したつもりの設定が有効になっていない問題に遭遇しました。原因はスライドにあるとおりです。

この問題のワークアラウンドとしてRails関連の設定はすべてconfig/application.rbに書くというのがあります。とりあえずはそれで解決できるのですが、将来的に僕以外のエンジニアがRails関連の設定を変更していくことになったらどうなるでしょう?rails app:updateを実行するとconfig/initializers配下に新規の設定用ファイルができてしまいます。高確率で同じ問題を踏みそうですね。

また今回の発表ではRailsの設定が有効にならないという話だけをしましたが、Rails初期化時に適用されるコードの順番が変わることによって設定以外でもなんらかの不具合につながるケースがあるんじゃないかなと思っています。

a-nti_manner_kick_courseの誕生

というわけでワークアラウンドじゃなくて恒久的な対策がしたい。そこで作ったのがa-nti_manner_kick_courseです。これを使うことでGemfile中にお作法に則っていないgemを検出することができます。

名前がキラキラしているのには一応理由があります。このgemはその特性上他のgemより先にrequireすることが求められます。rubocopのBundler/OrderedGemscopを有効にするとgemがアルファベット順に並びますが、その時に自然に一番上に来るようにしたい。aという名前のgemはすでにあり、次にくるのはa-…というところから名前を考え出しました。あとはお行儀が悪いgemをなんとかしたいところからの連想ゲームです。

みんなでお作法に則っていないgemを減らしていこう

a-nti_manner_kick_courseを利用して、お手伝い先や自分のRailsアプリケーションに関するgemをざっと調べ対象となるものには可能な限りPRを出しました。が、たぶんお作法に則っていないgemはまだたくさんあるはず。もしお手持ちのRailsアプリケーションにそのようなgemがあるのを見つけたらPRを出すなど、なんらかの形でお作法に則るようにしてほしいです。

僕は「新しくgemをいれただけで関係ないRailsの設定が変わるかもしれない」というのは結構な罠だと感じています。そもそも個人的にはこのお作法自体あまり筋が良いとは思えないのですが、代替案がないのでいまのところすべてのgemをお作法に則った状態にするしかありません。それにはみんなで力を合わせて取り組む必要があります。gemに対してPRを出すぞ、というときになにか技術的な疑問などあったらお気軽にご相談ください。

関連記事

Rails: new_framework_defaultsの設定が反映されるタイミングを無邪気に信じてはいけない(翻訳)|TechRacho by BPS株式会社

*1:今月からRailsTokyoができたのでこの問題は解消されたように思えます