Rails関連のことを調べてみた2022年05月12日

Rails関連のことを調べてみた2022年05月12日

Notification API 通知サブスクリプション登録方法

# 目標
SPAPI Notification API (旧 MWS Subscription API)で通知サブスクリプション登録します。
今回は **ANY_OFFER_CHANGED** という通知タイプで登録行います。

各通知タイプの説明はこちらでご確認ください:
https://developer-docs.amazon.com/sp-api/docs/notifications-api-v1-use-case-guide#notificationtype

# 前提
・ AWSアカウントを作成されている
・ SPAPIに連携済で、リクエストコールできる状態のストアがあること

# 1. SQSメッセージキュー作成
Amazon通知の宛先を作成します。
使うのは[Amazon Simple Queue Service(SQS)](http://aws.amazon.com/sqs/)です。

タイプは標準に設定して、名前を入れてキューを作成します。
今回はデフォルト設定で、許可ポリシー、暗号化、デッドレターキュー、タグ全てなしです。
アクセスポリシー

Decoratorをrailsに導入する

Decoratorの説明の前に例え話から。
Modelでは日時を”2018-07-12 18:12:34”という値で保持していますが、Viewでは”2018/7/12”と表示したい場合を考える。
前提としてモデルはデータの格納に関する情報だけを書くところ。ビューは情報を表示する役割だけを担うべき。じゃあ上の”2018-07-12 18:12:34”を”2018/7/12”に変える処理はビューとモデルのどちらに書くべきか?

正解はビューとモデルのどちらでもなくDecoraterに書くべき。

話が遅くなったがDecoraterとは名前の通りデコレーターで、情報を加工する処理を書き込む。
それはビューとモデルの間に置く。

### Decoraterを実装する

Decoraterを実装するにはDraperというgemを使う。
“`
gem ‘draper’
“`
で“`bundle install“`を実行。

###Decoraterを使って置き換えを行う。

##### 1、decoratorのメソッドを定義するファイルを作成する。
以下のコマンドである。
“`
rail

Rails 7 の便利な ComparisonValidator でちとハマった

Ruby on Rails で日付の前後関係に関するバリデーションをどうやって書こうか調べていたら,Rails 7 で,ComparisonValidator なるものが導入されたことを知った。

この記事は,ComparisonValidator の簡単な紹介と,私がハマった落とし穴について。

# 概要

ComparisonValidator は,モデルオブジェクトの属性値を他の値と比較するバリデーター。

Rails 7 より前でも,数値に関しては NumericalityValidator を使って

“`rb
validates :amount, numericality: { greater_than: 100 }
“`

みたいなことができていた。この例は,`amount` の値が 100 よりも大きいことを要請する。

これを,数値以外の比較可能な値にまで広げよう,ということらしい。
文字列でも日付でもいいわけだ。

日付を固定値と比較するバリデーションは,たとえば

“`rb
validates :start_date,
comparison: { gre

rails プロゲート 整理メモ

困ったことを書いたものです。

# テーブルに新しいカラムを追加する
“`
rails generate migration user image_name:string
“`
userモデルにstring型のimage_nameカラムを追加する

“`
add_column(テーブル名, カラム名, タイプ(データ型), オプション引数)
“`

テーブルを編集したときは 
“`
rails db:migrate
“`
# ユーザー登録時に初期画像を設定
登録時のアクションに新しく追加しする
“`
@user = User.new(
name: params[:name],
email: params[:email]
image_name: “default_user.jpg”
)
“`
カラムに書いておく。
出典 https://qiita.com/you8/items/137c87945da3cac19953

## SyntaxError in UsersController#show
追加したカラムに“`,`

コンソールからSidekiqの情報を見るときにcreated_at, enqueued_atなどが日時じゃなくて謎の数字

問題

実例をあげます。
試しにデッド状態のジョブをひとつ見てみましょう。

“`ruby
# rails console

Sidekiq::DeadSet.new.to_a.first
=> #3,
“queue”=>”default”,
“class”=>”FooClass”,
“args”=>[“8ecd1021-62d7-4068-8d7b-bb11033163f6”],
“jid”=>”746d59154e31e75f09109f0b”,
“created_at”=>1649321038.4516313,
“enqueued_at”=>1649321184.3722708,
“error_message”=>”undefined method `-‘ for nil:NilClass”,
“error_class”=>”NoMethodError”,
“failed_at

Railsにサンプルデータを作成する方法

### 1,Fakerを導入する
“`
gem ‘faker’
“`
今回私はtest環境とdevelopment環境に反映したいので、
“`
group :development, :test do
# (略)
gem ‘faker’
end
“`
### 2、“`db/seed.rb“`にサンプルデータを作成する処理を書く。

“`rb
# 追加のユーザーをまとめて生成する
99.times do |n|
name = Faker::Name.name
email = “example-#{n+1}@railstutorial.org”
password = “password”
User.create!(name: name,
email: email,
password: password,
password_confirmation: password)
end
“`

### 3,“`rails db:seed“

S3×CloudFront を使用したActionTextの画像アップロード・配信方法

# はじめに

ActionTextから登録された画像や添付ファイルはデフォルトだとサーバー内のローカルディスクに保存されます。

大容量のファイルが溜まり続けた場合、サーバがいつかキャパオーバーになってしまう懸念があります。

そこで、ActionTextから投稿された画像の保存先を、ローカルディスクから`Amazon S3`に変更しストレージ容量を確保し、高速コンテンツ配信サービス(CDN)である`Amazon CloudFront`を使用して、配信を行う構成を実装してみたいと思います。

【環境】
・ AWS(EC2, S3, CloudFront, IAM etc.)
・ Ruby 2.7.3
・ Ruby on Rails 6.1.5

:::note warn
**ActionText**を使用するには、Railsバージョン6系以上が必要です。
:::

[Action Text の概要](https://railsguides.jp/action_text_overview.html)

![スクリーンショット 2022-05-11 6.38.44.png](h

Rails + Vue.jsによる動的タグ付け機能

# はじめに

社会人1年目の問題意識・問題解決の習慣化と情報共有を補助するツールとして[意習(issue)](https://github.com/fumtas1k/issues_app)というアプリを作りました。日頃の業務の中で遭遇するイシューをアウトプット、新人同士で情報共有し、メンターがフォロー/サポートすることで問題意識と解決能力を養う、というアプリです。

タグ機能を作成するときに、`acts-as-taggable-on`による動的タグ付け(複数選択可)とUIに`vue-multiserect`を使用しました。**この組み合わせでの記事が見当たらなかった**ので、記載することとしました。
完成版は、下図の通りです。

![tags.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2493295/c97eb437-768b-7a3c-94bc-20c87c98b176.gif)

## 環境

– Ruby: 3.0.1
– Ruby on Rails: 6.0.3
+ acts-as-

rails5 プロゲートをしながらのメモ

自分用の整理メモです。

# アクションとビューファイルの関係
homeコントローラのtopアクションは、コントローラと同じ名前のビューフォルダ(homeフォルダ)から、アクションと同じ名前のビューファイル(top.html.erb)を探し、ブラウザに返していることを理解しておきましょう。

# パラメータを表示させる
“` routes.rb
post ‘users/hogehoge’, to: ‘users#hogehoge’
“`
‘users/hogehoge’に対してpostをするとusersコントローラのhogehogeアクションを期待する。

“`***.controller.rb
def hogehoge
end
“`
hogehogeが作動して

“`hogehoge.html.erb
<% params[:id] %>
“`
自動的にアクション名に対応しているビューファイルにパラメータを表示できる。

# CSSファイルの場所
CSSファイルは「app/assets/stylesheets」フォルダに入っています。
Railsでは、「stylesheet

メソッドまとめ 第一弾

メソッドまとめ

まずは数値クラスから見ていきましょう。

〜〜数値クラスのメソッド〜〜

数値.round 四捨五入
数値.floor 切り下げ
数値.ceil 切り上げ
数値.truncafe 切り捨て
数値.zero? 0かどうか確かめる
数値.odd? 奇数かどうか確かめる
数値.even? 偶数かどうか確かめる
文字列.to_i 数値に変わる
数字.to_s 文字列に変わる
(?がつくと真偽値を返します。)

“`
num = 7.77

num.round => 8
num.floor => 7
num.ceil => 8
num.trancafe => 7
0.zero? => true
“`

次は文字列クラスのメソッドです。

〜〜文字列の演算式〜〜

“`
“abc” + “xyz” => “abcxyz”
“abc” * 3 => “abcabcabc”
“abc” << "xyz" => “abcxyz” //+との違いは元の変数の中身も+をしたものになる
“aaa@aaa.com” =~ /@/ => 3 //=~は調べたい変数がどこにいるの

<パーミッション>Railsアプリでパーミッションエラー

今回はRailsアプリで発生したパーミッションに関するエラーの
対策を備忘録として残します。

# rails s 時に発生

“`
Errno::EACCES (Permission denied @ apply2files – /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/Ku/KueVW_Fgne0MoM9sWUxwZLSJS_YpySO0N2iIaOhPsgg.cache):
“`

とエラーが表示されビューが返されませんでした。

どうやら権限がない?ということらしい。

確認します。
“`
$ ls -al /Users/ユーザーネーム/Documents/homepage/homepage_on_ruby_on_rails/homepage/tmp/cache/assets/sprockets/v4.0.0/ku
total 8
drwxr-xr-x 3 root

Rails7(Hotwire)のSPA体験が快適すぎるので紹介する

Rails7を使った管理画面を業務で、2件ほど進めているのですが、
Rails7から搭載されたHotwireによるSPAっぽい開発が良すぎたので紹介します。

特に今回はRansack、Kaminariをつかった検索一覧画面の実装を紹介します。
これを例えば、Rails API + Vue.jsとかでやろうものなら、なかなか大変ですね。(っていうかめんどくないのでやらない)

# 事前準備
## 今回使うプロジェクトはこちら
https://qiita.com/tikaranimaru/items/70f87b1fe4b1e7166348

## 情報
– ruby2.7
– Rails7.0
– css: tailwind css

## 使用するデータ
シンプルに食べ物を管理するアプリを作りたいと思います
“`rb
# 食べ物をカテゴライズする種別データ
create_table :kinds do |t|
t.string :name

t.timestamps
end

# 食べ物データ
create_table :foods do |t|
t.string :n

railsでNoMethodError: undefined method `silence’と言われたエラーの対応方法

こんにちは。[virapture株式会社](https://virapture.com)の[もぐめっと](https://mogmet.com)です。

本日はトラブルシュートな記事になります。

## 問題

railsで開発していたところ、pumaを使ったrailsのログ出力をdockerでそのまま出力したいと思って設定したら下記のエラーが出てしまいました。

“`
#>
“`

というエラーがでて画像が表示されなくなってしまいました。

## 解決法

調べたら下記に答えがあった。

https://github.com/rails/sprockets-rails/issues/376

早速config/environments/development.rbのファイルを修正した。

“`development.rb
config.logger = Logger.new(STDOUT)
“`

としていたところを

【Rails】actionmeilerのsubjectをi18nで日本語化する

# 初めに

`Rails`でメールの件名を `i18n` で設定する方法を忘備録として残しておきます。

## 環境

– Rails 6.1.4

– Ruby 2.7.4

# 日本語設定

`ja.yml`に日本語を追加することで`subject`を設定できます。
また、引数を与えて動的に変更することもできます。

## user_mailer.rb

“`ruby:user_mailer.rb
class UserMailer < ActionMailer::Base def welcome # mail(to: '宛先' ,suject: '件名') mail(to: '宛先') end def signin(user) mail(to:'宛先', subject: default_i18n_subject(user: user.name)) # 引数を与える場合はdefault_i18n_subjectを利用する end end ``` ## ja.yml ```yaml:ja.yml ja: user_mai

【初心者でも無料でHTTPS化したい!!!】Certbotを用いて実装【画像つき】

# この記事でわかること
HTTPでのデプロイ後Certbotを用いた無料でのHTTPS取得方法を解説します!
独学やスクールでの初学者に向けて丁寧に解説していきます。

参考にしていただけると幸いです^^
また間違っているところがあればご教授お願いします

# 環境
Ruby 2.6.3
Rails 5.2.6
本番環境 nginx/Puma/Amazon Linux2/AWS EC2/MySQL

___※CertbotはAmazon Linuxでは動作しません
Amazon Linux2を使用している場合のみ実装できます___

# 目次
1. EC2にHTTPSを追加する
1. nginxのconfファイルを編集
1. railsのconfigファイルを編集
1. Certbotの実装
1. 自動更新のcronを設定する

# 解説
### 1.EC2にHTTPSを追加する

AWSにログインしEC2を開いて、
インスタンスID > セキュリティ > セキュリティグループの順に進みます。

![C9F6DDB3-7B9F-4E53-B85F-FF5FB7D83440_1_201

【個人開発】母音法を広めたい!劇団四季も使っている『母音法』で発声練習ができるサービス『BOIトレ ~ 母音法で発声練習 ~』をリリースしました!

## まず母音法って?
日本語は母音の「あ・い・う・え・お」と子音でできています。
いわば母音は言葉の土台部分にあたるので、
この土台がしっかり発音できるようになると、ハッキリした声で発音できるようになります。

例)「おはようございます」→「おあおうおあいあう」
という感じで母音のみで発音するのが母音法です

## サービス紹介
劇団四季も使っている発声練習方法の「母音法」で発声練習ができるサービスです。
練習の管理もできるので毎日の記録をつけながら練習ができます

https://www.boitore.jp/

https://github.com/konjikicity/boitore

## なぜ作った?
僕は幼少期より非常に滑舌が悪く、馬鹿にされることが多くありました。

docker-composeでRails6の開発環境を構築(MySQL使用)

# Dockerで環境構築しってみか〜(ノリ)
「アプリを作るたび、ローカルに環境を構築するのが、面倒臭い」という怠惰な気持ちとやたら出てくる**docker**や**仮想環境**ってのがカッコよくて最近、Rails6とMySQLの開発環境を構築したのでまとめてみました。

## Dockerとは?
こちらをご参照ください
– [【図解】Dockerの全体像を理解する -前編-](https://qiita.com/etaroid/items/b1024c7d200a75b992fc)

# 0. Dockerをインストールしよう
まずは自分のパソコンにDockerをインストールします。
[こちら](https://www.docker.com/)からDockerをインストールしましょう。

###  任意の作業フォルダを作成する
“`:terminal
$ mkdir docker-test
$ cd docker-test
“`

# 1. 必要なファイルを準備しよう
“`:terminal
$ touch {Dockerfile,docker-compose.yml,Ge

[Rails]タグ一覧での投稿数が多い順に並べる

## はじめに
タグ一覧の作成順?の表示が使いにくいと感じ、
初心者(300)←()の中身が多い順に表示して少ないものは表示させないようにできたので投稿します。

多く投稿されているランキング方式に少しだけ(本当に少し)工夫が必要だったので、
とても簡単ですがよろしくお願いします!

⚠タグ機能は実装している前提です.
⚠もし投稿数が多い順で表示されなかったら、自分の環境ではPostモデルにdefault_scopeで最新順にしているからかもしれません。

#### こちらの記事を参考に実装しました!
[Railsでお手軽ランキング機能](https://qiita.com/mitsumitsu1128/items/18fa5e49a27e727f00b4)

実装後に気が付きましたが、めちゃくちゃわかりやすい記事が存在してました!!↓↓
[【Rails】いいね順・投稿数順など ◯◯順の考え方・方法](https://qiita.com/ysdiary/items/7c91ca5a3e71311d8fc3)

## 環境
Rails: 6.1.5
Ruby: 2.6.3

## 結論

自社サービス「病院なび」へ AWS Opensearch を導入したい

はじめまして。「[病院なび](https://byoinnavi.jp/)」の開発チームメンバー甘利です。
国内最大級の病院検索サービス「病院なび」の改善にRailsエンジニアとして日々挑み続けております。現在 AWS Opensearch の導入を業務いて行なっています。少しずつ共有して行けたらと思っています。(※ この記事に具体的な手順等は含まれていません)

# 概要
 自社サービスの 「病院なび」 に AWS Opensearch を導入するにあたり ”使いやすい仕組み” を目指して色々考えていきたいと思っています。「病院なび」 は主に Ruby on Railsで開発されていますので、便利な Gem で楽な実装ができると考えていました。ところが、AWS Elasticsearch から AWS Opensearch に変更になってしまい、巷にあるGemがそのまま使えなくなってしまい、楽ができなくなってしまいました orz。
 現状、Opensearch を Rails から利用する際の選択肢として”公式コミュニティが公開している Ruby 用クライアントの利用”が比較的楽で

ネスト、collectionとmemberの違いについて(ルーテイング設定)

ルーテイング設定のネスト、collectionとmemberの違いについて学んでいきましょう。
“`
resources :stores do
resources :products
member do
get ‘drink’
end
collection do
get ‘ice’
end
end
“`
まずはネストから学んでいきましょう。
記載方法としては上の1~2行目です。
このようにresourcesの中にresourcesを記載することで
親子関係を作ることができます。
routingがこのようになります。
“`
#ネストしたルーテイング
/stores/:store_id/products/:id
“`
storeの中にproductが入り込んでいるイメージです。

次は一気にmemberとcollectionを見ていきましょう。
一番最初のコードの2行目以外にご注目ください。
このmemberとcollectionを使うと下のようにルーテイングが変化します。
ルーテイングが変わることによって、基本のアクション以外のルーテイングを