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

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

bundle install 時の idn-ruby エラー

## エラー内容
環境構築時の`bundle install` で `idn-ruby`に関するエラーに遭遇。

“`
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

current directory: /Users/ynamiki/Desktop/sora/vendor/bundle/ruby/2.6.0/gems/idn-ruby-0.1.0/ext
/Users/ynamiki/.rbenv/versions/2.6.6/bin/ruby -I /Users/ynamiki/.rbenv/versions/2.6.6/lib/ruby/site_ruby/2.6.0 -r ./siteconf20220722-10264-bfer1i.rb extconf.rb
checking for -lidn… no
ERROR: could not find idn library!

Please install the GNU IDN library or alternati

元記事を表示

【Active Storage】ストレージ内にzipファイルを生成してDLする機能作成までにやったこと

## このノートの内容
– クラウドストレージ内のファイルをzipにまとめてDLしたかった
– ファイル処理のメソッドの理解が曖昧だったので、基礎から調べながら行った

## 使用Gem

– [rubyzip](https://github.com/rubyzip/rubyzip)

## 調べた内容

### [File.join](https://docs.ruby-lang.org/ja/latest/method/File/s/join.html)
連結したいディレクトリ名やファイル名を文字列(もしくは文字列を要素に持つ配列)で与えます。
“`ruby
File.join(“a”,”b”) # => “a/b”
“`

### [File.open](https://style.potepan.com/articles/27876.html)

Fileクラスから提供されているopenメソッドで、Rubyでファイルを開いたり・作成したりする際に呼び出す処理です。

読み込みや書き込み時にもファイルを開く必要があるため、ファイ

元記事を表示

100日後くらいに個人開発するぞ!day061

## 今日はDateクラスを学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/f4865f3e-8561-bc35-d6b1-0c1ac300ca35.png)

## 今日の学び

### Dateクラスの読み込み
* Dateクラスを用いると日付を扱うことができる
* DateクラスはRubyが用意しているクラスなので`require`で読み込みことができる
* 既に用意されているクラスを読み込む際は`require “クラス名”`
* 注)`require /.クラス名`ではない

### Dateクラスの使い方
* Dateクラスは他のクラスと同様にDate.newとすることでインスタンスを生成できる
* `インスタンス変数 = Date.new(年,月,日)`

### 曜日を判定するDateクラスのインスタンスメソッド
* 「日曜日かどうか」を真偽値で返す例
* `requre “date”`

元記事を表示

【Rails】APIモードかつクロスオリジン間でCookieやSessionを使う方法【SPA】

# 環境
– Ruby 3.1.2
– Rails 6.1.6
– Vite 2.9.9
– Vue 3.2.25
– Docker
– Google Chrome (バージョン:103.0.5060.53)

# 前提
– RailsはAPIモードで使用
– フロントエンドとバックエンド間は異なるオリジンでの通信

# やり方
APIモードで起動したRailsはそのままではCookieを使うことができません。
なので、まずCookieを使うことができるようにします。

“`ruby:app/controllers/application_controller.rb
class ApplicationController < ActionController::API include ActionController::Cookies # 追加 ``` ```ruby:config/application.rb module App class Application < Rails::Application # ... config.middleware.

元記事を表示

webエンジニア界隈で使われる各言語のテンプレートリテラル比較してみた

# はじめに

昨日書いた記事でもしれっと使ってるんですが、固定の文字列+連番みたいなことをやるときに、普通に文字列連結してもいいのですが見づらいし直感的ではないので、テンプレートリテラル(テンプレート構文)というものを使って、文字列に直接変数をぶっこんでしまう、というやり方を日常的にやるんじゃないかと思います。

昨日書いた記事はこちら

https://qiita.com/layzy_glp/items/7f3e43af11858eff622d

というわけで、昨日書いた記事の順番で各言語のテンプレートリテラルを紹介していきたいと思います。

# Ruby

“`ruby:例
v = “hoge”
print “hoge#{v}” # hogehoge
“`

ダブルクォートで囲われている中の `#{v}` のところですね。変数名を `#{変数名}` ってな感じで囲むやり方です。
割と古く(v1系)からのrubyでは当たり前のように使われているもののようです。
正確には「**式展開(string interpolation)**」と呼ばれるものらしく、変数どころかruby式を入

元記事を表示

class << self の特異クラス形式内の定数にアクセスしたい

“`ruby
class A
class << self B = 'b' end end A.singleton_class::B # => “b”
“`

元記事を表示

基本的なRubyの文法

## はじめに

ドットインストールにてRubyを勉強しているのですが、写経だけだとなかなか頭に入らないので、学んだことや疑問に思って調べたこと、自分で考えたことなどを書いていきたいと思います。
丸写ししない、間違ったことを書かないよう気をつけましたが、何かご指摘があれば教えていただけると幸いです。

## 標準出力

“`ruby
print “hello” # helloと表示される
puts “hello” # hello + 改行
p “hello” # “hello”のように””も表示されオブジェクトの種類が分かりやすいように表示される
“`

putsはput stringの略。pはデバッグによく使われ、以下のような場合に役立つ。

“`ruby
a = [1, 3]
b = [“1”, “3”]

puts a # 1 3
puts b # 1 3

p a # [1, 3]
p b # [“1”, “3”]
“`

## 変数、定数

“`ruby
fruit = “apple” # 変数
PI = 3.141592 # 定数
“`

変数名は英小

元記事を表示

Rails6でrails generate scaffoldすると`Unknown alias: default (Psych::BadAlias)`とエラーが出る

## 結論

Gemfileで`webpacker`のバージョンを `~> 5.0`と指定すればエラーが出なくなる。
なぜかはわからない。

## 詳細
### やりたかったこと
Railsアプリでscaffoldを使ってリソースを作りたかった。

### 環境
– ruby 3.1.2
– rails 6.1.6
– bundle 2.2.17

### やったこと
基本的にRailsチュートリアル第2章に従っています。
1. `rails new toy_app`でアプリを生成、`cd toy_app`で移動
1. Gemfileを下記のように書き換え
1. `bundle config set –local without ‘production’`で設定
1. `bundle install`でgemのインストール
1. `rails webpacker:install`
1. `rails generate scaffold User name:string email:string`でリソースを作ろうとする

“` Gemfile
source ‘https://rub

元記事を表示

orderメソッドについてまとめ

## はじめに
初心者なりにまとめたものになりますので、間違いにお気づきの方は、お手数ですが、コメント頂けると幸いです。

内容は、Orderメソッドのまとめになります。

## 目次
– orderメソッド の雛形
– orderメソッド 並び順のオプション
– orderメソッドとallメソッド

## orderメソッド の雛形
変数 = モデル名.order(“カラム名”)
変数:お好みの変数を定義する
モデル名:並び替えたいテーブルを管理するモデルの名前
カラム名:並び替えさせたいカラムの名前

例.
テーブル名: mail
カラム名:id, title, content, user_id, created_at, update_at
mailテーブルのuser_idで並び替えさせたい場合は、以下となります。

hoge = Mail.order(“user_id”)

## orderメソッド 並び順のオプション
hoge = Mail.order(“user_id ASC”)
hoge = Mail.order(“user_id

元記事を表示

Rails7のActionMailerでメールを送ろうとすると`500 Internal Server Error`が出る

## 結論
Railsのバージョンを7.0.2.4以降にすれば解決します。

Rails 7.0.2.4未満に存在するバグだそうです。
本家のリポジトリに同じようなissueが立っていました。
https://github.com/rails/rails/issues/44161

## 詳細
### 環境
– ruby 3.1.2
– rails 7.0.2.3

### やりたかったこと
[Ruby on Railsチュートリアル](https://railstutorial.jp/)に従ってwebアプリを作ってherokuにデプロイし、本番環境からMailgunを使ってアカウント有効化用のメールを送りたかった。

### やったこと
1. `rails generate mailer UserMailer account_activation`で、アカウント有効化メールを送るメソッドを持つMailerを作った
1. `ApplicationMailer`の`default from`を適切なメールアドレスに書き換えた
1. `app/views/user_mailer/ac

元記事を表示

Rails 7.0でないとActiveStorageのvariantに名前をつけられない

# 原因はバージョン
Rails 6.1を使ってるのにRails 7.0向けのガイドを見てました。昨日上司に「バージョン違いに気をつけてね」って言われたばかり!!

教えてもらってなかったらもっとハマってたはず…

# 困ったこと

ActiveStorageを使用して画像を保存することに挑戦していました。[Railsガイド](https://railsguides.jp/active_storage_overview.html#has-one-attached)を読みながら、セットアップや保存処理までは実装できましたが、画像サイズを調整する以下の記述がうまくいきませんでした…。

“`ruby
# Railsガイド ActiveStorageの概要 has_attached_oneより引用

class User < ApplicationRecord has_one_attached :avatar do |attachable| attachable.variant :thumb, resize_to_limit: [100, 100] end end ```

元記事を表示

【Rails】Herokuにデプロイしたら検索機能(LIKE関数)が使えなかった【PostgreSQL】

# 環境
Ruby: 2.6.5
Ruby on Rails: 5.2.4.2
heroku: 7.60.2
PostgreSQL: 14.1

**開発環境**
Cloud9
SQLite3: 3.7.17

# 問題
Cloud9で開発後、herokuにデプロイし、ECサイトの商品検索機能を使ったところ、次の画面に遷移しました。
![スクリーンショット 2022-07-19 18.34.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575953/7aac804a-a2dd-1bcd-5077-cc586a1c5829.png)

“`
We’re sorry, but something went wrong.
If you are the application owner check the logs for more information.
“`
開発環境では動いていたのに、、、

# 原因
`heroku logs -t`コマンドでログを見ると、以下のエラーとヒントが吐かれてい

元記事を表示

htmlサニタイザーの検討

## htmlサニタイザーとは
サニタイズとは、主にHTMLやJavaScriptなどでWebサイトの表示や機能を記述するために用いられる特殊文字を、単純な文字として扱いたい場合に行われる。
なぜサニタイズをする必要があるかというと、Webサイトに設置された入力フォームなどから、悪意のあるスクリプトコードが入力されると、その文字列が解釈・実行されることで様々な被害に遭う恐れがあるためである。

## 想定している読者のニーズ
– ユーザーが自由に使えるオンラインエディタでhtml5の任意のタグを使えるようにしたい
– html5に対応したrubyのサニタイザーを比較したい

## 想定してないニーズ
– html4以前のサニタイズでいいや → [tidyっていうgemがサニタイズもフォーマットもしてくれるのでおすすめ](https://rubygems.org/gems/tidy/versions/1.1.2)
*ただし10年ほどメンテされていないので、そこは注意が必要

## TL;DR
個人としては、sanitizeかloofahの2択だと思っている。
見た感じ

元記事を表示

100日後くらいに個人開発するぞ!day060

## 今日はsuperを学んでみた!
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/bb2592d8-55aa-4c17-319d-e4530e938514.png)

## 今日の学び

### super
* `super`を使うことでオーバーライドした親クラスにある同名のメソッドを呼び出せる
* 親クラスのメソッドの定義に合わせてsuperに対して引数を渡す必要がある
* 例
* ` def initialize(name:,price:,calorie:)`
* `super(name:,price:,calorie:)`
* `self.name=name`
* `self.price=price`
* `self.calorie=calorie`
* `end`

元記事を表示

Rails controller内に登場したbegin rescueとはなんぞや

#### はじめに
実務でバグ改修をしているときにcontroller内に次のような処理を見つけました。
~~~ ruby
def create
begin
# (通常のcreateの処理)
rescue エラーの種類 => e
# (eを使って色々書いてある)
end
end
~~~
beginというものが突如現れました。これはなんぞや?ifたいなものなのか・・・?
これまでRubyの中でbeginなんて記述をしたことがなかったので衝撃を受けました。
このままではバグ改修もできないので、「僕が出会ったこのbeginというものを僕はどれくらい知ってるんだろ〜」と思い、調べてみることにしました。
そうするとbeginを使用する際は基本的にrescueもセットであることもわかりましたので備忘録として残したいと思います。
もしもおかしな点や補足等ありましたら教えていただけると幸いです。

#### 環境(自分のPC)
Ruby 2.6.5
Rails 6.0.5

#### 前提
まず、singerモデル及びsingersコントローラーを作成し、singer.html

元記事を表示

【Rails6】deviseのログイン時にエラーが出て認証されないときの対処

## はじめに
`devise`というgemを使用してユーザログインしようとしたときに `Completed 401 Unauthorized` というエラーが吐き出されたので、備忘録として解決策を残しておきます。

今回deviseのモデルとして`user`モデルを作成していますが、適宜ご自身が作成したモデル名で読み替えてください。

また、初めての記事投稿なので拙い文章になることが予想されますが、悪しからずご了承ください。アドバイス等いただけますと幸いです。

## 開発環境
`Cloud9` `Ubuntu 18.04`
`Rails 6.0.4`
`Ruby 2.6.3`
`MySQL 5.7.38`

## 前提
モデル(`app/models/user.rb`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise user
“`

コントローラ(`app/controllers/users/*`)は以下のコマンドで作成済み。
“`bash:ターミナル
rails g devise:controllers users
“`

元記事を表示

ターミナルのインタープリターを使って文字列+連番を出したい!

# はじめに
仕事してて
“`
hoge430,hoge431,hoge432,hoge433,hoge434,hoge435,hoge436,hoge437,hoge438,
“`
みたいな文字列+連番みたいなのをぴゃぴゃっと出したいなーって思ったんですよ。使う用事があったんで。
で、こういうのってターミナルの各言語のインタープリターを使うとやれるんですけど、どうやったっけなー、と思いまして。
備忘録的な感じで。

# Ruby

まずはRubyです。Rubyがこういうの一番簡単に行けたイメージあったので。

“`bash
$ ruby -e ‘(430..438).each{|i|print “hoge#{i.to_s},”}’
“`

簡潔でいいですね。

ちなみにfor文使うとこうです。結局コレでも内部的には`each`が動いているんだそうです。

“`bash
$ ruby -e ‘for i in 430..438 do print “hoge#{i.to_s},” end’
“`

@scivola さんからコメントで頂いたのですがこんな書き方もあるとのことで

元記事を表示

RubyからRustに移行について

# RubyのエンジニアはRustの最初に困ったこと
– 気持ち: 他の言語とくらべると、考えりが違います。
– いくつか新しい言葉がありますので、困ります。 (mut, ownership, trait, )
– 最初に簡単な関数を書きましたが、ビルドでエラーは良く発生しました。

# 現在
– ユニークビジョン株式会社ではRubyをRustに変えています。
– 心理的にRubyをRustに簡単に変えるように説明します。

# Class/def VS Struct / impl
## Rubyでは
– Class / def
– データを持つ
– 処理を定義する

“`ruby
class User
def initialize(id, name, addr)
@id = id
@name = name
@addr = addr
end

def hello
puts “hello #{@name}”
end

end

user1 = User.new(1, ‘hoge’, ‘

元記事を表示

「LSEP」という不可視文字の削除方法

[バヅクリ](https://buzzkuri.com)CTOの合原です。
今回、非エンジニアからの依頼で、「LSEP」という記号?文字?の除去作業をシュッと行ったので、まとめたいと思います。

## 前提
当社[バヅクリ](https://buzzkuri.com)では、下記のように、オンラインで、
チームビルディングや研修を目的としてオリジナルのプログラムを提供しています。

とても、とても簡単に説明すると、、、

契約企業から特定のプログラムでのイベント開催の希望が発生すると、
アプリケーション上では、プログラムデータからイベントデータを自動生成しています。

プログラム、イベントそれぞれのデータについてCRUD処理が存在します。

![スクリーンショット 2022-07-20 17.04.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64537/b616cc8f-9030-d4a2-6b4c-1f822830e232.png)

通常企画チームにて、プログラムの入稿や更新、運営担当によるイ

元記事を表示

ElasticBeanstalkのRuby環境で軽微な修正を反映させるためにPuma再起動する方法

## 概要

マネージドサービスの場合、通常のデプロイ手順だとEC2自体が別のものに切り替わったりして反映までに時間がかかるため、そこまでの手順を踏まずに軽微な修正を反映したい場合の手順を記載します。

### ElasticBeanstalk環境

Ruby 3.0 AL2 バージョン 3.4.8

## ソースコード修正

ElasticBeanstalk(Ruby環境)で稼働しているEC2にsshキーペアでsshログインし、修正対象のファイルを修正しておきます。

“`sh
sudo su – webapp
cd /var/app/current
# rubyファイルを修正

# もしRailsアプリケーションでassetsを変更した場合は以下が必要(環境変数読み込みとassets:precompile)
export $(/opt/elasticbeanstalk/bin/get-config –output YAML environment | sed -r ‘s/: /=/’ | xargs)
bin/rails assets:precompile
“`

## Pu

元記事を表示

OTHERカテゴリの最新記事