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

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

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

## 今日は自分で作ったWebページをインターネット上に公開してみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/4e098be8-9f2c-a79a-ed02-09b60668f908.png)

## Githubでアカウント開設
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/7636cc06-e872-8e9a-f15c-ce14799e6411.png)

## GithubでHTMLとCSSをアップロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/8cd4ed7d-7510-48ac-dbcd-0ebc9a454584.png)

![image.png](https://qiita-image-store.s3.ap-n

元記事を表示

rails db:seedできなくなった

# rails db:seed できなくなった
## rails db:seed とは
Railsには、初期データを追加するためのシード機能が備わっており、「seed.rb」ファイルにデータを記述していきます。
例えば、
“`
Customer.create!(
email: “aaa@amail.com”,
password: “a12345”,
nickname: “れいこ”,
profile: “令和生まれの道子です。”,
)
“`
こんな感じでCustomersテーブルのそれぞれのカラムにデータを保存(create!)します。
このような記述の集まりが、「seed.rb」ファイルで、それを実行するのが、“`rails db:seed“`というわけです。
## エラー
rails db:seedをすると、既にemailがデータベースにあるようで、バリデーションエラーとなりました。
## TRY
1. x
“`
rails db:reset
rails db:seed
“`
2. x
“`
rails db:drop
rails db:migrate
rail

元記事を表示

else節でraiseしたくなる

### はじめに

僕はcase文だったりswitch文のelse(default)節に正常処理を書くことが嫌いです。
ただ、if文のelse節には正常処理をガンガン書きます。
どうして、そうしているのか、その訳をつらつらと書いていきたいと思います。

### Rubyの制御構造(条件分岐)
Rubyの制御構文、特に条件分岐に関するものは以下の三種類がある。

– if文
– unless文
– case文

それぞれの構文は以下の通りだ。式を後置修飾するif修飾子およびunless修飾子については本題から逸れるので省略した。

if文
“`ruby
if 式1
処理1
elsif 式2
処理2
end
“`

unless文
“`ruby
unless 式
処理1
else
処理2
end
“`

case文
“`ruby
case 式0
when 式1
処理1
when 式2
処理2
else
処理3
end
“`

元記事を表示

Face APIをSinatraでお試し実装

Microsoft Azureの[Face API](https://azure.microsoft.com/ja-jp/services/cognitive-services/face/)を使ってSinatraでWeb上で画像を渡して顔認証をやってもらいたいと思います。
顔の検出とか一致度とか色々出来るのでちょっと使ってみます。
# 準備
Microsoft AzureのFace APIを使います。
[公式のガイド](https://docs.microsoft.com/ja-jp/azure/cognitive-services/face/quickstarts/client-libraries?tabs=visual-studio&pivots=programming-language-rest-api)を参考に進めていきます。
登録を済ませた状態からはじめましょう。

キーとエンドポイントを準備しましょう。
こんな画面が出ていればOK。
![FaceAPIスクショ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

エンジニアならこの問題、解けるよなぁ?!

どうも。タイトルほどの威勢はありません。
ということでTwitterみてたら我らがしみけんさんがこんなツイートしてた。
mojikyo45_640-2.gif

簡単にいうと、コインを100回投げて、裏表を10*10マスに文章の横書きの順番で記録してこい。ただし捏造しても良い。というものだ。
で?って話なんだけどこの課題を出した教授は捏造されたものを簡単に見分けたのだとか。
じゃあどうやって見分けたんだ?ってのが面白そうだったから考えてみて、そしてエンジニアらしくプログラムを組んでみた。
読み進める前に、ちょっと考えてみて欲しい。
##

元記事を表示

過去問共有サービス Univer の開発を行いました。

![スクリーンショット 2022-06-19 22.57.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667538/97698656-b2fb-4cfa-b054-c09ded52b39f.png)

過去問共有サービスUniverです。企画からデザイン、デザインに至るまで一気通貫して一人で行いました。

https://universitycommunity.herokuapp.com/

[開発背景]
開発の理由は二つあります。
一つ目の理由は、コロナの影響で縦と横のつながりが薄くなり、過去問が手に入りづらくなったという学生の問題を解決するためです。
また私自身の周りにそういった悩みを抱えている学生の方が多くいたことから、ユーザー数が期待できるため、多くの方のフィードバックを通じてより質の高いサービス開発に取り組めると考えたからです。

[実装機能]
投稿機能、画像投稿機能、ログイン・ログアウト機能、フォロー機能、いいね機能、コメント機能、お気に入り登録機能、検索機能など、SNSに利用

元記事を表示

Your Ruby version is 2.7.3, but your Gemfile specified 2.7.5 と表示されるエラーの解決

はじめに

ロリポップマネージドクラウドを使い自作アプリをデプロイしようと思い

`git push lolipop master`

を行うと

`remote: Your Ruby version is 2.7.3, but your Gemfile specified 2.7.5`

というエラーが起きた。

エラーについて

エラー内容を直訳すると

`あなたのRubyは2.7.3なのに、Gemfileには2.7.5となっている。`

という事だがGemfileを確認すると2.7.3になっており、他にもGemfile.lock、.ruby-versionを確認しても2.7.3だった。

他サイトなどを参考にし、

`bundle install` や `rbenv local 2.7.3`

などを行っても解決しなかった。

エラー解決

GemfileやRubyのバージョンを変更した際に、gitにコミットしていないことが原因であった。

そこで

`git add .`

`git commit -m “”

元記事を表示

Rubyの学習ログ

# 学習教材
udemyで[「ウェブ開発入門完全攻略コース – HTML/CSS/JavaScript. プログラミングをはじめて学び創れる人へ!」](https://www.udemy.com/course/web-application-development/)を学習。
ウェブ開発全般の基本的な知識が習得できるコースで合計24.5時間もある。
今回はその中でもRubyについて学習した。
[](https://www.udemy.com/course/web-application-development/)

# 学習内容
演算子や数字・文字列の表現方法の違い、条件分岐や繰り返し処理について学んだ。
また、クラスやメソッド、Rubyのコーディングルールを学んだ。

# 学習を終えて
これまで学習してきたJavaScript

元記事を表示

マルチスレッドでHTTPリクエストしてみる

Rubyで複数のAPIリクエストをシングルスレッドで行った時とマルチスレッドで行った時でどのくらい速度に差が出るか見てみたかった。
[JSONPlaceholder](https://jsonplaceholder.typicode.com/)のサンプルエンドポイントで試してみる。
`https://jsonplaceholder.typicode.com/todos/{number}`にアクセスするとtodoが帰ってくる。

## シングルスレッドの場合

50件のtodoをループで取得してみる。

“`slow.ruby
require ‘uri’
require ‘net/http’
require “json”

todos = []
start_time = Time.now

(1..50).each do |n|
uri = URI(“https://jsonplaceholder.typicode.com/todos/#{n}”)
res = Net::HTTP.get_response(uri)
todos << JSON.parse(re

元記事を表示

Rubyの問題を解いて知識を深める。④

# はじめに
毎日Rubyの問題を復習として5問ずつ解いています。
知識を更に深堀りするためにアウトプットします。

# Q16 検索問題
任意の文字列に”code”が、左から何文字目に出てくるかを返し、その数を出力するメソッドを作る。
出力例
count_code(“codexxcode”) → 1
count_code(“aaacodebbb”) → 4
count_code(“cozexxcode”) → 7
解答
“`
def count_code(str)
puts str.index(“code”, 0) + 1
end
“`
ポイントとしてはindexメソッドになります。文字列や配列の中に指定した文字列が含まれていた場合、その文字列の開始位置を整数の値で返します。
“`
str.index(検索したい文字列, [検索を開始する位置])
“`
解答に+ 1を使用している理由は先頭を0から数えた数字を返すため使用。

# Q17 if,else問題
以下の要件を満たすparrot_troubleメソッドを実装。
最近、あなたはオウムを飼いはじめました。しかし、近

元記事を表示

Rubyの問題を解いて知識を深める③

# はじめに
今日も問題を解いていきます。コメントで教えていただ通り自分用なので限定共有投稿です。

# Q11 if else問題
in1to10メソッドを実装する
– 第一引数のnumが1以上かつ10以下の範囲であればTrueを出力すること
– 第二引数のoutside_modeがTrueの場合は、第一引数numが条件範囲外でもTrueを出力すること
– それ以外はFalseを出力すること
雛形
“`
def in1to10(num,outside_mode)
# ここに条件式を記述する
end
in1to10(5,false)
in1to10(11,false)
in1to10(11,true)
“`
“`
def in1to10(num,outside_mode)
if (num >= 1 && num <= 10) || outside_mode puts true else pits false end end in1to10(5,false) in1to10(11,false) in1to10(11,true) ``` ポイン

元記事を表示

Railsでcheckboxとvalidationを使っただけなのに

## 結論

– `form.check_box`はfalse値を送信できない。
– Ruby on Railsでmodelの真偽値(true/false)のvalidationを書くときは、`presence: true`ではなく`inclusion: [true, false]`を使わないといけない。

## 経緯

[Rails をはじめよう](https://railsguides.jp/getting_started.html)に沿ってrailsを触ってみていました。ただ、そのままやるのはおもしろくないなと思ったため、ガイドでは記事(`Article`)を表示するウェブページを作成したところを、少しだけアレンジして`Todo`を表示するものとして作成していました。`Todo`は`Article`のもつ値に加えて`hasDone`という完了済みか否かを表す値を持ちます。

`hasDone`は`Todo`を作成するときに、View側からは

“`erb

<%= form.label :hasDone %>
<%= form.check_

元記事を表示

[Rails][Ruby] update_allとwhereを使用するときに気をつけること

## はじめに
未経験からエンジニアに転職して、2ヶ月ほど経つエンジニアです。
業務にあたりながらも、小規模なアプリを作って楽しんでいます。
今回は大量のレコードをまとめて更新するときに重宝する update_all についてです。

## 結論
update_all を使用するときはクエリの実行タイミングに注意しよう。

## update_all とは
>条件に一致するレコードをSQLを直接実行して全て更新
updated_atとupdated_onは更新されない

バリデーションやトランザクションを無視する点も注意が必要です。

https://railsdoc.com/page/model_update_all

## クエリキャッシュのタイミングに注意
~~~ruby
def update_user_data
#このタイミングではクエリは走らない
users = User.where(id: XXX, status: XXX, …)

#上記 where と組み合わせて UPDATE users … FROM … WHERE … が走る
users.

元記事を表示

Rubyでスレッドセーフでないコードを実行するとどうなる?

マルチスレッドでプログラムを実行するとメモリ空間は同じものを使う。では、Rubyにおいて複数スレッドを立てて同じリソースに同時にアクセスするとどうなるのか?

## IOを伴わない場合

Rubyでスレッドの生成は[Thread](https://ruby-doc.org/core-2.5.0/Thread.html#method-c-current)クラスを使う。
以下のコードを実行してみる。
1000個スレッドを立ててそれぞれのスレッドから変数countを書き換える。

“`ruby
count = 0
threads = []

# 1000スレッドが同時に変数countにアクセスするとどうなるか?
1000.times do
threads << Thread.new do count +=1 end end threads.each(&:join) puts count ``` 結果は、スレッドセーフではないコードなのに、何度実行しても正常にインクリメントされ結果は`1000`になる。 これは、Ruby(ここではMRIに限る)ではGiant VM l

元記事を表示

AWS Fargateからherokuに移行した話

## はじめに
※ 自分用メモ
awsの無料期間がそろそろ切れそうなので、バックエンドをherokuに移行したお話

## 移行前
#### バックエンド
言語・フレームワーク: Ruby、 Ruby on Rails
インフラ: AWS ECS(Fargate)、ECR、Route53(ドメイン取得はお名前.com)、RDS(Mysql)無料枠があるから、Auroraではない、ALB、ACM、S3、EFS

#### フロントエンド
言語・フレームワーク: React、NextJs
インフラ: バックエンドと同じ

#### ミドルウェア
webサーバー: Nginx
DB: mysql

## 移行後
#### バックエンド
言語・フレームワーク: Ruby、 Ruby on Rails
ミドルウェア: Nginx、mysql
インフラ: heroku、jawsdb、S3

#### フロントエンド
言語・フレームワーク: React、NextJs
インフラ: vercel、Route53(ドメイン取得はお名前.com)、ACM

### バックエンド移行(aws ⇨ hero

元記事を表示

【完全自分用】Rubyの問題を解いて知識を深める②

# はじめに
前回に引き続き、完全に自分用アウトプットです。
Rubyの問題を解いて、プログラムの知識や考え方を深堀りするために記述します。

# Q6 繰り返し処理
– 1〜10の数字を順番に足し合わせる。
– 足し算の合計値がターミナルに出力される
– 繰り返し処理で記述しなければならない。
“`
sum = 0 #sum = 0で常に結果を保存する変数を準備

10.times do |i|
sum += i + 1 #1〜10の数値を順番に足していく
end

puts sum #値を出力
“`
# Q7 配列を利用したrubyプログラムの作成
以下の配列から任意の数字を探して何番目に含まれているかという結果を返すsearchメソッドを、each_with_indexを用いて作成する
“`
input = [3, 5, 9 ,12, 15, 21, 29, 35, 42, 51, 62, 78, 81, 87, 92, 93]
“`
“`
def search(target_num, input)
input.each_with_index do |num

元記事を表示

Rails チャット機能

## はじめに
[前回、Railsアプリケーションにマッチング機能を実装しました。](https://qiita.com/gobtktk/items/5caf074209faf31cae4a)今回は、マッチング成立後のユーザー同士のチャット機能を実装していきたいと思います。

### 実装環境
Rails7.0.2
Ruby3.1.0

## メッセージ機能の仕様
ユーザー同士が、「お気に入り!」評価をしている場合(マッチング成立時)に限り、チャットができるようにします。
ユーザーは複数のチャットに参加することができます。またチャットは、2人でするものとします。

## 実装の流れ
1. マッチング成立ユーザーページの実装(viewとcontroller)
1. チャットルーム用のテーブル(chat_rooms)を作成。
1. 中間テーブル(chat_room_users)を作成
1. ルーティングの作成
1. コントローラーの作成

## マッチング成立後、ユーザーページの実装(viewとcontroller)
### 1.ルーティングの設定
~~~ruby:routes.rb
R

元記事を表示

Rails マッチング機能の実装

## はじめに
Rails でアプリケーションを作成した際に、学んだことの復習と、知識の整理のために投稿します。
### 開発環境
rails: 7.0.2
ruby: 3.0.1

## マッチング機能の仕様
ユーザーは、自分以外のユーザーであれば、何人でもlikeとdislikeすることができますし、逆もまた然りです。

## ER図
テーブルと関係性をわかりやすくするため、ER図を作成します。

スクリーンショット 2022-04-18 16.39.28.png

### likesテーブルのカラムについて
– from_user : 誰からの評価なのかを判別するためのカラム
– to_user : 誰に対しての評価なのかを判別するためのカラム
– status : 評価結果(like or dislike

元記事を表示

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

## 今日は引数を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/6b8687ef-9abb-d0fd-5542-b26af57437f0.png)

## 今日の学び

### メソッドの使い方

* メソッドは何度も同じような処理を書く必要があるときに有効
* 例
* `def introduce(name)`
* `puts “こんにちは”`
* `puts “私の名前は#{name}です” `
* `end`
* `introduce(“山田太郎”)`
* `introduce(“鈴木花子”)`
* `introduce(“田中二郎”)`

* 引数は文字列だけでなく数値も渡せる
* 例
* `def introduce(age)`
* `puts “こんにちは”`
*

元記事を表示

インストール不要!ブラウザだけではじめるRubyゲームプログラミング環境「rbCanvas」の紹介(DXRubyスタイル)

rbCanvas
[https://rbcanvas.net](https://rbcanvas.net)

rbCanvas_公式HP.gif

([rbCanvas公式ページ](https://rbcanvas.net) より)

# 1. はじめに

[Ruby](https://www.ruby-lang.org/ja/)でゲームプログラミングによく使われるライブラリに、[DXRuby](https://dxruby.osdn.jp)があります。また、DXRubyと互換性のある統合開発環境として、[Nyle-canvas](https://spoolkitamura.github.io/nyle-canvas/dev2/site/index.html)や [DXOpal](https://yhara.gi

元記事を表示

OTHERカテゴリの最新記事