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

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

Go:レシーバについて解説(Rubyとの違いも合わせて解説)

# はじめに
レシーバは一般的に利用される関数と違い形式がわかりづらいです。
本記事を読んでいただき、レシーバの理解に役立てていただければ幸いです。

# レシーバとは
レシーバは特定の型に対するメソッドを定義する際に使用されます。
メソッドが操作する主体を指し、メソッドがどの型に属するかを定義します。

# レシーバの書き方
“`go
package main

import “fmt”

// 1. 型の定義:
// type ~ structは、Rectangle構造体を定義しています。Rectangleは長方形を表します。
type Rectangle struct {
Width, Height int
}

// 2. レシーバを持つメソッドの定義:
// Rectangle構造体に対するAreaメソッドを定義しています。これは長方形の面積を計算します。
func (r Rectangle) Area() int {
return r.Width * r.Height
}

func main() {
// 3. Rectangle構造体のインスタンスを作成

元記事を表示

【Ruby】n 人を m 班に分ける

# お題

長さ `n` の配列があるとする。
配列の要素は,まあ何でもいいんだけど,人を表しているとする。
簡単のため,

“`rb
persons = [“Alice”, “Bob”, “Carol”, “Dan”, “Emily”, “Finn”]
“`

としよう。

これを**均等に** `m` 個に分割したいとする。要する班わけですな。

さきほどの `persons` を 3 班に分けるなら,たとえば

“`rb
[
[“Alice”, “Bob”],
[“Carol”, “Dan”],
[“Emily”, “Finn”]
]
“`

みたいな二重配列が欲しいわけだ。

一般には `n` が `m` で割り切れるとは限らないので,班によって人数が異なりうる,ということに注意しよう。
その場合でも,なるべく人数が揃うようにしたい。

# 班の最大人数は ceil(n/m)

なるべく人数が均等になるようにするなら,班の最大人数は

“`math
\left\lceil \frac nm \right\rceil
“`

となる。($\lceil\h

元記事を表示

初めてのRspecで学んだこと

課題で出てきて、初めて取り組んだRspec!
色々なポイントを学んだので備忘録として残しておく。
初学者なので、間違ってる点などあればご指摘下さい。

“`
ruby 3.2.2
rails 6.1.7.6
“`
作成しているアプリはタスク管理アプリ

## SystemSpecの基本
### Factoryを使用したテスト
Factoryとは、railsでテストをする時用のテストデータを作成してくれるテンプレートのこと。
factory_bot_railsというgemをインストールすることで使用できるようになる。
(Factoryを使用する手順(インストール方法など)は今回は省略。)
今回のタスク管理アプリで、「一覧画面に遷移した場合」→「作成済みのタスク一覧が表示される」というテストコードを書く際、Factoryを使用した。

“`spec/factories/task_spec.rb
FactoryBot.define do
factory :task do
name { ‘パパ’ }
content { ‘日曜日歯医者’ }
end
end
“`

元記事を表示

【OpenAI】RailsでChat GPTを導入しよう

## はじめに
どうもこんにちはもきお([@mokio_50](https://twitter.com/mokio_50))です。突然ですが皆さんはChat GPTは好きですか? 自分は大好きです。

どれほど開発の手助けになってきたことか。そんなChat GPTを会社のシステムとAPI連携することになりました。その機能開発を担当したので今回はRailsでChatGPTのAPI連携する流れを記事にしたいと思います。

## 目次
1. APIキーの発行
2. 今回の実装イメージ
3. 実装
4. 検証

## 1. APIキーの発行
外部APIとの連携を行うためにはAPIキーが必要になります。以下の記事が参考になりました。

【画像付き】OpenAI(ChatGPT)のAPIキー取得手順

## 2. 実装イメージ
通常の外部API連携だと例えば法人番号を取得できるAPIと連携するとしましょう。その場合法人番号が取得できるリクエストを作成し、返ってきたレスポンスに対して整形し表示なりデータベースに保存するなりする流れになるかなと思います。

今回はChat機能

元記事を表示

素因数分解をするrubyスクリプト

素因数分解をするrubyスクリプトです。
`chmod +x factor.ruby`
`./factor.ruby `
として動かしてください。

“`factor.ruby
#!/usr/bin/ruby
def primefactorization(n)
if n==0 || n==1
return []
end
i=2
f=[]
while n!=1 do
if n%i==0
f+=[i]
n/=i
else
i=i+1
end
end
f
end

n=ARGV[0].to_i
f=primefactorization(n)
print n,”:”,f,”\n”
“`

元記事を表示

ebay出品時のコンディション設定について

## コンディションについて
コンディションとはヤフオクで言う「新品」「中古」「可」など商品の状態を指すものであり、
eBayへ出品を行う際、一部のカテゴリを除き指定が必須となっています。

じゃあ指定すればいいだけの話じゃん。となりそうですが実はeBayのコンディションは
ヤフオクのようにどの商品でも共通しているわけではなくカテゴリによって
選択できるコンディションが異なっています。

例えば下表の赤枠は食品ですが、こちらは「New」しか選択できないのに対し
青枠のカメラ等は非常に多くのコンディションが選択できます。
![スクリーンショット 2023-11-26 0.02.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083940/5d56ae5e-2d5a-a19b-1b28-d4ca73845e65.png)
_[eBayドキュメント](https://developer.ebay.com/devzone/finding/callref/enums/conditionidlist.ht

元記事を表示

Tinker Board S R2.0 にRuby 3.2を入れるまでのメモ

## apt-get update

“`
$ sudo apt-get update
Get:1 http://ftp.jp.debian.org/debian buster InRelease [122 kB]
Get:2 http://ftp.jp.debian.org/debian buster-updates InRelease [56.6 kB]
Get:3 http://ftp.jp.debian.org/debian buster-backports InRelease [51.4 kB]
Get:4 http://security.debian.org buster/updates InRelease [34.8 kB]
Get:5 http://security.debian.org buster/updates/main armhf Packages [565 kB]
Get:6 http://security.debian.org buster/updates/main Translation-en [309 kB]
Get:7 http://security

元記事を表示

Ruby Gold 3.1を受けた感想。出題傾向/対策まとめ(2023年11月)

### はじめに
2023年11月にRuby技術者認定試験Goldを受験しました。
結果は96点でした。

test

ある程度余裕をもって合格することができたので、
受験に向けて実施したことと、対策としてまとめていた点を受験者向けに公開することにしました。

念入りに対策して臨んだこともあり、試験で解答に迷う問題はありませんでした。
私のように余裕を持って合格したい方は、こちらの記事を参考にしていただければと思います。

### 受験に向けて実施したこと
#### 勉強期間
Silver合格後、1ヶ月間(70H)ほど勉強しました。
– 10月28日 Ruby技術者認定試験 Silver 受験
– 11月23日 Ruby技術者認定試験 Gold 受験

#### 参考にしたサイトや、使用した教材
– [Rex](

元記事を表示

エラトステネスの篩で素数を出力するRubyスクリプト

エラトステネスの篩で素数を出力するRubyスクリプトです。

`chmod +x sieve.ruby`して、
`./sieve.ruby 1000` として実行して下さい。

“`sieve.ruby
#!/usr/bin/ruby

def sieve(n)
tab=(2..n).to_a
l=[]
while l.push(tab.shift).last do
tab.reject!{ |x| x%l.last==0 }
end
l[0..-2]
end

primes=sieve(ARGV[0].to_i)
p primes, primes.length
“`

実行結果

“`
$ ./sieve.ruby 1000
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167

元記事を表示

bcryptGemを用いたパスワードのハッシュ管理

# bcryptGemを用いたパスワードのハッシュ管理

Webアプリケーションのセキュリティを確保する上で、パスワードの安全な管理は重要な役割を果たします。`bcrypt` Gemを使用することで、Railsアプリケーションにおいて、パスワードを安全にハッシュ化し、管理することが可能です。この記事では、`bcrypt` Gemを使用したパスワードのハッシュ化と認証プロセスについて詳しく解説します。

## bcryptGemとは

`bcrypt` Gemは、パスワードのセキュリティを向上させるために使用されるRubyのライブラリです。このGemは、パスワードをハッシュ化することで、データベースに平文のパスワードを保存するリスクを回避します。

### パスワードのハッシュ化

– ユーザーがパスワードを設定すると、`bcrypt` Gemはそのパスワードをハッシュ化します。これにより、実際のパスワードとは異なる、独特な文字列が生成されます。

## has_secure_passwordの利用

Ruby on Railsでは`has_secure_password`メソッドを使用

元記事を表示

DeviseGemを使わないログイン機能の実装方法

# DeviseGemを使わないログイン機能の実装方法

Webアプリケーションにおいて、ユーザー認証機能はセキュリティとユーザーエクスペリエンスを確保するために不可欠です。しかし、すべてのプロジェクトでDeviseGemなどの認証フレームワークを使用するわけではありません。ここでは、DeviseGemを使わない基本的なログイン機能の実装方法を解説します。

## サインインとログインの基本的な仕組み

### セッションの利用

– ユーザーがログインすると、そのユーザーのIDがセッション変数に保存されます(`session[:user_id] = @user.id`)。
– ブラウザはこのセッション情報を受け取り、以降のリクエストにセッションIDを含めてサーバーに送信します。
– サーバー側はセッションIDを確認し、それに基づいてユーザーがログイン済みであるかどうかを判断します。
– ユーザーログアウトして際は、ユーザーのIDをセッションから剥奪します(`session[:user_id] = nil`)。

### カレントユーザーの設定

– セッションに保存されているユーザー

元記事を表示

【ActiveRecord】find・find_by・whereの違いと主要メソッド

# 【ActiveRecord】find・find_by・whereの違いと主要メソッド

Ruby on Railsの強力な機能の一つであるActiveRecordは、データベースの操作を簡単かつ効率的にするORM(Object-Relational Mapping)システムです。この記事では、ActiveRecordの基本的な使い方、特に`find`、`find_by`、`where`メソッドの違いに注目し、New、Create、Update、Delete、Saveといった主要メソッドの概要を解説します。

## ActiveRecordの概要

ActiveRecordは、Ruby on RailsのMVCモデルの中でモデル層を担当し、データベースとの間でデータをやり取りする役割を果たします。SQLを直接書く代わりに、Rubyのメソッドを使用してデータベースを操作することができます。これにより、コードの可読性が向上し、データベース操作が容易になります。

## find・find_by・whereの違い

### findメソッド

`find`メソッドは主にIDに基づいてレコー

元記事を表示

オブジェクト指向の再利用部品群の概要

## はじめに
オブジェクト指向がもたらした再利用部品群の、
クラスライブラリやフレームワークについて理解する。

## クラスライブラリ
 汎用的な機能を持つクラスを集めたもの。

 クラスライブラリには2種類あり、
 プログラミング言語に標準で付属するものと、サードパーティ製のものである。

### 1. プログラミング言語に標準で付属するもの
 Rubyなどの言語は、
 言語仕様を最小に抑え必要な機能をライブラリとして提供している。

:::note info
利点:
・文法や構文がシンプルになることで、言語学習や理解が容易になる。
・新機能をライブラリで実装するため、言語仕様のバージョンアップが必要ない。
:::

#### 言語標準クラスライブラリは継承構造
 言語標準のクラスライブラリは継承構造になっており、
 最上位の唯一のクラス(基底クラス)が存在する。

:::note info
基底クラスは言語により名称は異なる。
例えば、JavaではObject、Pythonではobject、RubyではBasicObjectである。
:::

 基底クラスには、

元記事を表示

Rubyでgets.chompについて

入力されたコメントを出力し、「終了」が入力されたら「終了します」と出力して終わるプログラムを作成します。

「終了」入力されるまで繰り返すので
“`
while true
end
“`
を使って繰り返して
“`
break
“`
で抜ければいいので
“`
while true
comment = gets
if comment != “終了”
puts “あなたのコメント: #{comment}”
else
puts “終了します”
break
end
end
“`
と記述しました。

しかし

#### 「終了」を入力したのに止まりません💦

そこで、`gets`の後ろに`.chomp`を追記して
“`
while true
comment = gets.chomp
if comment != “終了”
puts “あなたのコメント: #{comment}”
else
puts “終了します”
break
end
end
“`
と変更すると

#### 無事「終了」で終わることができま

元記事を表示

Arrayオブジェクトの基礎

## `Array`オブジェクトの基本的な使い方
配列とも呼ばれ、要素を順番に並べて保持できるオブジェクトです。
#### [Array](https://docs.ruby-lang.org/ja/latest/class/Array.html)の基本的な使い方は以下の通りです。

>array = [1, 2, ”aaa”, 4]
(ここで言うarrayはただの変数です。arrayじゃなくてdoraemonでも何でもOKです。)

### 実際に活用してみよう!
#### Arrayの中のひとつを参照したいとき
“`
array = [“nobita”, ”sizuka”, ”suneo”, ”gian”]
puts array[gets.to_i]
“`
“`
#実行結果
2
suneo
“`

#### 要素を末尾に追加
>Arrayオブジェクト << "要素" ``` array = ["nobita", "sizuka", "suneo", "gian"] p array << gets.chomp ``` ``` #実行結果 doraemo

元記事を表示

【minitest】 request.refererを使用する方法

# はじめに
最近`request.referer`という便利なものがあることを知り、使用する機会がありました。
ですが、minitestを書いている際にリファラを用いたアクションのテストがうまくいかず少し苦戦してしまったため、備忘録を兼ねてここに残しておこうと思います。

# そもそもrequest.refererってなに?
リクエストヘッダーが持っている情報の一つであり、遷移前のURLを取得することができます。

そのため、`request.referer`を活用することで、
– どのページからの流入なのかアクセス解析ができる
– 遷移元のURLに戻りたい時にリダイレクト先として使用できる

といったメリットがあります。

今回は後者のように、`request.referer`をリダイレクト先として使用した時の、minitestの書き方について考えます。

# minitestでのrequest.referer
ここでは`request.referer`を使用して、遷移元のURLに再度リダイレクトするようなアクションのテストを作成することを考えます。

“`rb
# get

元記事を表示

【Rails】ポリモーフィックが便利〜

どうもこんにちは。

今回はポリモーフィックについてまとめます。

# ポリモーフィックってなんぞや?

ポリモーフィックとは、複数のモデル同士の関連付けの考え方です。

この考え方は、異なるモデルを単一の関連で扱う機能です。

例えば、以下のようにテーブルが存在しているとします。

commentsテーブル
| カラム名 | 型 | 値1 | 値2 | 値3 |
| — | — | — | — | — |
| id | integer | 1 | 2 | 3 |
| comment | text | ワンちゃんかわいい!! | よろしくお願いします。 | この時期寒くね? |
| article_id | integer | null | 1 | null |
| photo_id | integer | 2 | null | null |
| tweet_id | integer | null | null | 1 |

articlesテーブル
| カラム名 | 型 | 値1 | 値2 |
| — | — | — | — |
| id | in

元記事を表示

【Rails】rails db: から始まるコマンドまとめ

どうもこんにちは。

今回はRails開発で使う`rails db:`から始まるコマンドをまとめてみました。

# データベース作成

以下のコマンドでアプリケーションで使用するためのデータベースを作成します。

“`
$ rails db:create
“`

# データベース削除

以下のコマンドでアプリケーションで使用していたデータベースを削除します。(データやテーブル、カラムなどが全て消えます。)

“`
$ rails db:drop
“`

# データベースを最新にする

以下のコマンドでデータベーススキーマの状態を最新の状態にします。

“`
$ rails db:migrate
“`

マイグレーションファイルは以下のコマンドで生成します。

“`
rails g migration AddAgeToUserModel
“`

生成されるマイグレーションファイルは以下のようになります。

“`ruby
class AddAgeToUserModel < ActiveRecord::Migration[6.0] def change

元記事を表示

【Rails】同じグループのアクションのルーティングをネストと非ネストに分ける

# はじめに
オリアプに関して、実装時に考えていたことを忘れないように頭の整理目的で書き残したいと思います。
実装途中の話を公開しますので、見た人がわかるような文章構成になっていない可能性があります(全部語ると長くなり、本来のメイン目的である頭の整理に沿わないため)。
結論だけ知りたい方は「解決方法」だけ見ればOKです。
また、必ずしも時系列ではないです。

# 自分のこと
先日プログラミングスクールを卒業して現在転職活動中です。
プログラミング未経験の状態からプログラミングスクールに通い始めました。
転職活動と同時並行でオリジナルアプリの開発をしています。

# オリジナルアプリについて
マンション管理アプリを作成しています。
メイン機能としては分譲マンションの管理会社が社内で使用する(想定の)業務アプリです。
サブ機能として、マンション住民も一部の機能にアクセスできるようにしています。
## アプリのコンセプト
これを知らないと、この人は何をそんなにこねくり回しているんだとなりそうなので、このアプリのポイントを2つ挙げます。
### ・複数のユーザーモデルが存在する

元記事を表示

【Rails】Renderにデプロイしたらビルドエラーが起こった

# 概要
Railsチュートリアルの第7章を進めていた時、
TLSと本番環境用の設定をRenderにデプロイしたときにビルドエラーが発生しました。

“`
ActiveRecord::ConnectionNotEstablished: could not translate host name “****” to address: Name or service not known

Caused by:
PG::ConnectionBad: could not translate host name “****” to address: Name or service not known

Tasks: TOP => db:migrate
(See full trace by running task with –trace)
==> Build failed 😞
“`

# 結論(解決策)
PostgreSQLのリージョンをシンガポールからオレゴンに変更した

# 試したこと
## PostgreSQLのVersionを15に変更する
Railsチュートリアルが更新された

元記事を表示

OTHERカテゴリの最新記事