並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 78件

新着順 人気順

ActiveRecordの検索結果1 - 40 件 / 78件

  • やさしいActiveRecordのDB接続のしくみ

    https://kaigionrails.org/2023/talks/kubo/

      やさしいActiveRecordのDB接続のしくみ
    • AWS LambdaでSeleniumとActiveRecordを扱う · フロッピーディスクの残骸

      気付いたらもう9月ですね。 最近、AWS Lambdaでいろいろと遊ぶ機会があったのでメモとして残します。 はじめに とあるセキュリティゲームの運営用に、SeleniumでWebスクレイピングをやっているRubyのスクリプトをEC2で運用していたのですが、Headless Chromeを扱うため大量に起動するとメモリ食っちゃうし、スケールしようにもEC2インスタンスのAutoScaling組むのもちょっとなあ。とか、インスタンスの起動まで待ってられないからある程度多めにインスタンスを実行したりするのも余分にコストが。。。 1実行に15分もかからないスクリプトだし、ということでLambdaに移行することにしました。 Lambda Layerについて Headless Chromeを扱う場合、単純にFunctionのデプロイパッケージにバイナリを含めると50MBを超えてしまうため、Lambda

      • Railsアプリケーションを遅くする、ActiveRecordの3つの間違い:Count,Where,Present | Scout APM Blog

        ネイト・ベルコペック (@nateberkopec)  SpeedShop(詳細),Railsパフォーマンス・コンサルタンシー 要約:Rails開発者の多くが、ActiveRecordがSQLクエリを実際に実行する条件を理解していません。よくある3つのケースを見てみましょう:countメソッドの誤使用と、サブセットをセレクトするためのwhereの使用、そしてpresent?です。 断言しましょう。あなたはこの3つのメソッドを使い過ぎていて、無駄なQueryとN+1を発生させているでしょう。 (字幕:なんて奇妙な謎だ、バットマン!) "いつActiveRecordがクエリを実行するかって?知るか!" ActiveRecordは素晴らしいです。本当に。しかし抽象化されているので、データ・ベース上で実行されている実際のSQLクエリに無頓着になりがちです。ActiveRecordがどのように動作す

          Railsアプリケーションを遅くする、ActiveRecordの3つの間違い:Count,Where,Present | Scout APM Blog
        • activerecord-originator をリリースしました - pockestrap

          こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見るのが早いでしょう。次のログはArticlesController#indexで実行されるクエリの例です。 Article Load (0.1ms) SELECT "articles".* FROM "articles" WHERE "articles"."status" = ? /* app/models/article.rb:3:in `published' */ AND "articles"."category_id" = ? /* app/controllers/artic

            activerecord-originator をリリースしました - pockestrap
          • ActiveRecord::Base.transaction(joinable: false)を使ってはいけない - SmartHR Tech Blog

            注意喚起の記事になります。タイトルが結論です。 既にこの問題に言及している記事はいくつかあるのですが*1、私は気付かずに踏んでしまったので、タイトルで「おっと、うちは大丈夫かな」と思ってもらえるようにこの記事を書いています。 joinableとは何か 問題として挙げているjoinableオプションですが、これはネストしたトランザクションの挙動に影響を与えます。少しややこしいので、サンプルコードを見せながら説明します。 # frozen_string_literal: true require "bundler/inline" gemfile(true) do source "https://rubygems.org" git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem "activerecord", "7.

              ActiveRecord::Base.transaction(joinable: false)を使ってはいけない - SmartHR Tech Blog
            • ActiveRecord::LockWaitTimeout, ActiveRecord::Deadlocked, ActiveRecord::ConnectionTimeoutError が起きた時に原因調査に役立つ情報を表示する gem を作った

              それなりの規模のサービスを運用していると、不可解なエラーに遭遇することはよくあるものです。その中でもデータベース関連のエラーは一見難解な問題に見えるかもしれませんが、原因調査に役立つ情報をさえ出力すればたいていの場合は容易に原因を特定できるものです。というわけで、Rails でよく遭遇するエラーの調査に役立つ情報を出力する gem を作成しました。 activerecord-debug_errors 現在次のエラーをサポートしています。 ActiveRecord::LockWaitTimeout (MySQL のみ) ActiveRecord::Deadlocked (MySQL のみ) ActiveRecord::ConnectionTimeoutError 以下、具体的な例を用いてどのような情報が表示されるか説明します。 ActiveRecord::LockWaitTimeout Ac

                ActiveRecord::LockWaitTimeout, ActiveRecord::Deadlocked, ActiveRecord::ConnectionTimeoutError が起きた時に原因調査に役立つ情報を表示する gem を作った
              • ツイッターで見つけて直したActiveRecordの問題3つ - かみぽわーる

                Rails Advent Calendar 2020の3日目です。 時間がないのでとりいそぎ3つだけ。 enum state: {active: 0, inactive: 1}とかした時に、typecast前の0とか1を取りたい ActiveRecord::Enumってstate: {active: 0, inactive: 1}とかした時に、typecast前の0とか1を取る場合、read_attribute_before_type_castを使うしかないのか?— アルフォートおじさん (@joker1007) October 21, 2020 github.com belongs_to :author, class_name: 'User'したときにleft_joins(:author).where("author.id": nil)とか書きたい これすると、joins(:author

                  ツイッターで見つけて直したActiveRecordの問題3つ - かみぽわーる
                • Rails 6からActiveRecordのAssociationはscopingの影響を受けなくなっている件と対処法

                  こんにちは。日本ではすっかり秋の空が近づいてきました。個人的に夏は暑さが苦手であまり好きではないのですが、終わってしまうとなると毎年どこか寂しい気持ちになります。 一方で、秋はご飯が美味しいので食べる事が好きな僕にとっては一番好きな季節でもあり、結構心が踊っています。笑 さて、前置きは置いといて今回は表題の通り、とあるRails 5.2プロジェクトをRails 6にアップグレードした際に、ActiveRecordのscopingの仕様変更を踏んでしまったのでその対処法をご紹介します。 そもそもscopingとは ActiveRecord::Relation の機能で、引数にブロックを受け取り、その中では、実行時に適用されていたスコープを全クエリでデフォルトで適用する、と言う物になります。 例として、deleted_at (timestamp, nullable) と言うattributeを

                    Rails 6からActiveRecordのAssociationはscopingの影響を受けなくなっている件と対処法
                  • 技術書典7で、「ActiveRecord完全に理解した」という本を出します。

                    技術書典7で、「ActiveRecord完全に理解した」という本を出します。 posted at 2019-09-21 13:10:08 +0900 by kinoppyd 免責事項 本書のタイトルにある「完全に理解した」とは、ActiveRecordを完全に理解することではなく、あくまで社会通念上相当のActiveRecord「完全に理解した」であり、本書はActiveRecordを完全に理解することを何ら保証するものではありません。 技術書典7 ドワンゴを退職してSmartHRで働き始めそろそろ一ヶ月のkinoppydです。技術書典に出ます。場所は「◎貴サークル「トレイリア学園」は、 か01C に配置されました。」です。ブックマークはここからどうぞ。今回は、ActiveRecordのソースコードリーディングの本を出そうと思います。500円です。前回はメタプログラミングRubyの解説本で

                      技術書典7で、「ActiveRecord完全に理解した」という本を出します。
                    • 【翻訳】ActiveRecordにおける、ネストしたトランザクションの落とし穴 - Qiita

                      🙅‍♂️この記事の内容は実際のコードに適用しないでください!! (2022-10-5追記) この記事の本文でトランザクションに joinable: false というオプションを付けることが推奨されていますが、 joinable: false は内部APIなので指定してはいけない、というのがRails開発チームの見解のようです。 https://github.com/rails/rails/issues/39912#issuecomment-665483779 https://github.com/rails/rails/issues/46182#issuecomment-1266550987 joinable: false を付けるとコミット実行前にafter_create_commitコールバックが呼ばれるなど(参考)、思いがけない別の問題を引き起こすことがあります。 というわけで、

                        【翻訳】ActiveRecordにおける、ネストしたトランザクションの落とし穴 - Qiita
                      • switch_point では ActiveRecord v6.1 以降をサポートしないことにした - eagletmt's blog

                        switch_point を4年ぶりにリリースした。このリリースは主に ActiveRecord v6.1 以降をサポートしない意志を表明するためのものである。 github.com switch_point は6年前に仕事で困ったことを解決するために書いた gem である。経緯は https://eagletmt.hateblo.jp/entry/2014/09/22/203819 を参照。この記事にある「Rails の激しい変更についていきやすい設計・実装」は成功したと思っていて、バージョンや respond_to? による分岐を一切せずに ActiveRecord v3.2 から v6.0 までサポートすることに成功している。 しかしまもなくリリースされるであろう ActiveRecord v6.1 では ActiveRecord::ConnectionAdapters::Conne

                          switch_point では ActiveRecord v6.1 以降をサポートしないことにした - eagletmt's blog
                        • ActiveRecord の接続管理の仕組み

                          ActiveRecord がデータベースとの接続をどう管理しているのかを調べたメモ。主に active_record/connection_adapters 以下の話。現時点での main ブランチの HEAD を参照した。 詰まったときに調べる箇所のあたりを付けられるよう全体観を持ちたいという目的だったので、細かい部分まで把握しきれていはおらず、ご了承ください。 ActiveRecord の使い方のおさらい まず最初にユーザーとして、ActiveRecord でデータベースにクエリを発行する際の流れを簡単におさらいする。 まずデータベースの接続情報を database.yml に記載する。ここではメインとなる primay DB と animals DB の 2 つがあり、またそれぞれに primary (master) と replica があるとする (この例は Active Rec

                            ActiveRecord の接続管理の仕組み
                          • ActiveRecordのincludesは使わずにpreloadとeager_loadを使い分ける理由 - Qiita

                            はじめに ActiveRecordでN+1問題やスロークエリを解消するためにeager loadingを行う場合、普段Railsを使って開発されている方であれば、パッと思いつくのはincludesではないでしょうか?もしくは、preloadやeager_loadを使用しますよね。 この記事では、Webサイト表示パフォーマンスを保つため、ActiveRecordのメソッドの違いや、どいういう場合に使ったら良いのか、どいういう場合には使わない方が良いのかについて書きました。 実際に Railsアプリケーションを作成して解説していきます。 用語の説明と分類「ORM の Eager loading と Lazy loading」 Webサイト表示パフォーマンスを保つため、ORM(RailsではActiveRecord)では、Eager loading と Lazy laodingというものをサポー

                              ActiveRecordのincludesは使わずにpreloadとeager_loadを使い分ける理由 - Qiita
                            • ActiveRecordのincludesに複数の関連テーブルを指定したらスロークエリになった件 - LiBz Tech Blog

                              バックエンドエンジニアの宮澤です。 Railsアプリを開発していると関連テーブルを取得するactiverecordのincludes, eager_load, preloadメソッドはよく使いますよね。 アプリケーションのある箇所でスロークエリが出ているのを見つかって対応した際に、テーブル関連付けの種類によるこれらのメソッドの挙動について調べてみました。 テーブル設計 ER図 サンプルとしてシンプルに地域 => 国 => 都市と1:Nの関係でテーブルを作成します マイグレーション class CreateRegions < ActiveRecord::Migration[6.0] def change create_table :regions do |t| t.string :name t.timestamps end end end class CreateCountries < Ac

                                ActiveRecordのincludesに複数の関連テーブルを指定したらスロークエリになった件 - LiBz Tech Blog
                              • Rails 5.1 で DatabaseRewinder + Activerecord-Import + PostgreSQL が上手くいかない問題が期せずして(?)解決した - ドワンゴ教育サービス開発者ブログ

                                この記事は 第二のドワンゴ Advent Calendar 2019 の19日目の記事です。 qiita.com 誰 naari3です。 ドワンゴで N予備校 のバックエンド開発をやっています。 概要 Rails 5.0 から Rails 5.1 にアップデートする対応の最中に遭遇した現象を紹介します。 依存しているgem同士の相性が悪かった問題がRailsのアップデートによって解決されました。 内容的にはただのコードリーディングになってしまいますが、面白かったので書き起こすことにしました。 Activerecord-Import とは github.com ActiveRecord でバルクインサートをするためのgemです。 ActiveRecord::Base.import (以下 AR.import と記述します) が生えます。このメソッドにセーブしていないレコードの配列を渡す等する

                                  Rails 5.1 で DatabaseRewinder + Activerecord-Import + PostgreSQL が上手くいかない問題が期せずして(?)解決した - ドワンゴ教育サービス開発者ブログ
                                • 【Rails 7.1】ActiveRecord#Enumでメソッドの自動生成を制御する

                                  この記事は GMOアドマーケティング Advent Calendar 2023 4日目の記事です。 はじめに こんにちは。 GMOアドマーケティングの石丸です。 昨年のアドベントカレンダーでは Rails 7 で追加された ComparisonValidator について紹介しました。 GMOアドパートナーズ TECH BLOG byGMORails 7 で追加されたComparisonValidatorで日付のバリデーションを実装するこの記事は GMOアドマーケティング Advent Calendar 2022 3日目の記事です。はじめにこんにちは。GMOアドマーケティングの石丸(@thomi40)です。前回の記事では Rails 7 から実装された query_log_tags について紹介しました。今回の記事では同じく Rails 7 から追加された ComparisonValida

                                    【Rails 7.1】ActiveRecord#Enumでメソッドの自動生成を制御する
                                  • ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita

                                    # User モデルを作ります bin/rails g model user name email Running via Spring preloader process 756 invoke active_record create db/migrate/20190302083847_create_users.rb identical app/models/user.rb invoke test_unit create test/models/user_test.rb create test/fixtures/users.yml $ bin/rails db:migrate == 20190302083847 CreateUsers: migrating ====================================== -- create_table(:users) ->

                                      ActiveRecord の with_lock に先人の知恵を学ぶ - Qiita
                                    • 週刊Railsウォッチ(20190708-1/2前編)ActiveRecord::FixtureSetがめちゃ強くなってた、MacだとRubyが遅い理由、Puma 4登場ほか|TechRacho by BPS株式会社

                                      2019.07.08 週刊Railsウォッチ(20190708-1/2前編)ActiveRecord::FixtureSetがめちゃ強くなってた、MacだとRubyが遅い理由、Puma 4登場ほか こんにちは、hachi8833です。「👨‍🦲」という絵文字をSlackに貼ったらこんなふうにぶっ壊れたことで合字だということを知りました。 つっつきボイス:「Bald?」「人間の顔の絵文字にズラのコンポーネントをかぶせてたことが判明しました😆」「😆」 参考: 👨‍🦲 Man: Bald Emoji 参考: 🦲 Emoji Component Bald Emoji 「そうそう😆、Unicodeってこんなふうに複数の文字を組み合わせて合字が作れるんですよね☺️」「4人家族もパパとママと子ども2人を悪魔合体っぽく作ったりしてますね👨‍👩‍👧‍👦」「こういうのに長けたUnicod

                                        週刊Railsウォッチ(20190708-1/2前編)ActiveRecord::FixtureSetがめちゃ強くなってた、MacだとRubyが遅い理由、Puma 4登場ほか|TechRacho by BPS株式会社
                                      • ツイッターで見つけて直したActiveRecordの問題さらに3つ - かみぽわーる

                                        ツイッターで見つけて直したActiveRecordの問題3つ - かみぽわーるの続き。 where(id: ..1) ("id" <= 1)をnotしたら"id" > 1になってほしい 今のmasterで試してみたのですが、SELECT "users".* FROM "users" WHERE NOT ("users"."id" <= 1) になるようです。 https://t.co/pQh4h9g0MP— 神速 (@sinsoku_listy) August 3, 2019 github.com association先のカラムをpluckしたときもちゃんとtype castされてほしい 対応ありがとうございます! 制限があるとはいえ、定義ではなく呼び出し側で解決を図れるのは嬉しいです。 ちなみに association の情報を与えてあげるようなアプローチは既に検討済みですか?例えばこ

                                          ツイッターで見つけて直したActiveRecordの問題さらに3つ - かみぽわーる
                                        • さようならActiveRecord|sakuraya | CTO的な何か|note

                                          こちらの訳になります。 ActiveRecordに代わるORマッパーとして提唱されてているROMに関するお話です。リポジトリパターンとかバリューオブジェクトとかその辺のテクニックをいろいろ詰め込んでファットモデルをバラバラにしようみたいな考えみたいです。試してみる価値はありそう。 以下訳。 AirCallでは、エンジニアたちがごちゃごちゃしたRailsのレガシーなモノリスと格闘している。いま徐々に軽量なRuby×Sinatra製のマイクロサービスに分割を進めているところだ。また、過去の失敗を繰り返さないために、クリーンアーキテクチャやドメイン駆動開発といった新しいアーキテクチャを試し始めた。そしてROM(Ruby Object Mapper)はこれらの思想によくマッチしたものだった。 ROMがいかに便利なものかをよく知ってもらうために、まずはActiveRecordがもたらす問題点について

                                            さようならActiveRecord|sakuraya | CTO的な何か|note
                                          • Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption

                                            EngineeringSecurityWhy and how GitHub encrypts sensitive database columns using ActiveRecord::EncryptionYou may know that GitHub encrypts your source code at rest, but you may not have known that we encrypt sensitive database columns as well. Read about our column encryption strategy and our decision to adopt the Rails column encryption standard. You may know that GitHub encrypts your source code

                                              Why and how GitHub encrypts sensitive database columns using ActiveRecord::Encryption
                                            • ActiveRecord(Rails)で効率的にツリー構造を扱うときに意識したいこと+開発例 | Wantedly Engineer Blog

                                              こんにちは、Wantedly で Webエンジニアをしている渡邉(@eityans) です。モチベーション・マネジメントサービスの Wantedly Pulse を開発しています。 Pulse(パルス)/ チームの状態 Slackを通じてチームの価値観を浸透させ、メンバーの抱える課題や隠れた貢献を可視化。行動のベクトルを束ね、自律して同じ価値に向かうチームを生み出す、新しいモチベーション・マネージメントツールです。 Slackを通じてメンバーの抱えるモチベーションの課題や隠れた貢献を可視化。行動のベクトルを束ね、自律して同じ価値に向かうチームを生み出します。 ... Pulseはチームの状態を可視化するツールです。会社全体をチームとして扱うこともできますが、従業員数の多い企業の場合、より小さなチームの状態を可視化したくなります。Pulseでは、上司部下の関係を設定することで、チームの設定が

                                                ActiveRecord(Rails)で効率的にツリー構造を扱うときに意識したいこと+開発例 | Wantedly Engineer Blog
                                              • 週刊Railsウォッチ(20210607前編)ActiveRecord::Relationのone?とmany?が高速化、RubyKaigi Takeout 2021登壇者募集開始ほか|TechRacho by BPS株式会社

                                                こんにちは、hachi8833です。RubyKaigi Takeout 2021の登壇者募集が始まりましたね。 CFP for RubyKaigi Takeout 2021 (the online version of RubyKaigi) is now OPEN! https://t.co/VeJ1Tv5iyr #rubykaigi — RubyKaigi (@rubykaigi) June 2, 2021 週刊Railsウォッチについて 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇 TechRachoではRubyやRailsな

                                                  週刊Railsウォッチ(20210607前編)ActiveRecord::Relationのone?とmany?が高速化、RubyKaigi Takeout 2021登壇者募集開始ほか|TechRacho by BPS株式会社
                                                • Rails(ActiveRecord)で自在にSQLを書く手段いろいろ

                                                  こんにちはー。 Railsである程度の規模の開発をしていると、ちょっと込み入った形のSQLでデータを取得したい状況が発生してきます。 今回は、そんなときに役立つActiveRecordクエリのテクニックをご紹介します。 ちなみにexecute()、arelは使いません。 (環境: Ruby 2.5.3, Rails 6.1.3) selectをゴリゴリ書く ActiveRecordのselectというメソッドがあります。 基本的な使い方としては、こんな感じで、必要なカラムだけ取得するためのものです。 users = User.all.select(:id, :name) users.first.attributes # => {"id"=>1, "name"=>"Alice"} なんですが、SELECT句を文字列で好きに書くこともできます。別名を付けておくことで、その名前で値を取得できます

                                                    Rails(ActiveRecord)で自在にSQLを書く手段いろいろ
                                                  • Rails: ActiveRecord::DelegatedType APIドキュメント(翻訳)|TechRacho by BPS株式会社

                                                    概要 MITライセンスに基づいて翻訳・公開いたします。 APIドキュメント: ActiveRecord::DelegatedType リポジトリ: rails/delegated_type.rb at main · rails/rails 原文更新日: 2021/11/03(57fe7df) ライセンス: MIT ActiveRecord::DelegatedTypeはRails 6.1以降で利用できます。delegated typeは英ママとしました。 週刊Railsウォッチ20200601 新機能: Active Recordにdelegated_typeが追加もどうぞ。 また、Rails 7ではaccepts_nested_attributes_forもサポートされています。 週刊Railsウォッチ20211115前編 delegated_typeでaccepts_nested_at

                                                      Rails: ActiveRecord::DelegatedType APIドキュメント(翻訳)|TechRacho by BPS株式会社
                                                    • ActiveRecordモデルのカラムを消すときにignored_columnsが必要な理由 - Progate Tech Blog

                                                      自己紹介 株式会社Progateサーバーサイドエンジニアのもりたんざにあです。 好きなものは卓球と筋トレです。 業務でignored_columnsの必要性や、内部で何をしているかについて調べたので、その過程でわかったことを紹介しようと思います。 前提条件 この記事の内容は https://github.com/rails/rails/tree/5-2-stable のソースコードを前提としています。 ignored_columnsとは 公式ドキュメンテーション : https://api.rubyonrails.org/classes/ActiveRecord/ModelSchema/ClassMethods.html#method-i-ignored_columns 「このカラムがデータベースのテーブルにあっても、無視してね!」とRailsのモデルに伝えるために、ActiveRecor

                                                        ActiveRecordモデルのカラムを消すときにignored_columnsが必要な理由 - Progate Tech Blog
                                                      • 週刊Railsウォッチ(20210222)ActiveRecord::Relationの新メソッドload_asyncとexcluding、Active Jobのperform_laterの改善ほか|TechRacho by BPS株式会社

                                                        週刊Railsウォッチについて 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 お気づきの点がありましたら@hachi8833までメンションをいただければ確認・対応いたします🙇 TechRachoではRubyやRailsのなど最新情報記事を平日に公開しています。TechRacho記事をいち早くお読みになりたい方はTwitterにて@techrachoのフォローをお願いします。また、タグやカテゴリごとにRSSフィードを購読することもできます(例:週刊Railsウォッチタグ) 🔗Rails: 先週の改修(Rails公式ニュースより) 今回は以下のコミットリストのChangelogを中心に見繕いました。 コミットリスト: Compa

                                                          週刊Railsウォッチ(20210222)ActiveRecord::Relationの新メソッドload_asyncとexcluding、Active Jobのperform_laterの改善ほか|TechRacho by BPS株式会社
                                                        • ActiveRecord::Relation ってなに? | ドクセル

                                                          スライド概要 皆さんは User.where(active: true).order(:age) の結果がなにを返すかご存知ですか。 User の配列が出力されるから配列が返ってくる?いいえ、違います。 普段なにげなく使っている ActiveRecord ですがこのセッションでは実際に内部でどのように動作しているのかを少し覗いてみましょう。 User.where(active: true).order(:age) がなにを返すのか、またどのようにして ActiveRecord が SQL 文を生成しているのかをライブコーディングを交えながら解説します。 普段 Rails を使っている人がもう1歩進んだ Rails の知識を一緒に学んで行きましょう。 https://kaigionrails.org/2022/talks/osyo/

                                                            ActiveRecord::Relation ってなに? | ドクセル
                                                          • 新卒から始める パフォーマンスを意識したActiveRecordの使い方 - ANDPAD Tech Blog

                                                            こんにちは!SWEの高橋(@thehighhigh)です。 この記事は ANDPAD Advent Calendar 2023の 17日目の記事です。 今年新卒として入社し、研修を終えたのちに、現在は「ANDPAD図面」というプロダクトのサーバーサイドを主に担当しています。 配属から早くも半年が経過し、プロダクトと自身の成長を実感しながら、日々楽しく開発に取り組んでいます! そんなANDPAD図面ですが、サーバーサイドは主にRuby on Railsで構築されています。 図面上に書き込みを入れることができたり、様々なオブジェクトを置くことができるというプロダクトの性質上、使われ方によっては非常に多くのデータを扱う可能性があり、また、ユーザーの業務に直結する機能を多く備えるプロダクトなので、可能な限りパフォーマンスを意識したコーディングが求められています。 Active Recordのパフォ

                                                              新卒から始める パフォーマンスを意識したActiveRecordの使い方 - ANDPAD Tech Blog
                                                            • ActiveRecord::Type::Boolean#cast の返り値が nil となるケースについて - Qiita

                                                              API などでクライアント側から渡ってきた "true"、"false"、1、0 などの値を、 Ruby の true や false として扱いたいときがある。 Ruby では false と nil 以外の値はすべて true として扱われるため、!! を先頭につけたとしても実現できない。

                                                                ActiveRecord::Type::Boolean#cast の返り値が nil となるケースについて - Qiita
                                                              • Taming Large Rails Applications with Private ActiveRecord Models

                                                                A complex system that works is invariably found to have evolved from a simple system that worked. A complex system designed from scratch never works and cannot be patched up to make it work. You have to start over with a working simple system. — Gall’s Law A new ActiveRecord instance has 373 public methods. Scaling a Rails application is difficult, but not for the reasons you might expect. The fra

                                                                • Rails 7: ActiveRecord::Base.loggerがclass_attributeで7倍高速化(翻訳)|TechRacho by BPS株式会社

                                                                  私たちの見解では、このプルリクはRails 7におけるきわめてシンプルかつ大きなパフォーマンス改善です。最近のRubyで、クラス変数の読み取りにインラインキャッシュが導入されました(#17763)1。これにより、クラス変数の値解決で複雑な継承ツリーをたどるかわりにキャッシュから値を読み取れるようになりました。Rubyでクラス変数が読み込まれると、継承ツリーにある各クラスをチェックして、そのクラス変数がツリー内の他のクラスに設定されていないことを確認する必要があります。 もうお気づきかと思いますが、これはO(n)問題になります。ツリー内のノード数が増えるにつれて、読み取りのパフォーマンスは線形に低下します。 それでは、1個のモジュールを継承するクラス、30個のモジュールを継承するクラス、最後に100個のモジュールを継承するクラスを使ったデモを見てみましょう。 require "benchma

                                                                    Rails 7: ActiveRecord::Base.loggerがclass_attributeで7倍高速化(翻訳)|TechRacho by BPS株式会社
                                                                  • 週刊Railsウォッチ: ActiveRecord::QueryLogs追加、spring gemがデフォルトから削除、fast_gettextほか(20210906前編)|TechRacho by BPS株式会社

                                                                    こんにちは、hachi8833です。今週はいよいよRubyKaigi Takeout 2021ですね。 コミュニティ有志のみなさんへ: Day 3 後 #rubykaigi の内容を踏まえ、パーティやミートアップを開催しませんか? 関連イベントをリストアップするスプレッドシートを用意しているので、賛同いただけるイベントなどご自由にご掲載ください。会期中都度周知を予定しています! https://t.co/gcquu2WMat — RubyKaigi (@rubykaigi) September 2, 2021 週刊Railsウォッチについて 各記事冒頭には🔗でパーマリンクを置いてあります: 社内やTwitterでの議論などにどうぞ 「つっつきボイス」はRailsウォッチ公開前ドラフトを(鍋のように)社内有志でつっついたときの会話の再構成です👄 お気づきの点がありましたら@hachi88

                                                                      週刊Railsウォッチ: ActiveRecord::QueryLogs追加、spring gemがデフォルトから削除、fast_gettextほか(20210906前編)|TechRacho by BPS株式会社
                                                                    • シン・ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法|TechRacho by BPS株式会社

                                                                      こんにちはgengenです。 初めに言ってしまうと、Ruby2.7の始端無しRange(beginless range)がActiveRecordのwhereに渡せるので日付検索が全部Rangeできて便利というだけの記事です。 ActiveRecordのwhereにはRangeが渡せる 「ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法」で詳しく紹介されてますが、そもそもwhereのハッシュ引数の値にRangeオブジェクトが渡せて、BETWEENと不等号を使い分けて上手いことクエリを作ってくれます。 User.where(activated_on: Date.new(2022,1,1)..Date.new(2022,12,31)).to_sql => "SELECT \"users\".* FROM \"users\" WHERE \"users\".\"activate

                                                                        シン・ActiveRecordで日付・時刻の範囲検索をシンプルに書く方法|TechRacho by BPS株式会社
                                                                      • 並列処理でActiveRecordの処理時間を短縮する - patorashのブログ

                                                                        ここ最近は並列化による処理速度アップを色々試しています。 Railsプロジェクトのデータに少々不備があることに気づいたので、それを修正するために該当データを抽出しようと思って雑にループを回したら、データ量が多いせいか、全然終了しませんでした。業を煮やした私は、これも並列化してしまおう!と思って並列化の情報を集めることに。 Rubyでの並列処理は、parallelというgemを使うと並列処理がすごく簡単にできました。 github.com parallelのいいところ parallelのいいところは、 並列処理したい対象の配列データを渡すだけでいい map, each, any?, all? などに対応している マルチプロセス、マルチスレッドの両方に対応している というところでしょうか。 簡単な使い方の例 Parallelに対して、配列を渡したら、自動的にCPUの数だけプロセスをフォークして

                                                                          並列処理でActiveRecordの処理時間を短縮する - patorashのブログ
                                                                        • ActiveRecord::EnumのI18n

                                                                          ActiveRecordのenumにI18n用の機能を提供するgemをつくった。 https://github.com/r7kamura/activerecord-enum_translation どういうものか Userがenumを利用したstatusというカラムを持っているとすると、I18n用の辞書としてこういう風なデータを用意しておけば… ja: activerecord: attributes: user: name: 名前 status: active: 利用中 inactive: 停止中 次のようにメソッドを呼び出すことで、翻訳された辞書が利用できるようになる、というやつ。 user.human_enum_name_for(:status) #=> "利用中" 技術的な難題の解決とかは全く狙っていなくて、どちらかと言うと、この手の仕組みにルールが無くてアプリ内のいろんなところに

                                                                            ActiveRecord::EnumのI18n
                                                                          • Rails 7: クエリ結果を任意の順序にできるActiveRecord::QueryMethods#in_order_of|TechRacho by BPS株式会社

                                                                            概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Rails 7 adds ActiveRecord::QueryMethods#in_order_of to return query results in a particular sequence | Saeloun Blog 原文公開日: 2021/10/05 原著者: Alkesh Ghorpade サイト: Saeloun Blog | Ruby on Rails Consulting Company based in San Francisco and Boston 週刊Railsウォッチ20210823 ActiveRecord::QueryMethods#in_order_ofを追加もどうぞ。 Rails 7: クエリ結果を任意の順序にできるActiveRecord::QueryMethods#in_order_o

                                                                              Rails 7: クエリ結果を任意の順序にできるActiveRecord::QueryMethods#in_order_of|TechRacho by BPS株式会社
                                                                            • Rails adds support for Fiber-safe ActiveRecord ConnectionPools

                                                                              Rails adds support for Fiber-safe ActiveRecord ConnectionPools Feb 23, 2022 One of the major focuses for Ruby 3 was parallelism and concurrency. A trailblazer in this space is the use of Ruby Fibers. Fibers are a concurrency mechanism that allows us to pause, loop, and resume execution while consuming far fewer context switches. It consumes less memory than threads while giving the developer contr

                                                                                Rails adds support for Fiber-safe ActiveRecord ConnectionPools
                                                                              • Rails API: ActiveRecord::AutosaveAssociation(翻訳)|TechRacho by BPS株式会社

                                                                                概要 MITライセンスに基づいて翻訳・公開いたします。 英語記事: Rails API ActiveRecord::AutosaveAssociation 原文更新日: 2021/07/30(7d9b5d4) ライセンス: MIT 訳文には適宜強調を加えています。 AutosaveAssociationは、親がsaveされるときに、関連付けられているレコードも自動的にsaveされるようにするモジュールです。saveに加えて、mark_for_destruction済みの関連付けレコードのdestroyも行います(mark_for_destructionおよびmarked_for_destruction?を参照)。 親とその関連付けのsave、およびmark_for_destruction済みの関連付けレコードのdestroyは、すべて1個のトランザクション内で行われます。これにより、データ

                                                                                  Rails API: ActiveRecord::AutosaveAssociation(翻訳)|TechRacho by BPS株式会社
                                                                                • 週刊Railsウォッチ(20191223前編)Railsセキュリティ修正6.0.2.1と5.2.4.1リリース、Ruby 2.7.0-rc2リリース、ActiveRecordのコールバック回避ほか|TechRacho by BPS株式会社

                                                                                  2019.12.23 週刊Railsウォッチ(20191223前編)Railsセキュリティ修正6.0.2.1と5.2.4.1リリース、Ruby 2.7.0-rc2リリース、ActiveRecordのコールバック回避ほか こんにちは、hachi8833です。今年最後のRailsウォッチ前編をお送りします。Ruby 2.7のカウントダウンが始まっていますので、クリスマスにはリリースされるでしょう。 リリース: Ruby 2.7.0-rc1 Released で、rc1を試したいけど、Homebrewのruby-buildにはなかなか最新版が上がってこないから、まだインストールできない〜!というときに読むQiita記事を書きました。 Homebrewのruby-buildの更新を待たずにrbenvで最新版のRubyをインストールする方法 - Qiita https://t.co/UpYp2fkL

                                                                                    週刊Railsウォッチ(20191223前編)Railsセキュリティ修正6.0.2.1と5.2.4.1リリース、Ruby 2.7.0-rc2リリース、ActiveRecordのコールバック回避ほか|TechRacho by BPS株式会社