Ruby関連のことを調べてみた2023年01月27日

Ruby関連のことを調べてみた2023年01月27日

Ruby 配列

# 配列とは
1つの変数で複数の値を持つことができる値。
配列の中には、複数の値を入れることができ、順番で値を管理します。

### 配列の宣言
“`
変数 = []
“`

“`ruby
fruits = [“りんご”, “みかん”, “いちご”]
puts fruits
“`
“`
# ターミナル出力
りんご
みかん
いちご
“`

fruitsという変数に、バナナという要素を追加してみます。

“`ruby
fruits = [“りんご”, “みかん”, “いちご”]
fruits << "バナナ" puts fruits ``` ``` # ターミナル出力 りんご みかん いちご バナナ ``` このように、配列演算子<<を使って配列に要素を追加することができます。

元記事を表示

Rubyで本気で考えるnil safe

※ 本記事の内容は[作者のブログ](https://www.fumi-blog.link/articles/hz3ekqyxyyiv)にも書いているのでこちらも応援お願いします?‍♂️

## はじめに
以下のようなclassを考えます

“` ruby
class Person
attr_accessor :first_name, :last_name
def full_name
last_name + first_name
end
end
“`

このクラスは、苗字と名前を与えると、full_name関数でそれを合わせた形で取り出すことができます

“` ruby
person = Person.new
person.last_name = ‘山田’
person.first_name = ‘太郎’
puts person.full_name # 山田太郎
“`

では、以下の場合はどうでしょうか

“` ruby
person = Person.new
puts person.full_name
“`

実行すると以下のようなエラーが

元記事を表示

RubyからChatGPTのAPIを叩く

## はじめに

RubyからChatGPTのAPIをたたく記事を探したが、意外となかったので忘れるまえに書いておく。
(正確には、OpenAI API)

## 利用するライブラリ

https://github.com/alexrudall/ruby-openai

これを使う。

“`sh
gem install “ruby-openai”
“`

ChatGPTの API Key を取得しておく。

あとは次のようにすれば、利用することができる。(自分の場合は、以前に登録したときの無料枠が失効しており、クレジットカードを登録する必要があった。)

“`ruby
require “ruby/openai”

client = OpenAI::Client.new(access_token: “ACCESS_TOKEN_GOES_HERE”)

res = client.completions(
parameters: {
model: “text-davinci-003”,
prompt: “Are you a

元記事を表示

Ruby3

問題

国語が80点、英語が50点、数学が70点の場合のテストの平均点をターミナルに出力するプログラムを記述してください。

条件1:このプログラムでは各教科の点数を変数を使って定義してください。
条件2:出力結果は以下のようになるようにコードを書きましょう。

“`Ruby:ターミナル
3教科の平均点は、◯点です。
“`

※◯の箇所には計算した平均点が入ります。

出力にはputsを使います。putsのあとに半角スペースと出力したい文字列を続けることで、文字をターミナルに出力できます。

“`Ruby:記述方法
puts “出力したい文字列”
“`

“`Ruby:解答
japanese_score = 80
english_score = 50
math_score = 70

average_score = (japanese_score + english_score + math_score) / 3

puts “3教科の平均点は、#{average_score}点です。”
“`

【解説】
「変数を使って」と指定があるため、

元記事を表示

Ruby getsメソッド

# getsメソッド
ターミナルに値の入力機能を起動するメソッドのことを言います。
文字列としてプログラムに渡されます。


“`ruby
name = gets
puts “私の名前は#{name}です”
“`
このように記述すると、ターミナルではまず、入力機能が実行されます。
入力待ちの状態。(name = getsの部分)
入力してEnterすると、”私の名前は#{name}です”の部分が表示されます。
以下のようになります。
“`
ポチ
私の名前はポチ
です
“`
と出力されます。
“です”の部分が改行されています。
このように文字列オブジェクトの後ろには、改行が入ります。
この改行を取り除くときには以下のように書きます。
“`ruby
name = gets.chomp
puts “私の名前は#{name}です”
“`

ターミナルでは以下のように出力されます。
“`
ポチ
私の名前はポチです
“`
***chomp(チョンプ)メソッド***と言います。
このメソッドを使用すると、文字列の末尾に存在している改行を取り除いて文字列を返します。

元記事を表示

jquery.jpostal.jsで自動入力が反映されない

# はじめに

jquery.jpostal.jsで自動入力された先がselect2だった場合、値が反映されなかった
(selectタグだと正常に自動入力された)

# 解決方法
triggerオプションを追加することで自動入力された値の変更を検知できるようになる

“`
trigger : {
‘#address1_kana’ : true,
‘#address2_kana’ : true,
‘#address3_kana’ : false
}
“`

# 参考文献
[「jquery.jpostal.js」で自動入力された値に反応して特定要素のテキスト変更とクラスの付与をしたい](https://teratail.com/questions/215786)

元記事を表示

Procodile の process に HUP/USR1 等のシグナルを送信してもログファイルは reopen しません

## はじめに

Ruby には [Foreman] や [God] 等 process を管理してくれるツールがあり [Procodile] もその1つです。
今回 [Procodile] が出力する ログファイル が logrotate 時 reopen されていなかったため動きについて調査したので簡単にまとめました。

https://github.com/adamcooke/procodile

https://github.com/ddollar/foreman

https://github.com/mojombo/god

## 先に結論

[Procodile] が開いた logfile を reopen する方法は現時点存在しません。
[Procodile] (supervisor を含め) そのものを `stop`, `start` する必要があります。

“`sh
$ bundle exec procodile stop –procfile path/to/Procfile –stop-supervisor
Stopped xxxxxx.1 (PID: xx

元記事を表示

Ruby 変数を利用して値に名前をつけて使う

# 変数とは
変数とは、値を入れる箱のようなものです。
その箱に名前を付けたものが、変数名と言います。

変数を利用することで、値を再利用したいときに、変数名を使うだけで呼び出すことができます。

# 変数名の定義
“`
fruit = “りんご”
puts fruit
=> “りんご”
“`
定義は上記のようにします。” = “を挟んで、右辺に置いた値を、左辺の変数(今回はfruitという箱)の中に入れるイメージ。

***変数名 = 格納する値*** 

この” = “は、「等しい」という意味ではなく、「変数の箱の中に値を入れる」という意味です。
***代入演算子***と言います。


変数を使って、以下の条件に沿ってプログラムを作成します。

条件:
国語が80点、英語が50点、数学が70点の場合のテストの平均点をターミナルに出力させる。
ターミナルに、「3教科の平均点は、◯点です。」と出力されるようにコードを書く。

“`ruby
# 模範解答
japanese_score = 80
english_score = 50
math_score = 70
avera

元記事を表示

【初学者向け】DockerでRails7の環境構築(2023年版)

[Dockerの公式ドキュメント](https://docs.docker.jp/compose/rails.html)でRails7系の環境構築をしたら途中で詰まったので、スムーズに構築していく方法を記します✏️

## 前提条件
開発環境
– M1Mac: Ventura13.0
– [Docker Desktop](https://docs.docker.com/desktop/install/mac-install/)インストール済み

## この記事でわかること

✅[Dockerの公式ドキュメント](https://docs.docker.jp/compose/rails.html)に沿ったRails7系の環境構築方法✅
(公式ドキュメント通りに行うとエラーが発生するので、本記事ではその解決方法も記します!)
※ 本記事では、DockerでRails7を最速で環境構築する方法を記します。DockerやRailsの詳しい説明については別記事をご参照ください?

## 環境構築手順

### 1. 任意のディレクトリを作成
Macの任意

元記事を表示

うまく使えばレスポンスが爆速に Rails 7から導入されたload_asyncについて解説

今回はRails 7から導入された新機能 load_asyncについて解説します!

[私のブログ](https://ftb3nip05e.microcms.io/apis/blogs/dnjqj82-63)にも同じ内容を記載しておりますので、こちらも是非ご参照ください

## load_asyncとは
Rails 7から追加された、「非同期的にクエリ実行するためのメソッド」です。

並列にクエリが実行されるため、うまく使うと **これまで時間がかかっていた処理をかなり短縮できる「可能性」** があります。

## load_asyncの使い方
以下のような場面を想像してみましょう。

mypageを取得するメソッドの中で、「お客様のプロフィール」「お客様の購入履歴」「お客様の獲得ポイント」の3つを取得しています。

“` ruby
def mypage
@profile = Profile.find_by(user_id: params[:user_id])
@orders = Order.where(user_id: params[:user_id])
@poin

元記事を表示

Stripe Connectの連携アカウントのSubscriptionの更新方法(Ruby)

連携したアカウントのサブスクリプションの内容を変更する方法が分からずに少し苦労したので、変更方法についてメモを残します。

“`code .rb
Stripe::Subscription.update(
“subscription_id”, # sub_××××××××××××
{
# 変更したい内容を記述
application_fee_percent: “20”, # サブスクリプションの手数料を20%に変更
},
{ stripe_account: ‘連携アカウントのID’ } # acct_××××××××××××
)
“`

元記事を表示

単価に見合ったRubyエンジニアを雇うために面談で使える技術的な質問

### 解決したいこと
単価に合わないRubyエンジニアを雇いたくはない。

### 解決方法
面談で技術的な質問で単価に合わないエンジニアか判断できるようにする

### 技術的な質問集
railsエンジニアの面談時の技術的な質問をまとめました↓

Q: Userモデルが複数のpostを持つ時、userモデルにどのような記述をしますか?
A: has_many :posts

Q: Userモデルが複数のPostを持つ時、Postモデルにどのような記述をしますか?
A: belongs_to: user

Q: Userモデルが複数のPostを持つ時、userのレコードが削除された時にpostsも削除されるようにするためにどのような記述が必要ですか?
A: has_many :posts, dependent: destroy
has_manyの記述の後にdependent: destroyをつける

Q: railsで、データベースの構成を変更するために何をしますか?
A: マイグレーションファイルを作成する

Q: マイグレーションファイルを作成するコマンドは?
A: ra

元記事を表示

変更した差分だけ、rubocopでコードチェックする方法

gitとrubocopをプロジェクトに入れている時のみ使えます。

コード整形はしない場合
“`shell
git diff –diff-filter=ACMR –name-only | xargs bundle exec rubocop
“`

コード整形までさせる場合
“`shell
git diff –diff-filter=ACMR –name-only | xargs bundle exec rubocop -a
“`

# rubocop

https://github.com/rubocop/rubocop

元記事を表示

Rails ajax 処理の場合 ApplicationController に書いてある 共通処理 を スキップ したい

# 何がしたい?
全ページ共通で行いたい処理って、ApplicationControllerのbefore_actionに書いたりするじゃないですか?
例えば、今みんなの右上にあるQiitaの通知なんかもおそらくApplicationControllerのbefore_actionで件数やコンテンツをセットしているのではないかな。(これは妄想なので真相は知らんけどね)

ApplicationControllerのbefore_actionって何も特別な記述をしていない場合、
Controllerに入る前に確実に通ってしまうのですが、そうなるとajaxなどの処理時にも通ることになるやん?
そうなると割と重い処理をbefore_actionに書いている場合ちょっとしたajax処理でも激オモになってしまうんですわ:poop:

元記事を表示

Ruby2

問題

配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがあります。

“`Ruby
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`

user_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyでコーディングしてください。
ただし、出力結果は次のようになるものとします。

“`Ruby:ターミナルの表示
George
Alice
Taro
“`

“`:模範解答1
user_data.each do |u|
puts u[:user][:profile][:name]
end
“`

あるいは

“`Ruby:模範解答2
user_data.each{ |u| puts u.dig(:user, :profile, :name) }
“`

【解説】
ハッシュから特定の値を取得する場合は

元記事を表示

テックキャンプ卒業から現在まで

## テックキャンプに関して

未経験からエンジニアを目指す上で、プログラミングスクールに通うというプロセスを選択する事は、世論として賛否両論あるかと思うが、結論として私個人としては選択して良かったと思える環境であった。
今からお話しする内容は、他人からすると間違っていると感じる事や納得して貰えない事はあると思うが、プロセスなど人其々違って当たり前だと感じる。それが間違っていたか正解かは本人が決める事だとも感じる。

具体的に、私がテックキャンプに通って良かった点を下記にてざっくばらんに述べさせて頂く。

# 1点目: クラス単位での取り組み(アウトプットの習慣化)

実際は、クラスと言えど、勿論カリキュラムをこなすのは己自身ではあるが1日に数回、クラスの仲間とZOOMでコミュニケーションを取る。コミュニケーションの内容としては、カリキュラムの進捗具合などもあるが、メインとしては学んだ事をアウトプットし合う、そして不明点をクラスで共有し、皆で教え合うという習慣が構築されていた事は、自分自身非常に有意義であった。
今までの人生を振り返ると、学ぶ事に対する推進力や探究心などはある方ではない

元記事を表示

【rails】日付でのDB検索を行いたい

例)
start_atカラムで開始時間を管理している。
指定した日付に該当するデータを確認したい。

~~~:railsコンソール
search_date = ‘2021-06-15’
ExamSchedule.where(start_at: search_date.in_time_zone.all_day)
~~~

参考記事
https://tech.pla-cole.co/rails-db-action/

元記事を表示

二重ハッシュ

– ハッシュから特定の値を取得するときは、その値に対応するキーを指定する必要があります。

“`
ハッシュ[取得したい値のキー]
“`

– 二重ハッシュから特定の値を取得するときは、取得したい値のキーまで連続して指定する必要があります。

“`
ハッシュ[取得したい値のキー][取得したい値のキー]
“`


“`ruby
user_data = [
{user: {profile: {name: ‘George’}}},
{user: {profile: {name: ‘Alice’}}},
{user: {profile: {name: ‘Taro’}}},
]
“`
上記、複数のユーザーの情報をハッシュとして持つ変数があります。
全てのユーザーの名前だけが出力されるようにコーディングする場合どうしたら良いか?

模範解答
“`ruby
user_data.each do |u|
puts u[:user][:profile][:name]
end
“`
あるいは
“`ruby
user_data.each{ |u| puts u.dig(:user,

元記事を表示

ruby on railsでapi作る覚書

## プロジェクト作成
-apiオプションで、apiモードと呼ばれるファイル群で構成してくれる(不要なものは削いでくれる)

“`
rails new sample-api –api
“`

## モデル作成
データスキーマのこと
ここで定義したものがDBに反映することになる

“`
rails g model Movie name:string category:string description:string year:integer
“`

スキーマ作成
db/migrate/の中にできているスクリプトが実行される

“`
rails db:migrate
“`

## 初期データ登録

“`db/seeds.rb
movies = [
[“cube”, “cube”, “in the cube”, 2000],
[“saw”, “bathroom”, “jigsaw”, 2004],
]

movies.each do |movie|
Movie.create(name: name, category: category, descriptio

元記事を表示

Ruby on Rails初心者の学習記録 Part4:CRUD(後編)

# はじめに
Ruby on Rails初心者の学習記録Part4です。
[Part1](https://qiita.com/Yasushi-Mo/items/d24fd4abab2c1333c522)では、Rubyの基本文法やRailsを利用したWebアプリケーションの開発環境構築手順及びルーティングについて学びました。
[Part2](https://qiita.com/Yasushi-Mo/items/5dfe81d39b5a153fe43c)では、MVCアーキテクチャのモデルについて学びました。
[Part3](https://qiita.com/Yasushi-Mo/items/931cfcef990647f1da18)とPart4では、 [“Getting Started with Rails”](https://guides.rubyonrails.org/getting_started.html) の [“7 CRUDit Where CRUDit Is Due”](https://guides.rubyonrails.org/getting_started.html#

元記事を表示

OTHERカテゴリの最新記事