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

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

【Ruby】エラーハンドリングのまとめ

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日はRubyのエラーハンドリングについてまとめていきたいと思います。

プログラムを書く際、エラーが発生するのは避けられません。
エラーハンドリングを適切に行うことで、プログラムが予期しないクラッシュを回避し、ユーザーに分かりやすいメッセージを表示するなど、より安定したコードが実現できます。
Rubyのエラーハンドリングの基本を具体例を交えながら見ていきましょう。

# エラーハンドリングが必要な理由
Rubyはエラーが発生した際に原因を知らせてくれますが、それでもエラーハンドリングが重要な理由を以下のポイントに分けて解説します。

### 1. エラー発生時のカスタムメッセージの表示やログの記録
`rescue`を使うと、エラーの種類に応じてカスタムメッセージを表示したり、エラー内容をログファイルに保存できます。
特にユーザーが利用するアプリケーションでは、ユーザーに理解しやすいメッセージを表示することで、エラー内容を適切に伝えることができます。
“`ruby
begi

元記事を表示

RailsでURLのidのハッシュ化のやり方完全入門(初心者向け)

# ハッシュ化とは

ハッシュ化とは,ハッシュ化したい文字や数字をハッシュ関数という関数にかけるとハッシュ化された値がかえってくる.そのハッシュ化された値からは元の値を求めることはできないというものである.

# ハッシュ化するメリット
ハッシュ化された値からもとの値を求めることはできないため
セキュリティ対策に効果がある.URLのidはハッシュ化するべきであり,
**できていないととても危険!!!**

# やり方
# ①まずhashidsというパッケージをインストールする.
“Gemfile“にパッケージを記述する.
“`
gem ‘hashids’
“`
上のコードを“Gemfile“に書いく.
次にターミナルでhashidsをインストールする.
“`
bundle install
“`
これでhashidsのインストールは完了である.

# ② ハッシュidの初期化
初期化をすることでセキュリティが向上する.
“application_controller.rb“にハッシュidを初期化するコードを書く.
“”your_salt”“には好きな文字列を入れる

元記事を表示

VsCode / Cursor + Rubocop ( ruby-rubocop-revived ) でRubyファイルの保存が非常に重い

# 問題

ファイルによっては、Rubyファイル保存がすごく重い場合がある。

`.vscode/settings.json` の設定は以下のようにしていた。

“`json
{
“editor.codeActionsOnSave”: {
“source.fixAll”: “explicit”
},
“[ruby]”: {
“editor.defaultFormatter”: “LoranKloeze.ruby-rubocop-revived”,
}
}
“`

# 解決

`editor.codeActionsOnSave` の項目を削除することで解決した。

“`json
{
“[ruby]”: {
“editor.defaultFormatter”: “LoranKloeze.ruby-rubocop-revived”,
}
}
“`

この項目を削除しても、Rubocopによるフォーマットはちゃんとしてくれるようだ。

何がどう干渉していたのかは不明。

# チャットメンバー募集

何か質問、悩み事、相談などあれば

元記事を表示

PHPのパターンマッチで遊んでみた

## はじめに

先日、Ruby の強力なパターンマッチを試して楽しみました。その直後にたまたま久し振りに PHP に触る機会があったので PHP でもパターンマッチができないか調査してみました。

https://qiita.com/mnishiguchi/items/53b55deae8e033562a55

2020 年の PHP 8.0 に[match 式](https://www.php.net/manual/ja/control-structures.match.php)が導入されていました。PHP でもパターンマッチができます!

https://php.watch/versions/8.0

https://php.watch/versions/8.0/match-expression

https://www.php.net/manual/ja/control-structures.match.php

試してみます。

## PHP の`match` 式とは

公式ドキュメントに以下の通り記されています。

> match 式は、値の一致をチェックした結果に基づいて

元記事を表示

collectionとmember 検索機能 【備忘録】

## はじめに
これからオリジナルアプリを作るので、付けたい機能の勉強に記録します。
まずは検索機能を付けたいので`collection`と`member`について復習していきます。

viewファイルは既に作った状態。
searchアクションのルーティングをこれから記述する段階。

“`ruby
collection do
get ‘search’
end
“`
collectionのルーティングは`id`がついていない。
“`
Prefix Verb URI Pattern
search_comments GET /comments/search(.:format) comments#search
“`
これに対してmemberは`id`がつく。
“`ruby
member do
get ‘search’
end
“`
“`
Prefix Verb URI

元記事を表示

【Ruby】シングルクオート、ダブルクオートの使い分け

Rubyでは文字列を作る際に、シングルクオート(’)、またはダブルクオート(”)で囲む方法が存在します。ちらっと調べると、「どちらでも良い」と書かれており、どちらでもいいが一番柔軟かつ困ることだなあと思ったので、調べてみようと思いました。

## 明確に異なる点
### “`\n“` 改行文字など(バックスラッシュ記法)を使用する場合
“`ruby
puts ‘りんご\nゴリラ\nらっぱ’
#=> りんご\nゴリラ\nらっぱ

puts “りんご\nゴリラ\nらっぱ”
#=> りんご
# ゴリラ
# らっぱ
“`
他にも“`\s“` 空白文字や、“`\t“` タブ文字もよく使用するが、シングルクオーテの場合そのまま文字列と見なされてしまう。

### “`#{変数}“` 式展開を使用する場合
“`ruby
name = ‘パンダ’

puts “しりとりの続きは#{name}です”
#=> しりとりの続きはパンダです

puts ‘しりとりの続きは#{name}です’
#=> しりとりの続きは#{name}です

# シングルクオーテを使用したい場合このよ

元記事を表示

RubyとElixirの兄弟船:闘魂で切り拓く技術の旅 〜素のRubyプロジェクトでrails cのようなことをしたい〜

“`elixir
defmodule FightingSpirit do
def shout do
IO.puts “元氣ですかーーーッ!!!”
IO.puts “元氣があればなんでもできる!”
IO.puts “闘魂とは己に打ち克つこと。”
IO.puts “そして闘いを通じて己の魂を磨いていく”
IO.puts “ことだと思います。”
end
end

FightingSpirit.shout()
“`

$\huge{元氣ですかーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います。}$

【Ruby】Random.randとRandom.newの違い

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日は乱数を作成するための`.rand`メソッドと`.new`メソッドの違いについて説明していきたいと思います

# `Random.rand`とは
`Random.rand`は、Rubyの`Random`クラスに定義されているクラスメソッドです。
クラスメソッドなので、インスタンスを作成することなく、Random.randと直接呼び出せます。
このメソッドを使用する場合、Rubyのグローバルな乱数生成器が使われます。
特徴としては以下の通りです
* 手軽に使える
`Random.rand`はどこからでも簡単に呼び出せます。
* グローバルな乱数生成器を使用
プログラム全体で同じグローバル乱数生成器を共有するため、何度も呼び出しても使い回されます。
* 再現性が低い
プログラムの実行ごとに異なる乱数が生成され、再現性が必要な場合には不向きです。

“`ruby
# 0から9までの乱数を生成
puts Random.rand(10)

# 1から6までの乱数を生成(サイコロの

controllerの中の before_action :set_item

## はじめに
今までスルーしてしまっていた中途半端に理解しているコードを、これを機にひとつひとつ深堀していきたいと思います。

“`
lass ItemsController < ApplicationController before_action :authenticate_user!, only: [:edit, :update, :destroy, :new] before_action :set_item, only: [:edit, :update, :show, :destroy]  before_action :move_to_index, only: [:edit, :update, :destroy] ``` 例えばこんな記述があったとする。 ``authenticate_user!``はログインログアウトを分けてくれて、``move_to_index``はトップページに戻してくれて とわかるんだけど、いまいちわからないのが``set_item``。この子はなにをしてくれるんだろう。 ## 解説 ``set_item`` メソッドの役割は、`

【Ruby】singleton_classについて

どうもこんにちは。

今回は`singleton_class`について勉強したので備忘録としてまとめます。

# singleton_class(シングルトンクラス/特異クラス)とは

**singleton_class(シングルトンクラス)** は、Rubyにおける特別なクラスで、特定のオブジェクトに固有のメソッドや変数を定義するために使用されます。

Rubyでは、すべてのオブジェクトが自身のシングルトンクラスを持っており、このクラスを通じてオブジェクトに一時的または特定の機能を追加できます。

# singleton_classの基本的な使い方

`singleton_class`は、オブジェクトのシングルトンクラスを取得するためのメソッドです。このクラスを操作することで、特定のオブジェクトに対するシングルトンメソッドやシングルトン変数を定義できます。

“`rb
object.singleton_class
“`

– `object`: シングルトンクラスを取得したいオブジェクト

“`rb:サンプルコード
obj = Object.new

# シングルトンクラスを取

【Ruby】instance_variable_getメソッドについて

どうもこんにちは。

今回はRubyの`instance_variable_get`メソッドについて、備忘録としてまとめました。

# instance_variable_getメソッドとは

`instance_variable_get`メソッドは、オブジェクトのインスタンス変数の値を取得するためのメソッドです。

Rubyでは通常、インスタンス変数はクラス内で直接アクセスすることはできず、アクセサメソッド(`attr_accessor`、`attr_reader`、`attr_writer`)を通じてアクセスします。

しかし、`instance_variable_get`を使用すると、これらのアクセサメソッドを介さずに直接インスタンス変数にアクセスできます。

# 基本的な構文

“`rb
object.instance_variable_get(:@variable_name)
“`

– `object`: インスタンス変数を持つオブジェクト
– `:@variable_name`: 取得したいインスタンス変数のシンボル。先頭に@を付ける必要があります

# instan

【Ruby】ナンバードパラメータ

どうもこんにちは。

今回は、Ruby Gold ver3から出題範囲になったナンバードパラメータについて勉強したので、備忘録として残します。

今回はメモ程度です。

# ナンバードパラメータとは

ナンバードパラメータとは、`each`や`map`で使用するブロック引数を使用する代わりに使用することでコードをシンプルに書くことができるパラメータです。

# 従来のループ文

“`rb
numbers = [1, 2, 3, 4, 5]
doubled = numbers.map { |number| number * 2 }
puts doubled

# => [2, 4, 6, 8, 10]
“`

# ナンバードパラメータを使用した場合

“`rb
numbers = [1, 2, 3, 4, 5]
doubled = numbers.map { _1 * 2 }
puts doubled

# => [2, 4, 6, 8, 10]
“`

以上

Rubyのパターンマッチで遊んでみた

## はじめに

Ruby でパターンマッチができるようになったと聞いてはいましたが、まだ試したことがありませんでした。

https://qiita.com/jnchito/items/9bb4aa1dcefa00257815

https://qiita.com/jnchito/items/a9c7030cb5697f992cb7

2019 年の Ruby 2.7 の時点ですでに実験的には導入されていたのですね。

https://www.ruby-lang.org/ja/news/2019/12/25/ruby-2-7-0-released/

試してみます。

## パターンマッチとは

公式ドキュメントに以下の通り記されています。

> パターンマッチは、構造化された値に対して、構造をチェックし、マッチした部分をローカル変数に束縛するという、深いマッチを可能にする機能です。
> (『束縛』は、パターンマッチの輸入元である関数型言語の用語で、Ruby では代入と読み替えても問題ありません)

https://docs.ruby-lang.org/ja/latest/doc/s

【Asciidoctor (adoc)】の使い方〜効率的なドキュメント作成術〜

# はじめに
設計書を作成する際のツールとして**Asciidoctor(adoc)** を紹介します。
私もAsciidoctorを設計書作成の際に利用しています。
Asciidoctorはドキュメントの構造化や見た目のカスタマイズが非常に簡単です。

この記事では、Docker を利用して手軽に環境をセットアップし、Asciidoctorの基本的な使い方と設計書作成で役立つ機能、さらにはHTMLやPDFへの変換までを解説します。

# 完成イメージ

![_Users_kumaishuya_projects_asciidoc_project_sample.html (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1129869/e01c10f4-4b7a-f3fc-8870-9ad833a9f2a5.png)

# Asciidoctorとは?
はじめに、「Asciidoctorはなんぞや!」ということで、説明します。
Asciidoctorは、軽量なマークアップ言語である AsciiDoc

【Ruby】素数を求める方法

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
本日は「たのしいRuby 第6版」という教材の中で「素数を判定するメソッドを作成せよ」という練習問題に挑戦してみたのですが、Rubyには他にも素数を求める方法があるのか気になり、記事にしてまとめてみました。

# 素数を求める方法
教材で紹介されていた方法では、素数を判定するメソッドを自分で作ることが求められていましたが、素数を効率よく判定するにはいくつか重要なポイントがあります。
特に次の点を理解すると、素数判定がより効率的に行えるようになります。
* ある自然数$N$が合成数であれば、$N$は$\sqrt{N}$以下の範囲に素因数を少なくとも1つ持つ。

例えば、N = 49の場合、素数かどうかを調べるには7以下の数で割り切れるかを確認すれば十分です(7 x 7 = 49)。

数学が得意な方は知っているかもしれませんが、素数にはこのような特徴があるため、素数を求める方法も工夫できます。
以下に、いくつかの素数判定方法を紹介します
* $\sqrt{N}$の範囲で判定する

エラー Unpermitted parameter:

“`
Unpermitted parameter: :phone_no. Context: { controller: OrdersController,
action: create, request: #,
params: {“authenticity_token”=>”[FILTERED]”, “order_address”=>{“post_no”=>””,
“phone_no”=>”09012345678”}, “controller”=>”orders”, “action”=>”create”, “item_id”=>”24”} }
“`
もろに文章の中で教えてくれているエラーでした。
`phone_no` パラメータが `OrdersController` の `create` アクションで許可されていないことが原因。
現在の `order_params` メソッドで `phone_no` を許可する必要があるよ、と教えてくれています。

解決方法
`order_params`

【Ruby】自分しか使わないタスク管理アプリをRubyだけで作ってみた

どうもこんにちは。

今回は、Rubyの勉強がてら、ターミナルで使用するタスク管理アプリをRubyだけで作ってみました。

:::note warn
RailsのようにHTMLを使用してUIを作成するわけではないです。
ターミナルで使用する簡素なタスク管理アプリです。
:::

# 前提

Rubyがインストールされていることを前提に話を進めます。

# 手順

## 1. 作業ディレクトリ準備

“`sh
mkdir only_ruby_task_app && cd only_ruby_task_app
“`

## 2. rubyファイル生成

“`sh
touch app.rb
“`

## 3. コード記述

今回は、エディタ使いません。ターミナルで完結させます。

“`sh
vi app.rb
“`

以下をコピペします。

“`rb:app.rb
require ‘json’
require ‘colorize’

# タスクデータを定義するクラス
class Task
attr_accessor :id, :title, :completed

de

【Ruby】putsメソッドは内部的にto_sメソッドを呼び出している!?

どうもこんにちは。

今回は、**`puts`メソッドは内部的に`to_s`メソッドを呼び出している**ということに疑問を覚えたので、勉強しました。

# to_sメソッドとは

`to_s`メソッドは、数値などのオブジェクトを文字列に変換するメソッドです。

“`rb
num = 123
puts num.to_s #=> “123”
“`

# putsメソッドがto_sメソッドを呼び出す仕組み

`puts`メソッドは、引数として渡されたオブジェクトを出力する際に、そのオブジェクトの`to_s`メソッドを自動的に呼び出して文字列に変換します。

これは、Rubyのメソッド呼び出しの内部動作によるもので、ユーザーが明示的に`to_s`を呼び出さなくても、`puts`が自動的に処理してくれます。

[Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/Kernel/m/puts.html)には、以下のように記載されています。

“`txt
引数と改行を順番に 標準出力 $stdout に出力します。

【Ruby】Objectクラスのdupメソッドとcloneメソッドについて勉強しました。

どうもこんにちは。

Objectクラスのdupメソッドとcloneメソッドについて勉強したので、備忘録として残します。

# dupメソッドとcloneメソッド

これらはどちらもオブジェクトのコピーを作成するためのメソッドです。
しかし、動作自体には微妙な違いがあります。実際、Ruby Goldの試験では違いを問う問題が出題されます。

ちなみに、Rubyに`copy`メソッドは存在しません。

# dupメソッド

オブジェクトの浅いコピー(シャローコピー)を作成します。
主にオブジェクトの状態(インスタンス変数など)をコピーしますが、特定の属性(例えばフリーズ状態やシングルトンメソッドなど)はコピーされません。

# cloneメソッド

`dup`と同様にオブジェクトの浅いコピーを作成しますが、追加で以下の要素もコピーします。

– フリーズ状態(`frozen?`)
– テインティング状態(`tainted?`)
– テインティングについては、Ruby2.7以降では廃止されているようですので、ここでの解説は省きます
– シングルトンメソッドや特異メソッド

| 特徴

【Ruby】ヒアドキュメントについて勉強しました

どうもこんにちは。

今回は、Rubyのヒアドキュメントについて勉強をしたので、備忘録として残します。

# ヒアドキュメントとは

ヒアドキュメントは、複数行にわたる文字列を簡単に扱うための構文です。

# 基本的な構文

“`rb
文字列 = <<識別子 ここに複数行のテキストを記述します。 任意の行数だけ続けられます。 識別子 ``` ヒアドキュメントで必要とするのは、**識別子**です。識別子は、どんな単語を使用しても大丈夫です。ただし、最初と最後の識別子が同じである必要があります。 ```rb:サンプルコード message = < こんにちは!
#=> これはヒアドキュメントの例です。
#=> 複数行にわたるテキストを簡単に扱えます。
“`

# 変数展開や改行コードの扱い

変数展開や改行コードを使用する場合と使用しない場合で、使い分けが可能です。

## 使用する場合

まず、デフォルトの構文では変数展開や改行