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

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

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 | 主キー、オートインクリメント |

元記事を表示

【Rails】Rails APIでログイン、ログアウト

前回、Rails APIでUser周りの実装をしました。
[【Rails】JWTを用いたUser周りのAPI実装](https://qiita.com/kay903347/items/3847a5cf4642e122128c)
その記事のログイン、ログアウトで気になったことをまとめます。
先にmodel、controllerを貼り付けておきます。
“`ruby:models/usr.rb
class User < ApplicationRecord before_save { self.email = email.downcase } validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAI

元記事を表示

【Rails】Rails APIで新規登録、退会処理

前回、Rails APIでUser周りの実装をしました。
[【Rails】JWTを用いたUser周りのAPI実装](https://qiita.com/kay903347/items/3847a5cf4642e122128c)
その記事の新規登録、退会処理で気になったことをまとめます。
先にmodel、controllerを貼り付けておきます。
“`ruby:models/usr.rb
class User < ApplicationRecord before_save { self.email = email.downcase } validates :name, presence: true, length: { maximum: 50 } VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i validates :email, presence: true, length: { maximum: 255 }, format: { with: VALID_EMAIL

元記事を表示

【Ruby】irbとbinding.irbとは

# はじめに
こんにちは!現在アメリカの大学で語学を学びながら、ソフトウェアエンジニアを目指して独学しているものです。
本日は、Rubyでデバッグに使われる `irb` と `binding.irb` について詳しく解説していきます。実務で使われる機会が多いかはわかりませんが、`irb`は教材でよく登場する基本的なツールですので、使い方を知っておいて損はありません。

# `irb`とは
`irb`(Interactive Ruby)は、Rubyの対話型シェルです。
対話型シェルとは、ターミナル(黒い画面)に入力された内容をすぐに実行し、結果を表示する環境のことです。
`irb`ではRubyコードを1行ずつ実行し、即座に結果を確認できるため、コードの学習や動作確認、デバッグにとても役立ちます。

通常のプログラム実行では、コードエディタ(例:`Visual Studio Code`など)でスクリプトを書き、コマンドラインでファイルを指定して実行しますが、`irb`ではターミナル上で直接Rubyコードを入力し、結果をその場で確認できます。

### `irb`の基本的な使い方
ターミナル

元記事を表示

Tips: ファイルの作成日時をファイル名のソート順と同じ順序になるように変換するRubyスクリプト

## この記事は何
タイトルの通り、ディレクトリ内のファイルの作成日時をファイル名のソート順と同じ順序になるように変換するRubyスクリプトを作成したので記事として残しておきます。

## スクリプト
以下の通りです。

“`rb
require ‘fileutils’

directory = ‘/path/to/directory’

files = Dir.glob(File.join(directory, ‘*’)).sort

base_time = Time.now

files.each_with_index do |file, index|
new_time = base_time + (index * 600) # 600 seconds = 10 minutes
File.utime(new_time, new_time, file)
end

puts “Successfully updated creation dates for files in #{directory}”
“`

元記事を表示

ffmpegで複数のVOBファイルを一つのmp4ファイルに変換するRubyスクリプトを実装する

## この記事は何
最近DVDに保存していた動画ファイルをmp4ファイルとして書き出す必要があったため、
スクリプトを作成しました。
この記事では記録のためスクリプトの実装を残しておきます。

## 環境
– Ruby: v3.2.2
– ffmpeg: v7.1
– マシン: MacBook Air M1, 2020

## 実装したRubyスクリプト
実装したスクリプトは以下の通りです。

“`ruby:eport_dvd.rb
require ‘fileutils’

# Get the output directory from command-line arguments
if ARGV.length != 1
puts “Usage: ruby export_dvd.rb
exit 1
end

# Define the directory containing the VOB files
input_directory = “/path/to/input/directory”

output_directory = “path/to/o

元記事を表示

wc代替rubyスクリプト

### サンプルソース

対象ディレクトリのファイルの行数を合計します。

“`wcl.rb
files = Dir.glob(“target/*.csv”)
count = 0
files.each do |file|
File.foreach(file) {}
count += $.
end
puts count
“`

### 【背景】`wc -l` は、最終行の改行有無を吸収してくれない

ファイルの行数をみるのに`wc -l`を使うことが多いのですが、残念ながら最終行に改行がないと1行扱いしてくれません。

不満はあれどファイルの最後に改行がつくかどうかはケースバイケースです。なんなら標準入力の最後に改行がつくかどうかも怪しいです。

CSVファイルなどは最終行に改行がなくともその後の処理系では問題なく処理されるので、なおさらファイル最後の改行の有無は混在します。

ということで、`wc -l` ではどうにもならないので、別スクリプトを書くしかないということです。

### ソースの解説

“`
files = Dir.glob(“target/*.csv”)

元記事を表示

OTHERカテゴリの最新記事