Railsのアップデートの際に、新しいバージョンの config のデフォルト値を少しずつ反映させるときに new_framework_defaults_x_x を使うと思います。 今回、config.load_defaults 6.1 へ上げる前に、Rails.application.config.active_record.has_many_inversing = trueの設定をしても反映されないことがありました。 たまたま今回は has_many_inversing でハマりましたが、他の設定でも同様ですし、new_framework_defaults 以外の config/initializers/* での設定も同様にRails.application.config.xxxの設定が反映されない可能性があるので記事にしてみました。 結論 初期化時の読み込み順によっては、config
Ruby 3.2 YJIT is Battle-Tested Shopify deploys YJIT on business-critical services in production, such as Storefront Renderer, the software that powers all online storefronts on Shopify’s platform, and Shopify’s Monolith. As of the Ruby 3.2 release, YJIT sped up our Storefront Renderer by 10% on average. Storefront Renderer is a complex application. Your more reasonable-sized app might get better/w
STORES 予約 でエンジニアリングマネージャーをしている natsume です。 今回はRubyKaigi 2023に参加して「うぉぉなんかやるぞぉ!」となった結果、STORES 予約 のバックエンドであるRailsアプリケーションをYJIT有効化しパフォーマンス向上できました。 動機からわかるとおり、YJIT有効化までノリと勢いでやりました。 影響されたセッションはDAY2のKeynoteである Optimizing YJIT’s Performance, from Inception to Production です。 (影響はされましたが内容は全然わからなかった。英語勉強する、絶対) rubykaigi.org 有効化の手順 STORES 予約 ではすでにRuby 3.2を利用していたのでかなりサクッとできました。 利用しているDocker imageで対応確認 Debian(s
こんにちは。2023年1月に株式会社タイミーに入社したバックエンドエンジニアの id:euglena1215 です。 RubyKaigi 2023 がとうとう明日に迫ってきました。楽しみですね。 タイミーは RubyKaigi で初めてブース出展を行います。至らぬ点もあるかと思いますが、RubyKaigi を一緒に盛り上げていければと思っています!どうぞよろしくお願いします。 productpr.timee.co.jp 今回はタイミーが本番運用している Rails アプリケーションに対して Ruby 3.2.2 へのアップデートと YJIT の有効化を行い、パフォーマンスが大きく改善したことを紹介します。 RubyKaigi で「Ruby 3.2+YJIT 本番運用カンパニーです」と言いたいので粛々と進めている— てっぺー (@euglena1215) 2023年4月19日 前提 タイミー
先日、携わっているサービスで一番大きいRailsアプリをRuby 3.2にアップデートし、YJITを有効化できました。 方針を検討した結果、今回はRails 6.1およびPsych 3系のままRuby 3.2にアップデートする戦略をとったため、その手順をまとめます。 先週にメインのサービスをRuby 3.2にしてYJITを有効にできました! 実際に速くなったし嬉しい大YJIT記念日だ🎉 https://t.co/Wkhc6fDfj9 — Hiroshi Shimoju (@shimoju_) July 19, 2023前提#今回のRailsアプリはサービスの機能がほぼすべて詰まっているモノリスで、歴史も8年と比較的長いです。 アップデート前のバージョンはRuby 3.0、Rails 6.1で、Psychは3系。 正攻法では、おおむね以下の手順でアップデートを進めていくことになります。 R
サーバーサイドエンジニアの内藤(@naitoh) です。 Rails で構築された小規模な APIサーバー(Rails の API モードで構築したもの)で、Ruby 3.2 の YJITを有効化する事で性能アップすることができましたので、喜びを分かち合いたく共有させて頂きます。 shopify.engineering We’re able to measure real speedups ranging from 5% to 10% (depending on time of day) on our total end-to-end request completion time measurements. YJIT を開発した Shopify では 5%から10%の処理速度の改善があったという事で、以前から弊社でも本番で運用を開始したかったのですが、比較的検証のし易い APIサーバーで
はじめに プログラミングをする上で苦労するポイントの一つに、デバッグがあると思います。リンターなどを使って事前にバグを発生させないようにすることもできますが、それを行ってもなおバグは発生することはあると思います。自分はデバッグに結構苦労しているので、簡単にできるようになるツールなどがあると嬉しいと思っていました。 今年のRubyKaigiでは、デバッグを楽にするVS Codeの拡張機能が紹介されていたので、今回はそれを使ってみたいと思います。 debug.gem と Debug Visualizerを使ってみる debug.gemとは debug.gemはRubyのデバッガであり、Ruby 2.6 以降で利用することができます。Ruby 3.1 以降では、標準ライブラリとなっています。このdebug.gemは、元々あったlib/debugの取って代わるものとしてリリースされました。 deb
はじめに この記事は、記事投稿キャンペーン「【RubyKaigi 2023 連動イベント】みんなで Ruby の知見を共有しよう」の記事です RubyKaigi 2023 の Day 2 (2023/05/12) 16:00 - 16:30 Takashi Yoneuchi (tw:@lmt_swallow)さんの 「Eliminating ReDoS with Ruby 3.2 」 でお話があった ReDoS のタイムアウトについて実際に動かして検証してみました。 ReDoS について ReDoS は、Regular expression Denial of Service の略称です 正規表現の評価に時間がかかる文字列を入力しリソースを占有する攻撃です。 ReDoS について詳しくまとめてくださっている @flat-field さんの記事のリンクを張り説明は省略します。 また、 Rub
RuboCopが対象のRubyバージョンを決める方法は、探索順位によるため期待どおりランタイムの Ruby のバージョンと一致している場合以外に、条件によってはそうでないこともある。 .rubocop.yml の TargetRubyVersion の値、.ruby-version の値、Gemfile.lock に記された Ruby のバージョンを順番に参照して、それらに設定がない場合は RuboCop でデフォルトの Ruby バージョンとなっている 2.2 が適用される。実装としては以下。 github.com これらの探索順で最初に見つかった値が RuboCop が静的解析の Ruby バージョンとなる。 リポジトリに .ruby-version を置いていないかつ rbenv などではなく Docker の Ruby イメージを使って、.rubocop.yml にも Gemfil
■ Ruby 3.0 がセキュリティメンテナンスフェーズになったのでいくつか補足 Ruby 3.0 がセキュリティメンテナンスフェーズになったことに合わせて、いくつかサプライチェーン周りで考えておく必要がある事項があるので共有しときます。 Ruby 3.0 は OpenSSL 3.0 対応しないことになった Bug #18658: Need openssl 3 support for Ubuntu 22.04 (Ruby 2.7.x and 3.0.x) - Ruby master - Ruby Issue Tracking System に書いたように、Ruby 3.0 には OpenSSL 3.0 に対応した openssl gem はバックポートされないことになりました。つまり、OpenSSL 3.x しか提供されない Ubuntu 22.04 では Ruby 3.0 はビルドできな
Rubyでnil.to_sと叩くといわゆる空文字("")が返却されます。 しかし、Ruby 2.6以前と2.7以降では微妙に扱いが違い、2.7以降ではfrozen stringが返るようになりました。 これはRuby2.7のリリースノートにも書かれています。 Module#name, true.to_s, false.to_s nil.to_s は常にfrozenな文字列を返すようになりました。返された文字列は常に同じオブジェクトとなります。 [Experimental] [Feature #16150] なので、下記のようなコードの場合、変数sはnilが入るとエラーになります。 def gsub_hoge_fuga(s) s.to_s.gsub!('hoge', 'fuga') # s = nilだと can't modify frozen String: "" (FrozenError
この記事は何 Rubyはバージョン3.2からWebAssembly(WASM)に対応をしています。 この記事では、RubyのWASMパッケージであるruby.wasmについて調べたことを残しておきます。 WebAssemblyとは WebAssemblyについては、MDN Web docsで以下のように説明されています。 WebAssembly は最近のウェブブラウザーで動作し、新たな機能と大幅なパフォーマンス向上を提供する新しい種類のコードです。基本的に直接記述ではなく、C、C++、Rust 等の低水準の言語にとって効果的なコンパイル対象となるように設計されています。 WebAssemblyはWebブラウザ上で実行可能なコードで、W3Cにより標準化されているため、Chromeをはじめとしたブラウザで同一の仕様で動作します。 また、ブラウザ以外でのWebAssemblyの環境の実行に関して
この記事は何 Qiita株式会社では技術的な勉強会を定期的に開催しています。 この記事はRuby3から導入されたRBSについて発表をしたときの社内の資料をQiita用に修正したものです。 RBSとは RBSというと大体二つの意味で話す。 ruby3.0から導入されたRubyの型定義を記述するための言語。(RBS=Ruby Signeture) →この記事では便宜上RBSと書く RBSファイルを扱うためのgem (https://github.com/ruby/rbs) →この記事では便宜上rbsと書く 標準ライブラリ/組み込みクラスの型ドキュメント 特定の型に対しての親情報やメソッドの型情報を逆引きできる RBSの解析 https://github.com/ruby/rbs より RBS is a language to describe the structure of Ruby pro
最近 slim ちゃんと使ってないな と苦手意識を持ってやっていたらハマった. ちなみに Rails は 6.1 です.
はじめに 普段開発をしていると、定義ファイルや設定ファイルの更新を行う機会は少なくありません。 ".rubocop_todo.yml" を更新するような単純作業は機械にまかせていきたいなと思いこの記事を書きました。 どのように実現するか GitHub Actions には 定期実行を行う機能が存在します (on.schedule) 定期実行した job の中で rubocop を実行し生じた差分を利用し Pull request を作成します。 今回は peter-evans/create-pull-request を利用します。 GitHub Actions の設定例 .githu/workflows directory 以下に ファイルを作成します yml に記載している 処理は以下の通りです。 repository を checkout Ruby の install & bundle
irb, debug gem は Ruby の標準ライブラリですが、それ単体で Rubygems からインストールすることができます。なので、最新の Ruby でなくても、以下のコマンドで最新の irb, debug gem を利用することが可能です。 (※ debug gem は bundled gem のため、 そもそも Bundler で利用する場合は Gemfile に書く必要があります) debug, irb は近年のアップデートでかなり便利になってきたのでおすすめ debug, irb は近年のアップデートで大きな改善、開発がされており、 (VSCode からのデバッグ、シンタックスハイライト等) 非常に便利になっています。おすすめです。 これらは Ruby のアップデートの話とセットで語られることが多いため、最新の Ruby に更新しないと利用できないとうっかり勘違いすること
$ rbs help Usage: rbs [options...] [command...] Available commands: ast, annotate, list, ancestors, methods, method, validate, constant, paths, prototype, vendor, parse, test, collection, version, help. Options: -r LIBRARY Load RBS files of the library -I DIR Load RBS files from the directory --no-stdlib Skip loading standard library signatures --collection PATH File path of collection configurati
はじめにこんにちは、Wantedly の 2021 年サマーインターンに参加した宮下と申します。今回のインターンでは三週間の間 DX (Developer Experience) チームに所属し、Wantedly のコードベースに Ruby の型チェッカーの導入を試みることをテーマにしていました。 インターンの前半では、様々な型チェッカーの性能を調べたり、それぞれの型チェッカーを実際に使ってみることで、開発効率を基準とした比較を行いました。インターンの後半では、現段階では一番実務に適しているだろうと判断した Sorbet に焦点を当て、Wantedly のいくつかのコードベースに実験的に Sorbet を導入した環境を作った型情報をつけていく作業をしていました。 本記事は、主にインターンの前半で調査した、型チェッカーの比較という部分に焦点を当て、文章の形にまとめたものになります。 Ruby
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く