Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

週刊Railsウォッチ: IRB 1.8.0でデバッグ機能強化、Ruby Prize 2023開催決定ほか(20230908後編)

こんにちは、hachi8833です。

週刊Railsウォッチについて

  • 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ
  • 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄
  • お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙏

TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)

🔗Rails

🔗 Herokuでリソースを共有する「隣人」対策(RubyFlowより)


つっつきボイス:「Herokuの騒がしい隣人って、EC2インスタンスレベルで同じホストを利用している別のユーザーってことかな」「隣人がリソースを派手に使うと自分たちへのリソース割当が苦しくなる問題」「よくあるインスタンスガチャ的な問題らしい」

「記事では自社でDyno Sniperという機能を開発して、Dynoの負荷が上がったら終了して別サーバーで立ち上げ直す形で対応したようです」「割りと昔のAWSでも似たようなことをやったりしましたよね」「そうそう」「あの頃は、どこそこのAZ(Availability Zone)が空いているぞみたいな情報が飛び交ってたりしましたね」


同記事より

「個人的には、こういう形で対応するよりは、リソースを専有できるホスティングサービスに移行する方が話が早いんじゃないかと思いますけどね」「たしかに」


なお、Dyno Sniperはまだベータ版だそうです。

また、後でredditでもこんな書き込みを見つけました。

I solved the Heroku Noisy Neighbor problem by moving to Linode with Dokku.
Heroku's Infamous Noisy Neighbors: Problem Solved. : r/railsより

参考: クラウドコンピューティングサービス|VM、Kubernetes、ストレージ|Akamai -- Linodeは2022年にAkamaiが買収したそうです
参考: Dokku - The smallest PaaS implementation you've ever seen

🔗 Active Recordの高度な概念(Ruby Weeklyより)


つっつきボイス:「割りと長い記事ですね」「Advancedとあるけど、どちらかというとActive Recordでよく行うことをまとめた記事かな: Active Recordで何ができるかを手っ取り早く見たいときによさそう👍」

  • レコードのロック
    • 楽観的ロック
    • 悲観的ロック
  • 主キーはIntegerかUUIDか
  • 全文検索
  • データベースVIEW
  • 地理空間データ(GIS)
    同記事目次より

「scenicのジェネレータで--materializedオプションをつけるとマテリアライズドビューを生成できるのね↓」「scenicはデータベースVIEWをマイグレーション管理するgemでしたね」

# 同記事より
rails generate scenic:model united_states_adult --materialized

scenic-views/scenic - GitHub

参考: マテリアライズドビュー - Wikipedia

RDBMSのVIEWを使ってRailsのデータアクセスをいい感じにする【銀座Rails#10】

🔗Ruby

🔗 IRB 1.8.0がリリース

ruby/irb - GitHub


つっつきボイス:「お、IRBのデバッグ機能が強化されてpry-byebug相当のこともやれるようになったんですね🎉」「もうpryなくてもやっていけそう」「自分もしばらくpry使ってないですね」「自分も」

# 同リポジトリより: binding.irbブレークポイントでdebugコマンドを実行
From: test.rb @ line 3 :

    1:
    2: def greet(word)
 => 3:   binding.irb
    4:   puts "Hello #{word}"
    5: end
    6:
    7: greet("World")

irb(main):001> debug
irb:rdbg(main):002>

🔗 CRubyをさまよう: オブジェクトとクラス(Ruby Weeklyより)


つっつきボイス:「Rubyの記事なのに出てくるコードがC言語なんですけど」「CRubyはC言語で書かれているので、オブジェクトやクラスの中身の話をするとそうなりますね」「著者は当分CRubyを掘り下げていくつもりみたい」

/* 同記事より */
/* variable.c */

VALUE
rb_ivar_get(VALUE obj, ID id)
{
    VALUE iv = rb_ivar_lookup(obj, id, Qnil);
    /* ... */
    return iv;
}

VALUE
rb_ivar_lookup(VALUE obj, ID id, VALUE undef)
{
    /* ... */
    switch (BUILTIN_TYPE(obj)) {
      case T_CLASS:
      case T_MODULE:
        {
            /* ... */
        }
      case T_OBJECT:
        {
            /* ... */
        }
      default:
        /* ... */
    }
    /* ... */
}


同記事より

Rubyのメモリ管理方法1: 基本概念(翻訳)

🔗 Rubyのメモリ使用量問題には「jemallocはもう試した?」と言いたい


つっつきボイス:「ツイ主のNate Berkopecさんといえば以下の記事でjemallocの効用について解説していましたね↓」「jemallocはCのメモリアロケータであるmallocの強化版」「メモリ肥大化などで困ったらまずRubyをjemalloc付きでビルドするのが一種の銀の弾丸的に使われてるようになってきたのかも」

Ruby: mallocでマルチスレッドプログラムのメモリが倍増する理由(翻訳)

参考: jemalloc

「今はjemallocを使えない環境はだいぶ減ってきたと思うので、少なくとも実行インスタンスを自分たちで構築できるならjemallocを使うのがいいと思います」「どんな環境だとjemallocを使いにくいでしょうか?」「たとえばマネージド環境では自分たちがライブラリをインストールしてRubyをビルドするのは難しいでしょうね」「たしかに」

🔗 Ruby Prize 2023開催決定


つっつきボイス:「お、今年も開催されるのね」「Ruby Prizeは"Rubyコミュニティの個人賞"と銘打たれているんですね」「Ruby Prizeは、実際にRubyの技術的な新機能や改修を行った人だけではなく、たとえばRubygems.orgを長年メンテしてきた方が受賞したことからもわかるように、コードを書く以外のコントリビューションについても評価の対象とする間口の広い賞と言えますね」「なるほど」「今のRuby言語はインフラの一種といってもいいぐらいなので、そうしたインフラとしてのRubyを支える人々も評価対象になる場があるのはよいことだと思います」

🔗DB

🔗 書籍『High Performance PostgreSQL for Rails』


つっつきボイス:「ruby-jp Slackで知りました」「The Pragmatic Bookshelfから出ているのね」「一部の章で試し読みもできますね」

「ざっと見た感じでは、Railsがどんな場合にどんなクエリをPostgreSQLに投げるかを考えながら高速化しようという趣旨かな」「今はベータ版で、今年の10月に発売予定みたいですね」「お〜、出たら買ってみようっと」

「PostgreSQLは本当にいろんな機能があって、RailsもそうしたPostgreSQLならではの機能をメソッドレベルでいろいろサポートしているので、どこまでをRailsのメソッドでやってどこから生SQLにするかは悩みどころですよね」「自分はパフォーマンスが必要になったりしたときに生SQLを書くことが多いかな」

🔗クラウド/コンテナ/インフラ/Serverless

🔗 MRSKがKamalにリネーム(Rails公式ニュースより)


つっつきボイス:「たまたま#49058を見かけて知りました」「Rails公式ニュースによると、商標上の問題によってKamalにリネームしたらしい」「Kamalは古代アラブで使われていた星を観測して位置を測定する道具の名前なのね↓」

参考: Kamal - Ages of Exploration

「以前のリポジトリ(github.com/mrsked/mrsk)にアクセスすると、もう新しいgithub.com/basecamp/kamal/リポジトリにリダイレクトされるのか」「GitHubアカウントもmrskedからbasecampに変わっているけど、Discussionやissueなどはそのまま引き継いでいますね」


以下のREADME翻訳記事も更新しました↓。

Kamal README: 37signalsの多機能コンテナデプロイツール(翻訳)


後編は以上です。

バックナンバー(2023年度第3四半期)

週刊Railsウォッチ: システムテストでPlaywrightをサポート、to_paramのデリミタを変更可能にほか(20230906前編)

ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。

Rails公式ニュース

Ruby Weekly

RubyFlow

160928_1638_XvIP4h


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。