Madogiwa Blog

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

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

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

JavaScriptでhidden等の画面に表示されてない任意の文字列をクリップボードにコピーさせる方法

JavaScriptでクリップボードにコピーさせる方法として、select()して、document.execCommand("copy")を呼び出すことで、要素を選択してクリップボードへのコピーコマンドを呼び出す方法を採用することが多いと思うのですが、 async function clipboardCopy(s…

Webpackでentryとentryを読み込むhtmlを動的に設定するMEMO

Webpackを使って複数entryを指定して、それらを読み込むhtmlをhtml-webpack-pluginを使って用意すると下記のような感じの設定になるかと思うのですが、 これだとfileが増えるたびにwebpack.config.jsを変更しないといけないので不便です。。。 module.export…

Vue.jsでVue.extendを使ってTypeScriptで書くときのMEMO

Vue.jsをTypeScriptで書くときには、vue-class-componentやvue-propaty-decoratorを使うような情報ふが多いですが、Vue.extendを使うとそれらを使わないピュアなVue.jsでもTypeScriptを使って書くことが出来ます。 jp.vuejs.org そのへんの書き方とかを、あ…

Webpackで構築したTypeScript + Vue環境で`Uncaught TypeError: Cannot set property 'render' of undefined` が発生する

事象 WebpackでTypeScript + Vue.jsの環境構築時にlang=tsを指定したComponentを.tsファイルでimportしたときに下記のエラーが発生し、コンポーネントを読み込むことが出来なかった componentNormalizer.js:26 Uncaught TypeError: Cannot set property 'ren…

Webpackを色々触ってみたので基本的な使い方とかをMEMO🕸📦

RailsにはWebpackerとか設定をいい感じにやってくれるものがありますが、 最近脱WebpackerしてWebpackをそのまま使ったり、Simpackerを導入したりするような話を耳にすることが多くなってきました。 inside.pixiv.blog github.com そんな中で、Webpackが何も…

E2EテストでJavaScript上の時間を固定するgem `travel_to_javascript`を作りました💎✨

JavaScriptの処理で時間に依存してたりする実装を行っているとE2Eのときに時間を固定したいときが稀によくあるのですが、 travel_toを使っても結局はサーバーサイド上の時刻しか固定出来ません というわけでJavaScript上の時刻を固定するtravel_to_javascrip…

`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 · …

GitHub ActionsでGitHub Pagesに自動デプロイするワークフローを作った

今までCIといえばCircleCIかTravis CIを使うことが多くGitHub Actionsを使ったことがなかったので、 今回はGitHub Pagesで運用している自分のポートフォリオサイトをGiHub ActionでCIを回して 自動的にデプロイ(gh-pagesブランチにpush)するワークフローを作…

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

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

自作フレームワークで動的URLに対応したときの方針とか考えたこと📝

github.com /hoge/1/fuga/2にGETでアクセスしたときに下記のロジックを実行させたいときにどうするかちょっと悩んだので考えたこととかメモしておく。 router.get '/hoge/:hoge_id/fuga/:fuga_id' do request.params['id'] end 今までは完全一致でパスの検証…

Rubyのmethod_missingの使い方MEMO🔯

最近Rubyのメタプロ本を再読して、method_missingを使った実装を試してみたので使い方とかメモしておきます method_missingとは? method_missingを使ってみる method_missingを使ってもrespond_to?をtrueにしたい おわりに method_missingとは? 呼びだされ…

オレオレWebフレームワークのv0.1.2をリリースしました🥳

オレオレWebフレームワークのv0.1.2をリリースしました github.com 今回のアップデートで、unicornやpumaといったRack::Handlerに対応したアプリケーションサーバーであれば好きなものを使えるようになりました 変更方法は簡単でGemfileにアプリケーションサ…

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

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

Nuxt.jsのプロジェクトにJestを導入するMEMO👢

最近Nuxt.jsで作成しているアプリケーションに後からjestを導入したので、その辺の手順をメモしておきます Jestとは? Nuxt.jsにJestを導入する 前提 依存ライブラリのインストール Jestの設定 Jestの実行コマンドを追加 テスト用のファイル.spec.jsを追加 …

Nuxt.jsに後からTypeSctiptを導入するときのMEMO📝

最近Nuxt.jsで作ったプロジェクトを作成後に後からTypeScriptを導入したときに色々とハマりどころがあったのでメモしておく。 前提 今回のNuxt.jsとTypeScriptのバージョン情報は下記のとおりです。 nuxt: 2.10.2 typescript: 3.7.4 また私が最初にNuxt.jsの…

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

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

あなたの知ってるRubyGemsTipsというイベントでGemの依存関係まわりの話でLTしました💎

先日下記のイベントでLT登壇してきました。 (LTでイベント登壇するのは初めてだったので実績解除した) connpass.com 資料はこちら speakerdeck.com 内容は、bundle gemでGemを作ったときに依存するgemをGemfileとgemspecどっちに書くか的な話でした。 最終的…

OpenAPIとは一体何なのか調べたのでMEMO

最近、バックエンドはRails(APIモード)、フロントはNuxt.jsといったフロントエンドとバックエンドが別々で、APIでやり取りさせるような構成が多くなってきました。 そういう場合にバックエンドとフロントエンドのIF(スキーマ)を管理するのにOpenAPIというの…

SQL(PostgreSQL): EXISTSとINとINNER JOIN、どれが一番パフォーマンスが良いのか🤔

SQLでなんかしらの条件でレコードを絞り込むときのやり方には、複数のやり方がありますが、どれが一番効率が良いのか調べてみました 前提条件 実行計画を見てみる IN EXISTS INNER JOIN 結果 参考 前提条件 今回はpostgresqlで調べていますバージョン等の情…

2019年振り返り

今年も一年が終わるということで今年も振り返ってみる。 今年の振り返り アウトプット BLOG BLOGは、今年1年で56記事書いてました1週間に1.2記事ぐらい書いてるので、そこそこ書いてた ちょっと気になった記事をpickupして載せときます。 madogiwa0124.haten…

Ruby: lamdaを使っていい感じにロジックを変数に入れてスッキリ書く

みなさんRubyのlamdaを使っていますか?lamdaを使うとロジックを変数にいれて抽出するようなことが出来ます。これを使うと複雑なロジックを変数に入れて名前をつけられたり、いろいろとスッキリかけるケースが多そうな気がしてきたのメモしておきます lamda…

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

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

Ruby: gem istallを実行してからgemがinstallされるまでの実装の流れを途中まで追ってみた

普段自分が何気なく実行しているgem installが実際にどのように行われれているのか気になったのでコードを読んで流れを追ってみました ※今回読んだのはrubygemsのstableなブランチを思われる3.0のコードです。 GitHub - rubygems/rubygems at 3.0 gem instal…

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

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

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

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

並列データ転送ツールembulkの実行環境(Docker)とサンプルを作ったので使い方とかをメモ📝

業務でちょっとembulkを触る機会があって、いろいろ触ってみたかったのでDockerを使った実行環境とサンプルを使って少しわかってきたので使い方とか概要をメモしておきます embulkとは? embulkとは下記で記載しているように、色々なファイルとかデータベー…

自作RubyGemで実行コマンドを作る方法

最近自作フレームワークにrails newのようなコマンドを追加したくてRubyGemで実行コマンドを作る方法について調べたのでメモしておきます github.com 実行コマンドとは? 実行コマンドというのはrails newやrspecといったRubyのコード外からgemのコードを呼…