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

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

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}$)以下の範囲に存在する

例えば、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 = < こんにちは!
#=> これはヒアドキュメントの例です。
#=> 複数行にわたるテキストを簡単に扱えます。
“`

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

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

## 使用する場合

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

【Rails】furimaアプリ 商品購入機能 #1

# 実装概要
商品をクレジットカード決済で購入する機能を実装から単体テストまで行う

### 事前準備 Turbo機能をオフにする
“`ruby:views/items/show.html.erb
# 中略

~data: { turbo: false }~%>

# 中略
“`
PAY.JPを使用するためには、Turboの機能をオフにする必要があるため上記コードを追記

### Purchasesコントローラーの作成
ターミナル
“`
% rails g controller purchases
“`

### indexアクションの定義
“`ruby:app/controllers/purchases_controller.rb
def index
end
“`

### ルーティングの設定
“`ruby:config/routes.rb
# 中略
resources :purchases, only: :index
“`

### 購入、送付先住所についてのモデルとテーブルの作成
ターミナル
“`
% rails g model purchese
% rails

【Ruby】Rubyのproductメソッドの処理について理解したい

### 本記事の内容
Rubyのメソッド`Array#product`について

Ruby リファレンスマニュアル
https://docs.ruby-lang.org/ja/latest/method/Array/i/product.html

### 俺にはわからない…ずっとそうだ…
Ruby Silverを受けようと思っているのですが、早速下記となるのがわからなかったので自分の理解を進めるのを含めて投稿します。

“`
arr = [1,2].product([3,4])
p arr
=> [[1, 3], [1, 4], [2, 3], [2, 4]]
“`
[Rex](https://rex.libertyfish.co.jp/)で対策少しずつがんばろうと思ってます💪

### productメソッドについて
[Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/method/Array/i/product.html)に記載の`product`メソッドについての説明は次のとおり。
> レシーバの配列と引数で

【Ruby】クラス変数、クラスインスタンス変数、インスタンス変数の違い

# はじめに
クラス変数、クラスインスタンス変数、インスタンス変数の違いについて「なんとなく」理解しているようで、はっきりと説明するのが難しい。この記事では、それぞれの変数の特徴と使い分けについて、身近な例に置き換えて解説したい。

# 説明
Rubyには「クラス変数」「クラスインスタンス変数」「インスタンス変数」の3種類の変数がある。

今回は、これらの違いを「小学校の名前」「小学校の予算」「生徒の情報」に例えて説明していく。

## クラス変数(小学校の名前)
クラス変数の特徴は、以下の通り。

– クラス全体で値が共有される。
– クラス内のメソッドやインスタンスメソッドからアクセスできる。
– サブクラスでも共有される。

例えば、小学校の名前は、すべての生徒に共通して知られている情報である。クラス変数を用いることで、この「小学校の名前」をクラス全体で共有できる。

“`ruby
class 小学校
@@名前 = “さくら小学校” # クラス変数で小学校の名前を設定

def 名前
@@名前
 end
end

class 生徒 < 小学校 d

【Ruby】論理演算子

# はじめに
こんにちは!アメリカの大学で語学を学びながら、独学でソフトウェアエンジニアを目指している者です。
今回は、演算子の中でも論理演算子について触れたいと思います。
これまで学習してきた中でなんとなく使ってきましたが、しっかり理解できていなかった部分があったので、まとめてみました。

# 論理演算子
演算子は、`&` や `+=` のように、値の計算や操作に使われる記号や機能のことです。
今回はその中でも、論理演算子 `||` と `&&` に注目して解説していきます。
この2つの演算子は条件式で使われ、次のような特徴があります

* 左の式から順に評価される
* 論理式の真偽が決定すると、残りの式は評価されない
* 最後に評価された式の値が論理式の全体の値になる

### `||`を論理演算子として使う場合
まずは`||`についてみていきます。
“`ruby
language || “Ruby”
“`
`||` は、どちらか一方が真であればその値が返ります。
ここで、`language` が真であれば、次の `”Ruby”` は評価されません。
`language` が返

【Ruby on Rails × TMDB API × Mecab × AWS】ユニークなあらすじから映画を発掘するポートフォリオPlotForgeを作成しました!

### はじめに
初めまして、はしと申します。
バックエンドエンジニアを志して転職活動中です。

この度、ポートフォリオ「[PlotForge](https://plotforge.net/users/sign_in)」をリリースしましたので、投稿いたします!

https://plotforge.net

映画が好きなので、映画の発掘ができるアプリを作成してみたいという思いから作成しました。

#### きっかけは??
YouTubeの映画紹介ショートです。
「⚪︎⚪︎な映画挙げてけw」のようなショートで知らなかった映画のことを
どんどん知ることができ実際に鑑賞すると面白かったので、
映画を知る機会を広げるアプリを作りたいと思いました。

#### どんなアプリ?
ランダムに呼び出された映画からユニークなあらすじが作成することができます。
![plotforge_introduction_qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606327/7136a927-1df4-6afb-82

【Rails】Rails APIを用いたグループ機能実装:グループ作成とユーザーの入退会処理

Rails APIでUser周りの実装をしたので、グループの作成とユーザーの入退会処理をしていきます。
[【Rails】JWTを用いたUser周りのAPI実装](https://qiita.com/kay903347/items/3847a5cf4642e122128c)
## Groupテーブル
| カラム名 | データ型 | 制約 | 説明 |
| — | — | — | — |
| id | integer | 主キー、オートインクリメント | グループの一意な識別子 |
| name | string | null: false | グループ名 |
| created_at | datetime | null: false | レコード作成日時 |
| updated_at | datetime | null: false | レコード更新日時 |
## GroupMembershipテーブル
| カラム名 | データ型 | 制約 | 説明 |
| — | — | — | — |
| id | integer | 主キー、オートインクリメント |