こんにちは!食べログの飲食店システム開発部サービス開発チーム所属の大橋です。
2022年からWEBエンジニアとして食べログで働いており、Rubyの経験年数が1年になりました!
先月、私は松本市で開催されたRubyKaigi 2023に参加してきました!
今回の記事では
「RubyKaigi 2023に参加してみてどうだったのか」
「食べログでは技術的なチャレンジがしやすい文化を作るためにどんな取り組みをしているのか」
などを中心にお話をしていこうと思います。
食べログで働いているエンジニアは毎年開催されるRubyKaigiに参加できる!
毎年開催されるRubyKaigiは、食べログでエンジニアとして働いていれば誰でも業務として参加することができます。もちろん交通費やホテル代・チケット代などの必要経費は会社が負担してくれます!
さらに食べログでは企業ブースも出展しており、ノベルティとして2022年はオリジナルの手拭いやマスクケース、2023年では企業ブースは出していないのですが、オリジナルの靴下を配布していました。
2022年RubyKaigiでの食べログブースの様子
2023年RubyKaigiでの協賛品ブース
特に靴下は最終日には在庫が空になるくらい人気が高かったです!
他社の展示で特に面白かったもの
個人的に面白かったのはクックパッドさんのスマート冷蔵庫「マートステーション」です。
QRコードをかざすとドアが開きます。
中にはリンゴジュースが入っていました!別の冷蔵庫ではクラフトビールが入っていました!
RubyKaigiではどんなセッションが行われているか
RubyKaigiではRubyを開発したまつもとゆきひろ氏の講演や海外の有名なエンジニアがRubyの新機能や性能がどのくらい向上したかなどセッションしてくれます!
業務をしている中でRubyを使う機会はたくさんあると思うのですが、Rubyでどんな機能が増えたのか、性能が良くなったかなどを気にする機会がない方も多いのではないのでしょうか?
RubyKaigiでは先程お話ししたようにRubyの第一人者から直接お話しを聞くことができるので、いち早くRubyの機能をキャッチアップすることができます。
私自身も丁度社内の新規プロジェクトでRuby3を導入するとなった時に、RubyKaigiで先輩エンジニアよりもRuby3をキャッチアップしていたので、Ruby3ではこんな機能があってこういうメリットがあるから使ってみてはいかがでしょうと提案し、実際に使ってみようかとなって嬉しかったです。
参加した中で特に面白かったセッション
Power up your REPL life with types
どんなセッションだったのか
このセッションでは、タイトル通り「RBSを活用してirbをさらに進化させる」というテーマでお話ししていました!
Ruby3から導入されたirbのオートコンプリート機能により、コマンドの補完が行われるようになり、irbの使い勝手が向上しました。
しかしながら、このオートコンプリート機能は、メソッドチェーンやブロックパラメータの補完においてはまだ完璧ではありません。
そのため、途中で型変換を行ってしまったりすると、解析が上手くいかずに正しく補完できずありとあらゆるメソッド名が候補に出てしまうことがあります。これは正規表現で判断しているため、時々誤作動を起こすとのことでした。
そこで型の情報を使って補完機能を向上させるために、katakata_irbというgemを開発したらしいです!
katakata_irbを試してみた
まずは下の画像をご覧ください。
このように途中で型変換を行ってしまうと、補完がうまく機能しないことがあります・・・
こちらの画像では整数型の1000を格納した変数に対して文字列型に変換したところ補完されなくなってしまいました・・・
そこで、このセッションで紹介されたkatakata_irbというgemを入れることで、ある程度正しく型を推測して補完をしてくれるようになるため、補完の正確性が向上するのでよりirbでの作業がやりやすくなりました。
先程とは異なり整数型から文字列型に型変換された後も候補をサジェストしてくれています。
感想
実際にこのgemを触ってみてirbの補完機能の精度が向上したことを体感しました。
食べログでは開発時の挙動確認などでirbを使うことが多いので、このgemを導入することで開発体験が向上しそうだと思いました。
ReDoS with Ruby 3.2
どんなセッションだったのか
元々RubyではReDoSのリスクが残されていましたが、Ruby3.2からはリスクを軽減するために正規表現エンジンの内部に大幅な更新が行われたため、ReDoSの脆弱性が改善されたというセッションでした。
また、このセッションでは実際にGitLabで見つかったReDoS脆弱性を例に、どんな正規表現が危ないかなどをデモしてくれました。
ReDoSとは具体的にどんな脆弱性なのかを試してみた
まず、ReDoS攻撃とは、正規表現を利用してサーバーに大量の繰り返しやバックトラッキングを引き起こし、パフォーマンスを低下させる攻撃手法です。
この攻撃によって、最悪の場合、サーバーが停止してしまう可能性があります。
では、どんな正規表現がReDoS脆弱性を生んでしまうのでしょうか?
今回は正規表現を調査するために「recheck」「regex101」を使いました。
「recheck」は正規表現にReDosの脆弱性があるかをチェックするサイトで、regex101は正規表現のステップ数などの内部処理を可視化するサイトです。
検証のため、メールアドレスをチェックする正規表現を用意しました。
/^[a-zA-Z0-9_.+-]+@([a-zA-Z0-9][a-zA-Z0-9-]*[a-zA-Z0-9]*\.)+[a-zA-Z]{2,}$/
ではこちらの正規表現をrecheckでチェックしてみました
statusがvulnerable(脆弱)と判断されてしまいました・・
では実際にAttack Stringの文字列をregex101で実行してどのくらいステップ数がかかってしまうのか見てみましょう。
通常のメールアドレスだと20ステップ数くらいで処理時間も0.0ms以下だということがわかります。
メールアドレスを判断できていそうですね!
しかし、recheckで提示されたAttack Stringを入れてみるとどうなるでしょう?
途中で処理が止まってしまいました・・ステップ数を見てみると
なんと16万ステップ数もかかってしまいました!!
もし何も対策せずにこの文字列を入力されていたらサービスに大きな負荷がかかってしまいますね
感想
Ruby3.2からはRubyにて「正規表現を修正する」を目標にアルゴリズムを改良したり、組み込みタイムアウトを導入したりしているらしいのですが、 だからといってRuby利用者が何も対策しなくて良いのではなく、正規表現を使う場合はパフォーマンスを考慮する、リクエスト単位でのタイムアウトを設定するなどの対策をするべきだと思いました。
なぜRubyKaigiに参加しようと思ったのか
Rubyの理解を深めたい・今後の技術の動向を知りたかった
食べログではRuby on Railsを利用した開発がメインです。
さらに食べログでは既存のプロジェクトだけではなく、新規プロジェクトやサービスも多く立ち上がっており、私も最近技術選定でRubyのバージョンから決める機会があったので、ただ闇雲に新しいバージョンのRubyを入れるのではなく、どんな機能があったり、性能としての強みがあるのかを伝えられるようになりたいと思っていました。
そのためRubyKaigiではRubyコミッターが毎年新機能や強みについて解説してくれたり、今後のRubyの動向をセッションしてくれるので、ブログなどの2次情報ではなく信頼性の高い1次情報として情報収集することができるので、上記ニーズを満たしてくれそうだなと思い参加しました!
食べログでのアウトプットへの取り組み
ここまではRubyKaigiについて紹介しましたが、食べログでは積極的なアウトプットを推奨しています。
ではどんなアウトプットへの取り組みをしているかを紹介します!
社内勉強会で、新しい技術やノウハウを得たり、発表経験を積むことができる
食べログでは隔週でシステム本部全体での社内勉強会を実施しており、そこでは下記のような内容を発表してもらっています。
- 各部署やチームで推進しているプロジェクトや改善の取り組み
- 新機能やリリースしたサービスの紹介
- 最近使っていて紹介したい技術
- コーチングやマネジメントのナレッジ
- 社外勉強会の参加報告
・・・etc
食べログでの社内勉強会では、ただ一方的に聞いて終わりという勉強会ではなく「楽しむ」「みんなで作る」「褒める」「仕事につなげる」の4つを大事にしており、こちらを指標に発表テーマを決めたり、1人1人が真剣ながら楽しくワイワイ参加しています。 また、食べログでは社内でも外部登壇をする方も多く在籍しており、社内勉強会で発表することで発表経験を積むことができたりと発表者にとってもメリットが大きいです。
最近新しい社内の取り組みとしてTabelog Developer Dojoを行っているので、こちらの記事もご覧ください!
社外向けの技術ブログを執筆してチャレンジした技術や取り組みを社外にアウトプットできる
食べログでは「エンジニアがチャレンジをし成果をアウトプットする」という文化を作ることを目的として社内外へのブログを執筆・発信をしています。
私自身は食べログとしてブログを執筆したのは初めてでしたが、執筆している中で知識を整理しないといけないので、学んだ知識の定着がしやすいなと感じたのと、社内外問わずに誰かが読むかもしれないという良いプレッシャーがあるため、ただ書くだけではなくどういう人に読んで欲しいのか、この記事でどんなことを伝えたいのだろうなど他人からの評価を意識するきっかけにもなりました。
個人ブログだとこのような観点はなかなか持てないので、こういう視点を持てるのも会社でブログを執筆するメリットだと思いました。
おわりに
これまでの業務でRubyを使用してきましたが、RubyKaigiに参加してみて、これほどまでにRubyに真剣に向き合う機会がなかったと感じました。
また、食べログではこうしたカンファレンスで学んだ知識をアウトプットできる機会もたくさんあります。改めて、「エンジニアがチャレンジをし成果をアウトプットする」という食べログが大事にしているエンジニア文化を実感できた良い機会でした!
これからもインプットだけではなくアウトプットもたくさんしていき、私自身も成長しつつ、食べログのエンジニア文化に良い影響を与えていきたいなと思いました!
余談ですが、来年2024年のRubyKaigiの開催地は沖縄とのことでした!
最後まで読んでいただきありがとうございました!!
食べログではエンジニアを募集しています。
ご応募をお待ちしています!