- Ruby / Rails関連
週刊Railsウォッチ: IRB 1.8.0でデバッグ機能強化、Ruby Prize 2023開催決定ほか(20230908後編)
こんにちは、hachi8833です。
🔗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
🔗Ruby
🔗 IRB 1.8.0がリリース
🚀 Today, we released IRB 1.8.0 with a major feature: advanced irb-debug integration. It provides a pry-byebug equivalent experience for IRB users, allowing them to use IRB as a primary debugger interface.
For more details, see the new readme section:https://t.co/MgcBAcN7cS— Stan Lo @st0012@ruby.social (@_st0012) August 30, 2023
つっつきボイス:「お、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のメモリ使用量問題には「jemallocはもう試した?」と言いたい
The answer to every Ruby memory usage problem is "have you tried jemalloc yet?"
— Nate Berkopec (@nateberkopec) August 28, 2023
つっつきボイス:「ツイ主のNate Berkopecさんといえば以下の記事でjemallocの効用について解説していましたね↓」「jemallocはCのメモリアロケータであるmallocの強化版」「メモリ肥大化などで困ったらまずRubyをjemalloc付きでビルドするのが一種の銀の弾丸的に使われてるようになってきたのかも」
参考: jemalloc
「今はjemallocを使えない環境はだいぶ減ってきたと思うので、少なくとも実行インスタンスを自分たちで構築できるならjemallocを使うのがいいと思います」「どんな環境だとjemallocを使いにくいでしょうか?」「たとえばマネージド環境では自分たちがライブラリをインストールしてRubyをビルドするのは難しいでしょうね」「たしかに」
🔗 Ruby Prize 2023開催決定
現在候補者募集中。国籍問わず。賞金アリ。
Link: Ruby Prize 2023 開催決定 | RubyPrize https://t.co/ppe8jRdTfq
— Yukihiro Matz (@yukihiro_matz) August 31, 2023
つっつきボイス:「お、今年も開催されるのね」「Ruby Prizeは"Rubyコミュニティの個人賞"と銘打たれているんですね」「Ruby Prizeは、実際にRubyの技術的な新機能や改修を行った人だけではなく、たとえばRubygems.orgを長年メンテしてきた方が受賞したことからもわかるように、コードを書く以外のコントリビューションについても評価の対象とする間口の広い賞と言えますね」「なるほど」「今のRuby言語はインフラの一種といってもいいぐらいなので、そうしたインフラとしてのRubyを支える人々も評価対象になる場があるのはよいことだと思います」
🔗DB
🔗 書籍『High Performance PostgreSQL for Rails』
つっつきボイス:「ruby-jp Slackで知りました」「The Pragmatic Bookshelfから出ているのね」「一部の章で試し読みもできますね」
- PDF: Chapter 5: Modifying Busy Databases Without Downtime
- PDF: Chapter 7: Improving Query Performance
「ざっと見た感じでは、Railsがどんな場合にどんなクエリをPostgreSQLに投げるかを考えながら高速化しようという趣旨かな」「今はベータ版で、今年の10月に発売予定みたいですね」「お〜、出たら買ってみようっと」
「PostgreSQLは本当にいろんな機能があって、RailsもそうしたPostgreSQLならではの機能をメソッドレベルでいろいろサポートしているので、どこまでをRailsのメソッドでやってどこから生SQLにするかは悩みどころですよね」「自分はパフォーマンスが必要になったりしたときに生SQLを書くことが多いかな」
🔗クラウド/コンテナ/インフラ/Serverless
🔗 MRSKがKamalにリネーム(Rails公式ニュースより)
MRSK is now called "kamal." At least, the link to the repository https://t.co/9GA9TqNZL8 now leads to a different new repository https://t.co/75iiReGUWK pic.twitter.com/U2IdDgeLlV
— Pasha Kalashnikov (@kalashnikov_en) August 22, 2023
つっつきボイス:「たまたま#49058を見かけて知りました」「Rails公式ニュースによると、商標上の問題によってKamalにリネームしたらしい」「Kamalは古代アラブで使われていた星を観測して位置を測定する道具の名前なのね↓」
参考: Kamal - Ages of Exploration
「以前のリポジトリ(github.com/mrsked/mrsk)にアクセスすると、もう新しいgithub.com/basecamp/kamal/リポジトリにリダイレクトされるのか」「GitHubアカウントもmrskedからbasecampに変わっているけど、Discussionやissueなどはそのまま引き継いでいますね」
以下のREADME翻訳記事も更新しました↓。
後編は以上です。
バックナンバー(2023年度第3四半期)
週刊Railsウォッチ: システムテストでPlaywrightをサポート、to_paramのデリミタを変更可能にほか(20230906前編)
- 20230831後編 Rubyガベージコレクション高速化、RubyコードゴルフQ&Aほか
- 20230829前編 Active Storageのミラーアップロードが非同期に、Rackアプリを手作りほか
- 20230824後編 ArelでCAST関数サポート、webdrivers依存を解消、YJIT高速化ほか
- 20230823前編 Rails 7.0.7に含まれているRails 7.0.6のバグ修正ほか
- 20230809 Rails 7.0.5のcreate_association挙動変更取り消し、YJITの性能を最大限引き出す方法ほか
- 20230803後編 Railsフラグメントキャッシュ経由の情報漏洩に注意ほか
- 20230802前編 Active Storageバリアントの事前変換、Linkヘッダープリロードのオプトアウトほか
- 20230727後編 Rubyにdefp導入の提案、IRB 1.7.3リリースほか
- 20230725前編 config.autoload_libとconfig.autoload_lib_onceが追加ほか
- 20230721後編 Kaigi on Rails 2023プロポーザル募集、rubocop-magic_numbersほか
- 20230719前編 複合主キー関連の実装進む、Action TextでHTML5サニタイザほか
- 20230705後編 AWS LambdaでRailsをRackで動かすLambyほか
- 20230704前編 productionのforce_ssl=trueがデフォルトで有効に、rakeタスクをthorで書くほか
ソースの表記されていない項目は独自ルート(TwitterやはてブやRSSやruby-jp SlackやRedditなど)です。
週刊Railsウォッチについて
TechRachoではRubyやRailsなどの最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ)