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

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

クラスメソッドとは

> そのクラスに関連が深いものの、`一つ一つのインスタンスに含まれるデータは使わないメソッドを定義したい場合`があります。そのような場合はクラスメソッドを定義した方が使い勝手が良くなります。

# クラスメソッドの呼び出し方
>クラスメソッドを呼び出す場合は以下のように、クラス名の直後にドット(.)を付けてメソッドを呼び出します。
“`クラス名.メソッド名“`

# クラスメソッドの書き方
>“`rb
> class クラス名
> def self.クラスメソッド
> # クラスメソッドの処理
> end
> end
>“`

>“`rb
> class クラス名
> class << self > def クラスメソッド
> # クラスメソッドの処理
> end
> end
> end

# メソッド名の表記法について
> Rubyではインスタンスメソッドを表す場合に、`クラス名#メソッド名`と書くことがあります。例えばString#to_iであれば、「Stringクラスのto_Iというインスタンスメソッド」と表します。

元記事を表示

【Ruby】シングルクォートとpの意外な性質

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
文字列の扱いにおいて「シングルクォート」と「ダブルクォート」の違いはご存じだと思います。
シングルクォートは式展開を無効にするため、プログラムの挙動を確認したいときに役立ちますが、さらに意外な性質があることをご存じでしょうか?
この記事では、シングルクォートでバックスラッシュがそのまま出力されることと、`p` メソッドと組み合わせたときの動きを詳しく見ていきます。

## シングルクォートとダブルクォートの違いをおさらい
まずは、シングルクォートとダブルクォートの基本的な違いを簡単におさらいしておきましょう。

### ダブルクォート(`”`)
式展開 `#{}` や特殊文字(例えば `\n` など)が有効です。
“`ruby
name = “田中”
greeting = “こんにちは、#{name}さん”
puts greeting # => こんにちは、田中さん
“`

### シングルクォート(`’`)
式展開や特殊文字が無効で、文字列がそのまま出力されます。
`

元記事を表示

Ruby初学者によるsitemapシステムの作成奮闘記

:::note warn
これは全くRubyに触れたことがない初学者による記録です。
Rubyの知識がある方にとっては参考にはならない(参考サイトは参考になります!)と思いますので、頑張ってんなぁくらいの温かい目で見もっていただけると幸いです。
:::
筆者の環境
・Windows11
・エディター:cursor(VSCodeのようなもの。おすすめです)
## 初めに
サイトマップを作ってみたかったため、いろいろな記事を渡り歩いてよさそうなものを見つけ、やってみようの精神で始めました。

https://pikawaka.com/rails/sitemap_generator

**参考サイトを見つけた時点で私はRubyを触ったことが全くありません。**
HTML/CSSとコマンドが抵抗なく使える程度のレベルです。
なので初歩的なことから何をしたか『奮闘記』として記録に残します。

### 1.Rubyをインストールする
前述のとおりRubyを触ったことがないのでインストールから行います。

https://prog-8.com/docs/ruby-env-win

https://w

元記事を表示

【Ruby】破壊的な変更!chompとchomp!

paizaの解き方記事などみると、chompではなく、chomp!を見ることがあった。
違いを理解したのでアウトプット。

## !とは

> 破壊的な変更
> Ruby の String クラスは mutable です。つまり、オブジェクト自体を破壊的に変更できます。
> 「破壊的な変更」とは、あるオブジェクトの内容自体を変化させることです。
引用:[Rubyリファレンス](https://docs.ruby-lang.org/ja/latest/class/String.html)

元々のオブジェクトを変更(破壊!)してしまう。

chompもchomp!も文字末尾の改行を取り除けるメソッド。

【補足】getsなどで受け取った入力は末尾に改行コードが入っている。例↓

“`ruby:irbでの実行結果
string = gets
hello # helloと入力する
=> “hello\n” # \nは改行コード
“`

## chompの場合
“`ruby
string = gets # helloと入力
p string
=> “hello\n”

stri

元記事を表示

診断結果の機能を作りたいあなたに

こんにちは
今回は診断結果を表示するための機能を実装します
診断機能につきましては、下記にてご確認ください
https://qiita.com/jiantaiyiteng1/items/12f62f32775558e3bd0b

今回の診断機能は下記の認識で進めていきます
・設問3問のYESNO方式
・8通りの選択肢を作る

## 診断結果を見るのボタンを押しても画面遷移できないとき

1. **ルート設定について**

`resources :diagnoses`のルートは下記のように適切であるかを確認します

“`Ruby
# ルート側にdiagnoses(診断機能)を追加
# 現在のroutes.rbでは、診断機能を提供するresources :diagnosesに対してindexとshowアクションしかルートが設定されていないが
# トップページから診断フォーム(newアクション)に進む必要がある
resources :diagnoses, only: %i[index show new create]
“`

2. **フォームの送信確認**

`診断結

元記事を表示

診断機能を作りたいあなたに

こんにちは
RUNTEQにて卒業制作で診断アプリを作ってます
今回はとってもシンプルなYESNO形式で診断する機能を共有いたします
診断結果の出力は別途共有いたします
初めての公開記事で頼りないところもございますが、よろしくお願いいたします

# **ルーティングを定義**

ルート側にdiagnoses(診断機能)を追加します

現在のroutes.rbでは、診断機能を提供するresources :diagnosesに対してindexとshowアクションしかルートが設定されていないが、トップページから診断フォーム(newアクション)に進む必要があります

“`ruby
# routes.rb
Rails.application.routes.draw do
# (省略)
root “static_pages#top”
# 診断機能にて追加
resources :diagnoses, only: %i[index show new create]
end
“`

# `diagnoses#new`へのルートに変更
Railsのルーティングヘルパーで、dia

元記事を表示

RSpecで共通のテストを再利用!shared_examplesとinclude_examplesの使い方

# 1. はじめに
RSpecでテストを書いていると、似たようなテストケースが何度も出てきて「コードが重複してしまう…」と感じたことはありませんか?そんなときに便利なのが shared_examples と include_examples です。この2つを使うと、共通のテストケースを1か所にまとめて複数のテストで再利用できるようになります。
今回は、shared_examplesとinclude_examplesの使い方を紹介します!

# 2. shared_examplesとinclude_examplesとは?
shared_examples : 共通のテストケース(例)を定義するための機能。
include_examples : 定義した共通のテストケースをテストで呼び出すための機能。
この2つを使うことで、同じようなテストをいちいち書き直さずに、再利用できるようになります!
###### 基本の使い方
例えば、あるAPIが200のステータスコードでJSON形式のレスポンスを返すかを確認するテストを書いたとします。
“`
describe SomeController, t

元記事を表示

Ruby の TCPSocket クラスで memcached のメモリに関する情報を取得する

# やりたいこと

memcached のメモリに関する情報を取得するには stats コマンドを使用する。例えばターミナルでは以下のように行う。

“`shell-session
$ echo stats | nc -w 1 localhost 11211 | awk ‘$2 ~ /bytes/ { print $2″: “$3 }’
bytes_read: 17492988
bytes_written: 370282118
limit_maxbytes: 3212836864
hash_bytes: 524288
bytes: 523087
“`

– memcached がデフォルトで使用するポート番号は 11211
– `bytes: 523087` が使用しているメモリのサイズ

Ruby でも同様のことを行いたい。

# 方法

[TCPSocket](https://docs.ruby-lang.org/ja/latest/class/TCPSocket.html) クラスを使用する。

“`rb
require ‘socket’

HOST = ‘localhos

元記事を表示

MacにRuby3.0.7インストールでエラーになってしまう際の対応方法

MacにRuby3.0.7を入れようとした時、エラーになってしまった。
“`
❯ rbenv install 3.0.7
/opt/homebrew/bin/ruby-build: line 1158: versions: bad array subscript
==> Downloading openssl-1.1.1w.tar.gz…
-> curl -q -fL -o openssl-1.1.1w.tar.gz https://dqw8nmjcqpjn7.cloudfront.net/cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9661k 100 9661k 0

元記事を表示

【Ruby,Python初学者必見】LinterとFormatterは必ず入れましょう

# はじめに

みなさん、こんにちは。Happiness Chainメンターのryoです。

今回は、Ruby、Python初学者向けに、LinterとFormatterの重要性と、どのLinterとFormatterを入れればよいか、またVSCodeを使用している人向けに、VSCode上でRuby、PythonのLinterとFormatterを動作させる環境構築手順をお話します。

# Linter、Formatter、コーディング規約について

**Linter**はコードのバグや構文エラー、一部不適切なコーディングスタイル(コードの見た目)、お作法を検出するライブラリです。通常RubyやPythonはコードを実行しないとエラーを検出できないですが、実行前にエラーを検出することができます(静的解析)。

**Formatter**はコーディングスタイルをチェックして、自動整形するライブラリになります。
改行の挿入やスペースの有無等を自動整形するので、見た目がとても良くなります。

コーディングスタイルやお作法に関するチェックは、**コーディング規約**に従ってチェックするものにな

元記事を表示

文字列を特定のバイト数 (not 文字数) で切り詰める

# やりたいこと

文字列を特定のバイト数 (not 文字数) で切り詰めたいです。

# 最初に結論

Active Support コア拡張機能が提供する [String#truncate_bytes](https://railsguides.jp/active_support_core_extensions.html#truncate-bytes
) を使います。

“`rb
limit = 100 # bytes

engineers = ‘👨🏿‍💻👩🏿‍💻👩🏼‍💻👨🏻‍💻👩🏾‍💻👨‍💻👨🏼‍💻👨🏾‍💻👨🏽‍💻👩‍💻👩🏻‍💻👩🏽‍💻’
engineers.bytesize
#=> 172

truncated_engineers = engineers.truncate_bytes(limit, omission: ”)
#=> “👨🏿‍💻👩🏿‍💻👩🏼‍💻👨🏻‍💻👩🏾‍💻👨‍💻”
truncated_engineers.bytesize
#=> 86
“`

# 長い解説

## 例: 文字列を MySQL の TEXT 型に収まる範囲に切り詰めたい

とある Rails

元記事を表示

initializeメソッド

# initializeメソッド
>“`rb
>User.new
>“`
>この時呼ばれるのがinitializeメソッドです。`インスタンスを初期化するために実行したい処理があれば、このinitializeメソッドでその処理を実装`します。(特に必要なければ定義しなくても構いません)。
“`rb
irb(main):042* class User5
irb(main):043* attr_accessor :name, :age
irb(main):044*
irb(main):045* def initialize(name,age)
irb(main):046* @name = name
irb(main):047* @age = age
irb(main):048* end
irb(main):049> end
=> :initialize
irb(main):050> user = User5.new(“Alice”, 30)
=> #
irb(

元記事を表示

アクセサメソッド

# アクセサメソッドとは
>`インスタンス変数の値を読み書きするメソッドのことをアクセサメソッド`と呼びます(他の言語では「ゲッターメソッド」や「セッターメソッド」と呼ぶこともあります)。Rubyの場合、単純にインスタンス変数の内容を外部から読み書きするのであれば、`attr_accessor`というメソッドを使って退屈なメソッド定義を省略できます。

### 読み書き両方できるattr_accessor
“`rb
irb(main):001* class User
irb(main):002* attr_accessor :name
irb(main):003*
irb(main):004* def initialize(name)
irb(main):005* @name = name
irb(main):006* end
irb(main):007> end
=> :initialize
irb(main):008> user = User.new(“Alice”)
=> #
ir

元記事を表示

インスタンス変数の参照

# インスタンス変数とは?
>クラス内部ではインスタンス変数を使うことができます。インスタンス変数は同じインスタンス(同じオブジェクト)内部で共有される変数です。インスタンス変数の変数名は必ず@で始めます。

# ローカル変数
> ローカル変数はアルファベットの小文字、またはアンダースコアで始めます

# ローカル変数に代入されていないとエラーになる
“`rb
irb(main):189* class User4
irb(main):190*
irb(main):191* def initialize(name)
irb(main):192* @name = name
irb(main):193* end
irb(main):194*
irb(main):195* def hello
irb(main):196* # shuffled_name = @name.chars.shuffle.join
irb(main):197* “Hello, I am #{shuffled_name}.”
irb(main):198* end
irb(main

元記事を表示

オブジェクト指向プログラミング関連の用語

# クラス
>クラスは一種のデータ型です。`「オブジェクトの設計図」`とか`「オブジェクトの雛形」`と呼ばれたりすることもあります。`Rubyではオブジェクトは必ず何らかのクラスに属しています`。クラスが同じであれば、保持している属性(データ項目)や使えるメソッドは(原則として)同じになります。

* クラスに属する同じメソッドを使うことができる

# オブジェクト、インスタンス、レシーバ
>クラスをもとにして作られたデータの塊をオブジェクトと呼びます。場合によってはオブジェクトではなくインスタンスと呼ぶこともあります。

また、メソッドとの関係を説明する場合には、オブジェクトのことをレシーバと呼ぶこともよくあります。
>“`rb
>user = User.new(“Alice”, Ruby”, 20)
>user.first_name
>“`
>「ここでのfirst_nameメソッドのレシーバはuserです」。

「レシーバ」は「メソッドを呼び出された側」というニュアンスを出したい時によく使われます。

* クラスから生成されるものをオブジェクト、インスタンス、レシー

元記事を表示

クラスを使うプログラミング

“`rb
users = []
=> []
users << {first_name: 'Alice', last_name: 'Ruby', age: 20} => [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}]
users << {first_name: 'Bob', last_name: 'Python', age: 30} => [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}, {:first_name=>”Bob”, :last_name=>”Python”, :age=>30}]
users
=> [{:first_name=>”Alice”, :last_name=>”Ruby”, :age=>20}, {:first_name=>”Bob”, :last_name=>”Python”, :age=>30}]
users.each do |user|
pusts “氏名: #{user[:first_name]} #{user[:last_n

元記事を表示

【Ruby】each_indexメソッドとselectメソッドの性質の違い

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
現在`Array`クラスを勉強中ですが、その中でも`each_index`メソッドと`select`メソッドの意外な違いを発見したので記事にしようと思いました

# `each_index`メソッドとは
まず、`each_index`メソッドについて簡単に説明します。
`each_index`は、配列の各インデックスを順に処理するためのメソッドです。
通常、配列のインデックスに基づいた操作を行う際に便利ですが、重要な点は、新しい配列を作成する機能を持たないということです。

“`ruby
a = [10, 20, 30, 40, 50]
a.each_index do |index|
puts “インデックス: #{index}, 値: #{a[index]}”
end
“`
このコードでは、各インデックスを順に取得し、対応する要素を出力しています。
しかし、この操作は元の配列を参照するだけで、新しい

元記事を表示

[Ruby]二分探索を行うbsearch, bsearch_indexについて学ぶ

# はじめに
最近、bsearch_indexという未知のメソッドの存在をchatGPT経由で知り、調べてみるとSQLのインデックスにも使用される二分探索を行うメソッドであることを知りました。
そもそも二分探索ってなんだ?という状態だったので、併せて記事にして勉強してしまおう〜という経緯で本記事を作成するに至りました。

# 二分探索とは
二分探索(バイナリサーチ)は、ソートされた配列内から特定の要素を効率的に見つけ出すための探索アルゴリズムです。
通常の線形探索では、配列のすべての要素を一つずつ確認していきますが、二分探索では配列を中央で分割し、目的の値が中央より小さいか大きいかで探索範囲を半分に絞っていきます。
このように**半分ずつ選択肢を消去していく**ことで計算量が O(log n) となり、大規模なデータセットでも高速に処理できます。

注意すべきことは、対象の配列が **ソートされている**ことを前提としていることです。

たとえば、次のようなソートされていない配列があるとします。
“`Ruby
array = [8, 3, 5, 1, 9, 6]
“`

ここで

元記事を表示

エラー発生 画像が表示されない(解決済み)

## はじめに
前回同様ペット健康管理アプリの続き。
日記ページに写真とコメントを投稿したいがページに表示してくれない。
JPGファイルの写真を張りつけ各項目を入力しSENDを押すと以下エラーが出る。
“`
NoMethodError in Diaries#index
app/views/diaries/index.html.erb where line #7 raised:

undefined method pet’ for #
Extracted source (around line #7):
5  <%= image_tag diary.image if diary.image.attached? %

元記事を表示

【個人メモ】Ruby on Rails チュートリアル 第10章

Ruby on Railsチュートリアルで学んだ内容を個人的なメモとして簡単にまとめたものです

# 個人メモ
– new_record?メソッド
DBに存在する既存のユーザーかそうでないかを論理値で区別できる
– 受け入れテスト(Acceptance Tests)
ある機能の実装が完了して受け入れ可能な状態になったかどうかを決定するテスト
– before_action
何らかの処理が実行される直前に特定のメソッドを実行する
– フレンドリーフォワーディング
ログイン前のユーザーがアクセスしようとしていたページにログイン後リダイレクトする仕組み
session[:forwarding_url]にGETリクエストが送られたURLを保存
– サンプルユーザー
– Faker gem
架空のユーザー名を作成するGem
– seeds.rb
サンプルのユーザーを記述
rails db:seedで実行
– ページネーション
will_paginateで実現
– render @users
Railsは自動でユーザーのコレクションを列挙し、それぞれのユーザーに対して_us

元記事を表示

OTHERカテゴリの最新記事