- 1. Rails Admin が重い – N+1クエリに対策する設定
- 2. Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. エラー解消法
- 3. erbからslimに変換する際の`File.exists?` メソッド使用についての解決方法
- 4. 【Google Cloud Vision API】Rails6.1で画像登録時に関連度を判定する
- 5. 【Rails6.1】初心者なりに試行錯誤してwebpを使おうとした話
- 6. 【Rails6.1】画像を保存する際のリサイズとActiveStorageのvariantについて
- 7. 【2024年6月】Rails7をWindows上で環境構築する方法
- 8. uuid生成からルーティングでuuidをidとして使用するまでの方法を解説
- 9. Heroku + Rails + S3 Google Search Console で「サイトマップを読み込めませんでした」を解消する
- 10. 小規模Railsチームの私はDDDを学ぶべきなのか
- 11. ,で区切って 複数ワード検索 実装
- 12. いいねしたユーザーの一覧表示
- 13. Googlemap geocodingが動作しない
- 14. 【Rails, MySQL, ORM】where(‘user.id’: 1)ってことができる
- 15. DHH流のルーティングの書き方
- 16. 【Rails6.1】番環境で発生したMysqlのサブクエリに関するエラーを解消
- 17. 【Docker】DockerでRailsのデバッグを実行する【Rails】
- 18. Rails:パーシャルでインスタンス変数を使用してはいけない理由
- 19. Railsヘルパー
- 20. rails7にsotalbeを実装
Rails Admin が重い – N+1クエリに対策する設定
# 設定例
たとえば user 対 books が関連している場合、
`rails_admin.rb` に以下のように設定“`rb
RailsAdmin.config do |config|
…config.model ‘User’ do
configure :books do
eager_load true
end
end
“`# ページ閲覧で発行されるSQLクエリの例
RailsAdminの設定は eager load という名前だが、 Railsの eager load ではなく preaload 的なクエリが発行されていた
“`sql
SELECT `users`.* FROM `users` ORDER BY users.id desc LIMIT 20 OFFSET 0SELECT `books`.* FROM `books` WHERE `books`.`user_id` IN (65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51,
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. エラー解消法
# はじめに
dockerでdocker compose run web bundle 〜 実行時に下記の注意が出ました。
こちらの解決方法について記載します。:::note warn
Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)’ has been deprecated. Please call `DidYouMean.correct_error(error_name, spell_checker)’ instead.
:::# 解決方法
bundlerのバージョンを上げる。“`
bundle update –bundler
“`# 補足
私の環境ではDockerfileにbundlerのアップデート文を記載してdocker compose buildをしてもbundlerのアップデートがされませんでした。
コンテナで直接コマンドを実行するとbundlerのアップデートに成功して注意が解消されました。“`
docker compose run web bund
erbからslimに変換する際の`File.exists?` メソッド使用についての解決方法
# はじめに
erbからslimに変換しようとしてエラーで詰まって調べてあまり有用な記事がなかったため
作成することにします(自分見直し用でもあります!)# 起きたこと
dockerコンテナ内で
“`bash
erb2slim app/views/users/ app/views/users/ -d
“`
をしてapp/views/users/内のerbファイルを一括でslimファイルに変換しようとしたところ
“`
NoMethodError: undefined method `exists?’ for File:Class
Use –trace for backtrace.
“`
とエラーが出て、できなかったので
“`bash
erb2slim app/views/users/ app/views/users/ -d –trace
“`
–traceオプションをつけてエラーが起きているファイルを特定したところ
“`
/usr/local/bundle/gems/html2slim-0.2.0/lib/html2slim/converter.rb:1
【Google Cloud Vision API】Rails6.1で画像登録時に関連度を判定する
# はじめに
ポートフォリオの課題でお花屋さんの商品予約サイトを作成中のとき。
Google Cloud Vision APIを使って、お花と関連のない商品写真が登録された場合、管理者の承認が必要になるという設定を作ることにしました。※前提として、いろんなお花屋さんが登録した商品の中から、ユーザが選ぶという形のサイトになっているので、「複数のお花屋さん」「複数のユーザー」「サイトの管理者」という3パターンのユーザが存在しています。
# 実装内容
Cloud Vision APIについては公式ドキュメントを確認してみてください。https://cloud.google.com/vision?hl=ja
このページ内の「デモ」の部分で画像をアップロードしてみると仕組みがイメージしやすいです。
## 準備
visionAPIの導入については学習課題を見ながら進めたため省きます。
導入について以下の記事が参考になりそうでした。https://qiita.com/ysda/items/67c983510f4d7d1c6982
https://qiita.com/dam-san
【Rails6.1】初心者なりに試行錯誤してwebpを使おうとした話
# はじめに
前職のWebショップで、ページの表示スピードが遅いからコンサルタントの方にアドバイスいただいて、webpを導入してもらったという経験がありました。
その記憶から、webpを使えばページが軽くなるのでは?と思い、ポートフォリオの画像にwebpを使うことにしました。# 実装内容
結論から言うと、もともと用意してあったvariantを使った画像表示のためのメソッドに「, format: :webp」を追加するだけでwebpの導入はできました。“`diff_ruby:models/item.rb
has_one_attached :item_imagedef get_item_image(width, height)
+ item_image.variant(resize_to_fill: [width, height], format: :webp).processed
– item_image.variant(resize_to_fill: [width, height]).processed
end
“`## モデル
モデル
【Rails6.1】画像を保存する際のリサイズとActiveStorageのvariantについて
# はじめに
画像ってなんでもかんでも登録できたら、データベースを圧迫してしまうのでは…?という心配が浮かびました。
そこで、保存時に画像をMiniMagickで加工してリサイズしてから登録する設定にしてみました。# 実装内容
## 準備
画像の扱いには、MiniMagickとActiveStorageを使用しています。
また、MiniMagickを使用するにはImageMagickが必要とのことだったのでインストールしておきます。https://github.com/minimagick/minimagick
“`
$ brew install imagemagick
“`
“`ruby:Gemfile
# ActiveStorage
gem ‘image_processing’, ‘~> 1.2’
# MiniMagick
gem ‘mini_magick’
“`## 画像保存時のコントローラの記述
商品を登録する際のコントローラの記述がこちら。
ちなみに長くなるので省きましたが、同じような記述をupdateアクションにも追加しています。“`ru
【2024年6月】Rails7をWindows上で環境構築する方法
「Railsをインストールできない」
RailsはWebアプリ開発フレームワークで初心者にもわかりやすいと言われます。
しかし、環境構築で挫折する人が多いのも現状です。
今回はRailsをWindows11で開発できるセットアップを行います。
せっかく始めるのに、何もできないまま終わりたくないですよね。
動画でサポートしていきます。
YouTubeを活用してぜひ始めてみてください。
結論は、WSL2を使いましょう。
# YouTubeでの解説-2024年6月24日投稿
### リンク先
WSL2
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual
Homebrew
https://brew.sh/ja
### Railsのインストール
“`
sudo apt update && sudo apt upgrade
sudo apt install -y autoconf bison patch build-ess
uuid生成からルーティングでuuidをidとして使用するまでの方法を解説
今回は実際のシステム開発の現場でuuidを使ったのでこれについてまとめました。
## uuidとは?
uuid(Universally Unique Identifier)は、128ビットの一意の識別子として用いられます。わかりやすくいうと、uuidは8-4-4-4-12の形式で表される32文字の16進数と4つのハイフンから構成されるため、1兆個のuuidを生成しても重複する確率は低いです。
そのため、大規模なシステムや分散システムでも、重複しない識別子として利用できます。主にデータベースやネットワーク上で一意の識別子として使用されます。
またuuidは16バイトのバイナリ形式で保存するため、文字列形式の36バイトに比べて大幅にストレージを節約できます。合わせてインデックスが小さくなり、検索が高速化されます。
## uuidの設定
#### ・ステップ1
まず、userモデルを作成し、「t.binary :uuid, limit: 16」というカラムを設定し、「add_index :users, :uuid, unique: true」という設定を加えます。
“`
cl
Heroku + Rails + S3 Google Search Console で「サイトマップを読み込めませんでした」を解消する
# 背景
herokuで動かしている web ページのサイトマップをGoogle Search Console で登録したい。※ Herokuのダイナモはエフェメラル(一時的)ファイルシステムを採用しているため、デプロイごとにリセットされます。そのため、サイトマップのような定期的に更新されるファイルは、Heroku上で直接生成しても、次のデプロイ時に消えてしまいます。そのため、永続的なストレージへの保存(例えばAmazon S3など)が必要になります。
> Storing static files elsewhere is crucial for Heroku apps since dynos have an ephemeral filesystem. Whenever you replace a dyno or when it restarts, which happens daily, all files that aren’t part of your application’s slug are lost. Use a storage solution like S3 t
小規模Railsチームの私はDDDを学ぶべきなのか
# エクスキューズ
これは社内向けの発表なので、フェーズやメンバーのスキル想定が大幅に異なる可能性があります。
Evans本、IDDD、ボトムアップ本ぐらいしか読んでないので、あくまで現時点での感想として捉えてください。# 想定読者
– 1チーム10人程度のRails
– 全員がスキルフルというわけではなく、インフラ・フロントの分野でも課題が残っている
– 規模感としてテーブルは200~300ぐらいあってまぁまぁ複雑
– レビューでServiceクラスにドメインの知識を流出してしまっています、と言われたがドメインの定義って何?
– QiitaなどでDDDについて書かれた記事を見かけることはあるが、謎の用語が多すぎてよくわからない# 結論
そんなに優先度高くない# 理由
– 他に勉強しないといけないことがいっぱいある
– クラウドインフラやIaC
– フロントエンド周りのあれこれ
– Ruby, Railsのバージョンアップ
– 前提としている知識が多い
– SOLID原則などのソフトウェア工学
– オブジェクト指向についての理解
– デザインパタ
,で区切って 複数ワード検索 実装
# はじめに
ポートフォリオ制作中です!
,で区切って複数のワードを検索できるように実装したためアウトプットします✍️
複数検索のアウトプットなので、検索機能についてはさらっと書いています!
検索機能実装については下記記事がわかりやすかったです!https://qiita.com/hapiblog2020/items/6c2cef49df5616da9ae3
複数ワード検索はもっといい方法を検討中です🧐
もしあれば教えていただけると幸いです!※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 開発環境
・ruby: 3.1.2
・Rails: 6.1.7.7
・Cloud9
・bootstrap導入済# ER図
# ルーティング
“`routes.rb
いいねしたユーザーの一覧表示
# はじめに
ポートフォリオ制作中です!
いいね数をクリックするといいねしたユーザーの一覧を表示
できるように実装したためアウトプットします✍️※旅行やデートのプランを共有するアプリなので、投稿機能はPostではなくPlanを使用しています!
# 前提
いいね機能は実装済み、いいねボタンの非同期化済みです
ご留意ください!# モデル
“`plan.rb
class Plan < ApplicationRecord # アソシエーション belongs_to :user has_many :likes, dependent: :destroy # この行を追加 has_many :liked_users, through: :likes, source: :user #throughで、likesを通してuserのカラムを使用できる : end ``` # ルーティング ```routes.rb Rails.application.routes.draw do scope module: :public do resources :p
Googlemap geocodingが動作しない
# はじめに
ポートフォリオ制作中です!
今回はデプロイ後のGoogleMapとGeocodingがうまく動作しなかったため本番環境でも動作せず、開発環境でdb:seedし直すと開発環境でも動作しなくなってしまったため、解決方法をまとめておきます!
# エラー状況
本番環境でも、開発環境でも、rails db:seedすると下記のエラーが出るようになった
“`
$ rails db:seed
Google API error: request denied (API keys with referer restrictions cannot be used with this API.).
“`
また、Googlemapは表示されるが、緯度経度が正しくないため変な場所にピンが刺さっている(Google Mapが表示されない問題もありましたが、本番環境ウェブサイトのURLを許可してないだけだった)# 原因
このエラーはコードの問題ではなく、APIの制限設定によるものですhttps://developers.google.com/maps/faq?hl=ja#brow
【Rails, MySQL, ORM】where(‘user.id’: 1)ってことができる
業務開発でRailsを使用しており、ORMもよく使用しているのですが、業務開発を通して知った `where` 句の文法的なのをここで紹介していきます。
## where(column: value)
これはRailsのwhere句の一番オーソドックスな書き方だと思います。
whereをメソッドチェーンで繋げていけば `and` 句となり条件をより絞ることができます。
“`ruby
# e.g.
User.where(id: 1)
User.where(gender: “man”).where(name: “hoge”)
“`## where(column: [value])
これはいわゆる `where in` 句の書き方で、 `or` 検索をかけたい時は基本的にこの書き方が一番いい気がします。
若干話が変わりますが、SQLアンチパターンにおいて、 `or` 検索はインデックスが効かない `where` 句の書き方ですが、 `where in` 句はインデックスが効く書き方なので、もし `or` のような**和集合条件**でインデックスが効く検索をしたい場合は **`wher
DHH流のルーティングの書き方
今回は私が現場で使用しているルーティング構成について自分のメモとしてまとめました。
## DHH流ルーティングとは?
DHH流ルーティングとは、Railsの創始者であるDavid Heinemeier Hansson(DHH)の提唱するルーティング設計の方法論です。DHH流ルーティングでは、リソースに対して標準的なCRUD操作(Create, Read, Update, Delete)を簡潔に定義し、カスタムアクションやネストリソースを最小限に抑えることで、ルートの複雑さを減らして記述を行うというものです。
つまり、デフォルトCRUDのindex , show, new, edit, create, update, destroyメソッドのみですべてを表現するということです。
## 具体的な設定例
### ・ 例1
“`
namespace :admins do
root ‘dashboards#index’resources :staffs
resources :users do
resource :enable, only
【Rails6.1】番環境で発生したMysqlのサブクエリに関するエラーを解消
# はじめに
デプロイを行った際にSQLでエラーが発生しました。:::note alert
ActionView::Template::Error (Mysql2::Error: This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’):
:::# エラーの内容
>Google翻訳より…
>このバージョンの MySQL はまだ「LIMIT & IN/ALL/ANY/SOME サブクエリ」をサポートしていませんLIMIT句が使用されている箇所の構文が、MySQLのバージョンで使用できない記述になっているようです。
さらにエラーメッセージを見ると、以下のビューを表示する際に引っかかっているようでした。
“`html:ショップ(Shop)詳細(show)のビューページ
<%= image_tag @shop.get_shop_image(500,500), class: "w-100 p-1" %>
<%= render 'public/favorite_shops/btn',
【Docker】DockerでRailsのデバッグを実行する【Rails】
## やりたいこと
Dockerで実行しているRailsアプリケーションのデバッグを実行する## なぜ行うか
設定なしにbinding.pryをソース内に記述しても止まらないため、以下の設定が必要。## 方法
1. docker-compose.ymlに下記を追加“`yml:docker-compose.yml
web:
# 以下を追加する
tty: true
stdin_open: true
“`# ターミナルで実行しているdockerにattachする
“`docker:
# 起動しているdockerのコンテナ名を調べるため、以下を実行
$ docker ps
# 調べたコンテナ名を利用して、docker環境にattachする
$ docker attach コンテナ名
“`## 最後に
上記を行うとdocker環境でpry-byebugを利用したデバッグを利用できます。
Rails:パーシャルでインスタンス変数を使用してはいけない理由
### 読んで欲しい人
– パーシャルにインスタンス変数を書いてエラーになった人
– 過去の自分### 動作環境
– MacOS 14.5
– ruby 3.3.0
– Rails 7.1.3.3
– psql (PostgreSQL) 14.11### 課題
– 下記のコードにレビューをいただいた“`ruby:_post.html.haml
# パーシャルファイル
.p-4.d-flex.flex-column.justify-content-center.mt-6
.post-container.p-3
.mb-3
= @user.name
“`レビュー内容: パーシャルでインスタンス変数をつかわないように
### なぜダメか
**理由1**
そもそもパーシャルの利用目的は、
**viewの一部を切り出して、再利用するためのもの**
なので、
インスタンス変数をパーシャルの中で使用してしまうと、他の部分で再利用ができない。**理由2**
キャッシュの効率が悪い
Railsではパーシャルを呼び出すタイミング(render)
Railsヘルパー
“`.rb
# ページごとの完全なタイトルを返す
def full_title(page_title = ”)
base_title = “Ruby on Rails Tutorial Sample App”
if page_title.empty?
base_title
else
“#{page_title} | #{base_title}”
end
end
“`
のようなヘルパーを作成することで“`.application.html.erb
<%= full_title(yield(:title)) %>
“`
で呼び出すことができる
rails7にsotalbeを実装
# はじめに
久々にrailsの並び替え機能を実装したので、その際の作業録です。# 実装
昔は、以下のgemを利用した時期もありましたが、jqueryが利用されていることだったり、メンテがされてないとかがあったので、今回は利用しないことにしました
https://github.com/itmammoth/rails_sortable今回は、stimuls componetsにあるこちらを利用しました。
https://www.stimulus-components.com/docs/stimulus-sortable### javascript関係
“`
yarn add @stimulus-components/sortable sortablejs @rails/request.js
“`“`js:app/javascript/controllers/index.js
import { Application } from ‘@hotwired/stimulus’
import Sortable from ‘@stimulus-components/sorta