Ruby関連のことを調べてみた

Ruby関連のことを調べてみた

Rubyのメソッド(随時更新)

# charsメソッド
charsメソッドは、その文字列を文字ごとの配列に変換するメソッド。
例えば、”QIITA”という文字列に対しては、[“Q”, “I”, “I”, “T”, “A”]という配列を返す。
“`ruby:qiita.rb
str = ‘QIITA’
str.chars
=>[“Q”, “I”, “I”, “T”, “A”]

“`

# each_with_indexメソッド
配列の各要素に対し、その要素と要素のインデックス(位置)をブロックに渡して繰り返し処理を行うメソッド。
例えば、[“Q”, “I”, “I”, “T”, “A”]という配列に対して、最初の繰り返しでは”Q”とそのインデックス0が渡される。次に”I”とインデックス1、その次に”I”とインデックス2、その次に”T”とインデックス3…という具合に続く。
“`ruby:qiita.rb
str = ‘QIITA’
str.each_with_index do |word, index|
p [word, index]
end
=>[“Q”, 0]
[“I”, 1]
[“I”,

元記事を表示

[Ruby]とりあえずsuperって書いてない?super・super()・super(*)・super(**)は違うんだよ

親クラスのメソッドを呼び出す際に使用される`super`には、`super`、`super()`、`super(*)`、`super(**)`など、いくつかの異なる呼び方があります。
この記事では、それぞれの呼び方の違いと具体的な使用例について説明します。

これで僕みたいにとりあえず`super`って書いておけば良いんでしょって人が減ると嬉しいですね。

## super
`super`は、現在のメソッドに渡された引数をそのまま親クラスのメソッドに渡します。
“`ruby
class Person
def initialize(name, age)
@name = name
@age = age
end
end

class Yuusha < Person def initialize(name, age) super end end yuusha = Yuusha.new('tarou', 28) ``` 親クラスのメソッドが、現在のメソッドと同じ引数を必要とする場合に使用します。コードがシンプル

元記事を表示

単一責任のメソッドがもたらす4つの恩恵 – Ruby編

「オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方」という書籍を読みながらオブジェクト指向設計について学んでいます。
自分の学習用として書いていきます。

メソッドに単一の責任を持たせることは、クリーンコードを書く上で重要な原則の一つです。本記事では、単一責任のメソッドがもたらす4つの主要な恩恵について、Rubyのコード例を交えて詳しく解説します。

## 1. 隠蔽されていた性質を明らかにする

単一責任のメソッドは、そのメソッドが何をするのかを明確に示します。これにより、コードの意図が明らかになり、理解しやすくなります。

### 悪い例:

“`ruby
def process_order(order)
total = order.items.sum(&:price)
tax = total * 0.1
shipping = calculate_shipping(order)

order.total = total + tax + shipping
order.status = ‘processed’

元記事を表示

[Rails] Capistranoが不要なので、削除する

# はじめに
元々、`Capistrano`を使用してデプロイをしていたみたいですが、デプロイ方法が変わって、使用されなくなっていました。

なので、調査をした上で、削除する方針に決まりました。
その内容をアウトプットいたします。

:::note warn
本記事では、削除をメインに記載いたします。
Capistranoについて詳しく知りたい方や実装方法は、別記事を参照していただくようお願いいたします。
:::

# Capistrano とは
https://github.com/capistrano/capistrano

簡単にいうと、デプロイを自動化してくれるGemになります。
詳しくは、以下の記事がわかりやすかったです。

https://pikawaka.com/rails/capistrano

# 確認方法
まず、本当に`Capistrano`を使用していないか、確認します。
デプロイに使用する実行コマンドは、以下のようになると思うので、リポジトリ内・外を調査します。

“`sh
bundle exec cap production deploy
“`

使われ

元記事を表示

VSCodeのRuby LSPが正常に動作しないときの対処法

## 概要

VSCodeのRuby LSPの拡張機能をインストールした際に繰り返しエラーが発生しました
安定して動作するように修正する方法がつかめたので共有です

## 環境

* WSLのUbuntu 20.04
* rbenv
* Ruby

## 環境準備

WSLのUbuntu 20.04にrbenvを入れる

“`bash
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y gcc g++ make git libssl-dev libreadline-dev zlib1g-dev
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
$ ~/.rbenv/bin/rbenv init
# 1度入りなおす
$ which rbenv
/home/username/.rben

元記事を表示

【Ruby】オライリー本の備忘 ~rubyプログラムの構造と実行

## 概要
[プログラミング言語Ruby](https://www.oreilly.co.jp/books/9784873113944/)を読んでの備忘録
本の中の章ごとに分けることとする

## 識別子の記号
– ?

booleanを返すメソッド名の末尾には疑問符をつける
“`ruby:example
def empty?(str)
# booleanを返す処理
end
“`

– !

オブジェクト自身を破壊的に変更する場合につける
“`ruby:example
def sort!(arr)
# 破壊的処理
end
“`

## 改行
rubyでは四季が不完全な場合に解析が次の行に続く
“`ruby:example
total = x + # 式が不完全なため解析が次の行に続く
y

total = x # 式が完全なため解析がここで終了する
+ y
“`
:::note info
行の中で最初に現れた空白以外の文字がピリオドである場合、
その行は前の行からの後続だと見なされる
:::

“`ruby:example
animals = Arra

元記事を表示

RSpecでよく使うメソッド集(備忘録)

RSpecの検証に使うメソッドを忘れがちなので、アウトプットしてみるようにしました。
他にもよく使うけど、忘れるようなメソッドがあれば、どんどん残していきます!

## pageの中に、文字列があるかどうかを判断するマッチャ
“`ruby
expect(page).to have_content(‘テキスト’)
“`

## 現在のページが指定したページかどうかを判断するマッチャ
“`ruby
expect(page).to have_current_path(path)
“`

## 指定した範囲の中で検証を行う
“`ruby
within(‘.class’) do
# expect(page).to have_content(‘テキスト’)
end
“`

元記事を表示

ホワイの(感動的)rubyガイドが読み物として面白い

# 読書をしているか?

読書をしているか? 『リーダブルコード』を読んだ? 面白かったか? ほんとうか? 次は『オブジェクト指向でなぜつくるのか』を読む? 本当か? **本当にそんな役に立つものばかり読むのか?**

リーダブルコードは結構ユーモアにあふれて読みやすく、好きだった。
しかしたまには不真面目な読書もしたい。

『ママ、なぜおうちにサーバーがあるの?』も読め。

たぶん非売品なのだが作者さんが全文をのっけてくれている。

https://qiita.com/uikou/items/e4843f0bce940927de96

そのタワーが「デスクトップPCではなくサーバーである」と理解しているお子さんはもうなんていうか、それだけでおかしい。

## ホワイの(感動的)rubyガイドを読め(無料だ)

ところで、俺は『ホワイの(感動的)rubyガイド』が好きだ。
しかもこれは無料である。
ユーモアにあふれていて面白いので、いろんな人に読んでほしいと思っている。

http://www.aoky.net/articles/why_poignant_guide_to_ruby/

元記事を表示

Rubyで英語名称のポケモンの名前を日本語で当てるゲームを作ったよ

### 読んで欲しい人

– rubyでプログラムを作ってみたい人
– 過去の自分

### 動作環境

– ruby 3.3.3

### アプリについて

#### ファイル構造
“`ファイル構成
.
├── pokemon.rb
├── pokemon.csv
“`

#### ソースコード
“`ruby:pokemon.rb
# ファイル内でcsvライブラリ(モジュール)を使用するための記述
require ‘csv’

# CSVファイルを読み込む
def load_pokemon_from_csv(file_path)
pokemon_data = []
# foreachにheaders: trueをすると、keyとvalueをいい感じに扱ってくれる
CSV.foreach(file_path, headers: true).each_with_index do |row, _i|
pokemon_data << row.to_hash break if _i == 150 end pokemon_data end def ma

元記事を表示

Rubyでオウム返しプログラミングの練習…

お久しぶりです。Javaの勉強し直してます。
Javaでオウム返ししろと言われましたが、手癖でRuby…

※注意事項。
→が、実行結果です。

“`ruby
cat oumu.rb
→puts gets.to_s

ruby oumu.rb
→1
→1
“`

では、この辺で…

元記事を表示

Ruby on Rails ECサイト作成

## はじめに
Zennの記事を元にECサイトを作成してみました。
今回はオリジナルではありませんが今後ECサイトを作りたいので練習で制作しました。とても勉強になったのでECサイトを作ってみたい方はぜひチャックしてみてください。

https://zenn.dev/farstep/books/7f169cdc597ada

## 機能紹介
大きく2つに分けることができます。
・ECサイトの管理者側の機能
・ECサイトを利用する顧客側の機能

どちらもログインすることで閲覧できます。

Githubリポジトリ

https://github.com/Killua0615/ecommerce_practice

### 管理者側以下の内容が確認できます

#### 注文履歴
status は「Normal」「Withdrawn」「Banned」のどれかに変更することができる
![スクリーンショット 2024-06-27 10.28.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3733846/7fe7

元記事を表示

【Ruby】privateとprotectedの違い

# 初めに
rubyのclassにおけるprotectedが理解できず調べていたのですが、分からなかった理由はprivateの理解を誤っていたからでした。
今回は思考の整理のため、privateメソッドとprotectedメソッドの違いについてまとめてみます。
# 共通点
・クラス内かサブクラス内でのみ呼び出せる点(他の言語ではprivateはサブクラス内では呼び出せない場合もあるみたいですが、Rubyではそうではないです)
・レシーバがselfの場合、privateメソッドでもprotectedメソッドでも挙動は変わらない。
bメソッドの中でaメソッドを呼び出している部分は、省略されているだけでその前にselfがあります。
“`

class Parent
def initialize(name)
@name = name
end

def b
a
end

protected #privateでも同じ結果が出ます

def a
puts “a”
end
end

parent = Parent.new(“Alice”)

par

元記事を表示

data-turbo=”false”とdata: { turbo_method: :post }を同時に使いたい場合

## はじめに
data-turbo=”false”とdata: { turbo_method: :post }をどうしても一緒に使う必要があった時の話です。

※後述しますが、ajax化した場合ですと今回の書き方ではうまくいきません。予めご了承ください。

## 環境
ruby 3.2.2

rails 7.1.3.2

hotwire

Bootstrap5系

Google Map API

## 今回例示するアプリ画面についての説明

現在、「自分の好きな本屋を紹介し、また好きな本屋が増える事を支えるサービス」がテーマのポートフォリオを作成中です。

今回は開発途中で壁に当たった時の対処法としてここに記していきたいと思います。

## 今回のシチュエーション

ブックマークボタン(画像にある栞のマーク)を押すたびに、javascriptが読み込めなくなりGoogleMapが表示されなくなりました。

![turboメソッドの記事写真1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/372657

元記事を表示

How to install ruby(rbenv) and npm on WLS2 as Ubuntu

apt でインストールしたらやたら古かったのでメモ

# 環境
– Windows 11 Pro
– wsl 2.2.4.0
– Ubuntu 22.04.4 LTS

# TODO
“`shell
# rbenv and ruby

sudo apt-get install -y libssl-dev zlib1g-dev libyaml-dev
git clone –depth 1 https://github.com/rbenv/rbenv.git ~/.rbenv
echo ‘eval “$(~/.rbenv/bin/rbenv init – bash)”‘ >> ~/.bashrc
. ~/.bashrc

git clone –depth 1 \
https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenv install 3.3.1
rbenv global 3.3.1
gem update –system
gem update
gem cleanup

# npm an

元記事を表示

「コメントに対するコメント」をモデルで表現してみた!

## 動作環境
vscode、ruby3.3.0、rails7.1.3.4

## 実装したかったこと
x(旧twitter)のようなクローンアプリを作っていたのですが、投稿文に対するコメントに対して更にコメントする機能を実装してみました。
探せば山ほど参考になる記事は出てくると思ったのですが、今回は自分のテーブルや関係性の理解度を確認するために、敢えて自分で試行錯誤しながら一から作ってみました!💪

## 実装のゴール
コメントの子要素を取得できる。
コメントの3階層まで。4階層目のコメントは作成できない。(コメントのコメントのコメントまでは作成できる)

## 実装前のモデルの状態
user→post→comment
(既にpostへのコメント機能は作成済みです)
“`app/models/user.rb
has_many :posts, dependent: :destroy
has_many :comments, dependent: :destroy
“`
“`app/models/post.rb
belongs_to :user
has_many :comments,

元記事を表示

テストコードを書く上で個人的に気をつけている5つのこと

# はじめに
エンジニアの皆様、テストコードはちゃんと書けておりますでしょうか?(挨拶)

どんな開発言語や開発手法を導入していたとしても、アプリケーションの機能実装とテストは表裏一体であると言えます。場合によっては機能の作り込みよりも時間をかけるべきケースが多いくらい重要である(・・・と信じたい)反面、デッドラインが近づくにつれて真っ先に工数が削られやすく軽視されがちな工程でもあります。

時間に追われてテストコードを書いた結果、テストの体をなしていないコードになっていたり後で見返したときに記述が煩雑すぎてメンテ不能になっていたり・・・といった苦い経験は誰しもがあるかと思います。かくいう自分もそんなことは多々ありました。
そんな今までの経験則を基に「自分がテストコードを書くにあたってどんなことを意識しているのか?」をいくつかピックアップして備忘録も兼ねて紹介したいと思います。

一応注意なのですが、**「あくまで自分はこうやってます」という趣旨の記事**です。偉大な先人によるテストコードの書き方などに関する記事・コラムも多数ありそれらの内容に相反する事項もあるかもしれませんが、そこは

元記事を表示

Railsでのユーザー認証の実装とbcryptの活用方法

## 流れ

### 1. Userのモデルとコントローラーを準備する

“`ruby
rails g model user username:string password_digest:string
“`

“`ruby
rails g controller users
“`

“`ruby
rails db:migrate
“`

以下のファイルが生成されます:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/b76bc216-0e70-8824-13e6-2aa70659953d.png)

`users_controller.rb`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3824310/38a56c5c-bb43-6430-b46c-4720f1c0165c.png)
`user.rb`

`user.rb` に以下のメソッドを追加します:

元記事を表示

[Ruby 3.1.6] メソッドの可変長引数の *array 展開で SystemStackError

[SystemStackError]:https://docs.ruby-lang.org/ja/latest/class/SystemStackError.html
[ArgumentError]:https://docs.ruby-lang.org/ja/latest/class/ArgumentError.html
[NoMethodError]:https://docs.ruby-lang.org/ja/latest/class/NoMethodError.html
[組み込みライブラリ]:https://docs.ruby-lang.org/ja/latest/library/_builtin.html
[Hash#values_at]:https://docs.ruby-lang.org/ja/latest/method/Hash/i/values_at.html
[ruby 3.3 – ruby/hash.c L:2710]:https://github.com/ruby/ruby/blob/ruby_3_3/hash.c#L2710

:::note warn
この記

元記事を表示

Rubyで配列内のハッシュで同じキーの値を合算(inject、merge)

ポートフォリオ作成中に、「同一のキーを合算して、値を求める」必要があり、実装に時間を要したため、備忘録として投稿します。

## 実現したいこと

“`ruby
data = [
{ water: 9, retort_food: 3, mask: 3 },
{ water: 10, retort_food: 4, mask: 4 },
{ water: 11, retort_food: 5, mask: 5 }
]

# 上記のデータで同じキーのものを合算
# data = { water: 30, retort_food: 12, mask: 12 }
“`

## 完成形
“`
merge_data = data.inject do |old_data, new_data|
old_data.merge(new_data) do |_key, old_val, new_val|
old_val + new_val
end
end
“`
## 使用したメソッド

### inject
> 配列等の要素を一つずつ繰り返して、ブロック内で処理する

元記事を表示

CORS設定でOPTIONSリクエストとヘッダが取得できない

実装中に対応した内容を備忘録として投稿します。

## 発生した問題

フロントエンド(Nuxt.js)から、バックエンド(Rails)に対して、APIリクエストを投げるとCORSエラーが発生。
“`
Access to XMLHttpRequest at ‘http://localhost:3000/users/1’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
## 原因

– ブラウザ側のセキュリティが強化されていて、意図しない挙動を防ぐために実装されている。
– もし仮に、ハッキングされるなどすると、
– フロントエンドとバックエンドでサーバーやドメインが別れている場合に、悪意のあるドメインにすり替えるなどができてしまう。
– 会員制サイトでログインするときに、ログインIDやパスワードを盗むことができてしまう。

元記事を表示

OTHERカテゴリの最新記事