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

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

Gem追加したときの「まずはinstallコマンド実行してね」を見ていく

# 概要
Gemのファーストコミットをするタイミングがあり、既存のGemでは「初期設定コマンド実行してね。みたいなのがあるけれどどうやってやるのか」と見ていて、少しまとめたので書いておきます

ほとんどが [Railsガイド](https://railsguides.jp/v7.1/generators.html) に書いてある内容なため、初心者向けの記事となっています :pray:

## generate initializer
> 「初期設定コマンド実行してね。みたいなのがあるけれど…
これはアプリケーションにGemを追加したときに初期設定をアプリケーション側に記載する場合、Gem側からジェネレーターが提供されていることがあります

ここでは認証のgemとして使用する `devise` を例に取って確認してみます

### deviseの例
deviseのREADMEに書いてある通り下記のコマンドでdeviseの初期設定を行うと`config/initializers`配下に`devise.rb`が作成されます

“`sh
$ rails generate devise:i

元記事を表示

ブラウザでやり取りできるようにしてみた。

![Animation_xampp_on2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/9c1feb9c-b853-c831-814d-665762e559a8.gif)
備忘録 ホームページにも忘れずに書いておくこと。
やったことは、インストールと立ち上げ。
apache のconfigに書き足す事。
textを作り、書き込んで保存すること。
アドレスは忘れないようにメモをしておくこと。
Apach2_4 php8apach2_4.dllのためXampp3を導入。ruby,pythonはapache2.2でも動く。
サーバーアドレスは127.0.0.1 ネームはlocalhost メールアドレスは内緒や。
後は、出たとこ勝負。xamppは警告出すから、フォルダーを作っておく。他もアドレスのため独立させた「-」はプログラムでまいなすに間違わない様に「_(アンダースコア)」わからんことはcopilotiに聞く。
VSCoodo,terapad,Screen To Gif,Visual S

元記事を表示

Workatoでコネクタ開発に挑戦!ExcelVBA上がりがRubyに苦労した話

## はじめに

Workatoでは、標準で多くのコネクタが用意されています。コネクタはSaaS製品の認証やトリガー/アクションを含んでいるため、Workatoレシピ開発者はコードを書く必要がほとんどありません。

しかし、SaaS製品によってはコネクタが存在しないことがあります。その場合、Workato内でコネクタを開発する必要があります。
ExcelVBA上がりの私は、コネクタをゼロから開発することに挑戦してみました。

## Workatoのカスタム コネクタ概要
コネクタ開発を始める前に、Workato公式では以下のように紹介されています。
>始める前に…
Workato には他にも多数の機能があり、ユニバーサル HTTP コネクタやカスタムアクションなど、統合のニーズがそれほど複雑でない場合は、お客様が望むものを実現するのに役立つ可能性があります。
>カスタム コネクタが必要であると判断した場合は、開発者ポータル(新しいウィンドウを開く)をクリックして、探しているアプリケーションにカスタム コネクタを提供した人がいるかどうかを確認します。

参照元:[Workatoドキュ

元記事を表示

[Ruby on Rails]既存のテーブルにカラムを追加するためのマイグレーションにえらい苦戦した話

## 経緯
初任教育研修で、既存のタスク管理アプリに機能を追加する際に苦戦したときのメモです。
タスク管理アプリに、タスクの期限機能を追加開発する際に、既存のtasksテーブルにduedateカラムを追加しようとしていました。

## db:migrateコマンドの実行
まずはTasksテーブルにduedateカラムを追加するためのマイグレーションファイルを作成するためにgenarateコマンドを実行します。

“`terminal
rails g migration AddDueDateToTasks duedate:datetime
“`

これで自動的に以下のようなマイグレーションファイルができました
“`Ruby
class AddDueDateToTasks < ActiveRecord::Migration[7.1] def change add_column :tasks, :duedate, :datetime end end ``` ## マイグレーションファイルの編集の際に陥った勘違い まず、自分が勘違いして書いた間違ったコードが

元記事を表示

[Ruby]配列やハッシュの展開

配列はオブジェクトの前に`*`を、ハッシュはオブジェクトの前に`**`を付けることで「展開」することができます。「展開」が何を意味しているかは、[マージ](#マージ)や[引数](#引数)の欄を参照してイメージを掴んでください。

## マージ

`merge`メソッドや`reverse_merge`メソッドを使ってもハッシュをマージできますが、`**`で展開すると簡潔に書けます。

“`ruby
pp ([1, *[2, 3]])
# => [1, 2, 3]

pp ({ hoge: 1, **{ fuga: 2 } })
# => { hoge: 1, fuga: 2 }
“`

ハッシュのキーが重複している場合は、後に指定した値が優先されます。ただし、展開したハッシュの値が展開先のハッシュの値を上書きする場合は、警告が出ます。

“`ruby
pp ({ hoge: 1, **{ hoge: 2 } })
# warning: key :hoge is duplicated and overwritten on line 1
# => { hoge: 2 }

pp ({

元記事を表示

[Ruby]クラスメソッドと定数をprivateにする

インスタンスメソッドをprivateにするには、class定義の中にprivate領域を作って、その中で定義します。

“`ruby
class C
private

def func
“called”
end
end

# private method `func’ called
# pp C.new.func
“`

特異メソッドや定数については、この方法が使えなかったため、記事としてまとめておきます。

## クラス特異メソッド

### `private_class_method`

`private_class_method`メソッドを使ってprivateにします。

“`ruby
class C
def self.get_const
“const”
end

private_class_method :get_const
end

# private method `get_const’ called for C:Class
# pp C.get_const
“`

### 特異クラス

元記事を表示

【Rails】modelでメソッドにselfをつける時とつけないときの違い

どうもこんにちは。

今回はRailsでモデルファイルで定義したメソッドに`self`をつける時とつけない時の違いについて説明します。(おまけでバリデーションメソッドについても説明しています。)

# モデルにメソッドを定義する理由

## 1. 全体で利用可能

モデルに定義したメソッドはアプリケーション全体で利用可能となるメソッドです。そのため、コントローラやビュー、他のモデルの中でも使用することができます。

## 2. 処理の共通化

アプリケーション内で何度も同じ処理をする必要がある場合があります。その時に**同じ処理の共通化**を目的としてモデルにメソッドに定義し、同じ処理をしたい箇所でメソッドを呼び出すことでコードが簡略化できます。

## 3. バリデーションを定義

本来は、`validates`メソッドを使用してカラムに対して「空白禁止」や「文字数制限」を定義します。大体のバリデーションは1行で完結できます。しかし、二つのカラムにデータが入っていない場合のバリデーションを定義するときには、俗にいう「バリデーションメソッド」を定義します。

# selfを付けない場合

元記事を表示

BUILD FAILED (macOS 13.5 on arm64 using ruby-build 20231114)

# 事象
– M2 Macで `rbenv install 3.2.2` が通らない

## 解決策
– .bashrcにhomebrewのpathを明示する
“`bash
export PATH=”/opt/homebrew/bin:$PATH”
“`
– .bashrcでRUBY_CONFIGURE_OPTSを指定する
“`bash
export RUBY_CONFIGURE_OPTS=”–with-openssl-dir=$(brew –prefix openssl@1.1)”
“`

## 原因と流れ
### 原因1(homebrewのpath)
.bashrcの記載を変えた際に、homebrewのpathを消去してしまっていた

“`bash
$ rbenv install 3.2.2
ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.2.2.tar.gz…
-> curl -q -fL -o ruby-3.2.2.tar.gz https://cache.ruby-l

元記事を表示

戻り値(返り値)とはどういう概念か掘り下げて考えた

## 自己紹介
はじめまして、はると申します。完全異業種からのエンジニア転職を目指して、スクールに通いながら学習をしています。

## 概要
プログラミングにおける「戻り値」について、Rubyの例を用いて説明します。

## 注意
私は前職が完全異業種であり、英語も苦手で、スクールに入って初めてプログラミングに触れました。
そんな自分が理解しづらかった部分を、同じように初めてプログラミングの概念に触れた人に向けてまとめました。
自分の復習も兼ねて、超超噛み砕いて書いているため、周りくどい書き方になっている箇所もあるかと思います。

また、初学者のため、間違っている箇所もあるかもしれませんのでその際は教えて頂けると嬉しいです🙇

## 戻り値とは
戻り値とは、言語に関わらずプログラミングに共通する概念です。
この記事全体を通して説明していきます。

## 噛み砕いて考える
私が初めて戻り値に出会ったときは、「 **あらかじめ定義しているメソッド** を **使って** 結果が得られている」のに、どうして **「戻り」** 値なの?🤔と疑問に思っていました。
 
それでは、例を用いて説明し

元記事を表示

Ruby on Railsアップデート(ErrorReporter#unexpected/with_routingテストヘルパー 他 2023-11-24)

## 引用元
https://world.hey.com/this.week.in.rails/errorreporter-unexpected-with_routing-test-helpers-and-more-1b2c56f6

## 今週のトピック

### [ErrorReporter#unexpectedを本番環境ではreportし開発環境ではraiseするようにする](https://github.com/rails/rails/pull/49951)
https://railsguides.jp/error_reporting.html
この変更により、前提条件違反を報告する`ErrorReported#unexpected`が追加された。

例えば、以下のコードではdevelopment環境とtest環境ではエラーをraiseするが、production環境ではエラーをreportする。
“`
def edit
if published?
Rails.error.unexpected(“[BUG] Attempting to edit a pub

元記事を表示

【Rails】text_fieldにカンマ入り金額が入力され1円で出品されそうになった話

## 経緯
ECサイトにシステムから1800ドルで出品する処理を行ったところ1ドルで出品されるという報告を受ける。
⇨検証のため同じ環境で同じ価格で出品したところ、正常に出品される。
⇨原因がわからない。
という事象が発生。

## 原因
出品テストの担当に聞いたところ1800ドルが1ドル、2200ドルが2ドルになっているとのこと。
ここで「入力値にカンマやピリオドが入っているのでは」と気付く。

入力欄を確認するとnumber_fieldではなくtext_fieldとなっており、
価格を1,800ドルで出品してみると、1ドルで出品される現象が再現された。

## いろいろ確認してみた
今回の対処としてはtext_fieldをnumber_fieldに修正し、
数字以外入力不可能とすることで完了したが、
int型,decimal型で文字列を含む数字を受け取った時の挙動を確認してみた。

1,000 → 1
1,000円 → 1
10,000 → 10
¥10,000 → 0
いちまんえん → 0

先頭から文字列までの数値が保存されるようだ。

## まとめ
価格、数量など数値しか扱わ

元記事を表示

Sinatra アプリで Sass の処理を行う一手法

もっと良いやり方があるかもしれないけど。

# 動機

Sinatra で Sass を使うには,

“`rb
get “/hoge.css” do
sass :hoge
end
“`

みたいな感じ書いてやればいいのだが,この `sass` メソッドを使う方法は [sass](https://rubygems.org/gems/sass) gem もしくは [sassc](https://rubygems.org/gems/sassc) gem を使うことが前提になる(たぶん)。
両 gem は既に開発を終了しており,イマドキの Sass 仕様(`@use` とか)には対応していないので,新規プロジェクトでは使いたくない。

Ruby でイマドキの Sass を使うには,[sass-embedded](https://rubygems.org/gems/sass-embedded) gem を採用するのがよいと考えている。

Sinatra では,CSS など静的なもの(動的生成しなくよいもの)は `public` ディレクトリーに入れておけばよく,上記のような `get`

元記事を表示

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`](https://github.com/thoughtbot/factory_bot_rails) というgemをインストールすることで使用できるようになる。
(Factoryを使用する手順(インストール方法など)は今回は省略。)
今回のタスク管理アプリで、「一覧画面に遷移した場合」→「作成済みのタスク一覧が表示される」というテストコードを書く際、Factoryを使用した。

“`spec/factories/task_spec.rb
FactoryBot

元記事を表示

【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.rb`
`./factor.rb `
として動かしてください。

“`factor.rb
#!/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

ある程度余裕をもって合格することができたので、以下を公開することにしました。
1. 実際に出題された問題例
1. 受験に向けて実施したこと
1. 対策としてまとめていた点

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

#### 参考にしたサイトや、使用した教材
– [Rex](https://www.ruby.or.jp/ja/certification/examination/rex)
– [Ruby技

元記事を表示

OTHERカテゴリの最新記事