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

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

【エラー解決方法(Rails API)】 406 Not Acceptable,…is missing a template for this request format and variant

# 概要
Rails7とReactでjbuilderを使用して値を返した際に出力された406エラーを解決するための記事です。

### エラー内容
“` docker
api_1 | Completed 406 Not Acceptable in 24ms (ActiveRecord: 5.6ms | Allocations: 1086)
api_1 |
api_1 |
api_1 |
api_1 | ActionController::UnknownFormat (Api::V1::PostsController#index is missing a template for this request format and variant.
api_1 |
api_1 | request.formats: [“text/html”]
api_1 | request.variant: []):
api_1 |
“`
### ソースコード
“`posts_controller.rb
module Api
modu

元記事を表示

Action Cable+ReactでWebSocketのアプリケーションを0から作る

RailsのAction CableとReactの組み合わせでWebSocketのアプリケーションを0から作ってローカルで動作させました。

この記事では下記のチャットアプリの作った手順を紹介します。
下記の動画では、上下のブラウザでwebsocketでチャットしています。

![ezgif-1-7afa5d7957.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83424/43644227-8722-339f-9a7b-c99478de698f.gif)

# 主要ライブラリなどのバージョン

フロントエンドはReact、バックエンドはRailsを使っています。
主要なライブラリのバージョンは下記の通り。

## バックエンド

| ライブラリ | バージョン |
|:———–|:———–:|
| Ruby | 3.1.2 |
| Rails | 7.0.4 |
| Redis | 7.0.5 |
| Re

元記事を表示

久々にRubyでスクレイピングをしてみよう

## 概要
一時期呼吸するようにスクレイピングをしていたのですが、最近しておらず職場で少々それ関係の話題になったのであらためてここに簡単なものを残しておこうと思う。

## 環境
ruby 3.1.2

## 準備
rubyなのでGemfileを定義します。

Gemfile
“`ruby
source ‘https://rubygems.org’

gem ‘nokogiri’
“`
HTMLのパースのためにnokogiriを使うのでこれだけ用意します。
ほかは標準で入っているものでjsonのパースとかしてくれる(強い)

作業ディレクトリで下記のコマンドを実行
“`sh
bundle install –path .bundle
“`
ただのbundle installだとグローバルに入っちゃったりするので、パス指定しておくほうがおすすめです。

## 実装

では、結論から
“`ruby
require ‘net/http’
require ‘uri’
require ‘nokogiri’
require ‘kconv’
require ‘json’
require ‘

元記事を表示

Rubyで参照渡しができなくても悲観する必要はなかった

## 環境
Ruby2.6

## はじめに
自分が以前使っていたVBでは、関数での引数の受け渡しには、デフォルトではByValが指定されており、値渡しが基本であった。しかし、引数のパラメータに、ByRefを設定することで、参照渡しができるようになっていた。しかし、Rubyではどうも、参照渡しがそもそもできない仕様になっている。「うーん、これができないのか、使えんなー。」という印象であったが、Rubyには参照渡しができない代わりに、戻り値が複数選択できるようになっていた。思い直した。「なるほど、これはいいかも知れない。」このような仕様になっているのであれば、引数による参照渡しは確かに不要であった。戻り値を複数選択した場合、どのような動きになるのか、確認してみた。

## 動作確認
普通に、戻り値を1つだけ指定する場合です。戻り値でよく使われる、Boolean型を戻り値にしています。メソッド内の処理が正常終了したか、異常終了したか(更新処理で失敗して例外に飛んだなど)を判断するときによく使われるかと思います。
“`test.rb
def test_return?(a)
if

元記事を表示

画像投稿機能を改善する(プレビュー機能をつけよう)

完成した某フリマアプリに画像投稿機能の改善をしました。
プレビュー機能と、実際に見た時に画像のサイズがバラバラだったので、画像サイズを統一できるように設定しました。
“`javascript
document.addEventListener(‘DOMContentLoaded’, function(){

const itemForm = document.getElementById(‘new_item’);

const previewList = document.getElementById(‘previews’);

if (!itemForm) return null;

const fileField = document.querySelector(‘input[type=”file”][name=”item[image]”]’);

fileField.addEventListener(‘change’, function(e){

const alreadyPreview = document.querySelector(‘

元記事を表示

チェックボックスタグ機能の補足と、ページネーションを付けた場合のエラー解決

# はじめに
この記事はチェックボックスタグ機能を付けている前提で進めています。まだつけていない方は以下の記事を参考に、実装してみて下さい。
[【タグ機能完全版】 ~ Rails](https://qiita.com/MandoNarin/items/5a5610a40c66f77d6c10)

目次
1.補足(一覧ページに投稿したタグを表示する方法)
2.ページネーションを付けている場合のエラー解決

それでは、始めていきましょう。

# 1.補足(一覧ページに投稿したタグを表示する方法)
index.html.erb のeach文の中に以下の記述を追加してください。
“`erb:index.html.erb
<% @tweets.each do |t| %>
#以下を追記
<% t.tags.each do |tag| %>
<%= tag.name %>
<% end %>
#ここまで
<% end %>
“`
このように追加すれば、一覧ページに投稿したタグが表示されるはずです。もし表示されない場合やエラーが出る場合はアソシエーションやコントローラ

元記事を表示

古くなってしまったrubocopを最新まで一気に上げたい人へ贈るバージョンアップの向き合い方

rubocopは定期的に新バージョンがリリースされていますが、最新もしくはそれに近いバージョンにきっちり保てているプロジェクトは案外少ないのではないでしょうか。
[2023年の3月末でRuby2.7のサポートが終了](https://endoflife.date/ruby)するのですが、3.0移行のrubyでrubocopを動かすにはrubocopのバージョンを1.0.0以上にあげる必要があります。
上記の都合から慌ててrubocopのバージョンを上げる必要になった方もいると思います。
しかし、一気に全部やろうとすると、チーム開発であれば他のメンバーの開発とコンフリクトしますし、新しい規則はドンドン追加されるので全部対応しきるのは難しいです。
この記事では、そんなrubocopで疲弊する未来が見えた読者の方へ愚直に向き合いすぎないrubocopのバージョンアップ方法を授けます。

## とりあえずバージョンを上げる
まず兎にも角にもバージョンを上げるのが大事です。
そこでまずはrubocopのバージョンを上げてしまいましょう。
環境によってGemfileに書くのか`gem instal

元記事を表示

benchmark_driver 0.16.0 でワンライナー可能に

Ruby のベンチマークテストツール [benchmark_driver](https://github.com/benchmark-driver/benchmark-driver) のバージョンが 0.16.0 に上がった。

新機能の一つは,ワンライナーでの実行(「インライン Ruby スクリプトのベンチマーキング」)。

短いスクリプトならいちいちファイルを作らなくてもベンチマークテストができる。

ではこれを使って,`CGI.escapeHTML` による HTML エスケープを以下の Ruby バージョンで比較してみよう。

* Ruby 3.1.2
* Ruby 3.2.0-preview2
* Ruby 3.2.0-preview2(YJIT)

rbenv で Ruby をインストールしている場合は,`–rbenv` オプションによって複数の Ruby での比較ができる。オプションの値は以下のように書く。

“`
3.1.2;3.2.0-preview2;3.2.0-preview2 –yjit
“`

つまり,複数の Ruby バージョンを `;` で区切る。

元記事を表示

Capistranoを使って自動デプロイする

某フリマアプリを作成した際、AWSのEC2を利用して自動デプロイするとき、ものすごく手間がかかったので備忘録。
詰まったところをかいつまんで載せる。
まず
“`ruby
adapter: mysql2
database: (アプリ名)_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
“`
をconfig/database.ymlに記載するわけですが、この記載場所は、
プロダクションのところに記述します。
例えば、
“`ruby
production:
<<: *default adapter: mysql2 database: furima-(番号)_production username: root password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
“`
といった感じに。

次につま

元記事を表示

Ruby 麻雀の配牌を作成する

RUbyで麻雀アプリを作成するために勉強中

まずは簡単なところから作成します。
麻雀牌34種136枚から14枚をランダムに抜き取って表示します。

# コード紹介

“`Ruby:majons_controller.rb
class MajonsController < ApplicationController def index majon_pais = ["m1", "m1", "m1", "m1", "m2", "m2", "m2", "m2", "m3", "m3", "m3", "m3", "m4", "m4", "m4", "m4", "m5", "m5", "m5", "m5", "m6", "m6", "m6", "m6", "m7", "m7", "m7", "m7", "m8", "m8", "m8", "m8", "m9", "m9", "m9", "m9", "p1", "p1", "p1", "p1", "p2", "p2", "p2", "p2", "p3", "p3", "p3", "p3", "p4", "p4", "p4"

元記事を表示

gem `puma`を6.0にアップグレードすると`capybara` の初期化で`NoMethodError: undefined method `strings’ for Puma::Events:Class`エラーが発生する問題の対処法

# 結論

`puma`を`6.0`以上で動作する場合`capybara`は`3.38.0`以上のバージョンが必要です

# 詳細

#### 1. 元々`puma`の実装で`Puma::Events`クラスは以下の2つの異なる責務を担っており責務過多だった

– ロギング
– コールバックイベントの管理

#### 2. 上記の2つをそれぞれの`class`に分離するBreaking changeが入るリファクタリングを行い`6.0`でリリース

https://github.com/puma/puma/pull/2798

#### 3. `capybara`で“Puma::Events`を参照していたが上記の変更の影響を受けてエラーが発生

“`ruby
Failure/Error: events = conf.options[:Silent] ? ::Puma::Events.strings : ::Puma::Events.stdio

NoMethodError:
undefined method `strings’ for Puma::Ev

元記事を表示

rails db:resetした時にActiveRecord::MismatchedForeignKeyと出た際の解決法

## 環境
– Ruby3系
– Rails7系
– MySQL
(SQLiteからMySQLにDBを変更しようとした際にエラーが発生した)

## エラー内容
“`terminal:terminal
rails db:reset
と実行したら↓

ActiveRecord::MismatchedForeignKey:
↑エラーが発生した
“`

## 解決法
“`terminal:terminal
rails db:migrate:reset
“`
を実行すれば、ActiveRecord::MismatchedForeignKeyが出ずに正常に動作します✅

## 原因
“`rails db:reset“`は、
1. 全テーブルdrop
1. schema.rbを元にDBを作成

します。
なので、**reference先が作られていないのに、任意のテーブルのreferenceカラムが先に作成されて、今回のエラーが発生します!**

そして、、、

“`rails db:migrate:reset“`は、
1. 全テーブルをdrop
1. migrationファ

元記事を表示

Thang Nâng Hàng Bảo An

Thang nâng hàng Bảo An![thang-nang-hang-bao-1000.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955385/5b8646c5-f3ce-0117-ce3b-efe5ce6ef078.jpeg)
là thương hiệu được hình thành và phát triển từ những năm 2008. Ban đầu chúng tôi cung cấp thiết bị nâng hạ như tời kéo, palang phục vụ các công trình công nghiệp phục vụ cho các nhà máy, xí nghiệp, thủy điện.
Liên hệ :
Địa chỉ:Số 356 Phan Trọng Tuệ – Thanh Trì – Hà Nội
Số điện thoại:0976292002
Email: thangnanghangbaoanh@gmail.com

元記事を表示

Wordle攻略用のアプリケーションをruby.wasmで作りつつ貢献した話

Wordleという、いくつかのヒントをもとに5文字の英単語を当てるゲームがあります。

https://www.nytimes.com/games/wordle/index.html

ヒントには次のような物があります。
– 正解の単語に含まれない文字
– 正解の単語に含まれる文字
– 正解の単語に含まれて、位置が一致した文字

これらの情報を元に英単語の辞書から候補となる単語を検索するアプリケーションを作りました。
次にスクリーンショットを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/15964/3750ba53-4c2f-5f3a-465b-88e053def98a.png)

上から

– 正解の単語に含まれない文字
– 正解の単語に含まれる文字
– 正解の単語に含まれて、位置が一致した文字

を入力して検索すると、候補になる文字列を表示します。
このアプリケーションは辞書を検索するだけです。
辞書も5文字の英単語に限定されているので、せいぜい4500語です。
ブラ

元記事を表示

【Rails】params周りの理解を深める回〜”param is missing or the value is empty”へのアプローチ法〜

Railsのparams周りのエラーについて。
とある情報を保存しようとしたときに出てしまったので残す。

エラー文

![スクリーンショット 2022-11-05 13.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2059549/ce21ac0d-a192-5bc3-6234-d477c05cbb5e.png)

paramsが存在していない、または空であるという意味らしい。

問題となっているファイルのコード

“`ruby:memory_submits_controller.rb
class MemorySubmitsController < ApplicationController def index @memorys = MemorySubmit.all end def new @memory = MemorySubmit.new end def create memory = MemoryS

元記事を表示

アプリケーション開発の開発工程(リマインドノート)

アプリケーション開発の開発工程(リマインドノート)


①企画:APPの内容を考案
・課題をヒアリングする対象者を選定
例)友人、社会問題を抱える架空の人物など

・対象者の属性をヒアリング
例)性別、年代など

・対象者の抱えている課題を洗い出し
例)学習を継続できないなど

・課題の深掘り
※課題に対し、「なぜ?」を繰り返し、原因を深掘り
例)学習を継続できないの場合

・課題解決をできるAPPの考案
例)APP内容 : 目標のシェアで、ユーザー同士で励まし合えるAPP

・ユーザーストーリーの考案
例)目標シェアのためには? : 目標管理機能
例)ユーザー同士の励まし合いは? : ユーザー管理機能、コメント管理機能

・+@の考案
例)より便利にするには? : フォロー管理機能、お気に入り管理機能
例)ユーザーを増やすには? : SNSログイン機能、SNS共有機能
例)マネタイズ化するには? : 投げ銭システム管理機能


②要件定義:APPの仕様と要件の洗い出し
「機能(大分類)」:実装したい機能を大小で分ける。
「機能(小分類)」:実装したい機能を大小で分ける

元記事を表示

実践編勉強会_20221120

## 本日の内容

– 受講生への共有事項
– フリーエンジニアになるために最低限必要なこと

## 受講生への共有事項

– 営業サポートについて
– 人工インターン経験が6ヶ月を経過したら営業サポートが受けられます。
– 営業サポート開始〜案件の獲得までは最低2ヶ月程度見ておいてください。
– 営業サポートへのご案内はこちらからは行っていません。そのため「そろそろ案件探しに入りたい」というタイミングになったら受講生から→スタッフ江草までご連絡をお願いします。

プライベートや現職の都合で「ある決まった時期までフリーエンジになれない」という方以外は、少々自分の技術力に自信がなくても早めにフリーエンジニアとして現場に出ることをお勧めします。

なぜなら「現場でのチーム開発は効率良くプログラミングスキルを上げれられる絶好のチャンスだから」です?

フリーエンジエンジニアとして報酬をいただきながら、次の現場での単価UPを積極的に狙っていきましょう!
単価を上げるためには半年〜1年程度で次の現場へ移るのがポイントです。

## フリーエンジニアになるために最低限

元記事を表示

Guardの自動テストがRunningのまま動かない【Windows・Railsチュートリアル3章】

Cloud9使わずローカル環境で実施していたせいか、チュートリアルに記載の通りに行ってもGuardがうまく動かなかった。
解決策をメモしておく。

# 概要
下記リンク、「3.6.2 Guardによるテストの自動化」に記載されているGuardの初期化、Guardfileの編集を行ったものの、自動テストが完了しなかった。
https://railstutorial.jp/chapters/static_pages?version=6.0#sec-guard

こんな感じで `Running: ~` のあと `[1] guard(main)>` と出たまま動かない。
“`
00:52:47 – INFO – Running: test/controllers/static_pages_controller_test.rb
[1] guard(main)>
“`
待っていれば結果が出てくるのかな?と思ったが、いつまで経っても何も起こらなかった。

念のため `spring stop` コマンドも実行したが、
“`
Spring is not running
“`
と言われるだけで、再

元記事を表示

Railsでバージョン指定してのプロジェクト作成に失敗した時の対処法

# 課題

Rails 6.1.4.4でプロジェクト作成しようと

“`
rails _6.1.4.4_ new project_name
“`

を走らせるが以下のようなエラーが出力される。

“`
`find_spec_for_exe’: can’t find gem bundler (>= 6.1.4.4) with executable bundle (Gem::GemNotFoundException)
“`

# 仮説

以前はこれでプロジェクトを作成できていたのですが、以前沼に嵌った時にRailsのバージョンを消去した記憶がうっすらあったのでその時に6.1.4.4を削除していたかもしれない。

# 解決方法

– Rails 6.1.4.4を再度インストール

“`
gem i -v 6.1.4.4 rails
“`

で解決しました。

以下の記事が参考になりました。

https://qiita.com/tanakayo/items/7b85261924eca1a5a3d6

# 結論

必要なバージョンがインストールされていなかっただけでした。

なかな

元記事を表示

エラーメッセージについて

## 初めに
エラーメッセージの実装の仕方について簡単に記録のために書いておこうと思います。

## viewに記述

“`app/views/users/_errors.html.erb
<% if @user.errors.any? %>
<%= @user.errors.count %>件のエラーが発生しました

    <% @user.errors.full_messages.each do |message| %>

  • <%= message %>
  • <% end %>

<% end %>
“`

今回はuesrのeditに部分テンプレートで表示させたいのでこのように記述します。
<%= @user.errors.count %>件のエラーが発生しましたの部分で例えば3件記述の忘れがあれば3件のエラーが発生しましたとviewに表示されるようになります。

## 実際にeditに記述
“`app/views/users/edit.html.erb

ユーザー情報編集

<%= render 'users/err

元記事を表示

OTHERカテゴリの最新記事