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

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

RubyのC拡張で例外クラスを定義する方法

## はじめに

Ruby言語では、StandardErrorを継承して例外を定義する。

“`ruby
class NoIndexError < StandardError; end ``` RubyのC拡張ライブラリ(Ruby C extension)で例外クラスを定義したい。 ## やり方 ### 例外クラスを定義する C拡張を書く時もRuby言語とまったく同じように、StandardErrorを継承したクラスを定義すればよい。 以下のようにして例外を定義できた。 ```c VALUE rb_Bio; VALUE rb_CGRanges; VALUE rb_eNoIndexError; void Init_cgranges(void) { rb_Bio = rb_define_module("Bio"); rb_CGRanges = rb_define_class_under(rb_Bio, "CGRanges", rb_cObject); rb_eNoIndexError = rb_define_class_under(rb_CGRanges, "No

元記事を表示

【rails】ゲストユーザー機能の実装

ポートフォリオ作成したけど、なんか忘れてる・・
そうだ、ゲストユーザー機能!
ということで備忘録として簡単に実装方法を記載します。

# 前提
・ユーザー登録機能(devise)が実装されている

# ルーティングの設定
`guest_sign_in`アクションはこのあとコントローラーで定義します。
“`config/routes.rb
post ‘homes/guest_sign_in’, to: ‘homes#new_guest’
“`

# アクションの定義
以下にて`guest_sign_in`を定義します。

1.`find_or_create_by`でゲストユーザーがあれば取り出す、無ければ作成する にする
2. パスワードはセキュリティの関係で`SecureRandom.urlsafe_base64`のランダムで作成できるよう設定
3. railsが用意してる`sign_in`メソッドを利用して、先ほど定義した`user`をログインさせる

“`controllers/homes_controller.rb
class HomesController < Appli

元記事を表示

action textで画像が表示されない

## 現象
action textを利用したリッチテキストをレンダリングした際に画像が下のようにはてなのアイコンが表示されてしまう。

![スクリーンショット 2022-05-12 23.03.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960407/83bbd65b-60a1-16da-409c-1d8c9bbfb472.png)

## 発生エラー
“`
LoadError (Could not open library ‘vips.42’: dlopen(vips.42, 0x0005): tried: ‘vips.42’ (no such file), ‘/usr/local/lib/vips.42’ (no such file), ‘/usr/lib/vips.42’ (no such file), ‘/Users/higuchiyuujirou/workspace/imagine/vips.42’ (no such file), ‘/usr/local/lib/vips.42’

元記事を表示

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

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