Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
こんにちは。メドピアのお手伝いをしている@willnetです。最近寒くなってきましたね。毎年この時期に風邪をひくので最近は手洗いうがいを怠らないようにしています。このたび久しぶりにテックブログに寄稿します。 insert_allの仕様変更に関するPR メドピア内のとあるRailsアプリケーションのバージョンを7.2から8.0にアップグレードしたときにinsert_allの仕様変更に気づいた話をします。 insert_allの仕様変更に該当するのは次のPRです。 Fix active record insert values of type cast and serialize by OuYangJinTing · Pull Request #48139 · rails/rails 上記PRではsaveメソッドとinsert_all(及びinsert、insert_all!)メソッドで値の変
Datadog Continuous Profiler を用いて、ボトルネックが Ruby の GVL であることを発見した こんにちは、terandard です。 弊社では Datadog を用いてアプリケーションやサーバーの監視を行っています。 以前からリクエストがスパイクした際にアプリケーション全体が遅延する問題があったので、Datadog Continuous Profiler を使用して調査したことについて紹介します。 背景 リクエストがスパイクするとアプリケーション全体が遅延する問題がありました。 リクエスト全体のリクエスト数とレイテンシー 特に処理に時間がかかっていたリクエストについて Datadog APM で状況を確認すると、下図のように空白期間があったり mysql2 や faraday の実行時間が長いことがわかりました。 例1: 謎の空白期間がある 例2: mysq
こんにちは。バックエンドエンジニアの須貝(@sugaishun)です。 今回はタイミーが本番運用しているRailsアプリケーションに対してRuby3.3.0へのアップデートを行った(YJITは引き続き有効なまま)のでその結果をご紹介したいと思います。 昨年弊社のid:euglena1215が書いたエントリーのRuby3.3.0版です。 tech.timee.co.jp 前提 タイミーのWebアプリケーションとしての特性は基本的には昨年と変わりありません。ですので、昨年の内容をそのまま引用させてもらいます。 タイミーを支えるバックエンドの Web API は多くのケースで Ruby の実行よりも DB がボトルネックの一般的な Rails アプリケーションです。JSON への serialize は active_model_serializers を利用しています。 今回の集計では API
技術部の笹田です。今日で退職するので、バタバタと返却などの準備をしています。 本記事では、Rubyの並行並列処理の改善についての私の取り組みについて、おもに RubyKaigi 2022 と 2023 で発表した内容をもとにご紹介します。 並行と並列はよく似た言葉ですが、本記事では次のような意味で使います。 並行処理(concurrent processing)は、「複数の独立した実行単位が、待っていればいつか終わる(もしくは、処理が進む)」という論理的な概念で、古典的にはタイムシェアリングシステムなどが挙げられます。 並列処理(parallel processing)は、「複数の独立した実行単位のうちのいくつかが、あるタイミングで同時に動いている」という物理的な概念で、古典的には複数のCPU上で同時に実行させる、というものです。最近では、1つのCPU上で複数コアが同時に動いている、という
先日、携わっているサービスで一番大きい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
So far in this series, we’ve discussed GC::INTERNAL_CONSTANTS, the Tri-Color Mark and Sweep algorithm, Generational GC and Incremental GC. We’ll build on what we’ve learned in this post about the newest addition to Ruby’s GC: compaction. Fragmentation Before we dive into compaction, we need to learn about fragmentation. Fragmentation is the term we use to describe memory when it’s allocated non-co
Ruby Kaigi 2020 TakeoutのMatzさんのキーノートで話されていた「Ractor」や「Fiber」、その話の中で出ていた「非同期I/O」について色々分かってないことが多かったので、前提知識として必要そうなことを纏めてみた Matzさんが話していた内容 プログラミング言語の方向性を決めることは難しいということ。互換性を保ちながら良いものにする! Ruby 3で目指す内容のコンセプトは、Faster(高速化) / More Productive(高い生産性)で、そのために ①Fast、②Concurrent、③Correct。つまり、早くて並列処理可能で正しくプログラムを書ける状況を提供していく FiberやRactorは、Concurrentの話 並列化に関する話の中で、話される内容である。 そもそも、ソフトウェアを並列化する仕組みとして、 マルチプロセス(メモリを共有し
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? これはRubyアドベントカレンダー2022の22日目の記事です。 binding.irb のすすめ 8年前に 今更聞けないpryの使い方と便利プラグイン集 という記事を書き、そこから長い間 binding.pry を愛用していた。binding.irb も binding.pry も使ったことがないよ、という人はご一読をお勧めしたい。 当時PryにあったIRBに対する優位性のうち、時間が経っても常に使い続けた機能といえば binding.pryの存在、$ (show-source)、@ (whereami)、ls とその -G (gre
estie でソフトウェアエンジニアをしている徳永(@yTo_9)です。 estie では Ruby を書いたりTypeScriptを書いたりしています! estie 夏のブログ祭りにかこつけて、せっかくなら普段は追わない部分だけど、気になっていたYJITなるものを深掘りしてみようと思い、「YJITがなぜRailsアプリケーションの高速化を実現できたのか」を調べてみたので紹介したいと思います。 「どうせ難しいんでしょ?」と思いながら調べてみたのですが、講演や論文の説明がわかりやすく、意外に概要を把握することは難しくありませんでした。 YJIT の核となっているのは Lazy Basic Block Versioning (LBBV) という手法で、これはRubyだけに限らず動的言語全般に適用可能な強力なアプローチであることがわかりました。 「あるタイプの条件分岐は、ほとんどの場合で片側しか
RubyGemsの運営元が「Ruby Shield」を発表。RubyとRailsへのサプライチェーン攻撃への対策としてShopifyが4年で100万ドル(約1億3000万円)を提供 Ruby言語用のパッケージであるGemのホスティングサービス「RubyGems.org」を運営するRuby Centralは、RubyやRailsに対するサプライチェーン攻撃への対応を行うプロジェクト「Ruby Shield」を開始すると発表しました。 Today we’re excited to announce Ruby Shield This new initiative in partnership with @ShopifyEng will support open-source and enable us to take on new security-focused projects to bet
普段何気なく書いている Ruby なんですが実はメソッドの引数の種類って思ったよりも多くてまとめてみました。 実際自分も Ruby の AST をいじっている時に引数の種類が多すぎて混乱したのでまとめておくと色々と役に立つかなーと。 と、軽い気持ちで書いてみたんですが結構なボリュームになってしまいまsた。 引数の名称とかは調べつつ独断と偏見で書いてあるのでそこら辺はご注意ください。 諸注意 この記事は基本的に Ruby 3.1 を元にして動作確認しています 下にも書いてあるんですが 仮引数(parameter) についての解説で 実引数(argument) の話はあんまりでてきません 引数の名称は日本語に寄せていますが Ruby 界隈だと英語で書いてある事が多いかも 調べる時は英語の方で調べてもらったほうが情報はでてくると思う 引数という言葉の意味とは 『引数』という言葉には厳密に言うと『
新年あけましておめでとうございます。 @rosylilly です。 この前 SRE 養成講座の体験授業配信 をしたんですが、その時にハンズオンの一環で Ruby 製アプリケーションをいじって高速化してみる。という内容を実施しました。 コンセプトとしては、『ちゃんと設定ファイルを書くだけでも高速化する』という感じです。作業としてはアプリケーションをいじらずに、設定だけいじって高速化する、ということなんですが、結局何がどれくらい効くのか、というのを事前に参考値レベルで弾いておかないとぶっつけ本番になっちゃうな、ということで何がどれくらい効くのかを試してからにしようということで、事前に調査したときのベンチテストと何を変えたかの記録になります。 ベンチマークの前準備 今回はほぼ何もしない Sinatra アプリケーションを作って、その性能差から測ります。ということで用意した性能測定用何もしない S
Ruby開発チームは、新たなJITコンパイラであるYJITを実験的に搭載したRuby 3.1プレビュー1を公開しました。 Ruby言語は以前から実行速度の向上を重要な改善項目として挙げており、Ruby 2.6では「MJIT」と呼ばれるJITコンパイラを搭載、昨年リリースされたRuby 3.0では目標としていたRuby 2の3倍の性能を達成しています。 参考:Ruby 3.0正式版リリース。「Ruby 2の3倍速」到達、型の記述、スレッドセーフな並列処理など新機能 一方でMJITはその機構上、Railsの大規模アプリケーションなどでの性能向上に十分な効果が発揮できていないとの評価もありました。 今回Ruby 3.1プレビューでマージされたのは、ECサイト構築サービスで知られるShopifyが開発を進めてきた「YJIT」と呼ばれるJITコンパイラです。 YJITは現在のところ20%から40%程
はじめに:「初心者は何をアウトプットすればいいの?」問題について 以前から何度か書いているのですが、Ruby初心者の方で「Rubyの勉強を始めました!アウトプットがんばります!」と言いつつ、実際はアウトプットしているのは、ほとんど書籍や他のサイトに書かれている内容を右から左へ丸写ししただけ、という方をよく見かけます。 その話題については、以下の記事で詳しくまとめているので、興味がある方はこちらをご覧ください。 blog.jnito.com qiita.com まあ、それはそれでさておき、「じゃあ、どうしたらいいの!?何をアウトプットすればあんたは満足するのさ!?」と思われる方も中にはおられるでしょう。 もちろん、その質問に対する回答についてはいろんなアプローチが考えられるのですが、今回は僕からひとつ、「アウトプット迷子」になっているプログラミング初心者さんに向けて、こんな提案をしてみたいと
はじめに アウトプットのネタに困ったらこれ!?Ruby初心者向けのプログラミング問題を集めてみた(全10問) の問題を解いてみました。(前編) 現在チェリー本でRubyの勉強をしているのですが、著者である伊藤淳一さんがRuby初心者向けに上記の記事を投稿されたので、実力アップのために解いてみました。 問題は以下の通りです。 この記事では1〜5まで解いています。 6〜10を解いた後編はこちら カレンダー作成問題 カラオケマシン問題 ビンゴカード作成問題 ボーナスドリンク問題 電話帳作成問題 国民の祝日.csv パースプログラム 「Rubyで英語記事に含まれてる英単語を数えて出現数順にソートする」問題 行単位、列単位で合計値を求めるプログラム ガラケー文字入力問題 値札分割問題 追記 2019/05/12 頂いたコメントを参考に、1,3,5のコードを編集 1. カレンダー作成問題 記事より引用
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く