Madogiwa Blog

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

Ruby

Ruby on Rails: AikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しました

認証周りの勉強がてらAikotobaというEmail/Passwordによるシンプルな認証ライブラリを作成しましたので使い方とかをメモしておきます。 rubygems.org Aikotobaとは? Rails engineを使ったEmail/Passwordによるシンプルな認証ライブラリを作成できるライブラ…

Ruby on Rails: Rollbarに連携する時に属性値等々をマスキングするMEMO

エラー通知サービスにRollbarを使っているのですが、ActiveRecord::RecordInvalid等の例外が発生したりするとActiveRecordのインスタンスの属性等が表示されてしまいものによっては連携したくない情報がRollbarに連携されてしまう可能性があります。 Rollar…

Ruby on Rails: Active Record Encryptionを使って属性値を暗号化するメモ

Ruby on Rails 7から導入されたActive Record Encryptionを使ってみたところ大分良さそうだったので使い方とかをメモしてきます Active Record Encryptionとは? Active Record Encryptionを使ってみる Active Record Encryptionの初期設定 Active Record En…

Ruby on Rails: Request specでresponse bodyのBOM付きCSVを検証する。

BOM付きのCSVダウンロード系の機能の検証をRequest specでresponse bodyのBOM付きCSVを検証する時に若干ハマったのでやり方をメモ BOM付きのCSVを検証する時の注意点 当たり前といえば当たり前ですが、encoding: 'bom|utf-8'を指定しないとパース時にエラー(…

Ruby: よりセキュアなArgon2でパスワードをハッシュ化するメモ

パスワードのハッシュ化といえば、RailsのActiveModel::SecurePasswordでもBcryptが使われているので今まで自分で作るときもBcryptを使っていたのですが、Bcryptには以下のような仕様があり、多少気になりArgon2を使ってみたので使い方とかをメモ bcryptは、…

Ruby on Rails: 個人のサービスをRails7にアップグレードしたのでやったこととかメモ📝

2021/12/15 Rails 7がリリースされました rubyonrails.org さっそく個人のサービスをRails 6.1.4.4 -> Rails 7にアップグレードしたのでやったこととかメモ Rails 7の主要な対応 Rails 7へのアップグレード手順 Rails以外のgemのバージョンアップ Railsのバ…

Ruby on Rails: 開発環境込みでcircleci/rubyからcimg/rubyに乗り換えるメモ

今までCircleCI及び開発環境でcircleci/rubyのnode-browserのイメージを利用していた*1のですが、下記ということでcimg/rubyに乗り換えることにしました。 プレフィックスが「 circleci / 」のレガシーイメージは、 2021 年 12 月 31 日に廃止されます。 ビ…

Ruby on Rails: Controllerのaction内に分岐を持たずにredirectと処理の続行を切り替える実装をしたいときのメモ

Controller内でaction内に分岐を持たずに特定条件でredirectと処理の続行を切り替えるみたいなことをやりたいときに、単純にredirect処理をprivate methodに移すみたいなやり方だと結局アクションに戻ってしまい上手いこと行かないので、ちょっと悩んだので…

Ruby on Rails: Capybaraを使ったシステムテストでHTTPリクエストを送信する方法

Capybaraを使ったシステムテストで何かしらHTTPリクエストを送信したいときに色々ハマったのでメモしておきます システムテストについてはこちら railsguides.jp リクエストを送る方法 以下を行うとシステムテスト内でリクエストを送信することができます。 …

今更ながらActiveStorageの仕組みとか使い方とかメモ📝

今更ながらActiveStrageの仕組みとか使い方とかを動かしながらちょっと勉強したのでメモ ActiveStorageとは Active Storageは、Amazon S3、Google Cloud Storage、Microsoft Azure Storageなどのクラウドストレージサービスへのファイルのアップロードや、フ…

Ruby: `standardrb`を最近使ったりしてるので使い感とかをメモ

RubyのLinterといえばrubocopだと思うのですが、個人のツールとかだと最近standardrbを使うことが多いので使い感とかをメモしておきます standardrbとは? github.com StandardJSインスパイのRubyのLinterです。 This gem is a spiritual port of StandardJS…

Ruby on Rails: js-routesを使ってフロントエンドでもRoute系のHelperを使用するMEMO

フロントエンド側から非同期でRails側にリクエストを投げたいときとかに今までは以下のような定数を集めたmoduleをフロントエンド側に用意してたりしていたのですが、 export const BLOG_API_ENDPOINT = "/api/blogs"; export const LIKE_API_ENDPOINT = "/a…

Ruby on Rails: passwordlessを使ってMagicLink的な認証機能を作る

Ruby on RailsでMagic Link的な認証を作ってみたく調べてたところpasswordlessというgemを見つけて色々触ってみたので使い方とかをメモしておきます github.com Magic Linkとは? サイトに用意された「マジックリンク」と名付けられたボタンを押します。する…

Ruby on Rails: webpack管理のフロントエンドまわりのファイルも含めてViewを作成するジェネレーターを作った

個人のサービスでwebpackでフロントエンド関連のファイルを管理していてsimpackerを使ってRailsで読み込むみたいなことを行なっているのですが。。。 新規のページをつくるときとかに手でエントリーのJSを用意してページ用のCSSファイルを作ってインポートし…

Ruby on Rails: `constraints`を使ってログイン必須等のRoutesに制約を掛けるMEMO

SidekiqのDashboard等をmountしたengineの画面をログイン必須にしたい時、特定のサブドメインのときだけアクセス可能にしたい等、Rails のルーティングのconstraintsを使うと実現できそうだったので、そのあたりをメモしておきます api.rubyonrails.org Rail…

Ruby on Rails: `rails secret`でセキュアな文字列を生成するMEMO

今までsecret_key_base等を設定するときにわざわざ以下のような感じでconsoleを起動してセキュアな文字列を取得していたのですが、 $ bin/rails console irb(main):010:0> SecureRandom.hex(64) => "ad56c1c986e397149281da99f6e268d4e3657d65a46600dcaeccd8…

Ruby on Rails: コンソール使用時に特定のモデルを読み取り専用にするMEMO

APIから取得した結果を保存するModelやユーザー情報を扱うModel、中間結果を保存するテーブル等、直接更新してしまうと危険なのでコンソールから起動するときにはReadonlyにしたいなぁと思い色々やり方を考えてみたのでメモしておきます ※rails console -sも…

Ruby on Rails: 複数DB利用時のDeviseのActiveRecord::ReadOnlyErrorに対応するメモ

認証にDeviseを利用しているとロック解除等のメールに送信されたLinkをクリックといったGETリクエストでDBを更新するような処理実行時にRailsの複数DBを使っているとActiveRecord::ReadOnlyErrorが発生してしまうため、そのあたりの対応方法をメモ railsguid…

Rails 7から導入される予定のimportmap-railsを使ったフロントエンド環境を試してみる

Rails 7からimportmap-railsを使ったフロントエンド環境が提供される予定です。 Rails new時にimportmap-railsを使用するoptionも追加され試しやすかったので、軽く使ってみました。 利用方法とかメモしておきます github.com github.com import mapsとは 簡…

Ruby: RSpec::Retryで失敗したテストをRetryさせるMEMO

個人で作成しているライブラリでDBのDocker Imageのbuild直後だけ、たまにコネクションが作れなくてエラーになる事象が発生し以下のRspec::Retryを導入してリトライして解消したので導入方法をメモしておきます Rspec::Retryとは? RSpec::Retry adds a :ret…

.railsrcとRailsテンプレートを使ってRails new関連の作業をコードで管理する

最近、割とRails newする機会があり.railsrcとRailsテンプレートを使うといい感じにこのあたりの作業をコード管理して再現性と効率的に行えそうだったのでメモしておきます .railsrcとは Railsテンプレートとは railsrcとRailsテンプレートを使ってみる おわ…

Ruby: 対象の特徴を座標化し類似度を算出してレコメンド機能っぽいものを作ってみるMEMO

最近以下の本を読んで、なんかしらのデータの特徴をグラフにしてピタゴラスの定理を使って2点間の距離を算出すると、簡単なレコメンドシステムを作れることを勉強したので、実際にピュアなRubyのコードで作ってみました。自分の学びのためにも流れをメモして…

Ruby on Rails: 今後標準で使えるようになるかもしれないViewComponentを試してみる

ViewComponentとは? ViewComponentの使い方 ViewComponentをテストする おまけ:VueのSFCみたいなのは実現できるか? おわりに ViewComponentとは? 3rd Party製のコンポーネントフレームワークのためにレンダー済みのHTMLを返すrender_inが定義されているO…

OK Computerのヘルスチェックをブラウザで見やすくするGemを作りました💎

OK Computerのヘルスチェックをブラウザで見やすくするGemを作ったので、使い方とかをメモしておきます 作ったGem github.com モチベーション github.com OK Computerはヘルスチェックをしてくれる便利なGemなのですが、Viewがテキスト or JSONのみの用意と…

Ruby: JSON.parse時に任意のClassのオブジェクトとして取得する方法

JSON.parseの結果は基本的にはHashになると思うのですが、任意のClassのオブジェクトで取得したい場合に、JSON.parseの引数object_classを利用すると簡単に実現出来ることを知らなかったのでメモしておきます やり方は以下の通りでdef []=(key, value)を持つ…

Ruby on Rails: Logrageを使ってRailsのログ出力をいい感じにするMEMO📝

個人のWebサービスにLogrageを入れてみたので導入方法とか使い方をメモしておきます github.com Logrageとは? Logrageの使い方 Logrageを導入する ログ出力項目を追加する 独自に作成したフォーマッターを使用する おわりに Logrageとは? Lograge is an at…

Ruby on Rails: Rails標準の`config_for`を使ってカスタム設定を管理する⚙

Railsでカスタム設定を扱う場合、以下に記載したSettingslogicやGlobalを使うことが多かったんですが、Rails標準のconfig_forを使っても同じようなことが出来たので、使い方とかをMEMOしておきます github.com github.com ちなみに、Rails 6.1.3.2環境で試し…

Ruby on Rails: OK Computerを使ってヘルスチェックを行うときの導入方法とかMEMO

OK ComputerというGemを教えてもらい、個人サービスに入れてみたところ、適当に設定すると色々見れて便利だったので導入方法とかをメモしておきます github.com 導入方法 OK Computerのインストール OK Computerのmount 監視項目の追加 Basic認証の追加 おま…

Ruby on Rails: Rails 6.1でroutes.rbを複数ファイルに分割する

以下のPRで導入されたRails 6.1から使える機能を使うといい感じでroutesを複数ファイルに分割できたのでやり方をメモしておきます github.com やり方 以下のようなroutesをnamespace毎に分割したいときには、 Rails.application.routes.draw do root to: 'bo…

Ruby: FactoryBot.lintでFactoryの壊れないようにチェックする

FactoryBotを利用してテストデータを管理していて、開発が進んでいくとデフォルトで作成したときにエラーになるようなFactoryが作られてしまったりします。 github.com そんなときにFactoryBot.lintを使うとFactoryが壊れたときに気づけて便利だったのでメモ…