hotoolong's blog

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

RubyKaigi2025に参加中

今年も恒例 RubyKaigiに参加している。 今年は松山での開催で、人生で初めての愛媛県。 四国にはいったことはあったが愛媛は来たことがなかった。 町並みがちょっと昔の雰囲気が残っていいて、外国人も主要都市に比べると少ない印象。 懐かしさがすごく良くて松本のときも再度訪れたけど、松山も再度来てみたいなと思わせてくれる。 RubyKaigiが終わったらまた来よう。

Day1が終わって 去年もキーノートが良かったが今年もキーノートがすごくよくしみじみといい話だった。 見たいセッションが被っているたりするので、早くも動画を見たい欲が高まっている。

Offical Partyで知り合い人と話せて少しずつだけど知っている人が増えている感じも良い。 名刺交換代わりにNFCでxのURLを設定していたので、交換するのに使っているがブログの更新がすっかりおろそかになっているのでこちらで更新しておく。

RubyKaigi いいカンファレンスだなと改めて思い。 明日も楽しみなセッションがあるので少し期待しておきたい。

コロナに掛ってました

掲題の通りRubyKaigiから帰ってきて暫くすると熱が出てしまい、 発熱初日は動かすのが辛かったためお家で寝込んでいたのですが、 ほぼ何も食べられず、口にすると嘔吐しそうで気持ち悪くお腹が空いてきても体が受け付けてくれないというような状態を初めて経験していました。

熱は38.4度ほど コロナかもしれないなとは思ったのですが、 翌日はかなり改善して37度ほどに 病院に行き検査したところコロナになっていました。 最近の検査はすぐに分かるのはありがたいですね。 先生が喉を見て腫れてなかったようで、「コロナではなさそうですね。」と言った矢先に「あ、コロナでした。」と言われてしまいました。 早く治したいのと他人に移したくなったのでゾコーバを処方してもらい。 しばらくは外出しないように言われたので、お家で療養してました。

後遺症があるようなことは聞いてたのですが、 発熱後3日ほど経ち熱は引いて改善するかと思いきや咳が止まらないような状態に。 発熱後2週間が経過していますが、喘息持ちのような状態なのか咳が出だすとなかなか止まらないようになっています。 咳が止まらないと呼吸が辛くなってしまい、頭痛も出てくるので厄介ですね。

少し話をするようなケースで咳が出だしたりして少しコミュニケーションを取ったりするのに不自由を感じてます。 これも1ヶ月続いたような話も聞いているので、しばらくは付き合っていくしかないのかなと思ってます。 早く治るといいのですが。

RubyKaigi2024が開催される

飛行機が遅れて予定より遅めの沖縄入になったがなんとか到着ホテルに着いた。 日が変わったので今日開催される。 最近ブログ更新してなかったので、開催中になにか記事を書いておきたい。

初日の最後のセッションがどれも面白そうなので、どこに行くかまだ迷ってる明日決めよう。

DateとTimeの比較

たまたま、DateとTimeを意図せず比較している処理があったので調べてみた。 Date同士の比較であれば日付があっていれば 等しくなるので当たり前だけど

Date.new(2023, 1, 1) == Date.new(2023, 1, 1) # true

これが片方が Timeの場合

Date.new(2023, 1, 1) == Time.local(2023, 1, 1) # false

一致しないのだけど これはRailsirbで比較しているので zone が設定されていて

Time.local(2023, 1, 1) # 2023-01-01 00:00:00 +0900

になっている。 なので 同一であるためには Tokyoの場合は9時間ずれているので 9時で比較すると 同等とされる

Date.new(2023, 1, 1) == Time.local(2023, 1, 1, 9) # true

そして9時を境に大小比較されるので

Date.new(2023, 1, 1) < Time.local(2023, 1, 1, 10) # true
Date.new(2023, 1, 1) > Time.local(2023, 1, 1, 8) # true

日付だけを考えるとバグを埋め込んでしまう。 全然わかってなかったけどこういう挙動なんだという気づき。

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

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

エラーの内容

エラーの内容は以下の通りでopenssl の影響でエラーになってました。

installing bundled gem cache:       /Users/hotoolong/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/cache
The Ruby openssl extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Configure options used:
  --prefix=/Users/hotoolong/.rbenv/versions/3.0.4
  --enable-shared
  --with-readline-dir=/opt/homebrew/opt/readline
  --with-libyaml-dir=/opt/homebrew/opt/libyaml
  --with-gmp-dir=/opt/homebrew/opt/gmp
  --with-openssl-dir=/opt/homebrew/opt/openssl@1.1
  CC=clang
  LDFLAGS=-L/Users/hotoolong/.rbenv/versions/3.0.4/lib
  CPPFLAGS=-I/Users/hotoolong/.rbenv/versions/3.0.4/include

環境変数

RUBY_CONFIGURE_OPTS を設定しているのでうまくいきそうなのですが、エラーになってました。

$ echo $RUBY_CONFIGURE_OPTS
--with-openssl-dir=/opt/homebrew/opt/openssl@1.1

openssl のバージョン

$ openssl version
OpenSSL 1.1.1u  30 May 2023

ちなみにマシンの チップ は Apple M1 Max OS が mac OS Ventura 13.4 M2でも同様のエラーが出ることを確認してるので Mac 以外でも同様の問題になりそうです。

GitHubのrbenv に似たような情報

github.com

調べていくとGitHubに解決できる情報がありそうかなと思ったのですが、 LDFLAGS と CPPFLAGS を設定すると解決したような内容になっていました。 私のケースでは駄目でした。 で以下で対処して解決するのですが、その場合もこれらの環境変数は不要でした。

brewでのインストールされているopenssl

$ brew list | grep openssl
openssl@1.1
openssl@3

openssl@1.1 と openssl@3 両方がインストールされている状態でした。 今回のケースでは駄目かもしれないと思い 一旦 openssl@3 をアンインストールしてみました。

依存関係があるケースもあるので、 brew uninstall --ignore-dependencies openssl@3 でアンインストールします。 私の環境では 3.1.1 が インストールされていましたが、 3系の他のバージョンもインストールされている場合は brew uninstall --force openssl@3 ですべてアンインストールしておくことをお薦めします。

brew でインストールされている opensslが1.1系だけになっていることを確認します。

$ brew list | grep openssl
openssl@1.1

再度 install

この状態で 再度 rbenv install 3.0.4 をするとインストールが完了しました!

ということで インストールしたい openssl 以外のバージョンが影響するケースがあるようなのでアンインストールしてからインストールするとインストールできるということでした。

ちなみに

エラーになる状態で 3.0.4の次のバージョンの3.0.5 をインストールすると エラーは出ずに インストールできました。 手元で 3.1.4 も大丈だったので 3.0.5 以降で何かしらの変更があり今回のエラーが出ている模様です。

過去のバージョン(3.0.0, 3.0.1, 3.0.2, 3.0.3) を確認したところエラー内容は違っていますが、同様にインストールできなかったので、 opensslが 1.1 と 3 をインストールしてしまっていると3.0.4 以前のバージョンはダメそうでした。 (2系は確認してないです。) インストール失敗している場合は opensslの1.1系と3系が入っていないか確認しておくといいかもしれないです。

RubyKaigi2023の動画が公開

RubyKaigiから早くも1ヶ月経ってしまった。 その間に クックパッドが今年3回目の人員削減。110名を対象 を発表していた。

gamebiz.jp

業界ではかなりの衝撃があり、以前の2回ではエンジニア、デザイナは対象になっていなかったが、 今回は対象になっている。

ここ数年のIRの情報も芳しくなかったこともあり、主力事業の低迷、新規事業もまだそこまで伸びてない中 クックパッドほどの会社でもそうなっていくのかという駄目なのかもしれないとは思ったのものショックも大きいnewsになった。

ところで、昨年のRubyKaigiは動画の公開がかなり遅かったけど今年は1ヶ月で公開されていて、 これは見なければと唸っている。

www.youtube.com

現地にいると見たいセクションが重なってしまって参加してなかったセッションが賑わっているとそっちを見るべきだったかと思う場面もあったので こんなに早く見れるようにしてくれて大変感謝している。

RubyKaigi 2023 Day3 の感想

感想

Day3 最後日になってしまった。 今まで参加したRubyKaigiで一番良かったように思うし、 今回のRubyKaigiで知り合えた人が過去1だったように思う。

前日の続きのスタンプラリーの残りのブースには結局行かず、 聞きたいセッションと話したかった人を探してお話することをメインで過ごした一日だった。

お会いして話ができる場があるということはかなり貴重な機会であるし、 励みにもなるなと改めて実感できる。

ランチでは昔の職場の同僚と過ごす機会もあり、懐かしいメンツの活躍を感じられて同窓会のようでもあり本当にRubyKaigiすごいなとしみじみと感じた。 スタッフの皆さんや運営している方々には感謝しかない。 Rubyに支えられてRubyのおかげでなんとか生きている。

それをRubyKaigiでRubyの文化を感じてみんなで醸成させている。 すごいぜRuby

来年は沖縄ということなので来年も参加してみたいしもう少しRubyに貢献したいな感じた。

Kaigiが終わって After partyに参加して ぼっちになりそうなところを igaigaさんに助けてもらい。 いつもお世話になってばかりで本当にありがたかったです。

参加セッションのまとめ

あとは参加したセッションを簡単にまとめておく

Ruby Committers and The World

思った以上に英語で聞き取れないこともおおく動画が公開されたら見てみたい Shopify のメンバーが存在感がすごいという印象で yjitがここまで性能改善できてきているのが本当にすごいという思った

Gradual typing for Ruby: comparing RBS and RBI/Sorbet

SorbetはSteepに比べると性能がいいので開発者体験が高いのはわかりつつも RBSからRBIを生成して管理していくのはかなり辛いなという印象

Ruby + ADBC - A single API between Ruby and DBs

FlightSQLがPostgleSQLで使えるようにしたので active_recordのアダプターを作れば実際に使う人が増えそうな感じはしつつ MySQLであれば嬉しいなとどこかで感じてしまっている。MySQLのアダプターとしてTrilogyが公開されたしアダプター作り直しって本当にすごいこと

Ruby JIT Hacking Guide

RJITということで YJITだけでなく Rubyでバイナリコードを変換していくアプローチを取っている。 なるほどというのもそうだけでYJITでのノウハウをRubyで再現して持っていっている国分さんがすごいな

Let's write RBS!

自動生成のRBSと手動作成のRBSをマージする手段を提供しているアプローチがとてもよく感じだ。 でもも簡潔でRBSでの開発の助けになりそうだった

Parsing RBS

RubyのParserだけはなく RBSのParserの話 こちらは Rubyで実装されているのでコードも読める。 いろんなアプローチがあってRubyよりは複雑ではないけど、Parserの大変さが伝わった。 LSPつくるのは大変だ

見ることができなかったセッションの動画いつ出るのだろう楽しみにしておこう