見出し画像

新卒2年目のRubyKaigi2022参加レポ

ご挨拶

はじめまして、@skidoと申します!
某グルメサイトの会社に新卒入社して、今年で2年目のwebエンジニアです。
個人のnoteでは今回が初投稿になります😊

初めてのオフラインカンファレンス

今回のRubyKaigi2022は三重県津市でオフライン開催でした。
コロナ渦入社だった私にとって、技術イベントにオフライン参加したのは社会人になって初めてです。
もちろんオンライン開催ゆえのメリットも多いですが、セッション中の盛り上がりや会場の雰囲気を生で感じたり、社内外のRubyエンジニアの方と対面で交流できたりと改めてオフライン開催の良さをイベントの随所で実感しました。

セッション紹介

The Better RuboCop World to enjoy Ruby

内容
@nay3さんのRuboCopとの付き合い方についての話です。
RuboCopは設定したコーディングルールを守れていないコードを未然に弾くことができる、便利な静的解析ツールです。RuboCopがレビューの負担軽減に繋がる一方で、設定したルールが状況に合わないことがあります。
そして、その妥当性を判断できないジュニアエンジニアの場合は、ルールを厳守しすぎる余り、かえって読みにくいコードを書いてしまうことになります。

解決策としてはルールを2つのレベルに分ける提案をされていました。
・強制ルール:強制しても、ほぼ100%の状況で問題ないようなルール
・参考ルール:なるべく多くの改善ポイントに気付けるような理想的なルール、参考なので強制はしない

感想
RuboCopの開発者に対しての感謝とリスペクトから始まり、RuboCopを運用した課題とその改善提案を、様々な具体例も交えながら丁寧に説明されていました。またスライドの画像は全てMidjourneyで作成したそうで、流行にも乗った楽しい発表でした。


Types teaches success, what will we do?

内容
@fugakkbnさんのRubyの型をもっと使ってもらうために、gem_rbs_collectionにコントリビュートしましょう!という話です。
最初にRubyを採用したプロジェクトでの型導入が進まない1つの要因として、型をついたgemが少ないことを挙げました。
gem_rbs_collectionというgemの型定義をまとめたリポジトリは存在しますが、rubygemsの登録されたgemが17万弱に対し、gem_rbs_collectionに型定義されたgemはわずか44個しかありません。

コントリビュートのやり方としては、以下を紹介しています。
・既存の型定義の修正・追加
・型が未定義のgemに対しての新規追加

前者はまず**steep check** コマンドを実行し、 型定義の未対応箇所もしくはgemのアップデートに伴い修正が必要な箇所を発見します。コマンド実行後にエラーを吐いた箇所の実装を確認して、型を手動で修正・追加していく流れになります。

後者は新規で型を追加して行きますが、手動で記述するだけでなく、generatorを使用して自動で型追加を行う手法も説明されていました。また、全てのAPIに型を追加しないといけないわけではなく、主要なAPIと自身のプロジェクトで使用している部分のみ対応すればよいとのことでした。(公式のCONTRIBUTING.mdにも記載あり)

感想
Rubyの型に関しての発表は多かったですが、コントリビュートへのハードルを下げてくれたという点で、こちらの発表が印象に残りました。generatorを使用した型定義の追加、テスト、PRを作成する流れを実例に基づき説明されていて、非常に分かりやすかったです。


Create my own search engine.

内容
@m_sekiさんのRubyでポケモンカードのデッキ検索エンジンを作った話です。
https://hamana.herokuapp.com/
この検索システムで可能なことは以下になります。
・ツイートされたデッキ情報をデッキコード、カード名、カードコードなどから検索できる
・新着デッキ情報を表示できる
・あるデッキと類似度が高いデッキも探すことも可能

私もポケモンカード自体はそこまで詳しくないのですが、作成したデッキを公式に登録するとデッキコードが発行され、デッキ内の制限カードのチェックやSNSでのシェアが可能みたいです。なので、今回はtwitterをクロールしてデッキ情報を収集していました。

類似度に関しては、自然言語処理で文章の類似度をとるやり方を参考に、デッキをカードIDと枚数のベクトル表現に変換し、正規化を行った上でコサイン類似度を計算しています。
類似度をとる際の工夫点としては、
・汎用的な効果を持つカードは特徴量を少なくして、そのデッキ固有の特徴を示すカードを目立たせる
・内容は同じでも、柄違いでIDが異なるカードは正規化してまとめる
・エネルギーカードという枚数制限がないカードに関しては、一定枚数までしか特徴量の計算に加えない
などを説明されていました。

感想
Rubyというよりほぼ自然言語処理とポケモンカードの話でしたが、学生の頃、自然言語処理の研究をしていたこともあり、tf-idfなど懐かしい単語が出てきて個人的に興味深かったです。また、登壇者のポケカ愛が滲み出ていて、楽しそうに話をされていたのがとても印象に残っています。私も趣味全開の個人開発をやってみたい気持ちになりました。


最後に

参加前はRuby歴がまだまだ浅い私が楽しめるのか不安でしたが、わくわくするRubyの話を沢山聞いて、社内外のRubyエンジニアの方と色々お話ができて、刺激をもらえた3日間でした。
来年も必ずオフラインで参加しようと思います!
ここまで読んでいただきありがとうございましたmm

この記事が気に入ったらサポートをしてみませんか?