インフラ・ストリーミングチームの @udzura です。(一ヶ月経ってしまいましたが)9月8日から9月10日まで、三重県でRubyKaigiがありました。
久しぶりのオンサイト会場での開催ということで、大いに盛り上がり、感想ブログなどもたくさん書かれています。
今回は、Rubyをメインで使っていない会社であるミラティブのエンジニアの立場から、RubyKaigiのトークは勉強になるという話をします。
ミラティブの技術スタックとコミュニティについて
ところで、以下に、ミラティブのEngineer's Handbookから、技術スタックについての紹介ページを引用します。
この通り、実はRubyはアプリケーション開発のメインは使っていないのです*1。
ですが、今回は、後述する通り私がRubyKaigiのCfPに通過したため、「社内外へ積極的に発信し、OSSコミュニティへ貢献する」という方針の一環で、旅費交通費を会社より支援してもらった上で参加することができました!
ミラティブではその他にもiOSDC、DroidKaigiなどへの参加支援や、協賛を実施しています。そういった内容を含め技術者にどのような支援をしているかは ミラティブエンジニア向け会社紹介資料/Engineer's Handbook - Speaker Deck も是非ご覧ください。
言語を超えて役に立ちそうなRubyKaigiのトーク
久しぶりにオンサイトで参加してみて改めて感じたのは、RubyKaigiはその性質上、単にRubyを使った話ではなく、言語の開発やチューニングと言ったよりレイヤが低い話も多く、その中では言語の壁を超えて開発や運用に役立つトピックもあるのでは? ということでした。
その観点から、個人的好みも含め気になったトークをいくつか紹介します。
Ruby meets WebAssembly
WebAssemblyは非常に盛り上がっている技術で、各言語でサポートがあるのですが、RubyKaigiでもRubyのWebAssemblyサポートを実装した本人によるキーノートがありました。
WebAssemblyはフロントエンド界隈はもちろん、ミラティブでも利用しているEnvoyでWASM-proxyという形で利用できたりもするので、是非キャッチアップしたい話題でした。
それに加え、CRubyのFiber、例外内部のsetjmpなど、WebAssemblyでサポートしない範囲の言語仕様・内部実装を切り出しつつ、いかに代替技術で実現するかを深ぼっていく過程が非常に興味深かったです。複雑な問題の切り分け方の見本として参考になりそうに思いました。
How fast really is Ruby 3.x?
Fluentdのメンテナであるfujimotosさんの発表です。Rubyを利用したミドルウェアであるFluentdを題材に、実際の計測結果をもとに、Ruby 3x3と呼ばれるRubyの高速化がいかに効果があったかを考察する内容でした。Fluentdのスループットにおいては、インプットであるログのパースなどCPUバインドの処理が非常に影響するため、Ruby自体の高速化はFluentdにとっても非常に嬉しいという結論でした。
私自身も社内向けのミドルウェア開発を行なっているため、パフォーマンスについて何をどのように計測し、どう考察するかについてのプロセスやデータの出し方はためになりました。
Packet analysis with mruby on Wireshark - dRuby as example
Ruby界隈でネットワークを深掘りしているcoe401_さんの発表です。内容としてはWiresharkの拡張をC言語+mrubyで作る、というお話しで、Wiresharkの拡張実装の一環として勉強になりそうな内容でした。
また、 Wireshark dissector について詳細な解説があったのも参考になりました。tcpdumpなどは業務でもしばしば利用しますが、memcachedやRedis、あるいは独自のプロトコルのパケットを解析しやすくなるようなWireshark dissectorを作ってみると、トラブルシュートに役立つかも? と思い、試してみたくなりました。
String Meets Encoding
Rubyによるreadline実装Relineのコントリビュータであり、文字コードに詳しいima1zumiさんの発表です。
内容はRubyの標準ライブラリであるCSVの読み込み処理について、どのように調査して高速化を実現したかを詳細に話すというものでした。具体的には、perfを利用してC関数のflamegraphを出力し、考察を行い、実際にコードを変更して再計測するというプロセスが丁寧に語られていました。
「推測するな計測せよ」とはよく言われますし、ミラティブのインフラポリシーの一つでもあります。ですが実行するにあたっては体当たりで色々な計測を試していく必要があります。そのような事例の一つとして、ima1zumiさんの発表は非常に参考になるものだと思いました。
おまけ: 筆者の発表の紹介
ちなみに先述した通り私自身も RubyKaigi で登壇したため、最後にこの場をお借りして簡単に内容を紹介します。
「Ruby x BPF in Action」と題して、Linux内部でトレースツールなどの中で使われている技術であるBPFについてお話ししました。具体的には、どのようにRuby経由で使うか、またBPFでRubyやRubygemのパフォーマンスを計測するにはどうすればいいかという内容でした。
基本的には自分の作ったものの紹介という感じではありますが、 サンプルコード を合わせて公開していますので、これを見ながらRuby版のコードをPythonに移植して勉強してみたりなど、いろいろな用途にお使いいただけるかと思います。
実はBPF自体は、ミラティブの中でも使う場面がないか検証しているところです。導入例をまたこのテックブログでご紹介できれば嬉しいです。
We are hiring!
ミラティブではOSSコミュニティが好きなエンジニア、活躍したいエンジニアを募集しています!
*1:Fluentdを始めいくつかのサーバではRubyが動いていたりします