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

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

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

元記事を表示

[Ruby] 二次元配列の降順ソート

# 環境

Ruby3.1.2

# やりたいこと

二次元配列(中身は降順に値が入っている配列)を降順ソートしたい。

## コード

“`ruby
record_array = [
[100,50,75,50,50].shuffle,
[100,95,50,50,50].shuffle,
[99,95,95,95,95].shuffle,
[101,1,1,1,1].shuffle,
[80,75,75,60,60].shuffle,
[80,75,75,75,75].shuffle,
[75,75,75,75,75].shuffle]

# 降順に並べる
record_array = record_array.map do |row|
row.sort.reverse
end

p record_array.sort.reverse

#=>
[[101, 1, 1, 1, 1], [100, 95, 50, 50, 50], [100, 75, 50, 50, 50], [99, 95, 95, 95, 95], [80, 75, 75, 75

元記事を表示

Ruby Threadの非同期処理で処理結果をそれぞれ変数に入れて結果を待ち受ける

“`rb
thread1 = Thread.fork { sleep 3; “AAA” }
thread2 = Thread.fork { sleep 6; “BBB” }

thread_return1 = thread1.join.value
p thread_return1 # 3秒程度で表示される

thread_return2 = thread2.join.value
p thread_return2 # 6秒程度で表示される

“`

# ここでいうjoinとは

配列のjoinとはニュアンスが違うらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89618/06bf34f2-2da5-1d53-144f-7db5dd53265e.png)

https://docs.ruby-lang.org/ja/latest/class/Thread.html#I_JOIN

# チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用くだ

元記事を表示

【個人開発】300円以内でおやつを選ぶアプリを作りました【えんそくのおやつは300えんまで!】

# はじめに
はじめまして。
山田貴俊と申します。
先日「えんそくのおやつは300えんまで!」というアプリケーションをリリースしました。
内容は単純、300円以内でおやつを選ぶアプリです。



```

↓HTMLにべた書きすべき「ルート3」はMathJaxではこのように記述するので・・・

```html
3
```
↓これをこんなふうにHTMLにべた書きすると・・・
```ruby:quiz.html.erb

元記事を表示

AWS(S3)に画像をアップロードする

# はじめに
AWS(S3)に画像データを保存する必要性や手順をまとめたいと思います。
現状、herokuを用いてアプリのアップロードを行なっていますが、アップロードされた画像はアプリケーションのディレクトリに保存されていました。
しかし、ユーザーがアップロードした画像データは、アプリがデプロイまたは再起動(24時間に1回自動で行われる)される度に、消えてしまう仕様になっています。
そこで、ストレージサービス(画像等の膨大になるであろうデータを別途保管できる場所、サービスのこと)を利用することで、画像を長期的に保存することができるようになります。
ストレージサービスには様々な種類がありますが、今回はAWSが提供しているS3というサービスを使用します。

## S3(Amazon Simple Storage Service)とは
S3とは、AWSが提供するサービスの一つです。
(インターネット上にデータを保存する箱を借りられるサービスであるとイメージをすると良い。)
S3を利用することで、画像を保存したり、保存してある画像を取得したりすることができます。
S3に保存されたデータは実在の

元記事を表示

Rubyの繰り返し処理の速さをベンチマークで調べてみた

# はじめに
Rubyの繰り返し処理の速さが気になったのでベンチマークで調べてみました。
whileを使うと速いと聞いたので、他の繰り返し処理も使い、実際に検証してみました。
Rubyのモジュールとして提供されているBenchmarkを使用してプログラム実行時のCPU処理にかかった時間を知ることができます。

# 繰り返す内容

1から3,000,000までの範囲の数値を加算していきます。
つまり↓のようになります
1 + 2 + 3 + 4 ・・・・・ 2999998 + 2999999 + 3000000 = 4,500,001,500,000
# コード
```ruby:Ruby
require 'benchmark'

Benchmark.benchmark(Benchmark::CAPTION, 10, Benchmark::FORMAT) do |x|
x.report("each: ") {
counter = 0
[*1..3000000].each do |i|
counter += i
end

元記事を表示

【Ruby ブロック引数】メソッド.(&block)の引数の「&」ってなに?

# はじめに
```
def block_execute(&block) # ← ここの引数の「&」の意味がわからない
puts "block.call"
end

block_execute do
puts "blockを実行"
end
```
def block_execute(&block)
これを見て、(&block)ってどんな引数だよ!!

と思ったので調べました。

# 結論
(&block)の「&」がついた引数は、ブロック引数と呼ばれるものです。

# 解説
ブロック引数の前にブロックとは何か?

### ブロックとは?
メソッド実行時に、そのメソッドの引数として渡せる「処理のかたまり」のこと。
今回で言うとここ↓
```
block_execute do
puts "blockを実行"
end

または、
block_execute { puts "blockを実行" }
```

ブロックは
* do ~ end で囲まれた処理のかたまり
* {} で書くことも可能
* メソッドに渡すためだけに存在する

### ブロック引数とは?
ブロックを受け取る専

元記事を表示

kaminariを使ったページネーションの作り方

## 初めに
Gemfileに下記のkaminariを追加してあげます。
追加したらbundle installを忘れないようにしましょう。

```
gem 'kaminari','~> 1.2.1'
```
```
$ bundle install
```
bundle installをしたら次にkaminariの設定ファイルを作成する為に下記のコマンドをターミナルに打ち込みます。
```
$ rails g kaminari:config
```
最後に、kaminariが利用するテンプレートを作成してあげます。
```
$ rails g kaminari:views default
```
これでひとまず準備は完了です。

## 次にControllerに記述
例としてindexで記述しています。
```app/controllers/books_controller.rb
def index
@books = Book.page(params[:page]).per(9)
end
```
上記のようにpage(params[:page]).per(9)を付け足してあ

元記事を表示

【備忘録】【Rails】initializeメソッドの使い方

自分用のメモです。

# initializeメソッドとは(一言で)

- コンストラクタのこと。

# コンストラクタとは
- オブジェクトを生成した際に1度だけ実行される機能を指す名称。
- なお、オブジェクトが生成された際にのみ実行されることから、そのオブジェクト内で共通に使えるインスタンス変数の初期化などに使われる。
- ただしクラスを定義した際、コンストラクタを必ず作る必要はない。
- コンストラクタが定義されていなくてもオブジェクトを生成できる。
- また、Rubyではオブジェクトを生成するnewメソッドの引数を利用して、コンストラクタによる変数の初期化も可能。

# initializeメソッドの特徴

- initializeメソッドを定義しておくと、インスタンス生成時に必ず実行したい処理をメソッドを呼び出すことなく実行することができる。
- 例えば次の例では、initializeメソッドの中でインスタンス変数の初期化を行っている。

```ruby:
class Car
def initialize()
@name = "未定義"
end
end

c

元記事を表示

OTHERカテゴリの最新記事