blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2023.05.30 イベントレポート

RubyKaigi 2023 に現地参加し登壇を聞いてきました!

by yuto shida, ryo natori, riku yasuda, aoi yamada, keitaro watanabe

#rubykaigi2023

会場

初めに

こんにちは!24卒内定者のao、 shida、 natori、yasuda、watanabeです。

RubyKaigi 2023 にてDeNAはプラチナスポンサーを務めており、企業ブースを出展しておりました。

今回、私たち5人もオフラインで参加し、登壇イベントやスタンプラリーなど体験してきました!

今回はその中でも、登壇イベントで聞いてきた内容を記事にしていこうと思います。

※企業ブースやスタンプラリー体験などについては以下の記事にまとめていますので、ぜひご参照ください!

RubyKaigi 2023 に現地参加!スポンサーブースから松本の魅力までを体験

内容と感想

とても興味深い素晴らしい登壇がたくさんありましたが、全部の内容を記事にしてしまうと膨大な量になってしまうため、特に印象に残った登壇についてまとめていきます!

Hall

RuboCop’s baddest cop

まず初めに印象に残ったのが、ゲナディ・サモコヴァロフ(@gsamokovarov)さんの「 RuboCop’s baddest cop 」という登壇についてです。

この方は、ブルガリアのソフィア出身のRuby開発者さんで、Dext(dext.com)で働いてらっしゃる方です。

Dext (dext.com)社では、Rubyでのメソッド呼び出しの際、括弧を省略するルールを適用しているそうです。

こういった括弧を省略するコーディングスタイルを統一させるために、RuboCopを設定する際に見つけたRubyの癖などをお話していました。

ちなみに、、 Rubyはメソッド呼び出しの際、括弧を省略しても構わないルールになっています。

denaMethod("dena")
denaMethod "dena"

RuboCopとは、.rubocop.ymlという設定ファイルにコーディングスタイルに合わせたルールを記入し、設定できるものです。

これで構文が比較的自由なRubyにも、会社やチームでの開発ルールを適用し制限をかけることが可能です。

この登壇を聞いていたaoは、翻訳なし・英語のみでの技術のお話をその場で聞くことは初だったため、非常に興味深かったです。

また、登壇をお聞きしRubyのみならず英語への勉強意欲も増しました!

photo3

Ruby.wasmを使用してChrome拡張機能を開発する

2つ目は、北海道情報大学3年生の沢井佑馬(@3yUma₋rb)さんの「 Ruby.wasmを使用してChrome拡張機能を開発する 」という登壇についてです。

Ruby3.2はWebAssembly(以下WASM)をサポートしているため、ruby.wasmというライブラリを使うことでブラウザ上でRubyを実行できるそうです。

これによりChrome拡張機能用のRubyフレームワークを構築するというアイデアを思いついたそうで、その仕組みを説明されていました。

フレームワークを使わずにruby.wasmを使って書いたコードに対して、沢井さんは「正直、JavaScriptをRubyでラップしてるだけでごちゃごちゃしてる」と感じたそうです。

その解決策として、JavaScriptを利用している箇所をフレームワーク化することで簡潔にすることができると考え、フレームワークの開発に至ったそうです。

実際に開発されたフレームワークはこちら「 unloosen 」です!

また、unloosenを使うことで得られるメリットとして下記の点を挙げていらっしゃいました。

  1. 管理するコード,ファイルが減る
  2. ローカルファイルへのアクセスが楽になる
  3. Live reload
  4. コードがシンプルになる
  5. ブラウザのみで動くようになる

他にもChrome拡張のフレームワークはありますが、やはりunloosenのメリットとしてはRubyで書けることです。ここは会場のRubyistに一番刺さる利点だったように感じました。

「フィードバックをお待ちしています!」とのことでしたので、興味を持った方はぜひGitHubリポジトリを覗いていってください。

私達はChrome拡張の開発はほぼ着手したことがなく、さらにRubyフレームワーク構築も行ったことがなかったため、すべてが新鮮な内容でとても勉強になりました。

また、沢井佑馬さんは去年RubyKaigi2022の登壇を見て感動し、自身も登壇したいと考え、結果今回のRubyKaigi2023には大学3年という若さで登壇されていました。

もしかしたら聞いている皆さんもネタを持っているかも、勇気を出して挑戦してみるのもオススメ!」 とのことだったので、私たちも今後登壇など積極的に参加し界隈を盛り上げていきたいと思いました!

UTF-8 is coming to mruby/c

3つ目は、ESM株式会社のソフトウェアエンジニアの今泉麻里(@ima1zumi)さんによる「 UTF-8 is coming to mruby/c 」という登壇についてです。

mruby/cはもともとASCII(バイナリ)のみ使用可能であり、UTF-8をサポートしていませんでした。そのような状況からmruby/cでUTF-8サポートを利用可能にする実装へ尽力されたそうで、その実装について説明されていました。

そもそものmruby/cについてかみ砕いて説明すると、「 組み込み機器やアプリ組み込み向けに最適化されたmrubyという軽量Ruby言語を、さらにプログラム実行時に必要なメモリ消費量を少なくした軽量タイプ 」になります。 実用例としては工業用ミシンにも採用例があるそうです。

従来のmruby/cでは、Character Encodingをサポートしていない為、文字列に対し.sizeメソッドを使用した際にbyte列として解釈してしまうといった問題があったそうです。

#byte列と解釈されるため11が出力される
"💎❤️🏯".size # → 11
#本当なら文字数を表示するため3を出力してほしい
"💎❤️🏯".size # → 3

例に上がっていたsizeメソッド以外にもmrubyとmruby/cで出力結果が変わってしまうメソッド例の一部として、insert, inspect, ord等、他にも色々あると仰っていました。

この問題への対応を実際に今泉さんが尽力されているそうで、以下のプルリクエストにて現在も実装中とのことです。

https://github.com/mrubyc/mrubyc/pull/191

こちらのプルリクエストには「Reviews and comments are welcome」と記載されていますので、興味を持った方はぜひ見ていってください。

文字コードについてaoもnatoriも詳細な理解まではできておらず、情報技術者試験レベルの知識しかなかったためなかなか難しい部分もありましたが、非常に勉強になる内容でした。

また、お話してくださった今泉さんは文字コードがとにかく好きだそうで、私たちも全身全霊で好きといえる技術領域をもっと増やしていきたいと思いました!

Ruby 3.2 による ReDoS の排除

4つ目が、Flatt Security Inc.のCTOをしていらっしゃる、米内たかし(@lmt_swallow)さんによる「 Ruby3.2によるReDoSの排除 」という登壇についてです。

RubyにはRegular expression Denial of Service(以下ReDoS)のリスクが残されていましたが、Ruby3.2からはリスクを軽減するために正規表現エンジンの内部に大幅な更新が行われ、脆弱性がかなり改善されました。

今回のお話では、ReDoSに対処する際の言語レベルの変更の有効性や、古いRubyの脆弱性と新しいRubyにおいて脆弱性を大規模に排除する仕組みなど、詳細に説明されていました。

まず、正規表現のデモとして正規表現を含むRubyメソッドを見せていただきました。

このような正規表現を含むメソッドをテストしてみると、ときどき処理が重たいことがあるそうです。 なぜ重たいことがあるかというと、RubyコアにあるReDoS脆弱性が原因になっているとのことでした。

そもそもReDoSとは、「 正規表現の脆弱性をついた、評価に時間がかかる入力によるDoS攻撃 」のことです。

評価に時間のかかる正規表現の例としては下記のものを挙げており、正規表現エンジンによっては非常に時間がかかるそうです。

/^(a|a)*$/

また、米内さんはReDoSの対策としてできることは大きく分けて2つあると仰っていました。

1つ目はアプリケーションとしての対応です。 具体的には、アプリケーションの正規表現自体のネスト回数を下げることにより処理時間を短縮する例があるとのことです。

2つ目はRubyエコシステムとしての対応です。 具体的にはメモ化やタイムアウト処理等をRuby本体へ加えることで、DoS攻撃の対策を行う話を上げていただきました。 また、Ruby3.2では上記2つ目の対策を取り込んでいるため、ぜひバージョンアップして利用してみて欲しい!とも仰られていました。

RubyユーザーがどのようにしたらReDoS脆弱性を回避できるのか、推奨コーディングの方法も詳しくお話頂き、非常に勉強になりました。

さらに、お話を聞いていたaoはちょうど先日情報処理安全確保支援士(旧セキュリティスペシャリスト)試験を受検してきていたので、大変タイムリーでとても参考になりました!

まとめ

ここまでの大規模な言語カンファレンスに参加することは初めてで、とても貴重な経験をすることができました。

今後はこういったプログラミング言語やカンファレンスを積極的に盛り上げ貢献していけるよう尽力して行きたいと思います。

Rubyコミュニティ含め、たくさんの技術領域を盛り上げていきたいDeNAでは、一緒に盛り上げてくれるエンジニアを募集しています。

技術を向上させ盛り上げていきたいエンジニアさん達のご応募、お待ちしております。

また、DeNAのTwitterでも定期的に情報発信しておりますので、気に入った方はぜひ フォロー してみてください!

以上、RubyKaigi 2023 に参加してきた感想まとめでした!

集合写真

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。