ラブグラフのエンジニアブログのフィード
https://zenn.dev/p/lovegraph
https://corporate.lovegraph.me 出張写真撮影サービス『ラブグラフ』やオンライン写真教室『ラブグラフアカデミー』を提供しています
フィード

devise-two-factorで二要素認証を実装してみよう!!
1

ラブグラフのエンジニアブログのフィード
はじめにこんにちは、ラブグラフでエンジニアインターンをしているうらっしゅです!今回は、devise-two-factorという二要素認証を提供するgemの紹介になります!一見難しそうに見えるこの機能ですが、今回紹介するgemを用いるとかなり簡単でかつ直感的に実装することができます。!今回紹介するdevise-two-factorのバージョンはv4.1.0です。メジャーバージョンが異なると必要なカラムや仕様がまた異なってくるので注意が必要です。 devise-two-factorとはdevise-two-factorは、Ruby on Railsアプリケーションにお...
5日前

Railsのテストで値が変わらないときはreloadを疑おう
ラブグラフのエンジニアブログのフィード
RSpecでテストを書いていて、「データが更新されているはずなのに、期待した値になっていない」と感じることがありました。その原因のひとつが ActiveRecordのキャッシュ です。ここでは、ActiveRecord + RSpecのテストで、モデルの更新が正しく検証できない問題と、reload メソッドによるその解決方法について解説します。 reload を使わないとテストが失敗することがある次のような処理を持つコントローラがあるとします。class PlansController < ApplicationController def destroy ...
18日前

Tidy First? を読んでみて
ラブグラフのエンジニアブログのフィード
リファクタリングが億劫な人にこそ読んでほしい『Tidy First?』感想変更に強いコードは小さな整頓から始まる -『Tidy First?』を読んだ話ラブグラフエンジニアのひろです!今回は『Tidy First? - 個人で実践する経験主義的ソフトウェア設計』を読んだので、その感想を書いておきたいと思います。 📖 『Tidy First?』ってどんな本?いつ・どこでコードを整頓(Tidy)するか?具体的な整頓の方法や、適切なタイミング、またなぜ整頓が必要なのかなど、具体的な手法から理論まで解説されていて、リファクタリングと機能追加のバランスに悩んだことがある方が読むと...
25日前

「それ、ActiveRecord_Relationだよ?」〜Rails初心者がハマるデータ取得の罠〜
ラブグラフのエンジニアブログのフィード
はじめにこんにちは、ラブグラフでエンジニアインターンをしているうらっしゅです!この記事はRuby初心者が勘違いをするであろうActiveRecord_Relationについて語っていきたいと思います!!以下の出力ってどうなる?User.create(id: 1, name: "urassh", email: "urassh@example.com")User.create(id: 2, name: "taro", email: "taro@example.com")User.create(id: 3, name: "syunsuke", email: "syunsuke@...
1ヶ月前

v-if と v-show のベストプラクティス
ラブグラフのエンジニアブログのフィード
ラブグラフでエンジニアインターンをしているあさいです!Vue.jsでUIを実装している時に、要素の出し分けをするために、条件付きレンダリングの v-if や v-show を使うケースがあると思います。今回は、どのような時にどちらを使えばいいのかというのを書いていこうと思います。 使用方法の確認 v-if通常のように書くと、<h1 v-if=isHoliday>Happy Holiday!!</h1>また、template を用いて、<template v-if=isHoliday> <h1>Today is Holi...
1ヶ月前

google-drive-ruby を脱却して google-apis-sheets_v4 でスプレッドシートにアクセス!
ラブグラフのエンジニアブログのフィード
ラブグラフでCTOをしております横江( @yokoe24 )です!Googleフォームの回答結果をGoogleスプレッドシートに出力している場合に、Googleスプレッドシートのデータを読み取ってデータベースに格納したい という場面があります。 google-drive-ruby の欠点Ruby on Rails を使っている会社では google_drive (google-drive-ruby) という gem がよく使われていました。GitHub のスター数も1,800以上ついていて、その人気ぶりが伺えます。しかしこの gem の最終更新は、2025年3月現在、Ru...
2ヶ月前

影響範囲を考えて@changeとwatchを使い分けよう!
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフ開発インターンの筒井(@kaito_tsu2i)です!今回はセレクトボックスを使った実装の際に、Vue.js の@changeとwatchの使い方に迷ったことがあったので、どうやって使い分けるかの一例を解説したいと思います! 背景都道府県を選択できるセレクトボックスの値に応じて、市区町村のセレクトボックスの選択肢を絞り込むような機能を Vue.js を使って実装しました。その際に思いついた方法が2つありました。@changeで値が変更されるたびにメソッドを呼ぶwatchで値を監視して変更されるたびに呼ぶ両方とも同じように見えたので、どっちが適切...
2ヶ月前

スプレッドシートやエクセルの列名を列番号に変換する
ラブグラフのエンジニアブログのフィード
ラブグラフでCTOをしております横江( @yokoe24 )です!スプレッドシートの 列名(A, B, C, AA, ...のようなやつ) を 列番号(1, 2, 3 列目を示す値) に相互変換する Ruby プログラムを書いていたらいろいろハマりどころがありましたので共有します!以降、パット見で区別がつきやすいよう「列名」は「列ラベル」と表記しています。 まずはクイズです!まず、列ラベルを列番号に変換する上で、どのようになっているか理解をしていきましょう。列ラベルと列番号は、以下の表で示す関係のようになっています。列ラベル列番号A1B2...
2ヶ月前

update_all vs activerecord-import
ラブグラフのエンジニアブログのフィード
update_all vs activerecord-import高速なバルクアップデートを実現する方法として、update_all と activerecord-import の2つがあります。それぞれ特性が異なるので、それらについて書いていきます! そもそもバルクアップデートとは?バルクアップデート とは、複数のレコードを 個別に処理するのではなく、まとめて一括で更新する ことです。通常の update メソッドは 1レコードずつSQLを実行 するため、大量データを扱うことに比例し、速度が低下してしまいます。バルクアップデートを使い、SQLの実行回数を減らしてパフォー...
3ヶ月前

VueとReactのpropsの違い
ラブグラフのエンジニアブログのフィード
最近はReact系フレームワークを使用しているユースケースがとても増えていますが、Vue系フレームワークもまだまだシェアを誇っています。その中で、両者の違いはあるとはいえ、データの受け渡しはpropsだよね、ということで、VueとReactのpropsについて振り返りがてらまとめてみるのもいいのかなと思い、やっていこうと思います。 宣言の可否 Vue.jsの場合公式ドキュメントからの引用にはなりますが、Vue.jsでpropsを使用する際は、明示的な宣言が必要になります。Composition API での宣言<script setup>const pr...
3ヶ月前

【Rails】rename_table で一発? 失敗しないためのテーブル名変更テクニック
ラブグラフのエンジニアブログのフィード
はじめにこんにちは!ラブグラフエンジニアのひろです。この記事では Rails アプリケーションで既に運用中のテーブル名を変更する方法 について解説します。「テーブル名がプロジェクト全体の命名規則に合っていない」「分かりづらい名前を整理したい」など、開発を続けていると必要になる場面がありますよね。しかし、本番運用中のテーブル名変更は、リスクが伴うため慎重に進める必要があります。本記事では、Rails の rename_table を使ったシンプルな方法(方法1)新規テーブルを作成して段階的にデータ移行する方法(方法2) ← こちらを詳細に紹介これらの比較や具体的...
3ヶ月前

pack, unpack メソッドをなんとなく理解したい!【Ruby】
ラブグラフのエンジニアブログのフィード
ラブグラフでエンジニアをしています横江( @yokoe24 )です!Ruby を扱っていて、たまに出てくる pack メソッドや unpack メソッド。以前書いた、emoji を1文字と数えるのが大変な記事でも扱いました。https://zenn.dev/lovegraph/articles/a43529cc3653f6エンコード済みの文字列を直すときに重宝するのですが、毎回使い方がよくわかりません。よくある使い方を見ながら、なんとな〜く理解できるところまで進みたいと思います! 1. 理解を深めたい 1-1. ドキュメントを見てみるまずは公式ドキュメント!pac...
4ヶ月前

【Rails】PAY.JP の3Dセキュア認証に対応する実装方法をコードで解説
ラブグラフのエンジニアブログのフィード
ラブグラフでCTOをしております横江( @yokoe24 )です!あけましておめでとうございます!!🌅 1. EMV 3-D Secure が必須に!2023年3月に経済産業省が発表した「クレジットカード・セキュリティガイドライン【4.0版】が改訂されました」に原則、全てのEC加盟店は、2025年3月末までにEMV3-Dセキュアの導入を求めると記載のある通り、3Dセキュア認証が2025年3月末までに実質的に義務化される方針となりました。ちなみにこの 「EMV3-Dセキュア」 の EMV とはなにかというと、クレジットカード大手の Europay, Mastercar...
4ヶ月前

「be」と「eq」の違い、説明できる?RSpecマッチャ解説!
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフエンジニアのひろです!今回は、RSpec や Capybara でよく使われるマッチャについて解説していきます。よく迷われがちな「be」と「eq」の違いにも触れていくので、ぜひ参考にしてみてください! 判定でよく使うマッチャ expect(XXX).to eqまずは、基本中の基本である 比較 のマッチャです。eq は「XXXとYYYの 値 が等しいかどうか」を判定します。データベースのレコード数や、特定のオブジェクトの属性値をチェックするときによく使います。 例1: レコード数の確認it "新しい本が作成される" do # creat...
5ヶ月前

【100記事到達!】エンジニア3名の会社でも技術ブログをこんなに書けたよ!!🥰
ラブグラフのエンジニアブログのフィード
ラブグラフでCTOやエンジニアをしております横江( @yokoe24 )です!今日は私の誕生日です!! わーい!🍰 2023/08〜2024/12 で 100記事に到達!!!さて、この「ラブグラフのエンジニアブログ」ですが、先日公開された記事をもちまして、なんと 100記事目を迎えましたぁ!!!!!! 🥳すごぉい!!!!!!! 🙌Zenn の記事は、あとから Publication への紐づけを変えられるので、過去に投稿した人が紐づけを変えれば全然100記事未満になることもできるのですが(笑)、現時点ではこの記事が103記事目になりました!!ラブグラフはエンジニア正...
5ヶ月前

Dirtyが原因で通知が動かない?Railsの変更検知トラブルを解決!
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフエンジニアのひろです。今回は、以前紹介した ActiveRecord::AttributeMethods::Dirty を使っていく中で遭遇した問題について書いていきます。https://zenn.dev/lovegraph/articles/a1c686ccb68403!この記事はラブグラフのエンジニアブログの記念すべき100記事目です!!昨年の8月から書き始め、メンバーみんなで頑張った結果です🎉 はじめにRails では、モデルの属性が変更されたかどうかを簡単に検知できる便利な仕組みとして ActiveRecord::AttributeMet...
5ヶ月前

追加gem無しでActiveModelの画像ファイルにバリデーションをかけたい!
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフで開発インターンをしている筒井です!今回は新規 gem を追加せずに ActiveModel で画像ファイルにバリデーションをかける方法を紹介します。 背景画像ファイルのフォーマットを JPEG だけ受けつけるようなバリデーションを実装したく、最初に出た案がfile_validatorsというgemを使うというものでした。参考:https://github.com/musaffa/file_validatorsですが、リポジトリを見てみると3年前から更新がなく、今後 Rails のバージョンを上げる際に問題が出る可能性があったため、今回は Activ...
5ヶ月前

サンプルコードで学ぶ!RSpecでCSV機能をテストする方法
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフエンジニアのひろです。今回は、CSVデータを使った機能を RSpec でどのようにテストするかについて解説します。この記事では、以下の3つのテスト方法を具体例と共に紹介します:CSVファイルを読み込む方法ヒアドキュメントでデータを直接利用する方法テンポラリファイル( Tempfile )を使う方法 CSV機能をテストする3つの手法 1. CSVファイルを読み込む方法 概要テスト用のCSVファイルを spec/fixtures ディレクトリなどに保存しておき、それを読み込んでテストする方法です。実際の運用に近い形で検証できるため、複...
6ヶ月前

【RSpec】type は何ができる?便利なメソッドを紹介します
ラブグラフのエンジニアブログのフィード
こんにちは!ラブグラフエンジニアのひろです!今日は RSpec で指定できる type メタデータについてまとめます。type の仕組みを理解し、効率的なテスト設計に役立ててください。 type メタデータとは? 役割RSpec に「このテストが何を対象にしているか」を伝えるもの。Rails では、type に応じて適切なヘルパーや設定が自動で有効になります。https://rspec.toolboxforweb.xyz/docs/rspec-rails/directory_structure 指定例RSpec.describe User, type: :m...
6ヶ月前

Rails のコールバックでデフォルト値を入れるのに失敗した話
ラブグラフのエンジニアブログのフィード
ラブグラフでCTOやエンジニアをしております横江( @yokoe24 )です!ハマりがちな Rails 独特の挙動について紹介します。 前提情報(テーブル&モデル)店舗からのフードデリバリーを管理する Web アプリ で、以下のようなテーブルやモデルがあったとします。 テーブルfood_deliveries: 配達1件あたりの情報foods: 配達する食品の情報food_delivery_foods: 配達1件でお届けする食品一覧を格納する中間テーブル(以下は ridgepole の Schemafile.rb を想定)# 配達1件あたりの情報crea...
6ヶ月前