今回のブログ担当は石川です。2024/5/15〜5/17に沖縄で開催されたプログラミング言語Rubyの国際会議RubyKaigi 2024に参加したので、その様子や感想を書いていきます。
RubyKaigi 2024のセッションの中で印象に残ったことについて書きます。
資料: https://drive.google.com/file/d/1Dkx15u_5UAGoFqJHCeAuj2FXS-z_U7EE/view
Weird Code(奇妙なコード)をテーマとしたセッションでした。
文字や記号で動く魚を描いたアニメーションに見えますが、このコードをRubyとして実行すると実行した時点の魚の位置から再び泳ぎ出すというコードになっているそうです。irbにコピペして実行してみたところ本当に動いて、「特別なライブラリもなく本当に動くんだ・・・」と驚きました。
(セッション内で紹介された、TRICK 2022で金賞を受賞されたプログラム)先月、TRICK2022(超絶技巧Ruby意味不明コンテスト for RubyKaigi)で金賞をとってきたプログラム(Quine)です。
— ぺん! (@tompng) October 18, 2022
全てのフレームが、魚達がその場所から泳ぎを再開する実行可能なRubyのコードになっています。
魚・水草・泡でコードの一部が欠落していますが、誤り訂正により復元しています。 pic.twitter.com/vQsGG5o7Of
他にもRubyKaigi2024に関連付いた作品と、その作品を構成する技術的手法も紹介されました。今回発表されたような奇妙なコードを書くためには、Rubyの言語仕様を深く理解している必要があるとのことです。
@🌺
のように絵文字を使ったインスタンス変数は使えるが@2️⃣
のように数字の絵文字のインスタンス変数は使えないという話がありましたが、
"2️⃣".chars == ["2", "\u{fe0f}", "\u{20e3}"]
などを理解していればこのようなインスタンス変数を書いたときどうなるかが自ずと理解できるのかな思います。私は絵文字のインスタンス変数を作ってみようなんて今まで考えたこともありませんでしたが、Rubyについてより深く知るためにももっと好奇心を持っていろんなことを試してみたいと思いました。
こういう「Rubyをつかって面白いことをしている」セッションが一番最初のキーノートだったことでRubyKaigi全体のわくわく感みたいなものが上がったのを感じましたし、Ractorやwasmなど他のセッションに繋がるような内容となっていて本当にすごいキーノートでした。紹介された作品ももちろん素晴らしかったのですが、それだけでなく構成含めて美しいというか。
私はAtCoder(競技プログラミングコンテストサイト)のコンテストにRubyで参加しているのですが、AtCoderの提出結果をコード長の昇順で並び替えてみると「なんでこれで動くの?」「読めない・・・」というコードを見かけることがあります。そういうコードの一端を垣間見た気もしました。
資料: https://speakerdeck.com/ohbarye/unlocking-potential-of-property-based-testing-with-ractor
Property based testingという手法のテストをRactorで並列化して素早く動く形で実現されたというセッションでした。まずProperty based testingという手法をはじめて知ったのですが、
というように普段行っているテストとは異なる手法のようです。
Property based testingを使うメリットとしては、手動テストでは見逃されるようなエッジケースを見つけやすいという網羅性が一番大きいようで、網羅性が高い分Example based testingよりも処理時間がかかるのですが今回紹介されたpbt gemではそこでRactorを使った並列処理を活用されていました。
ただ、その多くの入力値に対するテストを行って期待する値が返ってくるかの判断は相対的なコードとして書く必要がありそうなので、そのコードが正しくない場合もあるというところがちょっと怖いところかなと思いました。Example based testingで問題が起きそうなサンプルを抽出して期待値をべた書きしたテストを書き、それに加えてProperty based testingで多くの入力値を網羅するテストを書くと良さそうです。もちろんすべてに対してここまでテストを書くことは難しいですが、とくに重要な部分に対してはProperty based testingを取り入れていくというやり方であればありだと思います。
Ractorという並列化に使える新しい仕組みができたらしいぞということは知っていたのですが、並列処理したい場面も少なく、したいときもGitHub ActionsでjobごとわけるとかLambda関数を複数動かすとかそういう方向性だったので、今回のRubyKaigiでほぼはじめてRactorについて知ることができました。
導入も結構簡単そうなので、今後 https://github.com/ohbarye/pbt をどこかで使ってみたいです。
資料: https://speakerdeck.com/andpad/long-journey-of-ruby-standard-library-rubykaigi-2024
Rubyの標準ライブラリについてのセッションでした。
なんとなく感じ取ってはいましたが、default gemsを減らしてbundled gemsを減らしていく方向性のようです。
default gemsを減らしてbundled gemsを減らす理由:
Ruby3.3で導入された機能で、default gemsからbundled gemsに移行するライブラリを利用している際に警告を出すようになるそうです。今後のバージョンアップのことを考えると事前に警告を出して貰えるのはとてもありがたいです。
こんな感じに警告されるらしい:
>> require "csv' warning: csv which will no longer be part of the default gems since Ruby 3.4.0. Add csv to your Gemfile or gemspec
資料: https://speakerdeck.com/mikemcquaid/using-modern-ruby-to-build-a-better-faster-homebrew
Homebrewの開発者の方によるHomebrewの開発についてのセッションでした。HomebrewがRubyで動いていることは知っていましたが、macOSにRubyが標準で入らなくなったあたりから変わったのかと思っていました。今もRubyなんですね。
https://github.com/Homebrew/homebrew-core/blob/f1e6445bf32504e0e3a50169a2ee7f8e7ccba76a/Formula/w/wget.rb
はWgetのインストールに必要な情報が記載されているファイルのようですが、DSLがとても洗練されていて読みやすいです。test do ... end
ブロック内に書かれているコマンドによって、パッケージのインストールが成功しているかどうかをテストしているようです。wgetの場合は system bin/"wget", "-O", "/dev/null", "https://google.com"
。いつか継承元のFormulaのコードを読んでみたいです。
資料: https://speakerdeck.com/tagomoris/namespace-what-and-why
Namespaceという開発中の機能がテーマのセッションでした。Namespaceとは、中で行われた変更を空間の中に隠すことができ、その空間の中で定義されたものを外から呼び出せるという機能を持っている必要があり、それらを実現することで「名前の衝突」「定義の衝突」「バージョンの衝突」を解決することができるとのことです。
とくに、「Appが使っているライブラリXはライブラリYのバージョン1を使っていて、同じAppの中でライブラリYのバージョン2を使えない」というありがちな辛い状態が、Namespaceとbundlerがうまく連携できれば解決できるかも、ということがとても魅力的でした。今後の展開が楽しみです。
今回のRubyKaigiでは、Namespace, What and WhyでのNamespacesについての提案や、Ruby Committers and the WorldでのRBSを別ファイルに書くのは嫌なのでコメントにするのはどう?という提案など、今後のRubyへの期待が高まるお話をいくつか聞けました。まつもとさんのキーノートセッションでもRuby4.0について触れる場面があり、今後のRubyが楽しみになりました。
RubyKaigi全体を通してRubyコミッターやRubyを使って開発をしているプログラマーの皆さんの熱意を感じ取ることが出来たのもよかったです。
エモリハウスは
女性がRubyKaigiに参加しやすくなるといいなあ、 そんな家主の思いからはじまったエモリハウス。 女性のRubyKaigi参加者たちといっしょに泊まって、わいわいしよう!という企画です。
といったゲストハウスを貸し切って共同生活をするという企画で、私は今回はじめて参加させていただきました。 https://emori.house/
私は2017年のRubyKaigiにも参加したことがあるのですが(RubyKaigi 2017に参加しました)、このときは知り合いも、知らない人に話しかける度胸も無かったので、懇親会にも参加せず誰とも話さずセッションだけ見て帰るという参加の仕方をしていました。(もちろんそれも参加の仕方のひとつではありますが、当時の私はとても寂しい気持ちになった)
今回はエモリハウスとヤダハウスの方と事前にオンラインで顔合わせができていたこともあって割とすぐに仲良くなれて、エモリハウス内の部屋飲みでいろんな話をしたり、モーニングやランチを一緒に食べにいったり、観光に行ったりととても楽しい時間を過ごすことができました。エモリハウスと言えばお酒のイメージが強いようですが、ほとんどお酒を飲まない私でも楽しめる場所でした。また、懇親会やセッションの合間でも知り合いがいるということがとても心強く、沖縄にいた間が本当に充実した時間になりました。
あと、エモリハウスの近くの公園に野良猫がたくさんいて、日々の癒やしでした。
https://tokyodev.doorkeeper.jp/events/172303
Day0(RubyKaigiの前日)は女性とノンバイナリーのRubyistのための食事会に参加しました。RubyKaigiという大きなイベントに参加する前に知り合いができるのはとても心強かったです。
https://ti.to/rubykaigi/2024-party
Day1はOfficial Partyに参加しました。海の見える広い会場でのバーベキューで、RubyKaigiの規模の大きさを改めて感じました。
RubyKaigiの参加者は日本国内だけでなく海外からもたくさんいらっしゃっていて、英語話者の方に対しては(肉や野菜を焼きながら)「What would you like to eat?」と聞くくらいしか出来なかったので、もっと英語を話せるようになりたいと思いました。とくに考えたことを英語で口に出すことが難しいので、英語で話す練習をしていきたいです。
フィヨルドブートキャンプで勉強中という方とも何人かいらっしゃっていて、皆さんのモチベーションの高さに刺激を受けて私も頑張ろうと思えました。
https://andpad.connpass.com/event/315564/
Day2は参加者が一緒にコードを書きながら懇親会をするコード懇親会に参加しました。rspec-openapiというgemの出力を一部改善したいという課題に取り組むチームになり、その場にいた8人でモブプロをしました。
まずテストのexpectedを書き換えてからコードを書き換えるTDDのような形で開発を進めていたのですが、rspec-openapiのテストコードの特殊な構造に苦戦します。特殊な構造(恐らくテストコードの内部で別のプロセスを起動していた)によってbinding.irbやputsメソッドで中身をのぞくことができず、どこを書き換えれば良いかがわからない状態になっていました。苦しい場面もありましたが、最終的にはその場にいた8人のプログラマーの集合知でテストの構造を把握してどこを書き換えれば良いかを見つけることができました。
全員がはじめてお会いした人たちで最初は会話もぎこちない雰囲気だったのですが、コードを書き始めるとスムーズにやり取りが進み、「これがコード懇親会の力か!」となりました。モブプロによって他の熟練のプログラマーがどのようにコードを書いているか、どういう思考回路で怪しい箇所を見つけ出しているのかをみ見て学ぶことができ、とても有意義な時間を過ごすことができました。わたしもデバッグのやり方について提案をしたり、怪しい箇所を見つけたり、dateとdataのtypoを見つけたりとモブプロに積極的に参加できたので良かったです。
https://connpass.com/event/313947/
Day3は国際のれん街の貸し切りという大きな規模で行われたAfter Partyに参加しました。沖縄のお酒や料理を楽しむことができ、RubyKaigiの開催期間中に知り合った人たちと最後にしっかり話せて良かったです。
このように、RubyKaigi 2024ではとても楽しい時間を過ごすことができました。楽しかっただけで終わらすのでは無く、今回受けた刺激を今後の仕事や学習のモチベーションにして頑張っていきたいです。Rubyコミュニティのみなさん、ありがとうございました!
【スタッフ募集中】
弊社ではAWSを活用したソリューションの企画・設計・構築・運用や、Ruby on Rails・JavaScriptフレームワークなどを使用したアプリケーション開発を行うスタッフを募集しています。採用情報の詳細
弊社での勤務に関心をお持ちの方は、知り合いの弊社社員・関係者を通じてご連絡ください。
![]() |
2023年5月11日〜13日に松本市で開催されたRubyKaigi 2023に参加 |
![]() |
ファーエンドテクノロジーではオライリー本を全冊所蔵しています。 |
![]() |
S3のキャッシュ化、Graviton2対応、Pipelineの最適化を進めているところです。 |
![]() |
JSON以外にもXMLやCSVの処理もできます。解析に強い言語なので、様々な形式のデータを連携させた活用に向いてます。 |
![]() |
賃貸アパートでも設置可能なスマートロックを見つけました。 |
![]() |
社員研修に伴うサポート体制変更・休業のお知らせ(5/20〜23) 社員研修に伴い、5月20日〜23日はサポート体制の変更および休業とさせていただきます。 |
![]() |
オープンソースカンファレンス2025 Nagoyaに弊社代表の前田が登壇(ブース出展あり) オープンソースカンファレンス(OSC)2025 Nagoyaに弊社代表の前田が登壇。『Redmineの意外と知らない便利な機能(Redmine 6.0 対応版)』をテーマに発表します。 |
![]() |
エンタープライズプラン向け「優先サポート」を開始 My Redmineでは、エンタープライズプランをご契約のお客様向けにサポート対応を優先的に行う「優先サポート(プライオリティサポート)」を開始いたしました。 |
![]() |
プロジェクト管理ツール「RedMica」バージョン 3.1.0をリリース Redmine互換のオープンソースソフトウェア ファーエンドテクノロジー株式会社は、2024年11月19日(日本時間)、Redmine互換のプロジェクト管理ソフトウェア「RedMica 3.1.0」をリリースしました。 |
![]() |
Redmineの最新情報をメールでお知らせする「Redmine News」配信中 新バージョンやセキュリティ修正のリリース情報、そのほか最新情報を迅速にお届け |