hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

Ruby

DateとTimeの比較

たまたま、DateとTimeを意図せず比較している処理があったので調べてみた。 Date同士の比較であれば日付があっていれば 等しくなるので当たり前だけど Date.new(2023, 1, 1) == Date.new(2023, 1, 1) # true これが片方が Timeの場合 Date.new(2023, 1, 1) =…

rbenv で Ruby3.0.4のインストールで失敗する

新しいPCにrbenvでRubyのインストールを試みたのですが、エラーになってしまったのですが、 あまり他でみかけない解決方法で解決したのでブログに残しておこうかと思います。 エラーの内容 エラーの内容は以下の通りでopenssl の影響でエラーになってました…

RubyKaigi2023の動画が公開

RubyKaigiから早くも1ヶ月経ってしまった。 その間に クックパッドが今年3回目の人員削減。110名を対象 を発表していた。 gamebiz.jp 業界ではかなりの衝撃があり、以前の2回ではエンジニア、デザイナは対象になっていなかったが、 今回は対象になっている。…

RubyKaigi 2023 Day3 の感想

感想 Day3 最後日になってしまった。 今まで参加したRubyKaigiで一番良かったように思うし、 今回のRubyKaigiで知り合えた人が過去1だったように思う。 前日の続きのスタンプラリーの残りのブースには結局行かず、 聞きたいセッションと話したかった人を探し…

RubyKaigi 2023 Day2 の感想

感想 今日はDocker Tシャツを来て参加。 中の人ではないのですが、紛らわしかったのか.. ブースで中の人ではないですよね? と聞かれてしまい。。ややこしくてすみませんという感じだった。 スタンプラリーが始まったので、回っていたが残り6箇所は明日に行…

RubyKaigi 2023 Day1 の感想

感想 久しぶりに現地参加してみて、やっぱり実際に人とあって参加するのは楽しい。 一方的に私は知っているけど相手は私のことを知らないCommiterの方々が近くにいたりして私からは話しかけられなかったりするのだが、それはそれで楽しめる。 何よりいいのは…

RubyKaigi2022にリモートで参加してきた

久しぶりの更新です。 今年はRubyKaigiは現地での参加を予定していたのですが、8月のCOVID-19感染者数が結構跳ね上がってしまったのでリモートでの参加としてみました。 個人的な見どころとしては ブラウザでのRuby実行(WebAssembly) パフォーマンス改善 デ…

Ruby 3.0.0 preview1 の インストール

イントロ Ruby 3.0.0 preview1がリリースされました。 www.ruby-lang.org RBS、Ractorなど新しい機能が試してみたいところですね。 手順 ruby-build の アップグレード まずruby-buildのバージョンアップをしましょう。 $ brew upgrade ruby-build インスト…

RSpec初心者向け勉強会の動画がとても良かった

イントロ RSpecの初心者向け勉強会が紹介されていました。 blog.jnito.com 勉強会の内容を動画で公開してくれています。 最近RSpecをあまり書いておらずトレンドも追えてなかったのでとても為になる内容でした。 気になった内容 テストの書くべきところ 動画…

Rubyの継承元のクラスの別メソッドをsuperで呼び出す

イントロ Rubyの継承先で継承元のメソッドを単純に呼び出すにはsuperを使いますが、 継承元の別メソッドを呼び出したい場合にどうしていいのかわからなかったので調べてみました。 詳細 class A def test1(*args) puts "A#test1:args(#{args})" end def test…

embed_callbacksに機能追加した

概要 前回の記事でembed_callbacksというgemを紹介しました。 こちらの機能を追加したので紹介していきます。 追加した機能 メソッドがエラーになったときに処理を呼び出せる メソッドエラーになっても呼び出せる rescue これはその名の通りでrescueを設定す…

メソッドにcallbackを追加するgemをつくってみた

概要 以前からgemを作ってみたいと思いつつ作れてなかったので作成してみました。 methodにcallbackを追加するembed_callbacksというgemを作成しました。 探すと似たようなgemが出てくるので車輪の再発明的なものになりますが作成してみました. gemの機能 ま…

RailsのRubyバージョンを2.7.0から2.7.1に上げる

いつものようにRailsのRubyバージョンを上げていこうかと思います。 まずはruby-buildの最新化します。 $ brew upgrade ruby-build rubyをrbenvで管理しているのでrbenvで2.7.1をビルドします。 $ rbenv install 2.7.1 Rails root の.ruby-version を 2.7.1 …

「プロを目指す人のためのRuby入門」を読んでみて

前置き 「プロを目指す人のためのRuby入門」のレビューを書いてなかったので記載しておきます。 先日行ってきたRubyKaigiの中でも話題になっていた本ですね。 第2回Ruby選抜総選挙 結果発表第1位 パーフェクトRuby 161票第2位 プロを目指す人のためのRuby入…

RubyKaigi 2019 の 動画が一部公開されてました

早くもRubyKaigi 2019の動画のKeynotesが公開されていました。 迅速な対応とてもありがたいです。 www.youtube.com www.youtube.com www.youtube.com スライドをまとめているページにもリンクを作っておきます。

RubyKaigi 2019 の スライドまとめてみた

明日から令和ですね。 ブログ更新できていなかったので先日参加したRubyKaigi 2019のスライドのリンクをまとめてみました。 コードを書く意欲がそそられるものが多く実際に参加できてとても光栄でした。 久々に福岡にいったのですが、随分と整備されていて移…

「ゼロからわかる Ruby 超入門」を読んでみて、自分の勉強方法を振り返る

新年あけましておめでとうございます。 2019年ももう4日です。 年始から昨年読んだ本を見直していたのと、 積読本の整理に勤しんでいました。 なかなか読む時間を作れてないなと実感するばかりです。 読まなさそうな本はどんどんmercariに出品しています。 …

Ruby2.6が早くもpreveiw2をリリース

今年のRubyKaigiは少し大きめのリリースがあったので残念ながら会社でお仕事してました。 Ruby 2.6.0-preview2 Released preview2がリリースされたということで早速インストールしてみました。 brewからruby-buildを入れているので以下のように設定して置き…

今更ながら「20年目のRubyの真実」を読んだ

2015年の話なんですね。 ちょっと長いですが楽しく読めました。 個人的に以下が面白かったです。 驚き最小の法則が逆にめんどくさい 次の言語来てほしいけど誰も載ってこない Rails、Rubygemsなどのコミュニティが果たす影響はすごく大きい プロモーションが…

Capybaraでselect時に同じ名称のvalueがありエラーになってしまう

RSpecでCapybaraのテストをしてたのですが、 select '東京都', from: '都道府県' と記載している箇所で Capybara::Ambiguous: Ambiguous match, found 2 elements matching visible option "東京都" within #<Capybara::Node::Element tag="select" path="/html/body/div/div/div[3]/div[2]/div/div/form/div[8]/select"> のようなエラーが出てしまいました。 FactoryBot</capybara::node::element>…

単一の文字列中から文字列を探すときは正規表現は使わない

文字列から文字列を探すときには正規表現をよく使ってしまいます。 Effective Rubyには =~ などのPerl風機能を避けようということが書かれています。 RuboCopでは逆に=~を使うように促されてしまってなんのこっちゃと思っていたのですが、 ruby-style-guide…

Rails4.2でlike句のサニタイズをする

2016年はじまってもう2月になってしまいました。 遅ればせながら、あけましておめでとうございます。 昨年から相当ハードなスケジュールでなかなかブログが書けてないですが、 今年はもう少し書く時間を確保したいところ。 頑張ります。。 今日のお題は SQL…

Rubyの+=はメソッドじゃない

演算周りの処理をまとめていた時にsendで呼び出せると 綺麗にリファクタリングできるかなとおもい調べていると 1.send(:'+',3) => 4 1.send(:'+=',3) NoMethodError: undefined method `+=' for 1:Fixnum NoMethodErrorになってしまったのですが、Google先生…

Rubyの便利メソッド Kernel#Array

Kernel#Arrayは引数で受け取ったものを配列に変換してくれるメソッドなのですが、 意外に便利です。 引数で受け取ったいろいろなオブジェクトを配列にして返却してくれます。 module function Kernel.#Array (Ruby 2.2.0) 試してみると Array(nil) #=> [] Ar…

正規表現のエスケープ

文字列の検索では正規表現をよく使いますが Railsでparamsから受け取ったワードをそのまま正規表現に突っ込んでたりして 痛い目に合いそうなコードを見つけたので、Regexp#escapeでエスケープしようよという話。 rp = Regexp.escape("$bc^") puts rp #=> \$b…

each_sliceを使って簡易カレンダーを作成

仕事が忙しくなってきました。少し大変です。 少しのアイドルがある環境で過ごしたいなと贅沢なことを考えながら、 周りからモチベーションを落とされるというよくわからない状況を奮起しながら程良く頑張っています。さて本題です。 最近カレンダーを出力し…

大小比較でどちらかの値と取りたい場合のコーディングパターン

Ruby(Rails)で大小比較してどちらかの値と取りたい場合にどうやって書くのか という素朴な疑問なのですが、 最近私の中でのトレンドがありまして、 比較しながら検証していきたいと思うのです。 前提条件 例えば、日付型の2変数が用意されていて、小さい値を…

ifの返却を変数に格納できるんだ

いや、新年早々結構忙しいです。 もうこんな時間です。早く寝ろよって感じですが、、 Rubyにちょっとは慣れてきた今日この頃です。コードレビューで面白いことを聞いたのでメモです。 実際に使えるかどうかは可読性と相談だとは思いますが、、 if-else文で戻…

ActiveRecord::Base#find_in_batchesを使ってみた

Railsでバッチ処理したい時に既存の ActiveRecord::Base#findを使いたいけど、処理件数が多くなりすぎるとメモリ食い過ぎて大変。 なんてことになりそうな場合は、今まではActiveRecord::Base#connectionで直接SQL文を実行してました。 ActiveRecord::Base#c…

Enumerable#detect

Arrayなどで配列を扱ってると、配列の中の一致する値を取り出したい場合があります。 下のコードを書いてコミットしたら、指摘されていいものを教えてもらったので、メモです。 array.each do |data| if data.to_i == 1 return data end end nil のように書…