pockestrap

Programmer's memo

Ruby on Rails

activerecord-originator をリリースしました

こんにちは。 id:Pocke です。 今日は activerecord-originator という gem を作ったので紹介します。 github.com なにこれ Active Record が発行するSQLの各部分に、それがどこで作られたものかをコメントとして入れ込む gem です。 理解するには実例を見る…

Kaigi on Rails 2021 で登壇しました

先日Kaigi on Rails 2021で、Cache on Railsというテーマで登壇しました。 参加者としての感想は雑に日記に書きましたので、この記事では登壇者としての感想を書きます。 各種資料 スライド スピーカーノートを開くと(ほぼ完全な)トークスクリプトもついてい…

Rails 7で導入される invert_where メソッドが危険そうだったので調べた

この記事は現時点(2021-04-28)のrails/railsのmainブランチの最新のコミットでテストしています。 TL;DR invert_whereはすべてのwhereをinvertする 使い方によっては意図しない条件をinvertして危険 invert_whereとは invert_whereは、Rails 7でActiveRecord…

Active Recordのクエリの実行元の表示から、特定のパスを除外する

TL;DR ActiveRecord::LogSubscriber.backtrace_cleaner = Rails::BacktraceCleaner.new.tap do |c| c.add_silencer { |line| line.include?('path/to/meaningless/file.rb') } end Problem Active Recordにはクエリの実行元をログに表示する機能があります。…

Rails.cache.fetch_multi するGraphQL BatchのLoader

Rails.cache.fetch_multiするLoaderを書いてみた。 コードのライセンスはCC-0とするのでご自由にお使いください。 class RailsCacheLoader < GraphQL::Batch::Loader def initialize end # @param args [Array<[untyped, Proc]>] The first item is cache ke…

rbs_railsにRailsの型を取り込む手順 2020-07-16版

なんか色々がちゃがちゃやっていて面白いので、メモしておく。 rbs_rails とは github.com Rails で RBS (Rubyの型定義ファイル)を扱うためのライブラリ。 「rbs_rails に Rails の型を取り込む」とは rbs_rails には2つの機能がある。 1つは、ユーザーの書…

Action Mailerのpreview機能を使って、Railsアプリケーションから送るメールを一覧するページを作った

ある時「アプリケーションがどういうタイミングでどういうメールを送るか、エンジニア以外も把握したい」という要望が社内で上がりました。 これはもっともな要望で、アプリケーションがどういうメールを送っているのか分からずユーザーサポートするのはしん…

Rails/UniqueValidationWithoutIndex copを追加した

rubocop-rails にRails/UniqueValidationWithoutIndex copを追加しました。 rubocop-railsの次期リリース(おそらくv2.5.0)から利用できます。 github.com これはなに Rails/UniqueValidationWithoutIndex copは、RDBMSのunique indexがついていないカラムに…

Ruby 2.6でunicornがrestartしない

あるRailsアプリケーションで使用しているRubyを2.5から2.6に上げたところ、unicornがrestartしてくれなくてハマった。 その時の問題と解決方法をメモ。 エラー内容 restartに失敗しているunicornのerror logを見てみると、次のようなエラーが出力されていた…

遅延評価とRSpecとActive Record

仕事をしていて面白いコードを見たので紹介する。 次のコードについて話す。適当に書いているし、適宜コードも書き換えているので、間違っていたら適当に補完して読んで欲しい。 # app/models/user.rb class User < ApplicationRecord scope :admin, -> { wh…

arpry: どこでもpryでActive Record

Rails Console、便利ですよね。これさえあればデータの表示や簡単なデータの修正、作成などが簡単にできてしまいます。 ところがそんな便利なRails Consoleにも1つ大きな欠点があります。Rails ConsoleはRailsでしか使えません。 当然です。ですが、不便です…

Clean Code for Railsを読んだ

booth.pm 神速さんの同人誌がゲリラ物販されていたから頂いてきた。 pic.twitter.com/JXNwyL0SF9— Pocke(ぽっけ) SW-1309-2807-5790 (@p_ck_) 2017年12月9日 RailsDM 2017の時にいただいた @sinsoku_listy さんのClean Code for Railsを読み終わった。RSpec…

Rails Developers Meetupに行った

2017/12/09にRails Developers Meetupに行ってきました。 railsdm.github.io techplay.jp 発表の全体的な印象 まず、Docker関係の発表が多かったように思えます。 Docker Developers Meetupだった Professional Rails on ECS (rails developer meetup 2017) …

db/schema.rb のコンフリクトを勝手に解決する git merge driver を作った

解決したい課題 Ruby on Rails を使って開発している方の中で、db/schema.rbがコンフリクトした経験がある方は多いのではないでしょうか? 特にスキーマのバージョンはよくコンフリクトします。 diff --cc db/schema.rb index bdb07db,da150fc..0000000 --- …

Rails 5.1 の System test を試した

bacon-cannon.herokuapp.com bacon-cannon で試した。 該当の Pull-Request はこれ。 github.com 環境 Ruby 2.4.1 Ruby on Rails 5.1.0.rc1 Webpacker 1.1 capybara-webkit 1.14.0 Travis CI やったこと Pull-Request に書いてあるけど、その背景とかの補足…

Bacon Cannon のアーキテクチャ

先日、Bacon Cannon というアプリケーションをリリースしました。 bacon-cannon.herokuapp.com 一言で説明すると、Ruby のオンラインパーサーです。アプリケーションについては以下の記事をご覧ください。 pocke.hatenablog.com この記事では、Bacon Cannon …

Shibart 作成の軌跡

あけましておめでとうございます。 id:Pocke です。 今年の目標は、人の顔を覚えることです。人のことを服の色で覚えてしまうので、この季節はコートを脱ぎ着すると人の判別ができなくなってしまうのを今年こそは直そうと考えています。 昨年末、Shibartとい…

RSpecでexitを含むコードをテストする

TL;DR expect{subject}.to raise_error SystemExit exitをテストする状況はそもそも筋が悪い 前置き こんにちは。私は最近miというRails用のマイグレーションジェネレータを作っています。 github.com Railsのジェネレータは内部でThorというライブラリを使…

Rails Best Practices を3~4倍ぐらい速くした話、あるいはStackProf入門

github.com TL;DR StackProf でボトルネック検出 String#present?は遅いから使わない。 何度も呼び出される毎回同じ値を返すメソッドをメモ化 上記により3~4倍のパフォーマンス改善 はじめに Rails Best PracticesはRailsに特化したコードメトリックツールで…

Rails 4, 5 両方対応のGemをTravisでテストした話

先日、Railsのマイグレーションファイルをもっと便利に生成するGem、miのバージョン1.0.0をリリースしました。 github.com pocke.hatenablog.com このGemではRailsの4と5両方に対応しており、また4と5では挙動が異なります。 このため4と5両方のバージョンで…

Railsのマイグレーション生成をもっともっとImprovementする! mi gem version 1.0.0 をリリースしました!

こんにちは! RuboCop大好きpockeです。 最近はRuboCopにPRを投げるのが趣味みたいになってきました。 Railsにおけるマイグレーションファイルの生成をもっともっと楽にするGem、miのバージョン1.0.0をリリースしたので、今回はその紹介をしようと思います! g…

rails-apiでcookieを使う

最近、rails-apiでcookieを使うような機会が何度かあったので、その方法をメモしておきます。 tl;dr rails-api with cookie · pocke/rails-api-with-cookie-sample@11ccaf1 前置き rails-apiのデフォルトでは、cookieが無効化されています。 そのため、セッ…

もっと便利に rails g migration する

前置き Railsには、DBのマイグレーションファイルを作成する為のジェネレータ、rails g migrationがあります。 例えば、usersテーブルにemailカラムを追加したい場合、このジェネレータは以下のように使います。 $ bin/rails g migration AddEmailToUsers em…

都道府県のマスタテーブルを作るGemを作った

つくりました github.com todofuken | RubyGems.org | your community gem host Ruby on Rails 用に、都道府県のマスタテーブルを作成するGemです。 Rails の generator を利用しています。 Installation 普通のGemと同じように、Gemfileに以下を記載します…

Rails のモデル内のメソッドをソートするRubocop Extension を作った

Rubocop、使っていますか? RubocopはRubyコードを静的に解析して問題を指摘します。 更にauto-correct機能を使うことで、指摘した内容を自動で修正することも可能です。 bbatsov/rubocop RuboCopの自動修正がSideCI上から行えるようになりました。 - SideCI …

Ruby on Rails で、スキーマ定義からモデルのファイルを生成する

Migration だけ先にがーーーっと書いたらモデルを作るのがめんどくさくなったので、Rakeのタスクを書きました。 gist.github.com 上記ファイルをlib/tasks/model_from_schema.rakeなどとして保存して、下記のようにコマンドを実行すると使用することが出来ま…

Railsで、Layoutを適用した静的なエラーページを生成してみた

こんにちは。私は現在 bearfruits という GitHub と連携した就活支援Webサービスを作成、運営しています。 bearfruits はRuby on Railsで開発しています。 エラーページがRailsデフォルトのままだったのを改善したので、手順をまとめます。 環境 Ruby on Rai…