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

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

【Ryby問題】ハッシュの基礎 考え方

## 初めに

今回はハッシュの問題についてまとめました。
なぜその解答になるかもまとめています。
お時間のある方はぜひお付き合いくださいませ。

## 問題
以下の入力をした際に

“`rb
puts hash.keys
puts hash.values
“`
以下のような出力結果を出すコードを書く
“`rb
one
two
three
1
2
3
“`

## 模範解答

“`rb
hash = { one: 1, two: 2, three: 3 }
“`

## 解説

“`rb
puts hash.keys
puts hash.values
“`
ここで出てきたhash・・問題で指定した変数名

#### なぜ模範解答にkeys・valuesという記述がないのに答えが出てくるの?

###### ハッシュの基本構造を理解する
“`rb
hash = { name: “Taro” }
#変数名  = { キー : バリュー }
“`

ハッシュのキーを取得するには`keysメソッド`
バリュー(値)を取得するには`valuesメソッド`を使用することができ

元記事を表示

対象となる文字列からn番目の文字を削除するメソッド

任意の文字列の先頭からn番目の文字を削除するメソッドを紹介します。

例えば下記のように郵便番号111-1111を入力するが間のハイフンを削除して出力したいときなど削除したい文字が何番目にあるかわかっている時などを想定した時

“`
def address(number)
number.slice!(3)
puts number                 #1111111が出力されて”-“が削除されている
end

number = “111-1111”
address(number)
“`

slice!の後ろの()内は配列と同じように0から始まる数字を入れます!

:::note info
slice!メソッドは配列や文字列から指定した要素を削除して返します
エクスクラメーションマーク(!)がついたメソッドを破壊的メソッドといい
元の要素を変化させるメソッドに使われます
:::

元記事を表示

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

## 今日はnilとハッシュの配列を学んでみた!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632394/f74c101b-4ae7-bcd9-c489-dea43ffe6351.png)

## 今日の学び
### nil
* nil:「何もない」という意味の値で「ニル」と読む

### nilを利用したif文
* ifの条件文で指定した値がない場合はnilになるため、else側の処理が実行される
* 例:userの年齢情報がない場合に「〜さんの年齢は秘密です」と出力したい場合
* `user=[name:”Yamada”]`
* `if user[:age]`
* ` puts “#[user[:name]さんは#[user[:age]]歳です”`
* `else`
* `puts “#[user[:name]さんの年齢は秘密です”`

### 要素がハッシュである配列の作り方・使い

元記事を表示

【2022年版】 Windows10/11 への Jekyll (4.2.2) インストールにおけるトラブルシューティング

Windows11 にて、2022年4月5日現在の最新版である Jekyll 4.2.2 をインストールし、ローカルで
Jekyll の [Edition](https://cloudcannon.com/community/themes/edition/) テーマを用いたサイトをビルドしようとしたところ、エラーが出てビルドできませんでした。

Google で検索しながら、トラブルシューティングを行いましたが、最終的に修正できるまで時間がかかったため、この記事で対処方法をまとめておきます。

この記事でエラーの詳細を記述しているのは、同じエラーに遭遇しているにもかかわらず、問題の解決方法が分からずに、
[teratail](https://teratail.com/) で質問しても正解が得られなかったり、暫定的な処置をしていたりするので、エラーメッセージで検索して、この記事に辿りつくようにするためです。

また、同じ Ruby 製の静的サイトジェネレーターである [Middleman](https://middlemanapp.com/jp/) でも同じエラーが出ているようなので、

元記事を表示

requireとは?permitとは?ストロングパラメータとは?

# はじめに
WebからPostリクエストやPatchリクエストによって送られきた情報は**paramsの中のモデルの中の値**のように入れ子構造になって格納され、サーバーに渡される。
“` 言語名:app/controllers/posts_controller.rb
def post_params
# params[:post][:content]のように階層構造になっている
params.require(:post).permit(:content)
end
“`
これだけのコードだが、一つずつ読み解いていく。

使用環境は以下の通りである。
| No | 項目 | 内容 |
|—:|————-|————|
| 1 | OS | Mac |
| 2 | Ruby | 2.6.3 |
| 3 | rails | 6.0.4 |
# 目次
[1.requireとは](#1-requireとは)
[

元記事を表示

新米エンジニアによるリファクタリングのすすめ-前編-

## はじめに

「先輩からリファクタリングしろって言われたけどどこを直したらいいか分からない…」
とか
「自分の書いたコード全てがクソコードに見える…」

といった悩みを、誰しも一度は感じたことがあると思います。
自分もその1人で、1年間エンジニアとして働く中で、たくさんのコード修正と格闘してきました。
今回は、先輩から聞いたり、本で勉強したりして、自分なりに身につけた「**こういうコードはやばい!**」や「**このタイプのコードはこう直せ!**」といった感覚をまとめてみました。

誰かがリファクタリングする際に少しでも参考になると嬉しいです。拙い記事ですがよろしくお願いします。
1記事にまとめて書くと長過ぎるので、前編・後編に分けます。

前編では
– 破滅的な命名
– 汎用的すぎる命名
– 複雑な条件分岐
– 長すぎるメソッド

後編では
– 再代入を繰り返す変数
– 重複したコード
– 統一化されてないコード
– 不要なコード
– 不要なコメント

について説明します。

## 注意事項

以下のソースコードは全てRubyで記述しています。
また今回のリファクタリング

元記事を表示

【binding.pry】エラーは出ないけど、画像投稿出来ない時の対処法

#前提
この記事のVS codeにインストールしたrails6.0.0を使用しています。
私のオリジナルアプリケーション(躓いたこと)を用いて、誰かの役に立つ記事になればと思います。

#結論
binding.pryで一時停止をして、パラーメータをチェックする。
※Gemfileに「gem ‘pry-rails’」を記入し、「bundle install」を行う必要あり。
MVCを理解し、間違いを探す方法を習得する方法を習得する。

#アプリケーション概要
私は写真記録のオリジナルアプリを作成しました。
ユーザー登録をしているメンバーで日本一周の写真を記録するためのアプリケーションになります。

#内容
投稿しようと思ったが、情報が投稿されない。
“`
def create
@prototype = Prototype.new(prototype_params)
if @prototype.save
redirect_to root_path
else
render :new
end
end
“`
どうしてもelseに入っ

元記事を表示

RspecでActiveRecord::RecordInvalid: バリデーションに失敗しました

#環境

初めて記事を書かせて頂きます?‍♂️
間違っていたら指摘お願いします
M1
ruby3.1.0
rails 6~

—-

#経緯
—-
一度通ったテストが
RspecでActiveRecord::RecordInvalid:バリデーションに失敗しました
に阻まれて沼ったお話

テスト対象はuserなのに何故か違うテーブルのバリデーションがかかってしまう

#結論
—-
アソシエーションをしていたから

今回作っていたテーブルの関係性を説明します

userテーブル, postテーブル, categoryテーブル

user 1対多 post
user 1対多 category

post 多対1 user
post 多対1 category

category 多対1 user
category 1対多 post

アソシエーションを組む事によって
postを作るにはuser, categoryが必要
categoryを作るのはuserが必要
という風になっていました

#Rspec
—-
“`
spec/requests/posts_spec.

元記事を表示

[Ruby]warning: already initialized constant Digest::REQUIRE_MUTEXの解決法

## 概要
ある日自分の開発しているPFでこのような警告表示が出たので解決法を備忘録として残します。

rails routesを実行後
“`
~省略/.rbenv/versions/3.0.2/lib/ruby/3.0.0/digest.rb:6: warning: already initialized constant Digest::REQUIRE_MUTEX
〜省略/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/digest-3.1.0/lib/digest.rb:20: warning: previous definition of REQUIRE_MUTEX was here
“`

## 解決法
[こちら](https://geniusium.hatenablog.com/entry/2021/06/15/133317)の記事を参考に
概要gemをアンインストールした後、updateした
“`
$ gem uninstall digest
“`
“`
$ gem update –default
“`

##

元記事を表示

Ruby on Railsの環境を構築する際のNginx設定ファイルのコマンド及びコード理解

## なぜ記事を書こうと思ったか
Nginx 用の設定ファイルを作成する際にコマンド及びコードの理解を備忘録として残すため。

## default.confのコマンド説明
default.conf
“`
upstream puma {
server app:3000;
}

server {
listen 80;
server_name localhost;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

root /app/public;

location @puma {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass

元記事を表示

? Crystal言語でも `eval` できる! Anyolite ?? がすごい

## はじめに

Crystal言語では `eval` を使うことができません。

もしもCrystal言語で `eval` を使わなければならないとしたら、そのためにはCrystalそのものを実行ファイルの中に組み込まなければならないからです。

Evalはバッドプラクティスとされることが多く、なるべく利用しない方がよいと言われています。しかし、Crystal言語を使っていると、Rubyのevalが恋しくなることがありますね。そんなときに、なんとmruby(やCRuby)をCrystalの実行ファイルに組み込むことによって、Crystal言語でもevalを実行できるようにしてしまう、というスゴいプロジェクトを見つけたので紹介します。

## Anyolite

https://github.com/Anyolite/anyolite

アニョライトって知っていますか? 私は知りませんでした。これはゾイサイトという結晶の中にルビーの結晶が含まれた宝石だそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

ruby open-uri について

たまに、URLを開こうとしても、このようなエラーが出るのではないだろうか?

“`
~/lesson_ruby % rb nokogiri2.rb
/Users/hoge/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/open-uri-0.2.0/lib/open-uri.rb:364:in `open_http’: 503 Service Unavailable (OpenURI::HTTPError)
“`

この対策に、このようなコードを書く

“`rb
require ‘nokogiri’
require ‘open-uri’

url = ‘https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%

元記事を表示

【個人開発】ピースサインで開いた指の角度で競い合ってみるサービスを開発しました✌️

# ?はじめに?
写真を撮っている時、たまに見かけませんか?

「あの人、ピースサインの指、開き過ぎちゃう?」

そして考えました。

「あの人のピースサイン、何度くらい開いているのか…知りたい!」

そんなもどかしい好奇心から生まれたサービスを紹介します◎

(補足)
所謂ネタアプリですがこちらPFコンテストでの優秀賞作品になりました✌️
本戦の様子が公開されているのでお時間ある方は是非ご覧ください^^
他の登壇者の作品も素敵なサービスばかりでした✨

# ?サービス概要?
[![Image from Gyazo](https://i.gyazo.com/31ff6d41b383bf24f830cc70c761a632.png)](https://gyazo.com/31ff6d41b383bf24f830cc70c761a632)

ピースサインで開いた指の角度で競い合ってみるサービスです✌️

https://www.peace-sign-competition.com/

https://gi

元記事を表示

Galaaz を触ってみた(TruffleRuby + ggplot2 で散布図を描いてみた)

日本語ではまだ紹介されていないようなので TruffleRuby + Galaaz の人柱やってみました。GraalVM, R, ggplot2 について詳しくない人が見様見真似で書いています。

# Galaaz

GraalVM を使って R の機能を Ruby から使うための gem。

https://github.com/rbotafogo/galaaz

作者の Rodrigo Botafogo さんによる解説記事。これらの記事で Galaaz の存在を知りました。


https://towardsdatascience.com/ruby-plotting-with-galaaz-an-example-of-tightly-coupling-ruby-and-r-in-graalvm-520b6

元記事を表示

未経験の新人でも1ヶ月で「使える」人材に育てる仮想プロジェクト型研修(前編)

## 未経験開発者の育成って難しいですよね。

色々なことを覚えてもらわないといけないし、時間はそんなにかけられないし。
教える先輩が忙しくて手が空かない。

当社では開発未経験の新人さんが入ってくると、研修の一環として仮想の開発プロジェクトを立ち上げて、
仕様決めからリリースまでの一連の開発作業を体験してもらっています。

この仮想開発プロジェクトが終了してから、実際の開発チームに合流してもらっているのですが

**これまでとてもスムーズに開発チームに合流できています。**

この仮想開発プロジェクトがどんな感じのものなのか。
実際にどのように進めていくのか。
といったことを、この仮想開発プロジェクトをサポートする先輩の視点からお伝えしようと思います。

ちなみに、新人視点の記事はこちらです。

– [ 経験ゼロの新人が1ヶ月でウェブアプリを作らされるヤバい研修 part 1](https://qiita.com/Terao-Takumi/items/d2b02a4cf0470675107e)
– [「完全に理解した」状態の僕が「チョットワカル…」になるまでのとある企業の新人研修

元記事を表示

【Rails】通知機能~変更点と補足~

## 記事の対象者
実装した処理の動きについて理解したい人

## 前提条件
Ruby 2.6.3
Rails 6.1.5

## 参考にした記事
実装については、下記記事を参考にしました。
今回は一部変更した点と、実装した処理の動きについて自分で補足した部分を書いていきます。

https://qiita.com/nekojoker/items/80448944ec9aaae48d0a#%E5%8F%82%E8%80%83%E3%81%AB%E3%81%97%E3%81%9F%E8%A8%98%E4%BA%8B

## 実装の流れ(フォロー通知)
**①通知モデルの作成(Notification)
②モデルの関連付け(UserとNotification)
③モデルに通知作成メソッドを作成
④コントローラーに通知作成メソッドの呼び出し処理作成
⑤ビューに通知一覧画面及び通知アイコンの作成**

## 変更箇所
下記が変更点となります。補足を交えながら説明していきます。
・default_scope
・update_attributesメソッド

## ②モデルの関連付け(UserとNo

元記事を表示

[初心者向け]rubyでスクレイピングを行い、その結果でメールを送信する

# 例題

amazonでps5が売り出されていたらメールを送信する

# まず、初めに

htmlから、この値を取り出す

[リンク](https://www.amazon.co.jp/PS5-CFI-1100A01-%E8%BB%BD%E9%87%8F%E7%89%88-%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%89%E3%83%A9%E3%82%A4%E3%83%96%E3%82%BF%E3%82%A4%E3%83%97-%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%E4%BF%9D%E8%A8%BC1%E5%B9%B4%E3%81%82%E3%82%8A/dp/B0B18BG131/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=1VTPROMW1C2U9&keywords=ps5&qid=1654946758&sprefix=ps%2Caps%2C256&sr=8-1)

![スクリーンショット 2022-06-11 20.

元記事を表示

ECS FargateとElasticBeastalk(Ruby Platform)を比較

昨年、[本番稼働を意識したECS Fargateを用いたFastAPIの環境構築(ALB、SSM、BlueGreenデプロイ)](https://qiita.com/yuyasat/items/04a083a57f5691f1ed3c)という記事を投稿しました。その後、仕事にて実運用でECS Fargateを利用し始め、ある程度感覚がわかってきましたので、以前利用していたElasticBeanstalk(Ruby Platform)との比較を簡単に紹介したいと思います。
仕事では、ECS Fargateは2022年2月末に本番運用を開始しています。また、ElasticBeanstalkに関しては、2017年より仕事で使っています(既にある環境の運用から始まり、新規構築も何度か行いました)。その経験を踏まえて感じたことですので、使用している機能が限定的だったり、詳しい方から見れば容易に改善できる面もあるかと思います。ご教授いただけましたら幸いです。

## 1. デプロイのしやすさ
| | ElasticBeanstalk | ECS Fargate |
|—|—|—|
|

元記事を表示

bundler 2.2.x でのエラーを乗り越えたい

2020年12月に、 Rails アプリの Docker イメージをビルドする CI が突然エラーを起こしたことがありました。これは bundler 2.2.0 がリリースされたことに起因していたため、イメージに入れる bundler を一旦 2.1.4 に固定することで対処しました。

そのままずっと問題に蓋をしていたものの、 bundler は既に 2.2.33 や 2.3.15 が出ているため、きちんと当時のエラーについて調べてバージョンアップしようと思い立ちました。

エラーが何だったのか、 bundler の [changelog](https://github.com/rubygems/rubygems/blob/v3.2.33/bundler/CHANGELOG.md) などを見てもすぐにはわからなかったので、**実際に様々なバージョンで実験して探りました**。( x86-64 の Linux および macOS を対象としています)

## TL;DR
bundler 2.2 からは、 Gemfile.lock に Ruby のプラットフォームの情報( `x86_64-

元記事を表示

Progate Ruby 備忘録

Progateの「Ruby」で学習した内容をまとめてみました。

## コンソールへの出力
`puts`の後に出力したい文字列や変数などを指定する。
文字列を含む内容を出力する場合は以下のように、ダブルクォーテーション(`”`)で囲む必要がある。
“`ruby
# 変数宣言
name = “huga”

puts “hoge”
puts 1 + 2
puts “1 + 2”
puts name
“`
一応、シングルクォーテーション(`’`)で囲むやり方でも文字列の出力は可能だが、
ほとんど使い道はなさそうなので覚えなくても大丈夫だと思われる。
(Javaでもシングルクォーテーションはほとんど使わない気がする)‘

また、`#{変数名}`の構文を使用することで、変数の中身を文字列に含めることができる。
“`ruby
name = “hoge”
puts “初めまして、#{name}さん”
“`

## コメントについて
行の先頭に`#`を入れた行はコメントとして扱われる。
複数行をコメントアウトしたい場合は、`=begin`と`=end`の構文を利用すればよい。
“`ruby

元記事を表示

OTHERカテゴリの最新記事