Ruby関連のことを調べてみた2022年12月24日

Ruby関連のことを調べてみた2022年12月24日

ruby 練習問題42 (アウトプット用)

問題
ユーザーが数字を2つ渡すと、それらを掛け算した結果を返すプログラムを作ってください。

定義する変数
2つの数字を、それぞれnum1, num2という変数にgetsメソッドを利用して定義してください。
という問題。
下記、実行結果の例。
“`
#デスクトップに移動
$cd Desktop
#Rubyファイルを実行
$ruby argument_test.rb
最初の数字を入力してください
5
2番目の数字を入力してください
6
5と6をかけた答えは30です!
“`
以下、模範解答
“`ruby
def multiplication(num1, num2)
puts “#{num1}と#{num2}をかけた答えは#{num1 * num2}です!”
end

puts “最初の数字を入力してください”

num1 = gets.to_i

puts “2番目の数字を入力してください”

num2 = gets.to_i

multiplication(num1, num2)
“`
以下、解説
今回は基本的なdefメソッドとgetsメソッドの使い方の復習問題のようだがポイ

元記事を表示

Rubyでスクレイピングしてみた

# はじめに

[RUNTEQ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/runteq)の24日目の記事です。

プログラミングスクールRUNTEQ内でチームメンバーを募り、東京都オープンデータハッカソンに出場して[pluspo](https://pluspo.magia.runteq.jp/)というサービスを開発中です。
サービス内でスポーツ施設のHPに載っているデータを使用しているのですが、現在のデータは手打ちで入れています。
さすがにこのままじゃあこの先厳しいので、後々スクレイピングでデータを入れようと考えています。

しかし、、、チーム内にスクレイピングに知見のあるメンバーがいません…!(もちろん校長を除いて)

ということで初スクレイピングしてみました!
(pluspoのレイアウトが崩れていますが突っ込まないでくださいw)

※ スクレイピングは法に触れる場合があるみたいなので諸々確認してから行ってください。

# 早速スクレイピングする
簡単にできそうな[mechanize](https:/

元記事を表示

「たのしいRuby」たい焼きの逆襲

#「たのしいRuby」たい焼きの逆襲
***The taiyaki strikes back.***
たい焼きの逆襲お題でオブジェクト指向とクラスの説明をしようと思いRubyプログラムを作りかけたのですが、既にずっと先を行っている方がいらっしゃいましたので、紹介して終わり鯛と思います。
https://qiita.com/jnchito/items/f07e58824f92395c353b

元記事を表示

Stimulus リファレンス: CSSクラス

:::note
この記事は[Google翻訳](https://translate.google.co.jp/)の結果を編集したものです。
:::

https://stimulus.hotwired.dev/reference/css-classes

HTMLではCSSクラスは`class`属性を使用して要素に適用できる一連のスタイルを定義します。

CSSクラスはスタイルを変更したりプログラムでアニメーションを再生したりするための便利なツールです。 たとえばStimulusコントローラーはバックグラウンドで操作を実行しているときに”loading”クラスを要素に追加し、CSSでそのクラスをスタイルして進行状況インジケーターを表示する場合があります。

“`html

“`

“`css
.search–busy {
background-image: url(throbber.svg) no-repeat;
}
“`

クラスをJavaScript文字列でハードコ

元記事を表示

gem pg が入らない時の手順

エラーメッセージ
extconf.rb:40:in `popen’: Permission denied – /usr/local/Cellar/libpq/15.1 (Errno::EACCES)
from extconf.rb:40:in `

1.rbenvを再インストール
`% rbenv uninstall 3.0.2`
`% RUBY_CFLAGS=”-Wno-error=implicit-function-declaration” arch -x86_64 rbenv
install 3.0.2`

2.gemを削除,Gemfile.lockを削除
`% sudo rm -rf vendor/bundle`
`Gemfile.lockを削除`

3.bundleインストール
`% bundle config build.pg –with-pg-config=/usr/local/Cellar/postgresql@14/14.6/bin/pg_config`
=>config=の後はpg_configのフルパスを書く

`% bu

元記事を表示

Ruby(Sinatra)+Postgres の開発をローカルでやろう! Vol.3 ~無限 Windows でもネイティブで動かしたいだろ編~

「[Life is Tech ! Tokai Advent Calendar 2022](https://qiita.com/advent-calendar/2022/life-is-tech-tokai)」24 日目の記事になります。

# はじめに

メリークリスマス!
Life is Tech! で関東 Web サービスコースメンターをやっているいっそです!
僕は国道 1 号線 (東海道) 沿いに住んでるんですが、実質東海だろ?ってことで、今回は東海のカレンダーにお邪魔しました!

今回は、「Ruby(Sinatra)+Postgres の開発をローカルでやろう! Vol.3 ~無限 Windows でもネイティブで動かしたいだろ編~」ということで、いつもは Cloud9 で運用されている Web サービスコースの開発環境を **Windows** のローカル環境でも建ててみたいと思います!

この記事は昨日と 3 日間に分けて投稿されています!
興味あればぜひ読んでみてください。

**1 日目の macOS, Linux 用記事は [こちら](https://qiita.co

元記事を表示

Ruby で Quarto を活用する

これは [Ruby アドベントカレンダー 2022](https://qiita.com/advent-calendar/2022/ruby) の23日目の記事です。

## Quarto とは何か?

[Quarto](https://quarto.org/) は、[Pandoc](https://pandoc.org/) 上に構築されたオープンソースの主に科学技術分野での利用を想定した出版システムです。

Quarto は下記の特徴を持つ、と https://quarto.org/ は主張しています。

– Python、R、Julia、および Observable を使用して動的なコンテンツを作る。
– ドキュメントをプレーンテキストのマークダウン、または Jupyter ノートブックでもって執筆する。
– 高品質の記事、レポート、プレゼンテーション、Web サイト、ブログ、書籍を HTML、PDF、MS Word、ePub などで公開する。
– 数式、引用、相互参照、図パネル、吹き出し、高度なレイアウトなどを含む、科学に関するマークダウンを用いて執筆する。

2 番目のリスト項

元記事を表示

同一ページ内で同じインスタンスを複数箇所でキャッシュのキーとしたい

## ぶつかった問題
以下のような時、ビューの一部を避けて同じインスタンスをキーとしてフラグメントキャッシュを使いたいけれど、キーが重複されてしまうのでどうしたらいいのか。。と少し迷った。

インスタンスをキーとしたいのは、そのインスタンスのデータが更新されたらキャッシュも更新されるようにしたいため。

“`

<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>

# ここはキャッシュしたくない

<% cache @service do %>
# キャッシュしたい
# @serviceが更新されたらキャッシュを更新するようにしたい
<% end %>

“`

## 対処方法
以下のように配列の形でキーを設定できる。
左右を/で区切って一つの文字列としてくれる。
説明のため雑に1と2とし

元記事を表示

Ruby initializeメソッドのオーバーライドについて

# initializeメソッドの動き
スーパークラスとサブクラスでinitializeが定義されていた場合、どのような動きが起こるか確認していきます。

“`ruby
class Parent
attr_accessor(:name)

def initialize(name)
@name = name
end
end

class Child < Parent attr_accessor(:grade) def initialize (grade) @grade = grade end end p Child.new("10") #=> @grade=”10

p Parent.new(“Aki”) #=> @name=”Aki”
“`

サブクラスに引数を与え、呼び出したとき、スーパークラスを呼び出さず、サブクラスのinitializeメソッドが呼び出されているのがわかります。

これは、通常のメソッドを下位レベルから探していくのと同じ手順です。

# サブクラスのin

元記事を表示

ruby 練習問題2 (アウトプット用)

配列の内部に、複数のユーザーの情報をハッシュとして持つ変数user_dataがある。
そのuser_dataを利用して、全てのユーザーの名前だけが出力されるようにRubyで以下のひな型を利用し、以下の出力結果となるようにコーティングする問題。

ひな型
“`ruby
user_data = [
{user: {profile: {name: ‘George’}}}
{user: {profile: {name: ‘Alice’}}}
{user: {profile: {name: ‘Taro’}}}
]
“`
出力結果
“`ruby
George
Alice
Taro
“`
以下、模範解答
“`ruby
user_data = [
{user: {profile: {name: ‘George’}}}
{user: {profile: {name: ‘Alice’}}}
{user: {profile: {name: ‘Taro’}}}
]

user_data.each do |u|
puts u[:user][:profile][:name]

元記事を表示

【capybara/RSpec】JS等の処理でhave_xxxのメソッドを使うテクニックと仕組み

先日、[capybara](https://github.com/teamcapybara/capybara)でJS等の処理を安定的にテストするテクニックを知ったのですが、その仕組みが気になって調べてみたので記事にしました。
## 不安定なテストの例
例えば、「Finish」というリンクをクリックすると、そのリンクのテキストが「Done」にJSで変わるテキストがあったとします。
(そのリンクには`task-status-link`のclassが付与されているとします)
その動作テストをcapybaraを使ったSystemSpecで書きたいとき、以下のようにするとテストが不安定になることがあります。

“`ruby:system_spec
RSpec.describe “Books”, type: :system do
it ‘sample test’ do
# 略
click_on ‘Finish’
expect(find(‘.task-status-link’).text).to eq ‘Done’
end
end
“`

Capybaraが`fi

元記事を表示

20万人が利用しているサービスのJSONシリアライザをAlbaに置き換えた話

# TL;DR
NewRelic transactions
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227205/89c86245-5fe4-f1e3-80f6-ded8500a219d.png)

# はじめに
株式会社KINECAでエンタメマッチングサービスを運営している@ryosk7です。
この記事はRuby on Rails Advent Calendar 2022の23日目の記事です。

# Albaって?
https://github.com/okuramasafumi/alba

AlbaはRuby製のJSONシリアライザです。
Ruby on Rails Advent Calendar 2022 14日目の記事にも、ちょうど作成者の[@okuramasafumi](https://twitter.com/okuramasafumi)さんが記事を執筆してくださってます。

https://qiita.com/okuramasafumi/items/b52c9c9e5d

元記事を表示

Railsでdatetimeのミリ秒でハマった話

# はじめに
仕事でコード書いていると、年に1回ぐらい日付関係の処理ではまるので、備忘録に記事を、まとめてました。

## 前提
DynamoDBを使用し、モデルは以下のように設定しています。

“`ruby
class Notification
include Dynamoid::Document
include Draper::Decoratable

table name: :notification, key: :notification_id
range :notified_at, :datetime

field :name, :string

private

def create_attrs(notification_id, name)
base = { id: id, notified_at: Time.zone.now, name: name }
end
end
“`

まず、何にハマったかですが、notification_idとnotified_atでユニークな値を取得できる様にしたのですが、なぜか取得できない。

元記事を表示

フレームワークとライブラリの違い

# 概要

* フレームワークの説明
* ライブラリの説明
* フレームワークとライブラリとの違い

# フレームワークとは
「フレームワーク」という言葉は「骨組み」という意味があります。
アプリケーション開発において、テンプレートの役割を持っており、開発を行う際に必要とされる「基礎的な機能」をまとめて提供してくれるものです。
**「アプリケーション開発で必要となる作業やリソースを事前に仮定し、必要なものがデフォルトで用意してある便利なもの」** というイメージです。

# ライブラリとは
「ライブラリ」という言葉は「図書館」という意味があり、プログラミングにおける拡張機能をライブラリと呼びます。

他のプログラムと組み合わせて使用するために、複雑なプログラムを1つのセットにしたものです。複雑な機能実装でも、ライブラリをアプリへ読み込ませることにより簡単に実装できるようになります。
**「便利な機能を集めておいて、簡単に使える仕組み」** というイメージです。

# ライブラリとの違い
どちらも開発を効率化するために作られたものですが少し違います。

**フレームワーク**
→アプリ

元記事を表示

投稿に別のテーブルの情報を紐づける

タグ機能をCRUD2つ実装して実現しているイメージです。
「授業に受講している学生を登録したい」「コーディネートに洋服の情報を紐づけたい」「タグ機能をseedファイルを使わずに実装したい」etc…
こういったモデルの多対多の関連付けをした投稿を実装したい方は一度読んでみてください。

## 【 目次 】
1. 開発環境と前提
2. 概要と方針
3. 実装するコード

## 【 開発環境と前提 】
**< 開発環境 >**
・ruby 3.0.4
・rails 6.1.6

**< 前提 >**
・Studentモデル、コントローラーのCRUD機能実装済み
 ・カラムはname/string型

## 【 概要と方針 】
**< 概要 >**
・lesson投稿時に、登録されている学生を複数選択して投稿できるようにする。

**< 方針 >**
・Lessonモデル、コントローラーのCRUD実装
 ・カラムはname/string型
・中間テーブルの作成
・アソシエーションの記述
・viewの記述

**< 完成図 >**
※また貼っときます。

##

元記事を表示

Rubyの勉強①

Rubyの勉強でソースを書きました。

“`Ruby
#標準入力
msg = gets
#標準出力
puts msg
“`

標準入力と標準出力をやってみた。

元記事を表示

ruby 練習問題41 (アウトプット用)

3つの整数a、b、cが与えられた場合に以下条件を満たすメソッドを作成する問題。

・aとbの差が1かつbとcとの差が2以上の場合「True」と出力する
・aとcの差が1、かつbとcとの差が2以上の場合「True」と出力する
・それ以外は「False」と出力する

出力例:
close_far(1, 2, 10) → True
close_far(1, 2, 3) → False
close_far(4, 1, 3) → True

以下、模範解答。
“`ruby
def close_far(a,b,c)
x = (a-b).abs
y = (a-c).abs
z = (b-c).abs

if (x == 1 && z >= 2)
puts “True”
elsif ( y == 1 && z >= 2)
puts “True”
else
puts “False”
end
end
“`
以下、解説。
close_farメソッドを作成してx,y,zに代入。
“`ruby
def close_far(a,b,c)
x = (a-

元記事を表示

メモ

Ruby基礎 2022/12/22
・変数を定義するときはビュー内ではなく、コントローラー内のアクションのアクションで定義することが一般的である
def index と end の間で定義するが 変数の前には@をつける。@をつけることによりアクション内で定義してもビュー内で利用できる

元記事を表示

Rubyにこんな機能が欲しい

Rubyを完全に理解した勢の@dosaidonです。さて、来年に向けてこんな機能がRubyに欲しいを二つほど書いてみました。
## 超多次元のデータ構造
RubyのArrayは異常に良くできている。複素数をサポートしているのも良い。一方で、1次元の列ベクトルと行ベクトル、2次元のマトリックス、3次元以上のテンソルとかの数値計算に必要なデータ構造とクラスの話が無いのが気になる。「たのしいRuby」は入門書のせいかもしれないが一次元のArray(列ベクトルでも行ベクトルでもないリスト)は出てくるが2次元以上のn次元のデータ構造の話がいくら読んでも出てこない。
さらに、超多次元のデータ構造にDataFrameのようなラベルでのアクセスがあるともっと嬉しい。なお、DataFrameは2次元の行列データに行ラベルと列ラベルが追加されたもので、まあエクセルの表みたいなデータ構造のこと。

2年4組
前期
行ラベル/列ラベル 算数 国語 理科 社会
青木一郎     99  85  95  70
佐藤二郎     69  87  85  55
山田三郎

元記事を表示

更新日時を全部更新しないようにするためのupdate_attributeとupdate_columnsの違い

?< [WEBCAMP ENGINEER COMMUNITY Advent Calendar 2022](https://qiita.com/advent-calendar/2022/webccamp-engineer-community) 23日目の記事です。
## 背景
大量のテーブルのとあるカラムを全て更新しようと思いました。

ただ、テーブルの`updated_at`が全部更新されてしまうのはちょっと怖いな…と思ったので良いメソッドがないか探したところ、ちょうどよく2種類用意されていたので、ここに簡単にまとめてみます?

## 結論
https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-update_attribute
こちらを読んでいただければ正確にわかります。

せっかくなので一部説明します。

### update_attribute(name, value)

“`
Updates a single attribute and saves the record.
Th

元記事を表示

OTHERカテゴリの最新記事