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

Ruby関連のことを調べてみた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/)です。

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

Windows環境でゼロからRuby + Lambda + API GatewayでAPI作って公開するまでの記事

# 概要
この記事では、Windows環境でゼロからRubyの開発環境を作って、ローカルで作成したコードをLambdaにアップし、API Gatewayを通して公開するまでの手順を記載します。

# 対象
・細かいことは良いから、とりあえずRubyでAPI作ってWeb公開したい人
・Lambdaとやらを使ってとりあえず何か動くものを作りたいが、何から初めて良いか分からない人

# 環境
– windows10
– Ruby 2.7

# 目次
– 開発環境を作る
– Lambda関数を作る
– ローカルのコードをLambdaにデプロイする
– API GatewayでWeb公開する

# 開発環境を作る
まずはRubyの開発環境を作ります。

### Rubyのインストール
以下からRubyをインストールします。
■Ruby
https://rubyinstaller.org/downloads/

RubyはRuby+Devkitのver 2.7をDLして下さい
ver 2.7なのは、Lambda上で動くRubyが2.7なので環境を合わせるためです。
+Devkit版なのは、VSC

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

【Ruby】Rubyコードのパフォーマンスを計測したい

# 概要
Rubyのパフォーマンスを計測するためprofile.rbを使用して計測します。
実際に速度が遅くなっていないかを調べることがあったためメモとして残す。

# テストコード(フィボナッチ数列)

test_fib.rb
“`ruby
def fibonacci(i)
(i == 0 || i == 1) ? 1 : fibonacci(i – 1) + fibonacci(i – 2)
end
n = 20
puts “fib(%d) = %d” % [n, fibonacci(n)]
“`

そのまま実行すると
“`
$ ruby test_fib.rb
fib(20) = 10946
“`

profile.rbを使用して実行すると

“`
$ ruby -rprofile test_fib.rb
fib(20) = 10946
% cumulative self self total
time seconds seconds calls ms/call ms/call name
85

foo_comserver2をrubyから操作するメモ

foobar2000をfoo_comserver2(COM Automation Server)経由で操作するときに詰まったところのメモ

“`ruby
require ‘win32ole’
ole = WIN32OLE.new(“Foobar2000.Application.0.7”)

# index番目のプレイリストに移動。右辺はオブジェクト
ole.Playlists.ActivePlaylist = ole.Playlists[index]

# 名前で指定する場合
ole.Playlists.ActivePlaylist = ole.Playlists.each.find { _1.name == ‘playlistname’ }

# 現在のプレイリストのindex番目の曲を再生
# メソッド名からすると、foobarの設定によっては再生以外のアクションになるのかもしれない
ole.Playlists.ActivePlaylist.DoDefaultAction index
“`

コンソールから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“

[Ruby]moduleのメソッド定義についての学習記録

## まえがき
Web系エンジニア転職を目指して学習しております。
今回は「プロを目指す人のためのRuby入門」という書籍で学習している私の振り返り記録になります。
学習した内容全てではなく、一部分を取り上げて記録しております。
書籍の内容を記載しすぎるのは問題であると認識し、配慮しておりますが問題がある部分がありましたらご指摘頂けると幸いです。

## include?メソッド
呼び出したクラスオブジェクトに引数で渡したモジュールがincludeされているかをtrue or falseのBooleanで返す。include?メソット自体はStringクラスとArrayクラスにも同名のメソッドが定義されていますがあくまで今回のinclude?メソッドはClassクラスで定義しているinclude?メソッドと認識しています。この認識が正しいかは分からなかったので知っている方がいたらコメントで教えて頂きたいです。
“`ruby
module Profile
end

class User
include Profile
end

User.include?(Profile)
# tr

Windows10でdocker toolbox を利用したRailsアプリ開発中

経緯

現在、独学でRails7でポートフォリオを作成している初学者です。Windowsでdocker toolboxを利用してアプリを開発しています。しかし、今回環境構築にあたりエラーが発生したものの、なんとかRails7(sprockets-rails, importmap-rails, cssbundling-rails)を利用したVue.js, tailwindcss が動作する環境を構築できたので、備忘録的に書き残します。

フロントエンド周辺について

rails7 ではrails tutorial でも採用されていたWebpackerの開発が終了したことや、トランスパイルが不要な選択肢が現れるなど、アセットパイプライン関連の変更点が多いように思った。私は経緯で述べたGemを利用したが、他の組合せはWindows周辺の知識不足により消去法で諦めた。組合せや全体像の理解ではこの記事が最も分かりやすかったです。

Rails

メソッドまとめ 第一弾

メソッドまとめ

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

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

数値.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]before_actionで先にincludesした時の罠

Railsでincludesメソッドを使用してデータの読み込み速度をあげようとした時にタイトルにある通り、罠に引っ掛かりました。

**※コードは一部抜粋して内容も変更しています。**
“`ruby
before_action :set_user

def destroy
return head :unprocessable_entity unless @user.unfollow(@follow)

render json: @user
end

private

def set_user
@user = User.includes(:following).find(params[:user_id])
@follow = User.find(params[:follow_id])
end
“`

このコードはフォロー機能を実装しているコードの一部で、destroyアクション内ではフォローを解除出来た場合はuserのデータを返しています。

開発環境で実際にフォローのボタンを押してみると200レスポンスが返り、データも返ってきています。

しかし、フ

<パーミッション>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

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にReact Railsを導入する

手順をメモ書きしておきます。

# Gemfileに下記の記述を追加

“`Gemfile
gem ‘react-rails’
“`

# ReactRailsの初期化
“`ターミナル
rails g react:install
“`

# React コンポーネントの作成
react-rails には、React Component 定義を生成してくれる generator があるため、
それを使用して Component を作成します。

“`ターミナル
rails g react:component 任意のコンポーネント名
“`

コンポーネント作成時、任意のコンポーネント名の後に「Props」と「Propsの型」を指定することもできます。

“`
rails g react:component StoreInfo storeName:string
“`

コマンドを実行すると
app/javascript/components直下にコンポーネントが作成されます。

上記のコマンドで作成されたコンポーネント
“`StoreInfo.jsx
import Rea

【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

open(url)で起きたエラー

# No such file or directory @ rb_sysopen – URL (Errno::ENOENT)
### 開発環境
使用しているpcのスペック:
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports)
macOS Monterey バージョン 12.3.1

使用しているrubyのversion:
ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-darwin21]

“`ruby
require ‘open-uri’
require ‘nokogiri’

url = ‘http://www.yahoo.co.jp/’
charset = nil
html = URI.open(url) do |f|
charset = f.charset
f.read
end

doc = Nokogiri::HTML.parse(html, nil, charset)
p doc.title
“`
上記のようなyahooのページタイトルを表示さ

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

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

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

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

https://www.boitore.jp/

https://github.com/konjikicity/boitore

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

【Python】配列の順序を保持しながら集合演算(和集合、差集合、積集合)を行いたい

# はじめに
私ごとですが、最近RubyのプログラムをPythonに書き換える機会がありました。
その時、配列に対して集合演算する必要があり、Pythonでこの方法を調べるとlistを一度setに変換して集合演算を行い、再度listに変換し直す記事が多数でした。
setは便利ですし、大半の場合はこの方法で十分だと思いますが、わたしの場合はもとのlistの順序を保持したかったので、setを使うことはできませんでした。

よって本記事には、Pythonでsetを使わずに配列の順序を保持しながら集合演算を行う方法を残したいと思います。

# 目指す動作(Rubyの集合演算)
配列同士で集合演算を行い、配列を返します。
## 和集合「|
“`ruby
[2, 1, 1, 7, 5, 5] | [3, 3, 5, 7, 9]
# => [2, 1, 7, 5, 3, 9]
“`
重複している要素は取り除かれます。
左辺を基準に順番が保持されています。
## 差集合「-
“`ruby
[2, 1, 1, 7, 5, 5] – [3, 3

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

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

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

Ruby メソッドについて

今回はメソッドについて学んでいきます。

Rubyでいうメソッドとは一体なんなのでしょうか?

前回、オブジェクト、クラス、インスタンスについて学習しました。
ざっくりと復習していきましょう。

Rubyの世界では全てがオブジェクトであり、オブジェクトとは「もの」のことです。
言葉で表現できるものは全て「もの」になります。
例えば、猫、人間、時間などなど、、

またクラスとインスタンスは何かというと、
例えば、僕たちは人間クラスに属しており、人間クラスのインスタンスオブジェクトです。
ハンバーグは食べ物クラスに属しており、食べ物クラスのインスタンスオブジェクトです。

Rubyの世界で言うのならば、
“あああ”はStringクラスに属しおり、Stringクラスのインスタンスオブジェクトです。
123 はIntegerクラスに属しおり、Integerクラスのインスタンスオブジェクトです。

では今回のメソッドとは一体なんなのでしょうか?
メソッドとはオブジェクトがなんらかの仕事や振る舞いをすることです。
例えば、「人間の僕はqiitaの記事を書く能力を持っている。」
と言うのはこの「q