バックエンド
大量データをデータベースに一括登録したいとき、BULK INSERT がよく利用されます。 今回は INSERT ではなく UPDATE の処理速度について検証してみました。 Ruby on Rails + PostgreSQL での検証です。 というわけではじめまして。インゲージには9月に入社し…
こんにちは。oda@エンジニア1年目です。 前回の記事では、json形式で取得したデータを返すAPIを作成しました。 今回は、この取得したデータをAjaxで画面に表示させてみます。 (以下、Rails 6.1.6を使用しています。) 画面の準備 画面を表示させるために次…
こんにちは。oda@エンジニア1年目です。 業務でAPIにリクエストを送って、返ってきたデータを非同期で画面に描画するという処理をすることがあります。 最近、ふと思いました。 「APIを自分で作ったことがないぞ」 というわけで、今回は自分でAPIを作ってみ…
やっと「シン・ウルトラマン」を映画館で観てきた id:kizashi1122 です。 弊社サービス Re:lation ではメールを扱うことが多いです。送受信のエラーもハンドルしています。 今回ご紹介するのはメール送信時のエラーについてです。 メールアドレスの @ より前…
こんにちは。oda@エンジニア1年目です。 先日、マイグレーションファイルを使って、テーブルにInteger型のカラムを追加しました。 必要なレコードにのみデータを入れて、その他はnullにしていたところ、次のような指摘をいただきました。 「default: 0を設…
こんにちは。ryohei515です。 実務で ActiveRecord の動作を確認したいときは、開発環境内の Rails Console で動かしてみるのですが、プライベートで確認したい時用に環境を作っておきたいと思い、備忘録的に残しておきます。 過去の記事で、サンプルデータ…
こんにちは!oda@エンジニア1年目です! 業務では、今まで使っていなかったメソッドなど、様々なコードに触れる機会があります。 今回は、その中でもRuby on Railsのenumについて、整理してみたいと思います。 (以下、Rails 7.0.2.3を使用しています。) …
id:kizashi1122 です。 恥ずかしながらも最近ちゃんと理解した Sidekiq の優先度設定について書きたいと思います。 結論 github.com ここのオフィシャルをちゃんと読みましょう。 優先度と重みの設定方法 Sidekiq のキューの設定は設定ファイルに記述するこ…
こんにちは! 4月に入社した新人エンジニアのodaです。 Ruby on Railsを使ってアプリケーション開発をされている方は、マイグレーション機能を使ってテーブル定義に変更を加えているかと思います。 私自身、個人でRailsアプリを作成しているときは、もちろん…
こんにちは。ryohei515です。 例えば履歴を蓄積するようなテーブルがあるとき、顧客毎の履歴の最新値を取りたいことがあると思います。 私はありました。その時、最新値を NOT EXISTS で取得するようにしたことで、パフォーマンスを改善できたので、残してお…
どうも、記憶力皆無の @shutooike です。 Ruby の proc や lambda でキーワード引数(keyword arguments)を使う方法いつも忘れるので未来の自分に向けて記事にします。 proc # キーワード引数 proc = Proc.new { |species:, name:| puts "吾輩は#{species}…
どうも、にしむらです。今回はRails5.2 PostgreSQLの話です。 messages テーブル に 文字型 str_id に数字が0埋めなしで保存されている場合は以下のようにソートされます。 select * from messages order by str_id; id | str_id ----+------- 50 | 1000 47 …
こんにちは masm11 です。 以前の記事で Timeout.timeout のコードを読みました。 記事はこちらです。 blog.ingage.jp 新たなスレッドを起動し、時間になったら元のスレッドで 例外を発生させているらしい、ということは解りました。 しかし、それだけでは s…
こんにちは、masm11 です。 Ruby の Timeout モジュールは便利で、 gs = TCPServer.open(0) Timeout.timeout(5) do gs.accept end このように自由にタイムアウトを設定できます。 今回はこの実装について見ていきたいと思います。 実装を見る Ruby のバージ…
ryohei515です。 Ruby on Railsを使う上で、N+1問題は避けては通れない問題です。 インゲージでは週に1度、社内勉強会を行っているのですが、今週は私が発表担当だったため、このN+1問題を知識整理がてら、社内勉強会で共有しました。 簡単な内容ではありま…
はじめまして。5月に入社したryohei515です。 前職ではOracleを使ってSQLを書く機会がよくあり、パフォーマンスチューニング等も行ってきました。 インゲージに入社してからSQLを書く機会があったのですが、DBがPostgreSQLであるため、これまで使っていた細…
おはようございます! 最近 DMM Books の70%OFF祭りで読みたかった技術書を50冊 *1 ほど買い込んだ @shutooike です! 前回 と同様に、今回も整備中に見つけた RSpec 小ネタを共有します。 前提条件 rspec-rails: 3.9.0 spec type の自動付与とは? # spec/r…
おはようございます! 最近は隙間時間にインゲージのテスト環境を整備をしている @shutooike です! 今回は整備中に見つけた RSpec 小ネタを共有します。 前提条件 rspec-rails: 3.9.0 やりたいこと RSpec で特定の spec type の時だけ before フックを動か…
おはようございます。 @shutooike です! 業務上であるジョブのキューを条件によって動的に変えたい場面に遭遇し、ActiveJobのソースを読んだのでメモを残しておきます。 前提条件 Rails version: 5.2 queue_adapter: Sidekiq 対象のジョブクラスはこんな感…
こんにちは、masm11 です。 Rails に MessageEncryptor というクラスがあります。 何かを暗号化/復号する際に便利ですね。 例えば、 KEY = 'somekeysomekeysomekeysomekeysomekeysomekeysomekey' enc = ActiveSupport::MessageEncryptor.new(KEY, cipher: 'a…
こんにちは、masm11 です。 今回は久しぶりに Rails について書きたいと思います。 Rails 5.1~5.2 で credentials 機能が一新され、 credentials.yml.enc と master.key になりましたね。 そして Rails 6 ではそれを環境ごとに用意できるようになりました。…
おはようございます! 2021年はもっとJSと仲良くなりたい @shutooike です! 今回試すのは ActiveStorage の Permanent URLs です。 セットアップ blog.ingage.jp 前回の記事↑で作った Rails アプリを今回も使います! まず ActiveStorage をインストールし…
こんにちは、masm11 です。 先日、Ruby の with_index メソッドを知り、衝撃を受けました。 今回は使い方を簡単に紹介し、更に with_index の実装に迫りたいと思います。 with_index の使い方 Ruby の Array には、Array#eachメソッドがありますね。 array.e…
明けましておめでとうございます。masm11 です。今年もよろしくお願いします! grape をご存知でしょうか? Rails で API を作る時に便利ですね。 今回は、grape を使った API で URI パラメータとしてメールアドレスを受け取ろうと してハマったので、ご紹介…
おはようございます! 公私ともに2020年を納めきれるか心配になってきた @shutooike です。 今回から数回に亘って Rails 6.1 の新機能を浅く広くつまみ食いしていこうと思います! セットアップ techracho.bpsinc.jp こちらの記事を参考に dip を使って環境…
はじめまして! 8月にインゲージに入社したエンジニア1年生の @shutooike です!(保険) 突然ですが、弊社サービスの設定系のテーブルにはその設定を誰が作成・更新したものかを記録するために created_by, updated_by というログインユーザーのIDを入れる…
こんにちは、masm11 です。 突然ですが、今回は、負の整数を正の整数で割った時の余りは 0 以上なのか 0 以下なのか、 という話を書きたいと思います。 具体的には、-22 % 3 はいくつなのか、というお話です。 実は、言語によって違うのです… 2 になるものた…
こんにちは、masm11 です。 Ruby で、「このコードのここに来た時、どこからどう呼ばれてきたのか知りたい!」ということは ありませんか? よくあると思います。 おそらく最近の IDE なら、問題なく、いつでも見られるのでしょう、きっと。 しかし私はそうい…
前回のエントリでは、検索アルゴリズムとしては単純な、でも弊社のサービスにはマッチしている N-gram を採用しているということをお伝えしました 。また Elasticsearch ではどういう設定しているかもお伝えしました。 検索結果のハイライト(highlighting)…
こんにちは、masm11 です。 今回は、RDBMS で複数行の UPDATE すると割と簡単に起きるデッドロックを回避する方法を探ります。 Rails を用い、RDBMS としては PostgreSQL を使います。 準備 まずは、Rails のプロジェクトを作ります。 rails new proj --skip…