Omotesando.rb#93に参加しました!

1月11日にOmotesando.rb #93に参加しました!
【オフライン開催】Omotesando.rb #93 - connpass
前回が初めてで今回は2回目の参加でした!
参加しての感想&自分で調べたことを記録しています。
間違い等ありましたらコメントいただけたら幸いです。

会場提供:wantedly様 Oshiumiさん

選考前と入社後のプロダクトを作っている。
システムの多くはRuby、サービスによってGo、Pythonも。
元々がRailsができている。
Wantedly Engineering Handbook - Wantedly Engineering Handbook
エンジニアを積極採用中とのことでした!

リサさん

「N+1問題が起こる原因について調べてみた」

smallmoneky.hatenablog.com


自分もよくN+1問題対策を忘れて引っかかっていた部分でした。
最近Railsから離れていてちょっと忘れかけている部分だったので、また調べて思い出さないとなと思いました。
Active StorageのN+1問題を解決する - 時々とおまわり
Active StorageのN+1問題を解決する #Ruby - Qiita

each文がN+1を引き起こす原因なのではなく、each文の中で、articleに紐づいている、userのデータを毎回取得しにいっていることが原因

自分の予想、過程、結果ととてもわかりやすいLTで、堂々と発表されていてかっこよかったです!
自分もわからないを放置しないようにして、自問自答しながら理解していきたいなと思いました。

神速さん

「LTの敷居を下げる」


「話すネタがない」のところの、

Ruby関連で新しく覚えた何かを話すくらいの気持ちで良い

というのが印象的でした!
「Omotesando.rbに初めて参加した人、Rubyを使い始めて3年未満の人は手をあげて〜」と声がかかると、
自分含めたけっこうな人数の人が手をあげていて、
「Omotesando.rbに初めて参加する人も多いし、RubyRailsの経験が浅い人も多いから、LTもそんな難しく考えなくて良い」とおっしゃっていました。
「みなさん全員Rubyをずっとやってきているベテランの方々ばかりなんだ」と勝手にイメージしていたので、ちょっとだけLTが身近に感じられるようになりました!

そして最後に教えてくださったメソッドは、私はmapしか知らなかったので、勉強になりました!
flat_mapEnumerable#collect_concat (Ruby 3.3 リファレンスマニュアル)
filter_mapEnumerable#filter_map (Ruby 3.3 リファレンスマニュアル)

まいむさん

Rubyメソッドの勉強 紆余曲折」


勉強してもすぐに忘れる…

めちゃくちゃ共感しました!
こないだ見たはずなのに「なんだっけ…?」みたいなのが頻発しているので、まいむさんのLTはとても参考になりました!

  1. Rubyメソッドの暗記カードを作成

  2. AtCoderの問題を解く

  3. 資格試験を受ける(RubySilver)

  4. ドキュメントを読み込む

私はどれもやったことがないのですが、
みなさんこうやって試行錯誤して努力されてスキルアップしているんだなと思ったので、
自分もなにか工夫してやってみようと思います!

Hamaさん

「ActiveModel::APIで使用されるゲッター・セッターメソッドについて」


現地では全然ついていけませんでした。
セッターメソッドの方が簡単だったとおっしゃっていたので、自分はセッターメソッドをHamaさんのLTを参考に追ってみることにしました。
------以下自分の勉強過程------

class User
  include ActiveModel::API
  attr_writer :name, :age
end

User.new(name: '太郎', age: 20)
#=> <User:~ @name='太郎', @age=20>

上記ではnewしたときに引数にメソッド名を:で渡すと値が該当するインスタンス変数に入る。
これがなぜ起きているのかを見に行く。
ActiveModel::API
initializeメソッドはActiveModel::APIの中にある。
rails/activemodel/lib/active_model/api.rb at 36c1591bcb5e0ee3084759c7f42a706fe5bb7ca7 · rails/rails
そのなかにassign_attributesメソッドがあるのでその中へ。
rails/activemodel/lib/active_model/attribute_assignment.rb at main · rails/rails
最終的には以下にたどりつく。
rails/activemodel/lib/active_model/attribute_assignment.rb at main · rails/rails

def _assign_attribute(k, v)
        setter = :"#{k}="
        public_send(setter, v)
  略
end

このknamev'太郎'が入る。
setter = :"name="となりこれがpublic_sendメソッドに送られる。
Object#public_send (Ruby 3.3 リファレンスマニュアル)

オブジェクトの public メソッド name を args を引数にして呼び出し、メソッドの実行結果を返します。
name:文字列かSymbol で指定するメソッド名です。

第一引数にシンボルを入れるとそのメソッド名を呼び出して第二引数をそのメソッドに渡すのでname=メソッドが実行され'太郎'が渡された。
結果newしたときに@name='太郎'となった。
------ここまで------

今回メソッドの中にどんどん潜って見にいくことをしたのは初めてだったので、コードを追っていく過程はとても勉強になりました!
ありがとうございました!
自分にはセッターメソッドの方ですらなかなか難しかったのでゲッターメソッドはいずれ追ってみたいと思います。

kishimaさん

「Now is the time to create your own (m)Ruby computer」


コンピュータを作る実際の手順を説明してくださっていて、とても難しかったですが興味深かったです!
今回はmrubyでアプリケーションを書いたとのことでしたが、mrubyがあまりわかっていなかったので調べました。
チェリー本に以下のようにありました。

Rubyには複数の処理系(複数のRuby実装)があります。公式かつ最もポピュラーな処理系は、C言語で実装されたMRIです。
ほかにも、Javaで実装されたJRubyや、GraalVM上で動作する高速なTruffleRuby、Restで実装されたArtichoke、RubyスクリプトJavaScriptコンパイルできるOpal、組み込みシステム向けのmrubyなど、さまざまな処理系があります。

mrubyの特徴としては、以下があるようです。

  • CPUやOSに依存せず、省リソース且つ省メモリでの環境で実行ができる

  • C言語との高い互換性

  • アプリへの組み込みが容易

  • 拡張しやすい
    「mrbgems」を使って自由に拡張できる

mruby 最新情報 | OSSサポートのOpenStandia™【NRI】


Rubyの処理系のことはあまり知らなかったので、今後勉強してみたいなと思いました!
自分オリジナルのコンピュータ、かっこいい…✨

SoraIchigoさん

「テストカバレッジを100%にするということ」


テストカバレッジを使いこなして信頼できるテストを作ろうというLTでした!
自分はまだ学習途中で、テストカバレッジ云々はあまり実感していないところではありますが、
前回のOmotesando.rbでもテストカバレッジのLTがあって、
実務においてテストカバレッジは注目すべき点なんだなと思いました。
そして、テストカバレッジを増やすことを目的にしてはダメで、信頼できるテストを増やすことが大事ということもわかりました。
以下の言葉が印象的でした。

  • 最初にテストを書いておけばテストを書く場所を作れるので自ずと後続の人もテストを書いてくれる

  • 実装と同じくらいテストコードも負債化する
    せっかく書いたテストが将来のテスト追加を阻まないように注意


チーム開発のプラクティスに入ったら、テストもたくさん書くらしいので、良い勉強になるな〜と楽しみにしておこうと思います。

まとめ

今回はFBC生(現役・卒業生)が多くて嬉しかったです!
今後も参加していきたいと思います!
ありがとうございました!