Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby と Rails の小ネタ集

Ruby と Rails の小ネタ集

Roppongi.rb #19( https://roppongirb.connpass.com/event/319768/ )でLTさせて頂いた内容のスライド

DaisukeShinoku

June 13, 2024
Tweet

More Decks by DaisukeShinoku

Other Decks in Programming

Transcript

  1. Ruby と Rails の小ネタ集 2年振りの Ruby on Rails 開発でのちょっと面白い発見を紹介 Roppongi.rb

    #19 @ 株式会社メドレー様 新奥大介(SmartHR プロダクトエンジニア) 2024/06/13
  2. 自己紹介 新奥大介 / SmartHR プロダクトエンジニア 異業種からエンジニアを目指すにあたって Ruby を半年学習 受託開発企業入社後に Ruby

    での開発を半年経験 その後は 2 年間 PHP での開発が続く 現職に入社して Ruby と再会して約 1 年が経過 つまり! Ruby 歴が約 2 年の初心者が紹介する小ネタ集です 皆様ご存知の知識ばかりでも暖かく見守ってくれると嬉しいです!
  3. printf で小数点を丸めた時の挙動が予想外だった話 円周率を渡した時の挙動 pi = 3.14159 printf("%.2f\n", pi) # 出力:

    3.14 このコードを書いたときどうなると思いますか? printf("%.2f\n", 0.125) # => ???
  4. 予想していた挙動(四捨五入) 0.05.step(1, 0.1){ p [_1.round(3), format("%.1f", _1)]} [0.05, "0.1"] [0.15,

    "0.2"] [0.25, "0.3"] [0.35, "0.4"] [0.45, "0.5"] [0.55, "0.6"] [0.65, "0.7"] [0.75, "0.8"] [0.85, "0.9"] [0.95, "1.0"]
  5. 実際の挙動 0.05.step(1, 0.1){ p [_1.round(3), format("%.1f", _1)]} [0.05, "0.1"] #

    <= ここ以外は偶数丸め(銀行丸め)のルールに則っていそう [0.15, "0.2"] [0.25, "0.2"] [0.35, "0.4"] [0.45, "0.4"] [0.55, "0.6"] [0.65, "0.6"] [0.75, "0.8"] [0.85, "0.8"] [0.95, "1.0"]
  6. 「非同期処理だけ何かをしたい」という条件分岐が簡単だった話 Sidekiq.server? で Sidekiq 中の処理なのかどうかを判定可能 実装 def results Sidekiq.server? ?

    fetch_results : cached_fetch_results end def cached_fetch_results Rails.cache.fetch("results/#{id}", expires_in: 1800) { fetch_results } end def fetch_results # 外部システムから結果を取得する処理 end
  7. Sidekiq「新奥、落ち着いて、まずは10秒数えてみて」 [1] pry(main) > Sidekiq.❨╯°□°❩╯︵┻━┻ Take a deep breath and

    count to ten... 新奥「Sidekiq・・・ありがとう。君のおかげで冷静になれたよ」
  8. irb(main):001> IRB.send :easter_egg, :logo -+smJYYN?mm- HB"BBYT TQg NggT 9Q+g Nm,T

    8g NJW YS+ N2NJ"Sg N? BQg #( gT Nggggk J 5j NJ NJ NNge #Q #JJ NgT N( @j bj mT J Bj @/d NJ ( #q #(( NgT #J 5d #(t mT $d #q @(@J NJB; @( 5d ? HHH H HQmgggggggmN qD 5d #uN 2QdH E O 5 5JSd Nd NJH @d j Fd @J4d s NQH #d ( #( #o6d Nd NgH #d #d 4 B&Od v NgT #d F #( 9JGd NH NgUd F #d #GJQ d NP $ #J #U+#Q N Q # j j /W BQ+ BQ d NJ NJ - NjJH HBIjTQggPJQgW N W k #J #J b HYWgggN j s Nag d NN b #d #J 5- D s Ngg N d Nd F Fd BKH2 #+ s NNgg J Q J ] F H @ J N y K(d P I F4 E N? #d y #Q NJ E j F W Nd q m Bg NxW N(H- F d b @ m Hd gW vKJ NJ d K d s Bg aT FDd b # d N m BQ mV N> e5 Nd #d NggggggQWH HHHH NJ - m7 NW H N HSVO1z=?11- NgTH bB kH WBHWWHBHWmQgg&gggggNNN NNggggggNN