バックエンド

FactoryBot内でDBに保存されているデータが使いたい

こんにちは!oda@エンジニア1年目です! 先日、FactoryBotでテストデータを作成する際にDBに保存されているデータを使いたかったのですが、方法がすぐにはわかりませんでした。 今回は、その方法について調べた内容を具体例とともにまとめました。 事前準備 …

数秘術の誕生数を SQL で分析(前編)

数秘術の誕生数を題材にSQLで統計を取ってみます。各誕生数の割合を算出するのがゴールです。せっかくなので年代別に統計を出しましょう。

protect_from_forgeryについて

こんにちは!oda@エンジニア1年目です! 以前の記事で、今後の課題としていたprotect_from_forgeryについて調べたので、今日はその内容について書きます。 調べる中で、コントローラーにprotect_from_forgeryを追加すればActionController::InvalidAuthentic…

Ruby の Enumerator を dis る

こんにちは、masm11 です。 Ruby には Enumerator というクラスがあります。 Rails で、 self.response_body = Enumerator.new { ... } とすると、response body をその場で生成するのでなく、 あとで Enumerator のブロックが呼び出され、そこで生成させて…

ActionController::InvalidAuthenticityTokenの解消

こんにちは!oda@エンジニア1年目です! 最近、インゲージ入社前に個人的に作成したRailsアプリを、業務で学んだことを活かして作り替えるということをやっていました。 今日は、その中で発生したエラーについて書きたいと思います。 どんなエラーが発生した…

`rbenv install` で BUILD FAILED

こんにちは、ryohei_515 です。 Ruby を扱う開発者であれば、rbenv を扱う機会があると思います。 今回ローカル作業用のプログラムを改善しようと思い、Ruby の 2.7 系の最新のバージョンをインストールしたのですが、 BUILD FAILED とエラーが出たので、対…

noneメソッドを通して学んだこと

こんにちは!oda@エンジニア1年目です! 先日、Railsで空のモデルオブジェクトを取得したいということがありました。 今日はその時に学んだことついて、書いてみようと思います。 事前準備 今回はBookモデルを例に進めていきます。 Bookモデルには、次のデー…

【Rails+PostgreSQL】importでの一括UPDATE速度検証

大量データをデータベースに一括登録したいとき、BULK INSERT がよく利用されます。 今回は INSERT ではなく UPDATE の処理速度について検証してみました。 Ruby on Rails + PostgreSQL での検証です。 というわけではじめまして。インゲージには9月に入社し…

APIから取得したデータを画面に表示する

こんにちは。oda@エンジニア1年目です。 前回の記事では、json形式で取得したデータを返すAPIを作成しました。 今回は、この取得したデータをAjaxで画面に表示させてみます。 (以下、Rails 6.1.6を使用しています。) 画面の準備 画面を表示させるために次…

APIをつくってみる

こんにちは。oda@エンジニア1年目です。 業務でAPIにリクエストを送って、返ってきたデータを非同期で画面に描画するという処理をすることがあります。 最近、ふと思いました。 「APIを自分で作ったことがないぞ」 というわけで、今回は自分でAPIを作ってみ…

Ruby で SMTPError#message を使う場合の注意点

やっと「シン・ウルトラマン」を映画館で観てきた id:kizashi1122 です。 弊社サービス Re:lation ではメールを扱うことが多いです。送受信のエラーもハンドルしています。 今回ご紹介するのはメール送信時のエラーについてです。 メールアドレスの @ より前…

Integer型のカラムにdefaultを設定するとレコードの検索時間はどうなる?

こんにちは。oda@エンジニア1年目です。 先日、マイグレーションファイルを使って、テーブルにInteger型のカラムを追加しました。 必要なレコードにのみデータを入れて、その他はnullにしていたところ、次のような指摘をいただきました。 「default: 0を設…

ActiveRecord を色々試せる環境を作ってみる

こんにちは。ryohei515です。 実務で ActiveRecord の動作を確認したいときは、開発環境内の Rails Console で動かしてみるのですが、プライベートで確認したい時用に環境を作っておきたいと思い、備忘録的に残しておきます。 過去の記事で、サンプルデータ…

enumを使ってみる

こんにちは!oda@エンジニア1年目です! 業務では、今まで使っていなかったメソッドなど、様々なコードに触れる機会があります。 今回は、その中でもRuby on Railsのenumについて、整理してみたいと思います。 (以下、Rails 7.0.2.3を使用しています。) …

sidekiq の優先度設定

id:kizashi1122 です。 恥ずかしながらも最近ちゃんと理解した Sidekiq の優先度設定について書きたいと思います。 結論 github.com ここのオフィシャルをちゃんと読みましょう。 優先度と重みの設定方法 Sidekiq のキューの設定は設定ファイルに記述するこ…

migrationファイルの「change」と「up、down」

こんにちは! 4月に入社した新人エンジニアのodaです。 Ruby on Railsを使ってアプリケーション開発をされている方は、マイグレーション機能を使ってテーブル定義に変更を加えているかと思います。 私自身、個人でRailsアプリを作成しているときは、もちろん…

【SQL】NOT EXISTS で最新(MAX)の値を取得する

こんにちは。ryohei515です。 例えば履歴を蓄積するようなテーブルがあるとき、顧客毎の履歴の最新値を取りたいことがあると思います。 私はありました。その時、最新値を NOT EXISTS で取得するようにしたことで、パフォーマンスを改善できたので、残してお…

Ruby の proc や lambda でキーワード引数を使う方法

どうも、記憶力皆無の @shutooike です。 Ruby の proc や lambda でキーワード引数(keyword arguments)を使う方法いつも忘れるので未来の自分に向けて記事にします。 proc # キーワード引数 proc = Proc.new { |species:, name:| puts "吾輩は#{species}…

0埋めされていない数字文字列をソートしたい

どうも、にしむらです。今回はRails5.2 PostgreSQLの話です。 messages テーブル に 文字型 str_id に数字が0埋めなしで保存されている場合は以下のようにソートされます。 select * from messages order by str_id; id | str_id ----+------- 50 | 1000 47 …

Ruby のコードを読む! 別スレッドで例外を起こす

こんにちは masm11 です。 以前の記事で Timeout.timeout のコードを読みました。 記事はこちらです。 blog.ingage.jp 新たなスレッドを起動し、時間になったら元のスレッドで 例外を発生させているらしい、ということは解りました。 しかし、それだけでは s…

Ruby の Timeout.timeout の実装を読む

こんにちは、masm11 です。 Ruby の Timeout モジュールは便利で、 gs = TCPServer.open(0) Timeout.timeout(5) do gs.accept end このように自由にタイムアウトを設定できます。 今回はこの実装について見ていきたいと思います。 実装を見る Ruby のバージ…

N+1問題について勉強会で発表してみた

ryohei515です。 Ruby on Railsを使う上で、N+1問題は避けては通れない問題です。 インゲージでは週に1度、社内勉強会を行っているのですが、今週は私が発表担当だったため、このN+1問題を知識整理がてら、社内勉強会で共有しました。 簡単な内容ではありま…

PostgreSQLでパフォーマンスを比較してみた (EXISTSとINNER JOIN)

はじめまして。5月に入社したryohei515です。 前職ではOracleを使ってSQLを書く機会がよくあり、パフォーマンスチューニング等も行ってきました。 インゲージに入社してからSQLを書く機会があったのですが、DBがPostgreSQLであるため、これまで使っていた細…

RSpec の spec type を独自フォルダ配下の spec にも自動で付与したい

おはようございます! 最近 DMM Books の70%OFF祭りで読みたかった技術書を50冊 *1 ほど買い込んだ @shutooike です! 前回 と同様に、今回も整備中に見つけた RSpec 小ネタを共有します。 前提条件 rspec-rails: 3.9.0 spec type の自動付与とは? # spec/r…

RSpec で特定の spec type の時だけ before フックを動かしたい

おはようございます! 最近は隙間時間にインゲージのテスト環境を整備をしている @shutooike です! 今回は整備中に見つけた RSpec 小ネタを共有します。 前提条件 rspec-rails: 3.9.0 やりたいこと RSpec で特定の spec type の時だけ before フックを動か…

ActiveJob で queue を動的に指定する3つの方法

おはようございます。 @shutooike です! 業務上であるジョブのキューを条件によって動的に変えたい場面に遭遇し、ActiveJobのソースを読んだのでメモを残しておきます。 前提条件 Rails version: 5.2 queue_adapter: Sidekiq 対象のジョブクラスはこんな感…

MessageEncryptor の互換性を調べてみた

こんにちは、masm11 です。 Rails に MessageEncryptor というクラスがあります。 何かを暗号化/復号する際に便利ですね。 例えば、 KEY = 'somekeysomekeysomekeysomekeysomekeysomekeysomekey' enc = ActiveSupport::MessageEncryptor.new(KEY, cipher: 'a…

Rails 5.2 で Rails 6 の credentials 機能を使う

こんにちは、masm11 です。 今回は久しぶりに Rails について書きたいと思います。 Rails 5.1~5.2 で credentials 機能が一新され、 credentials.yml.enc と master.key になりましたね。 そして Rails 6 ではそれを環境ごとに用意できるようになりました。…

Rails 6.1 つまみ食い② : ActiveStorage の永続的なURL

おはようございます! 2021年はもっとJSと仲良くなりたい @shutooike です! 今回試すのは ActiveStorage の Permanent URLs です。 セットアップ blog.ingage.jp 前回の記事↑で作った Rails アプリを今回も使います! まず ActiveStorage をインストールし…

Ruby の with_index を追う

こんにちは、masm11 です。 先日、Ruby の with_index メソッドを知り、衝撃を受けました。 今回は使い方を簡単に紹介し、更に with_index の実装に迫りたいと思います。 with_index の使い方 Ruby の Array には、Array#eachメソッドがありますね。 array.e…