Madogiwa Blog

主に技術系の学習メモに使っていきます。

RubyonRails

ActiveRecord::QueryMethods#whereで発行されるwhereの部分だけのSQLを取得するMEMO

はじめに 下記のような形でActiveRecordが発行するSQLからWHERE句の部分のSQLだけを取得したいケースがあり、色々やり方とか調べたのでMEMO✍ はじめに やりたかったこと where部分だけのSQLを取得する方法 参考 やりたかったこと 今回やりたかったのは、下記…

`ActiveRecord::Relation#explain`を拡張してJSON形式のEXPLAIN結果を取得出来るgemを作った💎

前に下記の記事で紹介したActiveRecord::Relation#explainでJSON形式を取得出来るモンキーパッチを紹介したのですが、 今回はそれをGemとして公開したのでそれについて書きます✨ madogiwa0124.hatenablog.com Gemはactive_record_json_explainとしてRubyGems…

ActiveRecordにモンキーパッチを当ててJSON形式のEXPLAINを取得出来るようにする🐵

ActiveRecord::Relation#explainを使うと、実行するSQLのEXPLAINの結果を取得出来ます。ActiveRecord::Relation#explainではデフォルト設定でしか結果を取得出来なのですが、EXPLAINにはオプションが設定できます。 特にMySQLではオプティマイザが評価したSQ…

RubyonRails: ActiveJobのperform_laterが実行されてadapterがenqueueするまでの挙動を追ってみた。

最近Sidekiqを扱うことが割とあり、ActiveJob経由で使ったときの挙動をいまいち把握出来てなかったのでコードを読んでみて、内容とかをざっくりメモしておきます ちなみに読んだのはrailsの6-stableブランチのコードです。 rails/activejob at 6-0-stable · …

RailsでIDの可逆難読化する方法のメモ📝

最近、IDの可逆な方式で難読化したいけどfriendly_idみたいなmigrationが伴うものは、ちょっと避けたかったので色々と方法を考えたり人に教えてもらったりしたので、いろいろ方法とかをメモしておきます。 github.com やりたいこと ActiveRecordでUUIDを使う…

CommitteeでOpenAPIによるAPI定義ドキュメントをもとにリクエスト/レスポンス形式をチェックする

最近、Nuxt.jsとRailsでSPAのアプリケーションを作っていて、schema管理をOpenAPIで行ってみているのですが、 せっかくなのでCommitteeを使ってCIで検証するようしてみたので導入方法とかをメモしておきます Committeeとは? Committeeの使い方 Committeeを…

rails 6の新機能`insert_all`を試してみたのでMEMO📝

railsでbulk insertするときには今まではactiverecord-importが使うことが多かったと思いますが、 rails 6からはActiveRecord::Persistence#insert_allが追加されたので標準機能を使ってbulk insertを行うことができるようになりました。 github.com 実際に…

DockerでNuxt.jsとRailsの環境を作った

昨今、フロントとバックエンドを別々のリポジトリにしてOpenApiでインターフェースを定義して進むプロジェクトが増えてきていると感じていますが、OpenApiとか全然付いていけてないので個人でNuxt.jsとRuby on Railsが別々のコンテナで立ち上がる環境を作っ…

Railsで確認画面を挟んで登録する場合どう実装するのがよさそうか考えてみた

はじめに Railsで確認画面を実装すると毎回、ベストプラクティス的な解決方法が見つからず悩むので、どういう実装をするのが良いのか少し感がてみました。(私の個人的な見解です‍♂️) はじめに 確認画面の難しさ よく見るやり方 その他のやり方を検討してみる…

Rspec、Capybaraを使ったfeature specでJavaScript側でも指定した時間で固定できるHelperを作った

今回はタイトルどおり、Rspec、Capybaraを使ったfeature specでJavaScript側の時間を操作するhelperを作ってみたので考慮漏れとかあるかもですが書きます。 ↓コードだけみたい人はこちら rspecを使ったfeature specでjavascriptの時間を指定時間に固定するhe…

ブラウザの離脱イベント時にリクエストを投げるときにはsendBeaconを使ったほうが良いという話

最近、下記のようなページの離脱時のイベントを補足してサーバーにリクエストを投げるような処理を実装したのですが、 import axios from axios; window.addEventListener('beforeunload', () => { axios.post('/logs', { event: 'beforeunload' }); }) ペー…

webpacker3系からwebpacker4系へのアップグレードでハマったので手順とかMemo✍

最近自分の個人サービスのRailsアプリケーションをWebpaker3系(3.5.5)から4系(4.0.7)にアップグレードしたのですが、割とハマったので手順をメモしておく✍ ちなみにVue.jsを使っている場合の手順になるので、ご注意ください⚠ とりあえず手順だけ package.jso…

Rails Developers Beer Bash 〜Railsのトレンドとこれから〜でパネラーとして登壇してきました🍺

今回社内でRails 6へのバージョンアップを担当しているということもあり、下記イベントのパネルディレクトリのパネラーとして登壇させて頂きました 特に内容に深く触れるとかは無いですが、日記的に記録として残しておきます✍ techplay.jp LTとかではなかっ…

Ruby on Rails: includesがどうやってpreloadとeager_loadを使い分けてるか調べてみた。

N+1を解消する方法としてincludesを使うことが多いと思います。includesを使うrailsがよしなにpreloadとeager_loadを使い分けてくれますが、その使い分けの条件を知らずに、とりあえずincludesを使ってしまうと思いも寄らないSQLが実行されてしまう恐れがあ…

Rails GuidesのConfiguring Rails Applicationsの項目にcontributeしました📕

rails guideのconfig.cache_classesの説明を修正してcontributeしました github.com rails 6にversion upする中でRailsDiffを見てたら、テスト環境のconfig.cache_classesのデフォルト値が変わっていましたが、 http://railsdiff.org/5.2.3/6.0.0 guideの説…

rails勉強BotのRailsのバージョンを6.0.0.rc1にアップグレードしました 🎉

みなさん、こんばんは。まどぎわです(・∀・) 運用しているrails勉強Botのrailsのバージョンを5.2.3から6.0.0.rc1にアップグレードしました twitter.com これでrails 6の予習がはかどりますね!! 今回は、rails 5.2.3からrails 6.0.0.rc1へのアップグレード手…

rails勉強botでActionViewのメソッドが呟かれるようになりました🎉

みなさん、こんばんは。 昨日までrubykaigi2019で福岡に行ってたまどぎわです 表題の通り、rails勉強botでActionViewのメソッドがつぶやかれるようになりました つぶやくClassにActionViewが追加されましたView周りのメソッド意外と忘れがちなので、気になる…

railsとVueを使って無限スクロール機能を実装するMEMO🌀

自分が作っているSPAっぽいrailsのサービスでrailsとVueで無限スクロール∞を作ったので、そのやり方をメモしておきますm( )m つくるもの 使うもの 実際のコード View Controller Model おわりに 参考 つくるもの 下記のようにスクロール時にAPIでデータを取…

rails: Rssフィードの作り方MEMO

最近、railsでrssフィードを作ったので、そのへんのやり方をメモしておきますm( )m 作るもの 実際のコード 参考 作るもの 今回は、Rssフィード(Feed)とそれに紐づく記事(Entry)を元にRSSフィードを作成します。 イメージは/feeds/id.rssにアクセスした際に下…

railsのViewからVueの単一ファイルコンポーネントへモデルのインスタンスを受け渡すMEMO

railsのviewからVueの単一ファイルコンポーネントへモデルのインスタンスをいい感じに渡す方法を模索して、結構ハマってたのですが、自分なりに落ち着いたのでやり方をメモしておきます✍ 今回やりたかったこと どうやったか 参考 今回やりたかったこと やり…

railsとruby標準ライブラリで作るRSSリーダー的なやつの作り方Memo📝

はじめに 作るもの 使うもの 作り方 モデルを作る RSSを読み込んでParseする エントリーを取得して保存する 保存したエントリーを表示する おわりに 参考 はじめに みなさん、こんばんは。まどぎわです(・∀・) rubyの標準ライブラリにRSS用のライブラリがあ…

FactoryBotでtrait付きの関連(Association)を定義する

こんにちは、まどぎわです(・∀・) 今回はFactoryBotでtrait付きの関連(Association)を定義する方法を知ったのでメモしておきます✍ 前提: Quizの正解数ランキングを集計する処理の検証 trait付きの関連(Association)を定義してリファクタリング 参考 前提: Qu…

RubyonRails: 検索フォームから値を受け取って、値があれば検索するときの実装を考えてみる🤔

みなさん、こんばんは。まどぎわです。 今回は検索処理で値があるときだけ絞り込みを行うときにどうやって実装するのが良いのかなと、すこし考えたので検討過程をメモしておきます。 はじめに まずは何も考えず実装してみる(かなり良くない) とりあえず検索…

RubyonRails:whereでサブクエリを使って効率よく対象を絞って取得する方法👀

みなさん、こんにちは。まどぎわです(・∀・) 今回は、ちょっと複雑な条件をサブクエリを使って効率よく取得する方法について書こうと思います✍ 今回のケース 対応案を考えてみる 公開中の投稿を変数に入れて紐づくコメントを取得する(いまいち) pluckを使っ…

railsの勉強のためのTwitterBotをリリースしました📢

みなさん、こんばんは。まどぎわです(・∀・) 本日、Rails勉強BotというTwitterBotをリリースしました! railsを勉強している人には役に立つと思うので、この記事で使い方など紹介します✨ rails勉強Botとは? rails勉強Botの活用方法 どうやって作ってるの? …

RubyOnRails:FormObjectを使って複雑なフォームの処理を良い感じに実装するメモ✍

みなさん、こんにちは!まどぎわです(・∀・) 今回は、Railsのデザインパターン(?)の一つのFormObjectについて学んだので、使い方とかをメモしておきます✍ FormObjectってなに? FormObjectとは、ActiveModelをincludeしたClassにフォームで扱うプロパティをも…

【Ruby on Rails】Rails GuidesにPRを出して、Railsのコントリビューターになったよって話

はじめに みなさん、こんにちは、まどぎわです(・∀・) この前Railsのコントリビューターになりました! 実際にマージされたのが下記PRです github.com 内容としては、Rails Guidesを1文字修正しただけなのですが # bofore If it says something like "Rails …

【Rails】Webpackerを使ってRailsにフロントエンド開発環境を作ってみた

みなさん、こんにちは。まどぎわです(・∀・) 今日は、RailsアプリにWebpackerを使って、フロントエンド環境を整えて少し開発してみたので、そのあたりをブログに整理しておこうと思います WebPackerとは? 今回やったこと Webpackerの導入手順 フロントエン…

RubyonRails:current_userへのメソッド呼び出しで発生したN+1に対応する

まどぎわです(・∀・)今日は、current_userへのN+1問題の対応についてです! railsで開発していると、N+1問題にぶつかって対応することが多いかと思います。 普通であれば、DBアクセス時にincludes等を使って関連モデルをキャッシュしておくことで対応するこ…

RubyonRails:rails5.2の新機能「ActiveStrage」で画像アップロード処理をお手軽に実装してみる

Rails5.2でActiveStrageというファイルアップロード系の機能が新しく追加されましたね(・∀・) ちょっと自分が作っているアプリで使ってみたので使い方をφ(..)メモメモ ActiveStrageとは? ActiveStrageとは、Rails5.2から実装されたファイルアップロード機能…