プログラミング -> Ruby on Rails

RSpec (Capybara) で複数の同一要素の個数を数えたり特定したりする方法

結論 page.all(.hoge.fuga) というふうに書き、戻り値が配列になるのでそれを取り扱う。 例 .foobar.hogehoge という要素がページの中に 3つ あるとします。 このとき「要素が 3つ あること」をテストするには次のように書きます。 expect(page.all('.foobar…

WSL2 (Ubuntu) で System Spec (RSpec, Capybara) を実行しようとすると Webdrivers::BrowserNotFound: Failed to find Chrome binary と出るときの対処方法

結論 1. google-chrome をインストールします 詳細は割愛します*1 配置場所は /opt/google/chrome 配下になるかと思います 2. chromedriver をインストールします 詳細は割愛します 配置場所は /usr/bin/chromedriver になるかと思います*2 3. spec/rails_he…

WSL2 の環境で System Spec (Rails) が一向に走らないときの確認事項

結論 (もろもろの設定は済んでいるとして)X Server が起動しているかどうか。 補足 エラーが出るわけではなく一向に進まないため、気づかないときはなかなか気づきにくい点かと思います。

WSL2 環境で RSpec (Capybara) で「Webdrivers::BrowserNotFound: Failed to find Chrome binary.」エラーが出るとき

前提条件 google-chrome と chromedriver*1 はインストール済みとします。 結論 rails_helper.rb に以下の行を追加します。chromedriver のパスは個々人のインストール場所によって書き換えます。 Selenium::WebDriver::Chrome::Service.driver_path = '/usr…

Rails で undefined method `file' for #<Pry::History rspec... が出たときの対応

結論 pry のバージョンを 0.12.2 に固定する*1。 理由 理由は、記事引用になりますが、以下になります(感謝)。 attonblog.blogspot.com *1:0.13.x 以降に上げない

2020年の段階で私が知らないこと

はじめに 本記事のタイトルは、以下の記事にならっています。 overreacted.io また、以下の記事に触発されています。 blog.unasuke.com zenn.dev 結論 以下のことをほとんど知りません。 Go React TypeScript Prisma GraphQL Cypress 焦り 上記のことに無知…

Rails で Draper を用いた Decorator はどの場所に(一般的に)置くか

結論 app/decorators 参考 Decorator (Draper) については以下の記事がまとまりすぎているので、参照することをおすすめします。 nekorails.hatenablog.com

Ruby で Array.all? で判別する際には Array が [] でも true が返ってくる

実例 配列に含まれる各要素の文字列が hoge- で始まっているかどうかを判別するコードを書きます。全ての要素が hoge- で始まっている場合には true が返ってくるコードを書くことを目的とします。 例1 まずは次のようなコードです。この戻り値は true で期…

不特定多数が用いる Rails アプリにおいては credentials に書かれている内容を .credentials.sample のように例示として書いておいたほうが良さそう

結論 標題のとおりですが、Rails.application.credentials を用いている場合に、それがクリティカルな場所であると rails s にたどり着くことさえできなくなります。 したがって、config/credentials.yml.enc と master.key を作り直してもらうこと前提で、…

Rails でカスタムバリデーション(カスタムメソッド)を書く際に、invalid にしたいときには errors.add を書く

結論 true or false で返すのではなく、errors.add(:HOGEHOGE, '正しい値を入力して下さい!!') を書く必要があります。 参考

RSpec (System Spec) の実行に Chrome を用いるために ChromeDriver をインストール・ダウンロードする

結論 以下のページから最新版のバイナリをダウンロードし、パスが通った場所に実行可能状態で配置すれば OK です。 補足 RSpecの〜 という標題にしましたが*1、もちろん他の用途にも使えます。 *1:ググラビリティを考慮

VS Code で巨大な Rails プロジェクトを開いた直後は CPU 負荷が急激に高まる

結論 巨大な Rails プロジェクトを開くと、VS Code の Ruby 拡張機能 によりコードのインデックシングが始まります。インデックシングの最中は以下のメッセージがステータスバーに表示されます。 Indexing Ruby source files このとき、CPU負荷率が急激に高…

binding.pry を挟むと DevTools に Vue のタブが出てこないときがある

結論 標題のとおりです。binding.pry の場所によっては出てきません。 補足 binding.pry を削除してもまだ出てこない場合は、Chrome を再起動しましょう。

Rails を多言語化 (i18n) するために追加の gem のインストールは不要

※現時点での Rails を用いた場合です 結論 以下のコードを起動時に読み込ませるようにすれば、config/locales 配下のファイルに従って i18n してくれます*1。 I18n.config.available_locales = %i[en ja] I18n.default_locale = :ja 読み込ませる場所はどこ…

fzf を pry(Rails コンソール)で使う方法

結論 1. rb-readline の gem をインストールする $ gem install rb-readline 2. .pryrc に以下のように書きます。 .pryrc は Ruby のスクリプトの形で書きます。 require 'rb-readline' require 'readline' if defined?(RbReadline) def RbReadline.rl_rever…

Rails で config/credentials.yml.enc と config/master.key のペアが不整合である場合、config/ の YAML の設定が読み込まれないことがある

結論 標題の通りですが、config/credentials.yml.enc の復号に失敗すると、config/ にある YAML が読み込まれないことがあります。私の場合は config/storage.yml が読み込まれませんでした。 確認方法 確認方法は簡単で、credentials.yml.enc を編集しよう…

Rails のポリモーフィック関連を最低限度で理解をする

注意 とにもかくにも最低限度の説明用です。何もわからない状態からの脱却を目指す用です。したがって、用語や説明が不十分なところもあるかと思います。また、例として挙げている設計(オブジェクト同士の関係)も現実のモデルとしてはふさわしくないところ…

Rails で STI(Single Table Inheritance / 単一テーブル継承)を最小限に作る

前提 最小限に、です。もろもろ省略していますし、命名もよろしくありません。用語の使い方も厳密ではありません。 が、何よりもまず最初に簡単に知ることが大切だと思うからです。

macOS Catalina (10.15.4) で capybara-webkit のインストールに失敗するとき(qmakeが見つからないとき)

前置き 以下の記事に全て書かれているので、そちらを見ればこの記事は用済みではあります。

VS Code で Rubocop の設定をうまく引き継いでくれない問題への一つの結論

提示されました。

Rails でマイグレーションファイルをまとめる Squasher gem を使う

Squasher gem こちらの gem です。Rails におけるマイグレーションファイルをまとめるための gem です。 インストールの方法 この gem を使うためにはもちろんインストールをする必要があります。公式ドキュメント では Rails のGemfile に書く方法が紹介さ…

Rails で使い捨てコードを書く場合の超小技

結論 tmp/ 配下に書き、rails console や rails runner で実行する。 理由 コミットに紛れ込む可能性を排除したいから 使い捨てであることが明確になるから 拡張子付きで「保存」することで、シンタックスハイライトなどを使うことができるから irb(pry) で…

Rails 6 で 2つ(複数)のデータベースを用いる方法

前提 Railsガイドで解説されている、レプリカとかリードオンリーとかは考えず、単に2つのデータベースをモデルに応じて使い分けることを目的とします*1。 *1:ActiveRecord::Middleware::DatabaseSelector

Twitter の gem を用いた際にツイートのオブジェクトをシリアライズしてそのまま保存する

前提 以下のコードにおいて tweet は Twitter::Tweet クラスのオブジェクトであるとします。 結論 tweet に対して to_json メソッドを用います。結果として得られる値は JSON の文字列なので、データベースにそのまま保存できます*1。 serialized_tweet_obje…

Visual Studio Code の Ruby Test Explorer 拡張機能 において A Ruby Test Explorer failed to find an RSpec test suite. というエラーが出た場合の対処法

前提 Rails で RSpec を用いているものとします。 結論 bundle install や bundle exec rails db:migrate などの初期設定が終わっていますか。 エラーメッセージに惑わされない このエラーが出るときは、以下のようなメッセージも併せて書かれています。 Mak…

Visual Studio Code を用いて Rails の RSpec を効率よく実行する

結論 Test Explorer UI という拡張機能をインストールします 上記の拡張機能の拡張機能である、Ruby Test Explorer ををインストールします Text Explore UI の設定をします(私はデフォルトのままにしました) Ruby Test Explorer の設定をします 個人的に…

Visual Studio Code の RuboCop 拡張機能 (ruby-rubocop) にてrubocop is not excutable execute path is empty と出た場合の対処法の一つ

結論 実行される Bundler のバージョンが Gemfile.lock に書かれているバージョンと一致していない。 どうするか Gemfile.lock に書かれているバージョンの Bundler をインストール(アップデート)します。たとえば、1.17.3 を入れたい場合には以下のように…

Faker を使って Pokemon の情報を用いる場合には Faker::Game::Pokemon というふうに Game という名前空間を指定する(ようになった)

結論 少し古い記事ですと、Pokemon の名前空間が Faker::Pokemon として紹介されていることがあります。たとえば、以下の Qiita の記事です。 qiita.com これが現時点*1では、Faker::Game::Pokemon となっています。古い情報を参考にするとエラーになるので…

production モードで Rails を起動した場合は Yay! You’re on Rails! は表示されない

結論 標題のとおりです。RAILS_ENV=production の場合は Yay! You’re on Rails! ではなくエラー画面が出ます。 gyazo.com Heroku でもそうなる そして当然なのですが、Heroku にデプロイした際も Yay! You’re on Rails! の画面は出ません。$ rails new 直後…

GitHub Actions のキャッシュ容量の上限は 400MB(なので wkhtmltopdf-binary を入れていると厳しい)

状況 GitHub Actions で bundle install した gem のキャッシュが保存できるようになったので喜んで使っていたのですが、とある日にログを見たところ、以下のような表示が出ていました。キャッシュ容量の上限の 400MB を超えている、との警告です。 [warning…

Powered by はてなブログ